Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 11 from a total of 11 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 15207857 | 1332 days ago | IN | 0.05 ETH | 0.00083721 | ||||
| Set Pause | 15207254 | 1332 days ago | IN | 0 ETH | 0.00016375 | ||||
| Withdraw | 15207170 | 1332 days ago | IN | 0 ETH | 0.0002346 | ||||
| Pay Winner | 15207142 | 1332 days ago | IN | 0 ETH | 0.00080055 | ||||
| Pick Winner | 15207128 | 1332 days ago | IN | 0 ETH | 0.00179539 | ||||
| Set Pause | 15207124 | 1332 days ago | IN | 0 ETH | 0.00043178 | ||||
| Transfer | 15204760 | 1332 days ago | IN | 0.05 ETH | 0.00033371 | ||||
| Transfer | 15201742 | 1333 days ago | IN | 0.0505794 ETH | 0.00027141 | ||||
| Transfer | 15201610 | 1333 days ago | IN | 0.05 ETH | 0.00087421 | ||||
| Transfer | 15201607 | 1333 days ago | IN | 0.05 ETH | 0.00119556 | ||||
| Set Pause | 15201571 | 1333 days ago | IN | 0 ETH | 0.00029266 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GowldLottery
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-23
*/
// File: @chainlink/contracts/src/v0.8/VRFRequestIDBase.sol
pragma solidity ^0.8.0;
contract VRFRequestIDBase {
/**
* @notice returns the seed which is actually input to the VRF coordinator
*
* @dev To prevent repetition of VRF output due to repetition of the
* @dev user-supplied seed, that seed is combined in a hash with the
* @dev user-specific nonce, and the address of the consuming contract. The
* @dev risk of repetition is mostly mitigated by inclusion of a blockhash in
* @dev the final seed, but the nonce does protect against repetition in
* @dev requests which are included in a single block.
*
* @param _userSeed VRF seed input provided by user
* @param _requester Address of the requesting contract
* @param _nonce User-specific nonce at the time of the request
*/
function makeVRFInputSeed(
bytes32 _keyHash,
uint256 _userSeed,
address _requester,
uint256 _nonce
) internal pure returns (uint256) {
return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce)));
}
/**
* @notice Returns the id for this request
* @param _keyHash The serviceAgreement ID to be used for this request
* @param _vRFInputSeed The seed to be passed directly to the VRF
* @return The id for this request
*
* @dev Note that _vRFInputSeed is not the seed passed by the consuming
* @dev contract, but the one generated by makeVRFInputSeed
*/
function makeRequestId(bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) {
return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed));
}
}
// File: @chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol
pragma solidity ^0.8.0;
interface LinkTokenInterface {
function allowance(address owner, address spender) external view returns (uint256 remaining);
function approve(address spender, uint256 value) external returns (bool success);
function balanceOf(address owner) external view returns (uint256 balance);
function decimals() external view returns (uint8 decimalPlaces);
function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);
function increaseApproval(address spender, uint256 subtractedValue) external;
function name() external view returns (string memory tokenName);
function symbol() external view returns (string memory tokenSymbol);
function totalSupply() external view returns (uint256 totalTokensIssued);
function transfer(address to, uint256 value) external returns (bool success);
function transferAndCall(
address to,
uint256 value,
bytes calldata data
) external returns (bool success);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool success);
}
// File: @chainlink/contracts/src/v0.8/VRFConsumerBase.sol
pragma solidity ^0.8.0;
/** ****************************************************************************
* @notice Interface for contracts using VRF randomness
* *****************************************************************************
* @dev PURPOSE
*
* @dev Reggie the Random Oracle (not his real job) wants to provide randomness
* @dev to Vera the verifier in such a way that Vera can be sure he's not
* @dev making his output up to suit himself. Reggie provides Vera a public key
* @dev to which he knows the secret key. Each time Vera provides a seed to
* @dev Reggie, he gives back a value which is computed completely
* @dev deterministically from the seed and the secret key.
*
* @dev Reggie provides a proof by which Vera can verify that the output was
* @dev correctly computed once Reggie tells it to her, but without that proof,
* @dev the output is indistinguishable to her from a uniform random sample
* @dev from the output space.
*
* @dev The purpose of this contract is to make it easy for unrelated contracts
* @dev to talk to Vera the verifier about the work Reggie is doing, to provide
* @dev simple access to a verifiable source of randomness.
* *****************************************************************************
* @dev USAGE
*
* @dev Calling contracts must inherit from VRFConsumerBase, and can
* @dev initialize VRFConsumerBase's attributes in their constructor as
* @dev shown:
*
* @dev contract VRFConsumer {
* @dev constructor(<other arguments>, address _vrfCoordinator, address _link)
* @dev VRFConsumerBase(_vrfCoordinator, _link) public {
* @dev <initialization with other arguments goes here>
* @dev }
* @dev }
*
* @dev The oracle will have given you an ID for the VRF keypair they have
* @dev committed to (let's call it keyHash), and have told you the minimum LINK
* @dev price for VRF service. Make sure your contract has sufficient LINK, and
* @dev call requestRandomness(keyHash, fee, seed), where seed is the input you
* @dev want to generate randomness from.
*
* @dev Once the VRFCoordinator has received and validated the oracle's response
* @dev to your request, it will call your contract's fulfillRandomness method.
*
* @dev The randomness argument to fulfillRandomness is the actual random value
* @dev generated from your seed.
*
* @dev The requestId argument is generated from the keyHash and the seed by
* @dev makeRequestId(keyHash, seed). If your contract could have concurrent
* @dev requests open, you can use the requestId to track which seed is
* @dev associated with which randomness. See VRFRequestIDBase.sol for more
* @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind,
* @dev if your contract could have multiple requests in flight simultaneously.)
*
* @dev Colliding `requestId`s are cryptographically impossible as long as seeds
* @dev differ. (Which is critical to making unpredictable randomness! See the
* @dev next section.)
*
* *****************************************************************************
* @dev SECURITY CONSIDERATIONS
*
* @dev A method with the ability to call your fulfillRandomness method directly
* @dev could spoof a VRF response with any random value, so it's critical that
* @dev it cannot be directly called by anything other than this base contract
* @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
*
* @dev For your users to trust that your contract's random behavior is free
* @dev from malicious interference, it's best if you can write it so that all
* @dev behaviors implied by a VRF response are executed *during* your
* @dev fulfillRandomness method. If your contract must store the response (or
* @dev anything derived from it) and use it later, you must ensure that any
* @dev user-significant behavior which depends on that stored value cannot be
* @dev manipulated by a subsequent VRF request.
*
* @dev Similarly, both miners and the VRF oracle itself have some influence
* @dev over the order in which VRF responses appear on the blockchain, so if
* @dev your contract could have multiple VRF requests in flight simultaneously,
* @dev you must ensure that the order in which the VRF responses arrive cannot
* @dev be used to manipulate your contract's user-significant behavior.
*
* @dev Since the ultimate input to the VRF is mixed with the block hash of the
* @dev block in which the request is made, user-provided seeds have no impact
* @dev on its economic security properties. They are only included for API
* @dev compatability with previous versions of this contract.
*
* @dev Since the block hash of the block which contains the requestRandomness
* @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
* @dev miner could, in principle, fork the blockchain to evict the block
* @dev containing the request, forcing the request to be included in a
* @dev different block with a different hash, and therefore a different input
* @dev to the VRF. However, such an attack would incur a substantial economic
* @dev cost. This cost scales with the number of blocks the VRF oracle waits
* @dev until it calls responds to a request.
*/
abstract contract VRFConsumerBase is VRFRequestIDBase {
/**
* @notice fulfillRandomness handles the VRF response. Your contract must
* @notice implement it. See "SECURITY CONSIDERATIONS" above for important
* @notice principles to keep in mind when implementing your fulfillRandomness
* @notice method.
*
* @dev VRFConsumerBase expects its subcontracts to have a method with this
* @dev signature, and will call it once it has verified the proof
* @dev associated with the randomness. (It is triggered via a call to
* @dev rawFulfillRandomness, below.)
*
* @param requestId The Id initially returned by requestRandomness
* @param randomness the VRF output
*/
function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual;
/**
* @dev In order to keep backwards compatibility we have kept the user
* seed field around. We remove the use of it because given that the blockhash
* enters later, it overrides whatever randomness the used seed provides.
* Given that it adds no security, and can easily lead to misunderstandings,
* we have removed it from usage and can now provide a simpler API.
*/
uint256 private constant USER_SEED_PLACEHOLDER = 0;
/**
* @notice requestRandomness initiates a request for VRF output given _seed
*
* @dev The fulfillRandomness method receives the output, once it's provided
* @dev by the Oracle, and verified by the vrfCoordinator.
*
* @dev The _keyHash must already be registered with the VRFCoordinator, and
* @dev the _fee must exceed the fee specified during registration of the
* @dev _keyHash.
*
* @dev The _seed parameter is vestigial, and is kept only for API
* @dev compatibility with older versions. It can't *hurt* to mix in some of
* @dev your own randomness, here, but it's not necessary because the VRF
* @dev oracle will mix the hash of the block containing your request into the
* @dev VRF seed it ultimately uses.
*
* @param _keyHash ID of public key against which randomness is generated
* @param _fee The amount of LINK to send with the request
*
* @return requestId unique ID for this request
*
* @dev The returned requestId can be used to distinguish responses to
* @dev concurrent requests. It is passed as the first argument to
* @dev fulfillRandomness.
*/
function requestRandomness(bytes32 _keyHash, uint256 _fee) internal returns (bytes32 requestId) {
LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER));
// This is the seed passed to VRFCoordinator. The oracle will mix this with
// the hash of the block containing this request to obtain the seed/input
// which is finally passed to the VRF cryptographic machinery.
uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]);
// nonces[_keyHash] must stay in sync with
// VRFCoordinator.nonces[_keyHash][this], which was incremented by the above
// successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest).
// This provides protection against the user repeating their input seed,
// which would result in a predictable/duplicate output, if multiple such
// requests appeared in the same block.
nonces[_keyHash] = nonces[_keyHash] + 1;
return makeRequestId(_keyHash, vRFSeed);
}
LinkTokenInterface internal immutable LINK;
address private immutable vrfCoordinator;
// Nonces for each VRF key from which randomness has been requested.
//
// Must stay in sync with VRFCoordinator[_keyHash][this]
mapping(bytes32 => uint256) /* keyHash */ /* nonce */
private nonces;
/**
* @param _vrfCoordinator address of VRFCoordinator contract
* @param _link address of LINK token contract
*
* @dev https://docs.chain.link/docs/link-token-contracts
*/
constructor(address _vrfCoordinator, address _link) {
vrfCoordinator = _vrfCoordinator;
LINK = LinkTokenInterface(_link);
}
// rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
// proof. rawFulfillRandomness then calls fulfillRandomness, after validating
// the origin of the call
function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external {
require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill");
fulfillRandomness(requestId, randomness);
}
}
// File: contracts/GowldGame.sol
// File: contracts\open-zeppelin-contracts\token\ERC20\IERC20.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an `Approval` event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts\open-zeppelin-contracts\math\SafeMath.sol
pragma solidity ^0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
// File: contracts\open-zeppelin-contracts\token\ERC20\ERC20.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of the `IERC20` interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using `_mint`.
* For a generic mechanism see `ERC20Mintable`.
*
* *For a detailed writeup see our guide [How to implement supply
* mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an `Approval` event is emitted on calls to `transferFrom`.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
* functions have been added to mitigate the well-known issues around setting
* allowances. See `IERC20.approve`.
*/
contract ERC20 is IERC20 {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
/**
* @dev See `IERC20.totalSupply`.
*/
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
/**
* @dev See `IERC20.balanceOf`.
*/
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
/**
* @dev See `IERC20.transfer`.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
/**
* @dev See `IERC20.allowance`.
*/
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See `IERC20.approve`.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
/**
* @dev See `IERC20.transferFrom`.
*
* Emits an `Approval` event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of `ERC20`;
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `value`.
* - the caller must have allowance for `sender`'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to `approve` that can be used as a mitigation for
* problems described in `IERC20.approve`.
*
* Emits an `Approval` event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to `transfer`, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a `Transfer` event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a `Transfer` event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a `Transfer` event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 value) internal {
require(account != address(0), "ERC20: burn from the zero address");
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
*
* This is internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an `Approval` event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 value) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = value;
emit Approval(owner, spender, value);
}
/**
* @dev Destoys `amount` tokens from `account`.`amount` is then deducted
* from the caller's allowance.
*
* See `_burn` and `_approve`.
*/
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
}
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
pragma solidity ^0.8.11;
contract GowldLottery is VRFConsumerBase, ERC20 {
using SafeMath for uint256;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
uint256 public gasForProcessing = 300000;
uint256 cost = .05 ether;
address tokenAddress = 0x82d3829d97FC2D9987F7CE966486E86Bd04716d5;
address public owner;
address payable[] public players;
uint public lotteryId;
mapping (uint => address payable) public lotteryHistory;
bytes32 internal keyHash; // identifies which Chainlink oracle to use
uint internal fee; // fee to get random number
uint public randomResult;
bool isPause = true;
receive () external payable {
require(msg.value == cost);
require(!isPause);
enter(msg.sender);
}
constructor()
VRFConsumerBase(
0xf0d54349aDdcf704F77AE15b96510dEA15cb7952, // VRF coordinator
0x514910771AF9Ca656af840dff83E8264EcF986CA // LINK token address
) {
keyHash = 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445;
fee = 2 * 10 ** 18; // 2 LINK
owner = msg.sender;
lotteryId = 1;
uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
}
function getRandomNumber() public returns (bytes32 requestId) {
require(LINK.balanceOf(address(this)) >= fee, "Not enough LINK in contract");
return requestRandomness(keyHash, fee);
}
function fulfillRandomness(bytes32 requestId, uint randomness) internal override {
randomResult = randomness;
}
function setKeyHash(bytes32 _keyHash) external onlyowner {
keyHash = _keyHash;
}
function setFee(uint256 _fee) external onlyowner {
fee = _fee;
}
function setCost(uint256 _cost) external onlyowner {
cost = _cost;
}
function setPause(bool _isPause) external onlyowner {
isPause = _isPause;
}
function getWinnerByLottery(uint lottery) public view returns (address payable) {
return lotteryHistory[lottery];
}
function getBalance() public view returns (uint) {
return address(this).balance;
}
function getPlayers() public view returns (address payable[] memory) {
return players;
}
function enter(address _sender) public payable {
require(!isPause);
require(msg.value == cost);
// address of player entering lottery
players.push(payable(_sender));
}
function pickWinner() public onlyowner {
getRandomNumber();
}
function payWinner() public onlyowner {
require(randomResult > 0, "Must have a source of randomness before choosing winner");
uint index = randomResult % players.length;
players[index].transfer(address(this).balance / 2);
lotteryHistory[lotteryId] = players[index];
lotteryId++;
// reset the state of the contract
players = new address payable[](0);
}
function withdraw() public payable onlyowner {
require(payable(msg.sender).send(address(this).balance));
}
modifier onlyowner() {
require(msg.sender == owner);
_;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"enter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlayers","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRandomNumber","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lottery","type":"uint256"}],"name":"getWinnerByLottery","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteryHistory","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pickWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"players","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"setKeyHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0604052620493e060065566b1a2bc2ec500006007557382d3829d97fc2d9987f7ce966486e86bd04716d5600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006101000a81548160ff02191690831515021790555034801561009257600080fd5b5073f0d54349addcf704f77ae15b96510dea15cb795273514910771af9ca656af840dff83e8264ecf986ca8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050507faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af44560001b600d81905550671bc16d674ec80000600e8190555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b81905550737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060805160a05161288561023160003960008181610cc9015261185a01526000818161115b015261181e01526128856000f3fe6080604052600436106101c65760003560e01c806370a08231116100f7578063a9059cbb11610095578063dbdff2c111610064578063dbdff2c114610664578063dd62ed3e1461068f578063e580f47b146106cc578063f71d96cb146106f7576101fe565b8063a9059cbb146105cb578063be71248a14610608578063bedb86fb1461061f578063d014c01f14610648576101fe565b806394985ddd116100d157806394985ddd14610511578063985447101461053a5780639c1b8af514610563578063a457c2d71461058e576101fe565b806370a082311461047e5780638b5b9ccc146104bb5780638da5cb5b146104e6576101fe565b80633ccfd60b1161016457806349bd5a5e1161013e57806349bd5a5e146103d65780635d495aea1461040157806369fe0e2d146104185780636d6fe23014610441576101fe565b80633ccfd60b1461037857806342619f661461038257806344a0d68a146103ad576101fe565b806318160ddd116101a057806318160ddd1461029657806323b872dd146102c1578063281d098d146102fe578063395093511461033b576101fe565b8063095ea7b31461020357806312065fe0146102405780631694505e1461026b576101fe565b366101fe5760075434146101d957600080fd5b601060009054906101000a900460ff16156101f357600080fd5b6101fc33610734565b005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190611b19565b6107c2565b6040516102379190611b74565b60405180910390f35b34801561024c57600080fd5b506102556107d9565b6040516102629190611b9e565b60405180910390f35b34801561027757600080fd5b506102806107e1565b60405161028d9190611c18565b60405180910390f35b3480156102a257600080fd5b506102ab610807565b6040516102b89190611b9e565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190611c33565b610811565b6040516102f59190611b74565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190611c86565b6108c2565b6040516103329190611cd4565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611b19565b6108ff565b60405161036f9190611b74565b60405180910390f35b6103806109a4565b005b34801561038e57600080fd5b50610397610a3e565b6040516103a49190611b9e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190611c86565b610a44565b005b3480156103e257600080fd5b506103eb610aa8565b6040516103f89190611cfe565b60405180910390f35b34801561040d57600080fd5b50610416610ace565b005b34801561042457600080fd5b5061043f600480360381019061043a9190611c86565b610b33565b005b34801561044d57600080fd5b5061046860048036038101906104639190611c86565b610b97565b6040516104759190611cd4565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190611d19565b610bca565b6040516104b29190611b9e565b60405180910390f35b3480156104c757600080fd5b506104d0610c13565b6040516104dd9190611e04565b60405180910390f35b3480156104f257600080fd5b506104fb610ca1565b6040516105089190611cfe565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190611e5c565b610cc7565b005b34801561054657600080fd5b50610561600480360381019061055c9190611e9c565b610d63565b005b34801561056f57600080fd5b50610578610dc7565b6040516105859190611b9e565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190611b19565b610dcd565b6040516105c29190611b74565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190611b19565b610e72565b6040516105ff9190611b74565b60405180910390f35b34801561061457600080fd5b5061061d610e89565b005b34801561062b57600080fd5b5061064660048036038101906106419190611ef5565b6110dd565b005b610662600480360381019061065d9190611d19565b610734565b005b34801561067057600080fd5b50610679611154565b6040516106869190611f31565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190611f4c565b611247565b6040516106c39190611b9e565b60405180910390f35b3480156106d857600080fd5b506106e16112ce565b6040516106ee9190611b9e565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190611c86565b6112d4565b60405161072b9190611cd4565b60405180910390f35b601060009054906101000a900460ff161561074e57600080fd5b600754341461075c57600080fd5b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107cf338484611313565b6001905092915050565b600047905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b600061081e8484846114de565b6108b784336108b285600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b611313565b600190509392505050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099a338461099585600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b190919063ffffffff16565b611313565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109fe57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610a3c57600080fd5b565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9e57600080fd5b8060078190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b2857600080fd5b610b30611154565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8d57600080fd5b80600e8190555050565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600a805480602002602001604051908101604052809291908181526020018280548015610c9757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c4d575b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90611fe9565b60405180910390fd5b610d5f828261180f565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dbd57600080fd5b80600d8190555050565b60065481565b6000610e683384610e6385600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b611313565b6001905092915050565b6000610e7f3384846114de565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee357600080fd5b6000600f5411610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f9061207b565b60405180910390fd5b6000600a80549050600f54610f3d91906120ca565b9050600a8181548110610f5357610f526120fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600247610fa49190612159565b9081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b50600a8181548110610fe457610fe36120fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008154809291906110759061218a565b9190505550600067ffffffffffffffff811115611095576110946121d3565b5b6040519080825280602002602001820160405280156110c35781602001602082028036833780820191505090505b50600a90805190602001906110d99291906119d9565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461113757600080fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600e547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b29190611cfe565b602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190612217565b1015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90612290565b60405180910390fd5b611242600d54600e5461181a565b905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600a81815481106112e457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90612322565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906123b4565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114d19190611b9e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590612446565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b5906124d8565b60405180910390fd5b61161081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117459190611b9e565b60405180910390a3505050565b600082821115611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90612544565b60405180910390fd5b600082846117a59190612564565b90508091505092915050565b60008082846117c09190612598565b905083811015611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc9061263a565b60405180910390fd5b8091505092915050565b80600f819055505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634000aea07f00000000000000000000000000000000000000000000000000000000000000008486600060405160200161188e92919061265a565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016118bb9392919061271c565b6020604051808303816000875af11580156118da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fe919061276f565b506000611920846000306000808981526020019081526020016000205461196a565b90506001600080868152602001908152602001600020546119419190612598565b6000808681526020019081526020016000208190555061196184826119a6565b91505092915050565b600084848484604051602001611983949392919061279c565b6040516020818303038152906040528051906020012060001c9050949350505050565b600082826040516020016119bb929190612823565b60405160208183030381529060405280519060200120905092915050565b828054828255906000526020600020908101928215611a52579160200282015b82811115611a515782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906119f9565b5b509050611a5f9190611a63565b5090565b5b80821115611a7c576000816000905550600101611a64565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ab082611a85565b9050919050565b611ac081611aa5565b8114611acb57600080fd5b50565b600081359050611add81611ab7565b92915050565b6000819050919050565b611af681611ae3565b8114611b0157600080fd5b50565b600081359050611b1381611aed565b92915050565b60008060408385031215611b3057611b2f611a80565b5b6000611b3e85828601611ace565b9250506020611b4f85828601611b04565b9150509250929050565b60008115159050919050565b611b6e81611b59565b82525050565b6000602082019050611b896000830184611b65565b92915050565b611b9881611ae3565b82525050565b6000602082019050611bb36000830184611b8f565b92915050565b6000819050919050565b6000611bde611bd9611bd484611a85565b611bb9565b611a85565b9050919050565b6000611bf082611bc3565b9050919050565b6000611c0282611be5565b9050919050565b611c1281611bf7565b82525050565b6000602082019050611c2d6000830184611c09565b92915050565b600080600060608486031215611c4c57611c4b611a80565b5b6000611c5a86828701611ace565b9350506020611c6b86828701611ace565b9250506040611c7c86828701611b04565b9150509250925092565b600060208284031215611c9c57611c9b611a80565b5b6000611caa84828501611b04565b91505092915050565b6000611cbe82611a85565b9050919050565b611cce81611cb3565b82525050565b6000602082019050611ce96000830184611cc5565b92915050565b611cf881611aa5565b82525050565b6000602082019050611d136000830184611cef565b92915050565b600060208284031215611d2f57611d2e611a80565b5b6000611d3d84828501611ace565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611d7b81611cb3565b82525050565b6000611d8d8383611d72565b60208301905092915050565b6000602082019050919050565b6000611db182611d46565b611dbb8185611d51565b9350611dc683611d62565b8060005b83811015611df7578151611dde8882611d81565b9750611de983611d99565b925050600181019050611dca565b5085935050505092915050565b60006020820190508181036000830152611e1e8184611da6565b905092915050565b6000819050919050565b611e3981611e26565b8114611e4457600080fd5b50565b600081359050611e5681611e30565b92915050565b60008060408385031215611e7357611e72611a80565b5b6000611e8185828601611e47565b9250506020611e9285828601611b04565b9150509250929050565b600060208284031215611eb257611eb1611a80565b5b6000611ec084828501611e47565b91505092915050565b611ed281611b59565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600060208284031215611f0b57611f0a611a80565b5b6000611f1984828501611ee0565b91505092915050565b611f2b81611e26565b82525050565b6000602082019050611f466000830184611f22565b92915050565b60008060408385031215611f6357611f62611a80565b5b6000611f7185828601611ace565b9250506020611f8285828601611ace565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b6000611fd3601f83611f8c565b9150611fde82611f9d565b602082019050919050565b6000602082019050818103600083015261200281611fc6565b9050919050565b7f4d7573742068617665206120736f75726365206f662072616e646f6d6e65737360008201527f206265666f72652063686f6f73696e672077696e6e6572000000000000000000602082015250565b6000612065603783611f8c565b915061207082612009565b604082019050919050565b6000602082019050818103600083015261209481612058565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006120d582611ae3565b91506120e083611ae3565b9250826120f0576120ef61209b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061216482611ae3565b915061216f83611ae3565b92508261217f5761217e61209b565b5b828204905092915050565b600061219582611ae3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121c8576121c761212a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061221181611aed565b92915050565b60006020828403121561222d5761222c611a80565b5b600061223b84828501612202565b91505092915050565b7f4e6f7420656e6f756768204c494e4b20696e20636f6e74726163740000000000600082015250565b600061227a601b83611f8c565b915061228582612244565b602082019050919050565b600060208201905081810360008301526122a98161226d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061230c602483611f8c565b9150612317826122b0565b604082019050919050565b6000602082019050818103600083015261233b816122ff565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061239e602283611f8c565b91506123a982612342565b604082019050919050565b600060208201905081810360008301526123cd81612391565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612430602583611f8c565b915061243b826123d4565b604082019050919050565b6000602082019050818103600083015261245f81612423565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006124c2602383611f8c565b91506124cd82612466565b604082019050919050565b600060208201905081810360008301526124f1816124b5565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b600061252e601e83611f8c565b9150612539826124f8565b602082019050919050565b6000602082019050818103600083015261255d81612521565b9050919050565b600061256f82611ae3565b915061257a83611ae3565b92508282101561258d5761258c61212a565b5b828203905092915050565b60006125a382611ae3565b91506125ae83611ae3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125e3576125e261212a565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612624601b83611f8c565b915061262f826125ee565b602082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b600060408201905061266f6000830185611f22565b61267c6020830184611b8f565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126bd5780820151818401526020810190506126a2565b838111156126cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006126ee82612683565b6126f8818561268e565b935061270881856020860161269f565b612711816126d2565b840191505092915050565b60006060820190506127316000830186611cef565b61273e6020830185611b8f565b818103604083015261275081846126e3565b9050949350505050565b60008151905061276981611ec9565b92915050565b60006020828403121561278557612784611a80565b5b60006127938482850161275a565b91505092915050565b60006080820190506127b16000830187611f22565b6127be6020830186611b8f565b6127cb6040830185611cef565b6127d86060830184611b8f565b95945050505050565b6000819050919050565b6127fc6127f782611e26565b6127e1565b82525050565b6000819050919050565b61281d61281882611ae3565b612802565b82525050565b600061282f82856127eb565b60208201915061283f828461280c565b602082019150819050939250505056fea2646970667358221220c030c81b081660004b3879dad8b630b69484fbb473beb26335e0c5cff26b884464736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106101c65760003560e01c806370a08231116100f7578063a9059cbb11610095578063dbdff2c111610064578063dbdff2c114610664578063dd62ed3e1461068f578063e580f47b146106cc578063f71d96cb146106f7576101fe565b8063a9059cbb146105cb578063be71248a14610608578063bedb86fb1461061f578063d014c01f14610648576101fe565b806394985ddd116100d157806394985ddd14610511578063985447101461053a5780639c1b8af514610563578063a457c2d71461058e576101fe565b806370a082311461047e5780638b5b9ccc146104bb5780638da5cb5b146104e6576101fe565b80633ccfd60b1161016457806349bd5a5e1161013e57806349bd5a5e146103d65780635d495aea1461040157806369fe0e2d146104185780636d6fe23014610441576101fe565b80633ccfd60b1461037857806342619f661461038257806344a0d68a146103ad576101fe565b806318160ddd116101a057806318160ddd1461029657806323b872dd146102c1578063281d098d146102fe578063395093511461033b576101fe565b8063095ea7b31461020357806312065fe0146102405780631694505e1461026b576101fe565b366101fe5760075434146101d957600080fd5b601060009054906101000a900460ff16156101f357600080fd5b6101fc33610734565b005b600080fd5b34801561020f57600080fd5b5061022a60048036038101906102259190611b19565b6107c2565b6040516102379190611b74565b60405180910390f35b34801561024c57600080fd5b506102556107d9565b6040516102629190611b9e565b60405180910390f35b34801561027757600080fd5b506102806107e1565b60405161028d9190611c18565b60405180910390f35b3480156102a257600080fd5b506102ab610807565b6040516102b89190611b9e565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190611c33565b610811565b6040516102f59190611b74565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190611c86565b6108c2565b6040516103329190611cd4565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190611b19565b6108ff565b60405161036f9190611b74565b60405180910390f35b6103806109a4565b005b34801561038e57600080fd5b50610397610a3e565b6040516103a49190611b9e565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190611c86565b610a44565b005b3480156103e257600080fd5b506103eb610aa8565b6040516103f89190611cfe565b60405180910390f35b34801561040d57600080fd5b50610416610ace565b005b34801561042457600080fd5b5061043f600480360381019061043a9190611c86565b610b33565b005b34801561044d57600080fd5b5061046860048036038101906104639190611c86565b610b97565b6040516104759190611cd4565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190611d19565b610bca565b6040516104b29190611b9e565b60405180910390f35b3480156104c757600080fd5b506104d0610c13565b6040516104dd9190611e04565b60405180910390f35b3480156104f257600080fd5b506104fb610ca1565b6040516105089190611cfe565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190611e5c565b610cc7565b005b34801561054657600080fd5b50610561600480360381019061055c9190611e9c565b610d63565b005b34801561056f57600080fd5b50610578610dc7565b6040516105859190611b9e565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190611b19565b610dcd565b6040516105c29190611b74565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190611b19565b610e72565b6040516105ff9190611b74565b60405180910390f35b34801561061457600080fd5b5061061d610e89565b005b34801561062b57600080fd5b5061064660048036038101906106419190611ef5565b6110dd565b005b610662600480360381019061065d9190611d19565b610734565b005b34801561067057600080fd5b50610679611154565b6040516106869190611f31565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190611f4c565b611247565b6040516106c39190611b9e565b60405180910390f35b3480156106d857600080fd5b506106e16112ce565b6040516106ee9190611b9e565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190611c86565b6112d4565b60405161072b9190611cd4565b60405180910390f35b601060009054906101000a900460ff161561074e57600080fd5b600754341461075c57600080fd5b600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006107cf338484611313565b6001905092915050565b600047905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b600061081e8484846114de565b6108b784336108b285600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b611313565b600190509392505050565b6000600c600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099a338461099585600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b190919063ffffffff16565b611313565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109fe57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610a3c57600080fd5b565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a9e57600080fd5b8060078190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b2857600080fd5b610b30611154565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8d57600080fd5b80600e8190555050565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600a805480602002602001604051908101604052809291908181526020018280548015610c9757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610c4d575b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90611fe9565b60405180910390fd5b610d5f828261180f565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dbd57600080fd5b80600d8190555050565b60065481565b6000610e683384610e6385600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b611313565b6001905092915050565b6000610e7f3384846114de565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee357600080fd5b6000600f5411610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f9061207b565b60405180910390fd5b6000600a80549050600f54610f3d91906120ca565b9050600a8181548110610f5357610f526120fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600247610fa49190612159565b9081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b50600a8181548110610fe457610fe36120fb565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60008154809291906110759061218a565b9190505550600067ffffffffffffffff811115611095576110946121d3565b5b6040519080825280602002602001820160405280156110c35781602001602082028036833780820191505090505b50600a90805190602001906110d99291906119d9565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461113757600080fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600e547f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b29190611cfe565b602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190612217565b1015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90612290565b60405180910390fd5b611242600d54600e5461181a565b905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600a81815481106112e457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90612322565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906123b4565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114d19190611b9e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561154e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154590612446565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b5906124d8565b60405180910390fd5b61161081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175290919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117b190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117459190611b9e565b60405180910390a3505050565b600082821115611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90612544565b60405180910390fd5b600082846117a59190612564565b90508091505092915050565b60008082846117c09190612598565b905083811015611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc9061263a565b60405180910390fd5b8091505092915050565b80600f819055505050565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff16634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb79528486600060405160200161188e92919061265a565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016118bb9392919061271c565b6020604051808303816000875af11580156118da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fe919061276f565b506000611920846000306000808981526020019081526020016000205461196a565b90506001600080868152602001908152602001600020546119419190612598565b6000808681526020019081526020016000208190555061196184826119a6565b91505092915050565b600084848484604051602001611983949392919061279c565b6040516020818303038152906040528051906020012060001c9050949350505050565b600082826040516020016119bb929190612823565b60405160208183030381529060405280519060200120905092915050565b828054828255906000526020600020908101928215611a52579160200282015b82811115611a515782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906119f9565b5b509050611a5f9190611a63565b5090565b5b80821115611a7c576000816000905550600101611a64565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ab082611a85565b9050919050565b611ac081611aa5565b8114611acb57600080fd5b50565b600081359050611add81611ab7565b92915050565b6000819050919050565b611af681611ae3565b8114611b0157600080fd5b50565b600081359050611b1381611aed565b92915050565b60008060408385031215611b3057611b2f611a80565b5b6000611b3e85828601611ace565b9250506020611b4f85828601611b04565b9150509250929050565b60008115159050919050565b611b6e81611b59565b82525050565b6000602082019050611b896000830184611b65565b92915050565b611b9881611ae3565b82525050565b6000602082019050611bb36000830184611b8f565b92915050565b6000819050919050565b6000611bde611bd9611bd484611a85565b611bb9565b611a85565b9050919050565b6000611bf082611bc3565b9050919050565b6000611c0282611be5565b9050919050565b611c1281611bf7565b82525050565b6000602082019050611c2d6000830184611c09565b92915050565b600080600060608486031215611c4c57611c4b611a80565b5b6000611c5a86828701611ace565b9350506020611c6b86828701611ace565b9250506040611c7c86828701611b04565b9150509250925092565b600060208284031215611c9c57611c9b611a80565b5b6000611caa84828501611b04565b91505092915050565b6000611cbe82611a85565b9050919050565b611cce81611cb3565b82525050565b6000602082019050611ce96000830184611cc5565b92915050565b611cf881611aa5565b82525050565b6000602082019050611d136000830184611cef565b92915050565b600060208284031215611d2f57611d2e611a80565b5b6000611d3d84828501611ace565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611d7b81611cb3565b82525050565b6000611d8d8383611d72565b60208301905092915050565b6000602082019050919050565b6000611db182611d46565b611dbb8185611d51565b9350611dc683611d62565b8060005b83811015611df7578151611dde8882611d81565b9750611de983611d99565b925050600181019050611dca565b5085935050505092915050565b60006020820190508181036000830152611e1e8184611da6565b905092915050565b6000819050919050565b611e3981611e26565b8114611e4457600080fd5b50565b600081359050611e5681611e30565b92915050565b60008060408385031215611e7357611e72611a80565b5b6000611e8185828601611e47565b9250506020611e9285828601611b04565b9150509250929050565b600060208284031215611eb257611eb1611a80565b5b6000611ec084828501611e47565b91505092915050565b611ed281611b59565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600060208284031215611f0b57611f0a611a80565b5b6000611f1984828501611ee0565b91505092915050565b611f2b81611e26565b82525050565b6000602082019050611f466000830184611f22565b92915050565b60008060408385031215611f6357611f62611a80565b5b6000611f7185828601611ace565b9250506020611f8285828601611ace565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b6000611fd3601f83611f8c565b9150611fde82611f9d565b602082019050919050565b6000602082019050818103600083015261200281611fc6565b9050919050565b7f4d7573742068617665206120736f75726365206f662072616e646f6d6e65737360008201527f206265666f72652063686f6f73696e672077696e6e6572000000000000000000602082015250565b6000612065603783611f8c565b915061207082612009565b604082019050919050565b6000602082019050818103600083015261209481612058565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006120d582611ae3565b91506120e083611ae3565b9250826120f0576120ef61209b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061216482611ae3565b915061216f83611ae3565b92508261217f5761217e61209b565b5b828204905092915050565b600061219582611ae3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121c8576121c761212a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061221181611aed565b92915050565b60006020828403121561222d5761222c611a80565b5b600061223b84828501612202565b91505092915050565b7f4e6f7420656e6f756768204c494e4b20696e20636f6e74726163740000000000600082015250565b600061227a601b83611f8c565b915061228582612244565b602082019050919050565b600060208201905081810360008301526122a98161226d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061230c602483611f8c565b9150612317826122b0565b604082019050919050565b6000602082019050818103600083015261233b816122ff565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061239e602283611f8c565b91506123a982612342565b604082019050919050565b600060208201905081810360008301526123cd81612391565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612430602583611f8c565b915061243b826123d4565b604082019050919050565b6000602082019050818103600083015261245f81612423565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006124c2602383611f8c565b91506124cd82612466565b604082019050919050565b600060208201905081810360008301526124f1816124b5565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b600061252e601e83611f8c565b9150612539826124f8565b602082019050919050565b6000602082019050818103600083015261255d81612521565b9050919050565b600061256f82611ae3565b915061257a83611ae3565b92508282101561258d5761258c61212a565b5b828203905092915050565b60006125a382611ae3565b91506125ae83611ae3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125e3576125e261212a565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612624601b83611f8c565b915061262f826125ee565b602082019050919050565b6000602082019050818103600083015261265381612617565b9050919050565b600060408201905061266f6000830185611f22565b61267c6020830184611b8f565b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126bd5780820151818401526020810190506126a2565b838111156126cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006126ee82612683565b6126f8818561268e565b935061270881856020860161269f565b612711816126d2565b840191505092915050565b60006060820190506127316000830186611cef565b61273e6020830185611b8f565b818103604083015261275081846126e3565b9050949350505050565b60008151905061276981611ec9565b92915050565b60006020828403121561278557612784611a80565b5b60006127938482850161275a565b91505092915050565b60006080820190506127b16000830187611f22565b6127be6020830186611b8f565b6127cb6040830185611cef565b6127d86060830184611b8f565b95945050505050565b6000819050919050565b6127fc6127f782611e26565b6127e1565b82525050565b6000819050919050565b61281d61281882611ae3565b612802565b82525050565b600061282f82856127eb565b60208201915061283f828461280c565b602082019150819050939250505056fea2646970667358221220c030c81b081660004b3879dad8b630b69484fbb473beb26335e0c5cff26b884464736f6c634300080b0033
Deployed Bytecode Sourcemap
36858:3380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37602:4;;37589:9;:17;37581:26;;;;;;37627:7;;;;;;;;;;;37626:8;37618:17;;;;;;37646;37652:10;37646:5;:17::i;:::-;36858:3380;;;;;21972:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39067:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36954:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20995:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22591:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38928:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23256:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40031:120;;;:::i;:::-;;37483:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38743:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37004:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39497:75;;;;;;;;;;;;;:::i;:::-;;38666:69;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37285:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21149:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39171:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37191:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12593:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38573:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37039:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23965:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21472:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39580:443;;;;;;;;;;;;;:::i;:::-;;38833:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39281:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38226:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21691:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37257:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37218:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39281:208;39348:7;;;;;;;;;;;39347:8;39339:17;;;;;;39388:4;;39375:9;:17;39367:26;;;;;;39451:7;39472;39451:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39281:208;:::o;21972:148::-;22037:4;22054:36;22063:10;22075:7;22084:5;22054:8;:36::i;:::-;22108:4;22101:11;;21972:148;;;;:::o;39067:96::-;39110:4;39134:21;39127:28;;39067:96;:::o;36954:41::-;;;;;;;;;;;;;:::o;20995:91::-;21039:7;21066:12;;21059:19;;20995:91;:::o;22591:256::-;22680:4;22697:36;22707:6;22715:9;22726:6;22697:9;:36::i;:::-;22744:73;22753:6;22761:10;22773:43;22809:6;22773:11;:19;22785:6;22773:19;;;;;;;;;;;;;;;:31;22793:10;22773:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;22744:8;:73::i;:::-;22835:4;22828:11;;22591:256;;;;;:::o;38928:129::-;38991:15;39026:14;:23;39041:7;39026:23;;;;;;;;;;;;;;;;;;;;;39019:30;;38928:129;;;:::o;23256:206::-;23336:4;23353:79;23362:10;23374:7;23383:48;23420:10;23383:11;:23;23395:10;23383:23;;;;;;;;;;;;;;;:32;23407:7;23383:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;23353:8;:79::i;:::-;23450:4;23443:11;;23256:206;;;;:::o;40031:120::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;40103:10:::1;40095:24;;:47;40120:21;40095:47;;;;;;;;;;;;;;;;;;;;;;;40087:56;;;::::0;::::1;;40031:120::o:0;37483:24::-;;;;:::o;38743:82::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;38812:5:::1;38805:4;:12;;;;38743:82:::0;:::o;37004:28::-;;;;;;;;;;;;;:::o;39497:75::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;39547:17:::1;:15;:17::i;:::-;;39497:75::o:0;38666:69::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;38726:4:::1;38720:3;:10;;;;38666:69:::0;:::o;37285:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;21149:110::-;21206:7;21233:9;:18;21243:7;21233:18;;;;;;;;;;;;;;;;21226:25;;21149:110;;;:::o;39171:102::-;39214:24;39258:7;39251:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39171:102;:::o;37191:20::-;;;;;;;;;;;;;:::o;12593:210::-;12700:14;12686:28;;:10;:28;;;12678:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12757:40;12775:9;12786:10;12757:17;:40::i;:::-;12593:210;;:::o;38573:85::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;38645:8:::1;38635:7;:18;;;;38573:85:::0;:::o;37039:40::-;;;;:::o;23965:216::-;24050:4;24067:84;24076:10;24088:7;24097:53;24134:15;24097:11;:23;24109:10;24097:23;;;;;;;;;;;;;;;:32;24121:7;24097:32;;;;;;;;;;;;;;;;:36;;:53;;;;:::i;:::-;24067:8;:84::i;:::-;24169:4;24162:11;;23965:216;;;;:::o;21472:156::-;21541:4;21558:40;21568:10;21580:9;21591:6;21558:9;:40::i;:::-;21616:4;21609:11;;21472:156;;;;:::o;39580:443::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;39652:1:::1;39637:12;;:16;39629:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39724:10;39752:7;:14;;;;39737:12;;:29;;;;:::i;:::-;39724:42;;39777:7;39785:5;39777:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;:50;39825:1;39801:21;:25;;;;:::i;:::-;39777:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39868:7;39876:5;39868:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39840;:25;39855:9;;39840:25;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;39893:9;;:11;;;;;;;;;:::i;:::-;;;;;;40001:1;39979:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39969:7;:34;;;;;;;;;;;;:::i;:::-;;39618:405;39580:443::o:0;38833:89::-;40211:5;;;;;;;;;;;40197:19;;:10;:19;;;40189:28;;;;;;38906:8:::1;38896:7;;:18;;;;;;;;;;;;;;;;;;38833:89:::0;:::o;38226:206::-;38269:17;38340:3;;38307:4;:14;;;38330:4;38307:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;38299:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38393:31;38411:7;;38420:3;;38393:17;:31::i;:::-;38386:38;;38226:206;:::o;21691:134::-;21763:7;21790:11;:18;21802:5;21790:18;;;;;;;;;;;;;;;:27;21809:7;21790:27;;;;;;;;;;;;;;;;21783:34;;21691:134;;;;:::o;37257:21::-;;;;:::o;37218:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26768:335::-;26878:1;26861:19;;:5;:19;;;;26853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26959:1;26940:21;;:7;:21;;;;26932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27043:5;27013:11;:18;27025:5;27013:18;;;;;;;;;;;;;;;:27;27032:7;27013:27;;;;;;;;;;;;;;;:35;;;;27080:7;27064:31;;27073:5;27064:31;;;27089:5;27064:31;;;;;;:::i;:::-;;;;;;;;26768:335;;;:::o;24671:429::-;24787:1;24769:20;;:6;:20;;;;24761:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24871:1;24850:23;;:9;:23;;;;24842:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24946:29;24968:6;24946:9;:17;24956:6;24946:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;24926:9;:17;24936:6;24926:17;;;;;;;;;;;;;;;:49;;;;25009:32;25034:6;25009:9;:20;25019:9;25009:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24986:9;:20;24996:9;24986:20;;;;;;;;;;;;;;;:55;;;;25074:9;25057:35;;25066:6;25057:35;;;25085:6;25057:35;;;;;;:::i;:::-;;;;;;;;24671:429;;;:::o;17108:184::-;17166:7;17199:1;17194;:6;;17186:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17246:9;17262:1;17258;:5;;;;:::i;:::-;17246:17;;17283:1;17276:8;;;17108:184;;;;:::o;16652:181::-;16710:7;16730:9;16746:1;16742;:5;;;;:::i;:::-;16730:17;;16771:1;16766;:6;;16758:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16824:1;16817:8;;;16652:181;;;;:::o;38440:125::-;38547:10;38532:12;:25;;;;38440:125;;:::o;10710:1034::-;10787:17;10813:4;:20;;;10834:14;10850:4;10867:8;9540:1;10856:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10813:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11135:15;11153:82;11170:8;9540:1;11211:4;11218:6;:16;11225:8;11218:16;;;;;;;;;;;;11153;:82::i;:::-;11135:100;;11691:1;11672:6;:16;11679:8;11672:16;;;;;;;;;;;;:20;;;;:::i;:::-;11653:6;:16;11660:8;11653:16;;;;;;;;;;;:39;;;;11706:32;11720:8;11730:7;11706:13;:32::i;:::-;11699:39;;;10710:1034;;;;:::o;846:247::-;993:7;1045:8;1055:9;1066:10;1078:6;1034:51;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1024:62;;;;;;1016:71;;1009:78;;846:247;;;;;;:::o;1484:168::-;1571:7;1621:8;1631:13;1604:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1594:52;;;;;;1587:59;;1484:168;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:90::-;1711:7;1754:5;1747:13;1740:21;1729:32;;1677:90;;;:::o;1773:109::-;1854:21;1869:5;1854:21;:::i;:::-;1849:3;1842:34;1773:109;;:::o;1888:210::-;1975:4;2013:2;2002:9;1998:18;1990:26;;2026:65;2088:1;2077:9;2073:17;2064:6;2026:65;:::i;:::-;1888:210;;;;:::o;2104:118::-;2191:24;2209:5;2191:24;:::i;:::-;2186:3;2179:37;2104:118;;:::o;2228:222::-;2321:4;2359:2;2348:9;2344:18;2336:26;;2372:71;2440:1;2429:9;2425:17;2416:6;2372:71;:::i;:::-;2228:222;;;;:::o;2456:60::-;2484:3;2505:5;2498:12;;2456:60;;;:::o;2522:142::-;2572:9;2605:53;2623:34;2632:24;2650:5;2632:24;:::i;:::-;2623:34;:::i;:::-;2605:53;:::i;:::-;2592:66;;2522:142;;;:::o;2670:126::-;2720:9;2753:37;2784:5;2753:37;:::i;:::-;2740:50;;2670:126;;;:::o;2802:153::-;2879:9;2912:37;2943:5;2912:37;:::i;:::-;2899:50;;2802:153;;;:::o;2961:185::-;3075:64;3133:5;3075:64;:::i;:::-;3070:3;3063:77;2961:185;;:::o;3152:276::-;3272:4;3310:2;3299:9;3295:18;3287:26;;3323:98;3418:1;3407:9;3403:17;3394:6;3323:98;:::i;:::-;3152:276;;;;:::o;3434:619::-;3511:6;3519;3527;3576:2;3564:9;3555:7;3551:23;3547:32;3544:119;;;3582:79;;:::i;:::-;3544:119;3702:1;3727:53;3772:7;3763:6;3752:9;3748:22;3727:53;:::i;:::-;3717:63;;3673:117;3829:2;3855:53;3900:7;3891:6;3880:9;3876:22;3855:53;:::i;:::-;3845:63;;3800:118;3957:2;3983:53;4028:7;4019:6;4008:9;4004:22;3983:53;:::i;:::-;3973:63;;3928:118;3434:619;;;;;:::o;4059:329::-;4118:6;4167:2;4155:9;4146:7;4142:23;4138:32;4135:119;;;4173:79;;:::i;:::-;4135:119;4293:1;4318:53;4363:7;4354:6;4343:9;4339:22;4318:53;:::i;:::-;4308:63;;4264:117;4059:329;;;;:::o;4394:104::-;4439:7;4468:24;4486:5;4468:24;:::i;:::-;4457:35;;4394:104;;;:::o;4504:142::-;4607:32;4633:5;4607:32;:::i;:::-;4602:3;4595:45;4504:142;;:::o;4652:254::-;4761:4;4799:2;4788:9;4784:18;4776:26;;4812:87;4896:1;4885:9;4881:17;4872:6;4812:87;:::i;:::-;4652:254;;;;:::o;4912:118::-;4999:24;5017:5;4999:24;:::i;:::-;4994:3;4987:37;4912:118;;:::o;5036:222::-;5129:4;5167:2;5156:9;5152:18;5144:26;;5180:71;5248:1;5237:9;5233:17;5224:6;5180:71;:::i;:::-;5036:222;;;;:::o;5264:329::-;5323:6;5372:2;5360:9;5351:7;5347:23;5343:32;5340:119;;;5378:79;;:::i;:::-;5340:119;5498:1;5523:53;5568:7;5559:6;5548:9;5544:22;5523:53;:::i;:::-;5513:63;;5469:117;5264:329;;;;:::o;5599:122::-;5674:6;5708:5;5702:12;5692:22;;5599:122;;;:::o;5727:192::-;5834:11;5868:6;5863:3;5856:19;5908:4;5903:3;5899:14;5884:29;;5727:192;;;;:::o;5925:140::-;6000:4;6023:3;6015:11;;6053:4;6048:3;6044:14;6036:22;;5925:140;;;:::o;6071:132::-;6164:32;6190:5;6164:32;:::i;:::-;6159:3;6152:45;6071:132;;:::o;6209:211::-;6294:10;6315:62;6373:3;6365:6;6315:62;:::i;:::-;6409:4;6404:3;6400:14;6386:28;;6209:211;;;;:::o;6426:121::-;6504:4;6536;6531:3;6527:14;6519:22;;6426:121;;;:::o;6599:796::-;6734:3;6763:62;6819:5;6763:62;:::i;:::-;6841:94;6928:6;6923:3;6841:94;:::i;:::-;6834:101;;6959:64;7017:5;6959:64;:::i;:::-;7046:7;7077:1;7062:308;7087:6;7084:1;7081:13;7062:308;;;7163:6;7157:13;7190:79;7265:3;7250:13;7190:79;:::i;:::-;7183:86;;7292:68;7353:6;7292:68;:::i;:::-;7282:78;;7122:248;7109:1;7106;7102:9;7097:14;;7062:308;;;7066:14;7386:3;7379:10;;6739:656;;;6599:796;;;;:::o;7401:405::-;7560:4;7598:2;7587:9;7583:18;7575:26;;7647:9;7641:4;7637:20;7633:1;7622:9;7618:17;7611:47;7675:124;7794:4;7785:6;7675:124;:::i;:::-;7667:132;;7401:405;;;;:::o;7812:77::-;7849:7;7878:5;7867:16;;7812:77;;;:::o;7895:122::-;7968:24;7986:5;7968:24;:::i;:::-;7961:5;7958:35;7948:63;;8007:1;8004;7997:12;7948:63;7895:122;:::o;8023:139::-;8069:5;8107:6;8094:20;8085:29;;8123:33;8150:5;8123:33;:::i;:::-;8023:139;;;;:::o;8168:474::-;8236:6;8244;8293:2;8281:9;8272:7;8268:23;8264:32;8261:119;;;8299:79;;:::i;:::-;8261:119;8419:1;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8390:117;8546:2;8572:53;8617:7;8608:6;8597:9;8593:22;8572:53;:::i;:::-;8562:63;;8517:118;8168:474;;;;;:::o;8648:329::-;8707:6;8756:2;8744:9;8735:7;8731:23;8727:32;8724:119;;;8762:79;;:::i;:::-;8724:119;8882:1;8907:53;8952:7;8943:6;8932:9;8928:22;8907:53;:::i;:::-;8897:63;;8853:117;8648:329;;;;:::o;8983:116::-;9053:21;9068:5;9053:21;:::i;:::-;9046:5;9043:32;9033:60;;9089:1;9086;9079:12;9033:60;8983:116;:::o;9105:133::-;9148:5;9186:6;9173:20;9164:29;;9202:30;9226:5;9202:30;:::i;:::-;9105:133;;;;:::o;9244:323::-;9300:6;9349:2;9337:9;9328:7;9324:23;9320:32;9317:119;;;9355:79;;:::i;:::-;9317:119;9475:1;9500:50;9542:7;9533:6;9522:9;9518:22;9500:50;:::i;:::-;9490:60;;9446:114;9244:323;;;;:::o;9573:118::-;9660:24;9678:5;9660:24;:::i;:::-;9655:3;9648:37;9573:118;;:::o;9697:222::-;9790:4;9828:2;9817:9;9813:18;9805:26;;9841:71;9909:1;9898:9;9894:17;9885:6;9841:71;:::i;:::-;9697:222;;;;:::o;9925:474::-;9993:6;10001;10050:2;10038:9;10029:7;10025:23;10021:32;10018:119;;;10056:79;;:::i;:::-;10018:119;10176:1;10201:53;10246:7;10237:6;10226:9;10222:22;10201:53;:::i;:::-;10191:63;;10147:117;10303:2;10329:53;10374:7;10365:6;10354:9;10350:22;10329:53;:::i;:::-;10319:63;;10274:118;9925:474;;;;;:::o;10405:169::-;10489:11;10523:6;10518:3;10511:19;10563:4;10558:3;10554:14;10539:29;;10405:169;;;;:::o;10580:181::-;10720:33;10716:1;10708:6;10704:14;10697:57;10580:181;:::o;10767:366::-;10909:3;10930:67;10994:2;10989:3;10930:67;:::i;:::-;10923:74;;11006:93;11095:3;11006:93;:::i;:::-;11124:2;11119:3;11115:12;11108:19;;10767:366;;;:::o;11139:419::-;11305:4;11343:2;11332:9;11328:18;11320:26;;11392:9;11386:4;11382:20;11378:1;11367:9;11363:17;11356:47;11420:131;11546:4;11420:131;:::i;:::-;11412:139;;11139:419;;;:::o;11564:242::-;11704:34;11700:1;11692:6;11688:14;11681:58;11773:25;11768:2;11760:6;11756:15;11749:50;11564:242;:::o;11812:366::-;11954:3;11975:67;12039:2;12034:3;11975:67;:::i;:::-;11968:74;;12051:93;12140:3;12051:93;:::i;:::-;12169:2;12164:3;12160:12;12153:19;;11812:366;;;:::o;12184:419::-;12350:4;12388:2;12377:9;12373:18;12365:26;;12437:9;12431:4;12427:20;12423:1;12412:9;12408:17;12401:47;12465:131;12591:4;12465:131;:::i;:::-;12457:139;;12184:419;;;:::o;12609:180::-;12657:77;12654:1;12647:88;12754:4;12751:1;12744:15;12778:4;12775:1;12768:15;12795:176;12827:1;12844:20;12862:1;12844:20;:::i;:::-;12839:25;;12878:20;12896:1;12878:20;:::i;:::-;12873:25;;12917:1;12907:35;;12922:18;;:::i;:::-;12907:35;12963:1;12960;12956:9;12951:14;;12795:176;;;;:::o;12977:180::-;13025:77;13022:1;13015:88;13122:4;13119:1;13112:15;13146:4;13143:1;13136:15;13163:180;13211:77;13208:1;13201:88;13308:4;13305:1;13298:15;13332:4;13329:1;13322:15;13349:185;13389:1;13406:20;13424:1;13406:20;:::i;:::-;13401:25;;13440:20;13458:1;13440:20;:::i;:::-;13435:25;;13479:1;13469:35;;13484:18;;:::i;:::-;13469:35;13526:1;13523;13519:9;13514:14;;13349:185;;;;:::o;13540:233::-;13579:3;13602:24;13620:5;13602:24;:::i;:::-;13593:33;;13648:66;13641:5;13638:77;13635:103;;;13718:18;;:::i;:::-;13635:103;13765:1;13758:5;13754:13;13747:20;;13540:233;;;:::o;13779:180::-;13827:77;13824:1;13817:88;13924:4;13921:1;13914:15;13948:4;13945:1;13938:15;13965:143;14022:5;14053:6;14047:13;14038:22;;14069:33;14096:5;14069:33;:::i;:::-;13965:143;;;;:::o;14114:351::-;14184:6;14233:2;14221:9;14212:7;14208:23;14204:32;14201:119;;;14239:79;;:::i;:::-;14201:119;14359:1;14384:64;14440:7;14431:6;14420:9;14416:22;14384:64;:::i;:::-;14374:74;;14330:128;14114:351;;;;:::o;14471:177::-;14611:29;14607:1;14599:6;14595:14;14588:53;14471:177;:::o;14654:366::-;14796:3;14817:67;14881:2;14876:3;14817:67;:::i;:::-;14810:74;;14893:93;14982:3;14893:93;:::i;:::-;15011:2;15006:3;15002:12;14995:19;;14654:366;;;:::o;15026:419::-;15192:4;15230:2;15219:9;15215:18;15207:26;;15279:9;15273:4;15269:20;15265:1;15254:9;15250:17;15243:47;15307:131;15433:4;15307:131;:::i;:::-;15299:139;;15026:419;;;:::o;15451:223::-;15591:34;15587:1;15579:6;15575:14;15568:58;15660:6;15655:2;15647:6;15643:15;15636:31;15451:223;:::o;15680:366::-;15822:3;15843:67;15907:2;15902:3;15843:67;:::i;:::-;15836:74;;15919:93;16008:3;15919:93;:::i;:::-;16037:2;16032:3;16028:12;16021:19;;15680:366;;;:::o;16052:419::-;16218:4;16256:2;16245:9;16241:18;16233:26;;16305:9;16299:4;16295:20;16291:1;16280:9;16276:17;16269:47;16333:131;16459:4;16333:131;:::i;:::-;16325:139;;16052:419;;;:::o;16477:221::-;16617:34;16613:1;16605:6;16601:14;16594:58;16686:4;16681:2;16673:6;16669:15;16662:29;16477:221;:::o;16704:366::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:419::-;17242:4;17280:2;17269:9;17265:18;17257:26;;17329:9;17323:4;17319:20;17315:1;17304:9;17300:17;17293:47;17357:131;17483:4;17357:131;:::i;:::-;17349:139;;17076:419;;;:::o;17501:224::-;17641:34;17637:1;17629:6;17625:14;17618:58;17710:7;17705:2;17697:6;17693:15;17686:32;17501:224;:::o;17731:366::-;17873:3;17894:67;17958:2;17953:3;17894:67;:::i;:::-;17887:74;;17970:93;18059:3;17970:93;:::i;:::-;18088:2;18083:3;18079:12;18072:19;;17731:366;;;:::o;18103:419::-;18269:4;18307:2;18296:9;18292:18;18284:26;;18356:9;18350:4;18346:20;18342:1;18331:9;18327:17;18320:47;18384:131;18510:4;18384:131;:::i;:::-;18376:139;;18103:419;;;:::o;18528:222::-;18668:34;18664:1;18656:6;18652:14;18645:58;18737:5;18732:2;18724:6;18720:15;18713:30;18528:222;:::o;18756:366::-;18898:3;18919:67;18983:2;18978:3;18919:67;:::i;:::-;18912:74;;18995:93;19084:3;18995:93;:::i;:::-;19113:2;19108:3;19104:12;19097:19;;18756:366;;;:::o;19128:419::-;19294:4;19332:2;19321:9;19317:18;19309:26;;19381:9;19375:4;19371:20;19367:1;19356:9;19352:17;19345:47;19409:131;19535:4;19409:131;:::i;:::-;19401:139;;19128:419;;;:::o;19553:180::-;19693:32;19689:1;19681:6;19677:14;19670:56;19553:180;:::o;19739:366::-;19881:3;19902:67;19966:2;19961:3;19902:67;:::i;:::-;19895:74;;19978:93;20067:3;19978:93;:::i;:::-;20096:2;20091:3;20087:12;20080:19;;19739:366;;;:::o;20111:419::-;20277:4;20315:2;20304:9;20300:18;20292:26;;20364:9;20358:4;20354:20;20350:1;20339:9;20335:17;20328:47;20392:131;20518:4;20392:131;:::i;:::-;20384:139;;20111:419;;;:::o;20536:191::-;20576:4;20596:20;20614:1;20596:20;:::i;:::-;20591:25;;20630:20;20648:1;20630:20;:::i;:::-;20625:25;;20669:1;20666;20663:8;20660:34;;;20674:18;;:::i;:::-;20660:34;20719:1;20716;20712:9;20704:17;;20536:191;;;;:::o;20733:305::-;20773:3;20792:20;20810:1;20792:20;:::i;:::-;20787:25;;20826:20;20844:1;20826:20;:::i;:::-;20821:25;;20980:1;20912:66;20908:74;20905:1;20902:81;20899:107;;;20986:18;;:::i;:::-;20899:107;21030:1;21027;21023:9;21016:16;;20733:305;;;;:::o;21044:177::-;21184:29;21180:1;21172:6;21168:14;21161:53;21044:177;:::o;21227:366::-;21369:3;21390:67;21454:2;21449:3;21390:67;:::i;:::-;21383:74;;21466:93;21555:3;21466:93;:::i;:::-;21584:2;21579:3;21575:12;21568:19;;21227:366;;;:::o;21599:419::-;21765:4;21803:2;21792:9;21788:18;21780:26;;21852:9;21846:4;21842:20;21838:1;21827:9;21823:17;21816:47;21880:131;22006:4;21880:131;:::i;:::-;21872:139;;21599:419;;;:::o;22024:332::-;22145:4;22183:2;22172:9;22168:18;22160:26;;22196:71;22264:1;22253:9;22249:17;22240:6;22196:71;:::i;:::-;22277:72;22345:2;22334:9;22330:18;22321:6;22277:72;:::i;:::-;22024:332;;;;;:::o;22362:98::-;22413:6;22447:5;22441:12;22431:22;;22362:98;;;:::o;22466:168::-;22549:11;22583:6;22578:3;22571:19;22623:4;22618:3;22614:14;22599:29;;22466:168;;;;:::o;22640:307::-;22708:1;22718:113;22732:6;22729:1;22726:13;22718:113;;;22817:1;22812:3;22808:11;22802:18;22798:1;22793:3;22789:11;22782:39;22754:2;22751:1;22747:10;22742:15;;22718:113;;;22849:6;22846:1;22843:13;22840:101;;;22929:1;22920:6;22915:3;22911:16;22904:27;22840:101;22689:258;22640:307;;;:::o;22953:102::-;22994:6;23045:2;23041:7;23036:2;23029:5;23025:14;23021:28;23011:38;;22953:102;;;:::o;23061:360::-;23147:3;23175:38;23207:5;23175:38;:::i;:::-;23229:70;23292:6;23287:3;23229:70;:::i;:::-;23222:77;;23308:52;23353:6;23348:3;23341:4;23334:5;23330:16;23308:52;:::i;:::-;23385:29;23407:6;23385:29;:::i;:::-;23380:3;23376:39;23369:46;;23151:270;23061:360;;;;:::o;23427:529::-;23594:4;23632:2;23621:9;23617:18;23609:26;;23645:71;23713:1;23702:9;23698:17;23689:6;23645:71;:::i;:::-;23726:72;23794:2;23783:9;23779:18;23770:6;23726:72;:::i;:::-;23845:9;23839:4;23835:20;23830:2;23819:9;23815:18;23808:48;23873:76;23944:4;23935:6;23873:76;:::i;:::-;23865:84;;23427:529;;;;;;:::o;23962:137::-;24016:5;24047:6;24041:13;24032:22;;24063:30;24087:5;24063:30;:::i;:::-;23962:137;;;;:::o;24105:345::-;24172:6;24221:2;24209:9;24200:7;24196:23;24192:32;24189:119;;;24227:79;;:::i;:::-;24189:119;24347:1;24372:61;24425:7;24416:6;24405:9;24401:22;24372:61;:::i;:::-;24362:71;;24318:125;24105:345;;;;:::o;24456:553::-;24633:4;24671:3;24660:9;24656:19;24648:27;;24685:71;24753:1;24742:9;24738:17;24729:6;24685:71;:::i;:::-;24766:72;24834:2;24823:9;24819:18;24810:6;24766:72;:::i;:::-;24848;24916:2;24905:9;24901:18;24892:6;24848:72;:::i;:::-;24930;24998:2;24987:9;24983:18;24974:6;24930:72;:::i;:::-;24456:553;;;;;;;:::o;25015:79::-;25054:7;25083:5;25072:16;;25015:79;;;:::o;25100:157::-;25205:45;25225:24;25243:5;25225:24;:::i;:::-;25205:45;:::i;:::-;25200:3;25193:58;25100:157;;:::o;25263:79::-;25302:7;25331:5;25320:16;;25263:79;;;:::o;25348:157::-;25453:45;25473:24;25491:5;25473:24;:::i;:::-;25453:45;:::i;:::-;25448:3;25441:58;25348:157;;:::o;25511:397::-;25651:3;25666:75;25737:3;25728:6;25666:75;:::i;:::-;25766:2;25761:3;25757:12;25750:19;;25779:75;25850:3;25841:6;25779:75;:::i;:::-;25879:2;25874:3;25870:12;25863:19;;25899:3;25892:10;;25511:397;;;;;:::o
Swarm Source
ipfs://c030c81b081660004b3879dad8b630b69484fbb473beb26335e0c5cff26b8844
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.