Source Code
Latest 25 from a total of 29 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Update Eth Rate | 23010425 | 211 days ago | IN | 0 ETH | 0.00006606 | ||||
| Update Token Rat... | 22467829 | 287 days ago | IN | 0 ETH | 0.00046698 | ||||
| Update Eth Rate | 22467813 | 287 days ago | IN | 0 ETH | 0.00037126 | ||||
| Withdraw Currenc... | 22266757 | 315 days ago | IN | 0 ETH | 0.00005928 | ||||
| Buy Token | 22134292 | 333 days ago | IN | 0.0104 ETH | 0.00023145 | ||||
| Buy Token | 21904821 | 365 days ago | IN | 0.0076 ETH | 0.00010378 | ||||
| Buy Token | 21855229 | 372 days ago | IN | 0.0075 ETH | 0.00008527 | ||||
| Buy Token | 21853320 | 373 days ago | IN | 0.0075 ETH | 0.00015898 | ||||
| Buy Token | 21833033 | 376 days ago | IN | 0.01 ETH | 0.00013978 | ||||
| Buy Token | 21816561 | 378 days ago | IN | 0.48 ETH | 0.00021232 | ||||
| Buy Token | 21813260 | 378 days ago | IN | 0.11 ETH | 0.0000869 | ||||
| Buy Token | 21810306 | 379 days ago | IN | 0.22 ETH | 0.00011013 | ||||
| Buy Token | 21807132 | 379 days ago | IN | 0.0089 ETH | 0.00016149 | ||||
| Buy Token | 21806215 | 379 days ago | IN | 0.7 ETH | 0.00008474 | ||||
| Buy Token | 21803684 | 380 days ago | IN | 0.008 ETH | 0.00017377 | ||||
| Buy Token | 21803662 | 380 days ago | IN | 0.014 ETH | 0.00015984 | ||||
| Buy Token | 21802890 | 380 days ago | IN | 0.015 ETH | 0.00010379 | ||||
| Buy Token | 21802851 | 380 days ago | IN | 0.015 ETH | 0.00010287 | ||||
| Buy Token | 21802758 | 380 days ago | IN | 0.125 ETH | 0.00022974 | ||||
| Add White Listed... | 21802545 | 380 days ago | IN | 0 ETH | 0.0001035 | ||||
| Add White Listed... | 21802540 | 380 days ago | IN | 0 ETH | 0.00010023 | ||||
| Add White Listed... | 21802537 | 380 days ago | IN | 0 ETH | 0.00010277 | ||||
| Set Max Buy Limi... | 21802532 | 380 days ago | IN | 0 ETH | 0.00006794 | ||||
| Set Min Buy Limi... | 21802529 | 380 days ago | IN | 0 ETH | 0.00004134 | ||||
| Set Min Buy Limi... | 21802528 | 380 days ago | IN | 0 ETH | 0.00007296 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22266757 | 315 days ago | 1.7389 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BRDATPresale
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-02-08
*/
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @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) {
return a + b;
}
/**
* @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) {
return a - b;
}
/**
* @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) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting 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) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message 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,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* 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,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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.
*
* IMPORTANT: 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 @openzeppelin/contracts/utils/Context.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File @openzeppelin/contracts/access/Ownable.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File contracts/OwnerWithdrawable.sol
pragma solidity ^0.8.0;
contract OwnerWithdrawable is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
receive() external payable {}
fallback() external payable {}
function withdraw(address token, uint256 amt) public onlyOwner {
IERC20(token).safeTransfer(msg.sender, amt);
}
function withdrawAll(address token) public onlyOwner {
uint256 amt = IERC20(token).balanceOf(address(this));
withdraw(token, amt);
}
function withdrawCurrency(uint256 amt) public onlyOwner {
payable(msg.sender).transfer(amt);
}
// function deposit(address token, uint256 amt) public onlyOwner {
// uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
// require(allowance >= amt, "Check the token allowance");
// IERC20(token).transferFrom(owner(), address(this), amt);
// }
}
// File @openzeppelin/contracts/utils/Address.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File contracts/PreSale.sol
// SPDX-License-Identifier: MIT
// import "hardhat/console.sol";
pragma solidity ^0.8.0;
contract BRDATPresale is OwnerWithdrawable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
using SafeERC20 for IERC20Metadata;
uint256 public rate;
address public saleToken;
uint public saleTokenDec;
uint256 public totalTokensforSale;
uint256 public maxBuyLimit;
uint256 public minBuyLimit;
// Whitelist of tokens to buy from
mapping(address => bool) public tokenWL;
// 1 Token price in terms of WL tokens
mapping(address => uint256) public tokenPrices;
address[] public buyers;
bool public isUnlockingStarted;
bool public isPresaleStarted;
uint public presalePhase;
mapping(address => BuyerTokenDetails) public buyersAmount;
mapping(address => uint256) public presaleData;
uint256 public totalTokensSold;
struct BuyerTokenDetails {
uint amount;
bool isClaimed;
}
constructor() { }
modifier saleStarted(){
require (!isPresaleStarted, "PreSale: Sale has already started");
_;
}
//function to set information of Token sold in Pre-Sale and its rate in Native currency
function setSaleTokenParams(
address _saleToken,
uint256 _totalTokensforSale
) external onlyOwner saleStarted{
saleToken = _saleToken;
saleTokenDec = IERC20Metadata(saleToken).decimals();
totalTokensforSale = _totalTokensforSale;
IERC20(saleToken).safeTransferFrom(msg.sender, address(this), totalTokensforSale);
}
// Add a token to buy presale token from, with price
function addWhiteListedToken(
address _token,
uint256 _price
) external onlyOwner {
require(_price != 0, "Presale: Cannot set price to 0");
tokenWL[_token] = true;
tokenPrices[_token] = _price;
}
function updateEthRate(uint256 _rate) external onlyOwner {
rate = _rate;
}
function updateTokenRate(
address _token,
uint256 _price
)external onlyOwner{
require(tokenWL[_token], "Presale: Token not whitelisted");
require(_price != 0, "Presale: Cannot set price to 0");
tokenPrices[_token] = _price;
}
function startPresale() external onlyOwner {
require(!isPresaleStarted, "PreSale: Sale has already started");
isPresaleStarted = true;
}
function stopPresale() external onlyOwner {
require(isPresaleStarted, "PreSale: Sale hasn't started yet!");
isPresaleStarted = false;
}
function startUnlocking() external onlyOwner {
require(!isUnlockingStarted, "PreSale: Unlocking has already started");
isUnlockingStarted = true;
}
function stopUnlocking() external onlyOwner {
require(isUnlockingStarted, "PreSale: Unlocking hasn't started yet!");
isUnlockingStarted = false;
}
// Public view function to calculate amount of sale tokens returned if you buy using "amount" of "token"
function getTokenAmount(address token, uint256 amount)
public
view
returns (uint256)
{
if(!isPresaleStarted) {
return 0;
}
uint256 amtOut;
if(token != address(0)){
require(tokenWL[token] == true, "Presale: Token not whitelisted");
uint256 price = tokenPrices[token];
amtOut = amount.mul(10**saleTokenDec).div(price);
}
else{
amtOut = amount.mul(10**saleTokenDec).div(rate);
}
return amtOut;
}
// Public Function to buy tokens. APPROVAL needs to be done first
function buyToken(address _token, uint256 _amount) external payable{
require(isPresaleStarted, "PreSale: Sale stopped!");
uint256 saleTokenAmt;
if(_token != address(0)){
require(_amount > 0, "Presale: Cannot buy with zero amount");
require(tokenWL[_token] == true, "Presale: Token not whitelisted");
saleTokenAmt = getTokenAmount(_token, _amount);
// check if saleTokenAmt is greater than minBuyLimit
require(saleTokenAmt >= minBuyLimit, "Presale: Min buy limit not reached");
require(presaleData[msg.sender] + saleTokenAmt <= maxBuyLimit, "Presale: Max buy limit reached for this phase");
require((totalTokensSold + saleTokenAmt) <= totalTokensforSale, "PreSale: Total Token Sale Reached!");
IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
}
else{
saleTokenAmt = getTokenAmount(address(0), msg.value);
// check if saleTokenAmt is greater than minBuyLimit
require(saleTokenAmt >= minBuyLimit, "Presale: Min buy limit not reached");
require(presaleData[msg.sender] + saleTokenAmt <= maxBuyLimit, "Presale: Max buy limit reached for this phase");
require((totalTokensSold + saleTokenAmt) <= totalTokensforSale, "PreSale: Total Token Sale Reached!");
}
totalTokensSold += saleTokenAmt;
buyersAmount[msg.sender].amount += saleTokenAmt;
presaleData[msg.sender] += saleTokenAmt;
}
function withdrawToken() external {
uint256 tokensforWithdraw;
require(buyersAmount[msg.sender].isClaimed == false, "Presale: Already claimed");
require(isUnlockingStarted, "Presale: Locking period not over yet");
tokensforWithdraw = buyersAmount[msg.sender].amount;
buyersAmount[msg.sender].isClaimed = true;
IERC20(saleToken).safeTransfer(msg.sender, tokensforWithdraw);
}
function setMinBuyLimit(uint _minBuyLimit) external onlyOwner {
minBuyLimit = _minBuyLimit;
}
function setMaxBuyLimit(uint _maxBuyLimit) external onlyOwner {
maxBuyLimit = _maxBuyLimit;
}
}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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"addWhiteListedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlockingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyLimit","type":"uint256"}],"name":"setMaxBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBuyLimit","type":"uint256"}],"name":"setMinBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256","name":"_totalTokensforSale","type":"uint256"}],"name":"setSaleTokenParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateEthRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61339f80620001146000396000f3fe6080604052600436106101fd5760003560e01c8063757765f81161010d578063b81df742116100a0578063f2aa82181161006f578063f2aa821814610699578063f2fde38b146106d6578063f3fef3a3146106ff578063f8951a0014610728578063fa09e6301461076557610204565b8063b81df74214610601578063ca628c781461062c578063d293187c14610643578063e985e3671461066e57610204565b806398d6d8ed116100dc57806398d6d8ed1461056b57806399b7703214610596578063ace1741c146105bf578063b5b0763c146105ea57610204565b8063757765f8146104b157806389e6ce1e146104da5780638ce0b9d2146105035780638da5cb5b1461054057610204565b80633c00a36c1161019057806363b201171161015f57806363b20117146103fd57806368f8fc10146104285780636aa5b37f146104445780636bcedf9c1461046f578063715018a61461049a57610204565b80633c00a36c146103445780633f6f7ed61461036d578063444ad5ee1461039657806354a9f102146103bf57610204565b8063226ac321116101cc578063226ac321146102ae5780632a95c24c146102d75780632c4e722e146102ee5780633848a7711461031957610204565b806304c98b2b14610206578063115ece4c1461021d5780631ad2ad1a1461025a578063204120bc1461027157610204565b3661020457005b005b34801561021257600080fd5b5061021b61078e565b005b34801561022957600080fd5b50610244600480360381019061023f9190612473565b610877565b6040516102519190612f41565b60405180910390f35b34801561026657600080fd5b5061026f610a20565b005b34801561027d57600080fd5b506102986004803603810190610293919061244a565b610b08565b6040516102a59190612f41565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612473565b610b20565b005b3480156102e357600080fd5b506102ec610cb4565b005b3480156102fa57600080fd5b50610303610d9d565b6040516103109190612f41565b60405180910390f35b34801561032557600080fd5b5061032e610da3565b60405161033b9190612cc4565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906124d8565b610db6565b005b34801561037957600080fd5b50610394600480360381019061038f91906124d8565b610e7c565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612473565b610f02565b005b3480156103cb57600080fd5b506103e660048036038101906103e1919061244a565b611062565b6040516103f4929190612f5c565b60405180910390f35b34801561040957600080fd5b50610412611093565b60405161041f9190612f41565b60405180910390f35b610442600480360381019061043d9190612473565b611099565b005b34801561045057600080fd5b50610459611558565b6040516104669190612f41565b60405180910390f35b34801561047b57600080fd5b5061048461155e565b6040516104919190612f41565b60405180910390f35b3480156104a657600080fd5b506104af611564565b005b3480156104bd57600080fd5b506104d860048036038101906104d391906124d8565b6115ec565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190612473565b611672565b005b34801561050f57600080fd5b5061052a6004803603810190610525919061244a565b611884565b6040516105379190612cc4565b60405180910390f35b34801561054c57600080fd5b506105556118a4565b6040516105629190612c49565b60405180910390f35b34801561057757600080fd5b506105806118cd565b60405161058d9190612cc4565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124d8565b6118e0565b005b3480156105cb57600080fd5b506105d4611966565b6040516105e19190612f41565b60405180910390f35b3480156105f657600080fd5b506105ff61196c565b005b34801561060d57600080fd5b50610616611a54565b6040516106239190612f41565b60405180910390f35b34801561063857600080fd5b50610641611a5a565b005b34801561064f57600080fd5b50610658611c30565b6040516106659190612f41565b60405180910390f35b34801561067a57600080fd5b50610683611c36565b6040516106909190612c49565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906124d8565b611c5c565b6040516106cd9190612c49565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f8919061244a565b611c9b565b005b34801561070b57600080fd5b5061072660048036038101906107219190612473565b611d93565b005b34801561073457600080fd5b5061074f600480360381019061074a919061244a565b611e3e565b60405161075c9190612f41565b60405180910390f35b34801561077157600080fd5b5061078c6004803603810190610787919061244a565b611e56565b005b610796611f6d565b73ffffffffffffffffffffffffffffffffffffffff166107b46118a4565b73ffffffffffffffffffffffffffffffffffffffff161461080a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080190612e21565b60405180910390fd5b600a60019054906101000a900460ff161561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190612e41565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6000600a60019054906101000a900460ff166108965760009050610a1a565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146109dd5760011515600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590612e61565b60405180910390fd5b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506109d5816109c7600354600a6109b89190613091565b87611f7590919063ffffffff16565b611f8b90919063ffffffff16565b915050610a15565b610a12600154610a04600354600a6109f59190613091565b86611f7590919063ffffffff16565b611f8b90919063ffffffff16565b90505b809150505b92915050565b610a28611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610a466118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390612e21565b60405180910390fd5b600a60019054906101000a900460ff16610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290612d61565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b60086020528060005260406000206000915090505481565b610b28611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610b466118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612e21565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90612e61565b60405180910390fd5b6000811415610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390612dc1565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610cbc611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610cda6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612e21565b60405180910390fd5b600a60009054906101000a900460ff1615610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790612e81565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b60015481565b600a60009054906101000a900460ff1681565b610dbe611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610ddc6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612e21565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e78573d6000803e3d6000fd5b5050565b610e84611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610ea26118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90612e21565b60405180910390fd5b8060018190555050565b610f0a611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610f286118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590612e21565b60405180910390fd5b6000811415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990612dc1565b60405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600c6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b600e5481565b600a60019054906101000a900460ff166110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90612d81565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113575760008211611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790612ea1565b60405180910390fd5b60011515600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90612e61565b60405180910390fd5b6111fd8383610877565b9050600654811015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612f01565b60405180910390fd5b60055481600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112929190612fb7565b11156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90612e01565b60405180910390fd5b60045481600e546112e49190612fb7565b1115611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90612d21565b60405180910390fd5b6113523330848673ffffffffffffffffffffffffffffffffffffffff16611fa1909392919063ffffffff16565b61148b565b611362600034610877565b90506006548110156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090612f01565b60405180910390fd5b60055481600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f79190612fb7565b1115611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90612e01565b60405180910390fd5b60045481600e546114499190612fb7565b111561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190612d21565b60405180910390fd5b5b80600e600082825461149d9190612fb7565b9250508190555080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546114f69190612fb7565b9250508190555080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154c9190612fb7565b92505081905550505050565b60055481565b60045481565b61156c611f6d565b73ffffffffffffffffffffffffffffffffffffffff1661158a6118a4565b73ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790612e21565b60405180910390fd5b6115ea600061202a565b565b6115f4611f6d565b73ffffffffffffffffffffffffffffffffffffffff166116126118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90612e21565b60405180910390fd5b8060058190555050565b61167a611f6d565b73ffffffffffffffffffffffffffffffffffffffff166116986118a4565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590612e21565b60405180910390fd5b600a60019054906101000a900460ff161561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590612e41565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117e757600080fd5b505afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f919061252a565b60ff16600381905550806004819055506118803330600454600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa1909392919063ffffffff16565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60019054906101000a900460ff1681565b6118e8611f6d565b73ffffffffffffffffffffffffffffffffffffffff166119066118a4565b73ffffffffffffffffffffffffffffffffffffffff161461195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390612e21565b60405180910390fd5b8060068190555050565b60035481565b611974611f6d565b73ffffffffffffffffffffffffffffffffffffffff166119926118a4565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90612e21565b60405180910390fd5b600a60009054906101000a900460ff16611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90612de1565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b60065481565b6000801515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16151514611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612f21565b60405180910390fd5b600a60009054906101000a900460ff16611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3790612d01565b60405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550611c2d3382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120ee9092919063ffffffff16565b50565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098181548110611c6c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ca3611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611cc16118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90612e21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90612d41565b60405180910390fd5b611d908161202a565b50565b611d9b611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611db96118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690612e21565b60405180910390fd5b611e3a33828473ffffffffffffffffffffffffffffffffffffffff166120ee9092919063ffffffff16565b5050565b600d6020528060005260406000206000915090505481565b611e5e611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611e7c6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990612e21565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f0d9190612c49565b60206040518083038186803b158015611f2557600080fd5b505afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190612501565b9050611f698282611d93565b5050565b600033905090565b60008183611f8391906131af565b905092915050565b60008183611f99919061300d565b905092915050565b612024846323b872dd60e01b858585604051602401611fc293929190612c64565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612174565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61216f8363a9059cbb60e01b848460405160240161210d929190612c9b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612174565b505050565b60006121d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661223b9092919063ffffffff16565b905060008151111561223657808060200190518101906121f691906124af565b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90612ee1565b60405180910390fd5b5b505050565b606061224a8484600085612253565b90509392505050565b606082471015612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90612da1565b60405180910390fd5b6122a185612367565b6122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d790612ec1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123099190612c32565b60006040518083038185875af1925050503d8060008114612346576040519150601f19603f3d011682016040523d82523d6000602084013e61234b565b606091505b509150915061235b82828661237a565b92505050949350505050565b600080823b905060008111915050919050565b6060831561238a578290506123da565b60008351111561239d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d19190612cdf565b60405180910390fd5b9392505050565b6000813590506123f08161330d565b92915050565b60008151905061240581613324565b92915050565b60008135905061241a8161333b565b92915050565b60008151905061242f8161333b565b92915050565b60008151905061244481613352565b92915050565b60006020828403121561245c57600080fd5b600061246a848285016123e1565b91505092915050565b6000806040838503121561248657600080fd5b6000612494858286016123e1565b92505060206124a58582860161240b565b9150509250929050565b6000602082840312156124c157600080fd5b60006124cf848285016123f6565b91505092915050565b6000602082840312156124ea57600080fd5b60006124f88482850161240b565b91505092915050565b60006020828403121561251357600080fd5b600061252184828501612420565b91505092915050565b60006020828403121561253c57600080fd5b600061254a84828501612435565b91505092915050565b61255c81613209565b82525050565b61256b8161321b565b82525050565b600061257c82612f85565b6125868185612f9b565b935061259681856020860161325e565b80840191505092915050565b60006125ad82612f90565b6125b78185612fa6565b93506125c781856020860161325e565b6125d0816132ef565b840191505092915050565b60006125e8602483612fa6565b91507f50726573616c653a204c6f636b696e6720706572696f64206e6f74206f76657260008301527f20796574000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061264e602283612fa6565b91507f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008301527f64210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126b4602683612fa6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061271a602183612fa6565b91507f50726553616c653a2053616c65206861736e277420737461727465642079657460008301527f21000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612780601683612fa6565b91507f50726553616c653a2053616c652073746f7070656421000000000000000000006000830152602082019050919050565b60006127c0602683612fa6565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612826601e83612fa6565b91507f50726573616c653a2043616e6e6f742073657420707269636520746f203000006000830152602082019050919050565b6000612866602683612fa6565b91507f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560008301527f64207965742100000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128cc602d83612fa6565b91507f50726573616c653a204d617820627579206c696d69742072656163686564206660008301527f6f722074686973207068617365000000000000000000000000000000000000006020830152604082019050919050565b6000612932602083612fa6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612972602183612fa6565b91507f50726553616c653a2053616c652068617320616c72656164792073746172746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129d8601e83612fa6565b91507f50726573616c653a20546f6b656e206e6f742077686974656c697374656400006000830152602082019050919050565b6000612a18602683612fa6565b91507f50726553616c653a20556e6c6f636b696e672068617320616c7265616479207360008301527f74617274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a7e602483612fa6565b91507f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008301527f6f756e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ae4601d83612fa6565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612b24602a83612fa6565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b8a602283612fa6565b91507f50726573616c653a204d696e20627579206c696d6974206e6f7420726561636860008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bf0601883612fa6565b91507f50726573616c653a20416c726561647920636c61696d656400000000000000006000830152602082019050919050565b612c2c81613247565b82525050565b6000612c3e8284612571565b915081905092915050565b6000602082019050612c5e6000830184612553565b92915050565b6000606082019050612c796000830186612553565b612c866020830185612553565b612c936040830184612c23565b949350505050565b6000604082019050612cb06000830185612553565b612cbd6020830184612c23565b9392505050565b6000602082019050612cd96000830184612562565b92915050565b60006020820190508181036000830152612cf981846125a2565b905092915050565b60006020820190508181036000830152612d1a816125db565b9050919050565b60006020820190508181036000830152612d3a81612641565b9050919050565b60006020820190508181036000830152612d5a816126a7565b9050919050565b60006020820190508181036000830152612d7a8161270d565b9050919050565b60006020820190508181036000830152612d9a81612773565b9050919050565b60006020820190508181036000830152612dba816127b3565b9050919050565b60006020820190508181036000830152612dda81612819565b9050919050565b60006020820190508181036000830152612dfa81612859565b9050919050565b60006020820190508181036000830152612e1a816128bf565b9050919050565b60006020820190508181036000830152612e3a81612925565b9050919050565b60006020820190508181036000830152612e5a81612965565b9050919050565b60006020820190508181036000830152612e7a816129cb565b9050919050565b60006020820190508181036000830152612e9a81612a0b565b9050919050565b60006020820190508181036000830152612eba81612a71565b9050919050565b60006020820190508181036000830152612eda81612ad7565b9050919050565b60006020820190508181036000830152612efa81612b17565b9050919050565b60006020820190508181036000830152612f1a81612b7d565b9050919050565b60006020820190508181036000830152612f3a81612be3565b9050919050565b6000602082019050612f566000830184612c23565b92915050565b6000604082019050612f716000830185612c23565b612f7e6020830184612562565b9392505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612fc282613247565b9150612fcd83613247565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561300257613001613291565b5b828201905092915050565b600061301882613247565b915061302383613247565b925082613033576130326132c0565b5b828204905092915050565b6000808291508390505b60018511156130885780860481111561306457613063613291565b5b60018516156130735780820291505b808102905061308185613300565b9450613048565b94509492505050565b600061309c82613247565b91506130a783613247565b92506130d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846130dc565b905092915050565b6000826130ec57600190506131a8565b816130fa57600090506131a8565b8160018114613110576002811461311a57613149565b60019150506131a8565b60ff84111561312c5761312b613291565b5b8360020a91508482111561314357613142613291565b5b506131a8565b5060208310610133831016604e8410600b841016171561317e5782820a90508381111561317957613178613291565b5b6131a8565b61318b848484600161303e565b925090508184048111156131a2576131a1613291565b5b81810290505b9392505050565b60006131ba82613247565b91506131c583613247565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131fe576131fd613291565b5b828202905092915050565b600061321482613227565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561327c578082015181840152602081019050613261565b8381111561328b576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61331681613209565b811461332157600080fd5b50565b61332d8161321b565b811461333857600080fd5b50565b61334481613247565b811461334f57600080fd5b50565b61335b81613251565b811461336657600080fd5b5056fea2646970667358221220e0b87a7cb22ab6b6a9a33da314012e9e7ff8f4c82248b7db87788ab5e1ddf08264736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c8063757765f81161010d578063b81df742116100a0578063f2aa82181161006f578063f2aa821814610699578063f2fde38b146106d6578063f3fef3a3146106ff578063f8951a0014610728578063fa09e6301461076557610204565b8063b81df74214610601578063ca628c781461062c578063d293187c14610643578063e985e3671461066e57610204565b806398d6d8ed116100dc57806398d6d8ed1461056b57806399b7703214610596578063ace1741c146105bf578063b5b0763c146105ea57610204565b8063757765f8146104b157806389e6ce1e146104da5780638ce0b9d2146105035780638da5cb5b1461054057610204565b80633c00a36c1161019057806363b201171161015f57806363b20117146103fd57806368f8fc10146104285780636aa5b37f146104445780636bcedf9c1461046f578063715018a61461049a57610204565b80633c00a36c146103445780633f6f7ed61461036d578063444ad5ee1461039657806354a9f102146103bf57610204565b8063226ac321116101cc578063226ac321146102ae5780632a95c24c146102d75780632c4e722e146102ee5780633848a7711461031957610204565b806304c98b2b14610206578063115ece4c1461021d5780631ad2ad1a1461025a578063204120bc1461027157610204565b3661020457005b005b34801561021257600080fd5b5061021b61078e565b005b34801561022957600080fd5b50610244600480360381019061023f9190612473565b610877565b6040516102519190612f41565b60405180910390f35b34801561026657600080fd5b5061026f610a20565b005b34801561027d57600080fd5b506102986004803603810190610293919061244a565b610b08565b6040516102a59190612f41565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612473565b610b20565b005b3480156102e357600080fd5b506102ec610cb4565b005b3480156102fa57600080fd5b50610303610d9d565b6040516103109190612f41565b60405180910390f35b34801561032557600080fd5b5061032e610da3565b60405161033b9190612cc4565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906124d8565b610db6565b005b34801561037957600080fd5b50610394600480360381019061038f91906124d8565b610e7c565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612473565b610f02565b005b3480156103cb57600080fd5b506103e660048036038101906103e1919061244a565b611062565b6040516103f4929190612f5c565b60405180910390f35b34801561040957600080fd5b50610412611093565b60405161041f9190612f41565b60405180910390f35b610442600480360381019061043d9190612473565b611099565b005b34801561045057600080fd5b50610459611558565b6040516104669190612f41565b60405180910390f35b34801561047b57600080fd5b5061048461155e565b6040516104919190612f41565b60405180910390f35b3480156104a657600080fd5b506104af611564565b005b3480156104bd57600080fd5b506104d860048036038101906104d391906124d8565b6115ec565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190612473565b611672565b005b34801561050f57600080fd5b5061052a6004803603810190610525919061244a565b611884565b6040516105379190612cc4565b60405180910390f35b34801561054c57600080fd5b506105556118a4565b6040516105629190612c49565b60405180910390f35b34801561057757600080fd5b506105806118cd565b60405161058d9190612cc4565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906124d8565b6118e0565b005b3480156105cb57600080fd5b506105d4611966565b6040516105e19190612f41565b60405180910390f35b3480156105f657600080fd5b506105ff61196c565b005b34801561060d57600080fd5b50610616611a54565b6040516106239190612f41565b60405180910390f35b34801561063857600080fd5b50610641611a5a565b005b34801561064f57600080fd5b50610658611c30565b6040516106659190612f41565b60405180910390f35b34801561067a57600080fd5b50610683611c36565b6040516106909190612c49565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906124d8565b611c5c565b6040516106cd9190612c49565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f8919061244a565b611c9b565b005b34801561070b57600080fd5b5061072660048036038101906107219190612473565b611d93565b005b34801561073457600080fd5b5061074f600480360381019061074a919061244a565b611e3e565b60405161075c9190612f41565b60405180910390f35b34801561077157600080fd5b5061078c6004803603810190610787919061244a565b611e56565b005b610796611f6d565b73ffffffffffffffffffffffffffffffffffffffff166107b46118a4565b73ffffffffffffffffffffffffffffffffffffffff161461080a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080190612e21565b60405180910390fd5b600a60019054906101000a900460ff161561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190612e41565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6000600a60019054906101000a900460ff166108965760009050610a1a565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146109dd5760011515600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590612e61565b60405180910390fd5b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506109d5816109c7600354600a6109b89190613091565b87611f7590919063ffffffff16565b611f8b90919063ffffffff16565b915050610a15565b610a12600154610a04600354600a6109f59190613091565b86611f7590919063ffffffff16565b611f8b90919063ffffffff16565b90505b809150505b92915050565b610a28611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610a466118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390612e21565b60405180910390fd5b600a60019054906101000a900460ff16610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290612d61565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b60086020528060005260406000206000915090505481565b610b28611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610b466118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612e21565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90612e61565b60405180910390fd5b6000811415610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390612dc1565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610cbc611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610cda6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612e21565b60405180910390fd5b600a60009054906101000a900460ff1615610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790612e81565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b60015481565b600a60009054906101000a900460ff1681565b610dbe611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610ddc6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612e21565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e78573d6000803e3d6000fd5b5050565b610e84611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610ea26118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90612e21565b60405180910390fd5b8060018190555050565b610f0a611f6d565b73ffffffffffffffffffffffffffffffffffffffff16610f286118a4565b73ffffffffffffffffffffffffffffffffffffffff1614610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590612e21565b60405180910390fd5b6000811415610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990612dc1565b60405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600c6020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b600e5481565b600a60019054906101000a900460ff166110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df90612d81565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113575760008211611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790612ea1565b60405180910390fd5b60011515600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90612e61565b60405180910390fd5b6111fd8383610877565b9050600654811015611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90612f01565b60405180910390fd5b60055481600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112929190612fb7565b11156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90612e01565b60405180910390fd5b60045481600e546112e49190612fb7565b1115611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90612d21565b60405180910390fd5b6113523330848673ffffffffffffffffffffffffffffffffffffffff16611fa1909392919063ffffffff16565b61148b565b611362600034610877565b90506006548110156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090612f01565b60405180910390fd5b60055481600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113f79190612fb7565b1115611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90612e01565b60405180910390fd5b60045481600e546114499190612fb7565b111561148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190612d21565b60405180910390fd5b5b80600e600082825461149d9190612fb7565b9250508190555080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546114f69190612fb7565b9250508190555080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154c9190612fb7565b92505081905550505050565b60055481565b60045481565b61156c611f6d565b73ffffffffffffffffffffffffffffffffffffffff1661158a6118a4565b73ffffffffffffffffffffffffffffffffffffffff16146115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790612e21565b60405180910390fd5b6115ea600061202a565b565b6115f4611f6d565b73ffffffffffffffffffffffffffffffffffffffff166116126118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90612e21565b60405180910390fd5b8060058190555050565b61167a611f6d565b73ffffffffffffffffffffffffffffffffffffffff166116986118a4565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590612e21565b60405180910390fd5b600a60019054906101000a900460ff161561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590612e41565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117e757600080fd5b505afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f919061252a565b60ff16600381905550806004819055506118803330600454600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa1909392919063ffffffff16565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60019054906101000a900460ff1681565b6118e8611f6d565b73ffffffffffffffffffffffffffffffffffffffff166119066118a4565b73ffffffffffffffffffffffffffffffffffffffff161461195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195390612e21565b60405180910390fd5b8060068190555050565b60035481565b611974611f6d565b73ffffffffffffffffffffffffffffffffffffffff166119926118a4565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df90612e21565b60405180910390fd5b600a60009054906101000a900460ff16611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90612de1565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b60065481565b6000801515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16151514611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890612f21565b60405180910390fd5b600a60009054906101000a900460ff16611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3790612d01565b60405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550611c2d3382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120ee9092919063ffffffff16565b50565b600b5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098181548110611c6c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ca3611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611cc16118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0e90612e21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90612d41565b60405180910390fd5b611d908161202a565b50565b611d9b611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611db96118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690612e21565b60405180910390fd5b611e3a33828473ffffffffffffffffffffffffffffffffffffffff166120ee9092919063ffffffff16565b5050565b600d6020528060005260406000206000915090505481565b611e5e611f6d565b73ffffffffffffffffffffffffffffffffffffffff16611e7c6118a4565b73ffffffffffffffffffffffffffffffffffffffff1614611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990612e21565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f0d9190612c49565b60206040518083038186803b158015611f2557600080fd5b505afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190612501565b9050611f698282611d93565b5050565b600033905090565b60008183611f8391906131af565b905092915050565b60008183611f99919061300d565b905092915050565b612024846323b872dd60e01b858585604051602401611fc293929190612c64565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612174565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61216f8363a9059cbb60e01b848460405160240161210d929190612c9b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612174565b505050565b60006121d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661223b9092919063ffffffff16565b905060008151111561223657808060200190518101906121f691906124af565b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90612ee1565b60405180910390fd5b5b505050565b606061224a8484600085612253565b90509392505050565b606082471015612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90612da1565b60405180910390fd5b6122a185612367565b6122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d790612ec1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123099190612c32565b60006040518083038185875af1925050503d8060008114612346576040519150601f19603f3d011682016040523d82523d6000602084013e61234b565b606091505b509150915061235b82828661237a565b92505050949350505050565b600080823b905060008111915050919050565b6060831561238a578290506123da565b60008351111561239d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d19190612cdf565b60405180910390fd5b9392505050565b6000813590506123f08161330d565b92915050565b60008151905061240581613324565b92915050565b60008135905061241a8161333b565b92915050565b60008151905061242f8161333b565b92915050565b60008151905061244481613352565b92915050565b60006020828403121561245c57600080fd5b600061246a848285016123e1565b91505092915050565b6000806040838503121561248657600080fd5b6000612494858286016123e1565b92505060206124a58582860161240b565b9150509250929050565b6000602082840312156124c157600080fd5b60006124cf848285016123f6565b91505092915050565b6000602082840312156124ea57600080fd5b60006124f88482850161240b565b91505092915050565b60006020828403121561251357600080fd5b600061252184828501612420565b91505092915050565b60006020828403121561253c57600080fd5b600061254a84828501612435565b91505092915050565b61255c81613209565b82525050565b61256b8161321b565b82525050565b600061257c82612f85565b6125868185612f9b565b935061259681856020860161325e565b80840191505092915050565b60006125ad82612f90565b6125b78185612fa6565b93506125c781856020860161325e565b6125d0816132ef565b840191505092915050565b60006125e8602483612fa6565b91507f50726573616c653a204c6f636b696e6720706572696f64206e6f74206f76657260008301527f20796574000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061264e602283612fa6565b91507f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008301527f64210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126b4602683612fa6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061271a602183612fa6565b91507f50726553616c653a2053616c65206861736e277420737461727465642079657460008301527f21000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612780601683612fa6565b91507f50726553616c653a2053616c652073746f7070656421000000000000000000006000830152602082019050919050565b60006127c0602683612fa6565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612826601e83612fa6565b91507f50726573616c653a2043616e6e6f742073657420707269636520746f203000006000830152602082019050919050565b6000612866602683612fa6565b91507f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560008301527f64207965742100000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128cc602d83612fa6565b91507f50726573616c653a204d617820627579206c696d69742072656163686564206660008301527f6f722074686973207068617365000000000000000000000000000000000000006020830152604082019050919050565b6000612932602083612fa6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612972602183612fa6565b91507f50726553616c653a2053616c652068617320616c72656164792073746172746560008301527f64000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129d8601e83612fa6565b91507f50726573616c653a20546f6b656e206e6f742077686974656c697374656400006000830152602082019050919050565b6000612a18602683612fa6565b91507f50726553616c653a20556e6c6f636b696e672068617320616c7265616479207360008301527f74617274656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612a7e602483612fa6565b91507f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008301527f6f756e74000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ae4601d83612fa6565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612b24602a83612fa6565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b8a602283612fa6565b91507f50726573616c653a204d696e20627579206c696d6974206e6f7420726561636860008301527f65640000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bf0601883612fa6565b91507f50726573616c653a20416c726561647920636c61696d656400000000000000006000830152602082019050919050565b612c2c81613247565b82525050565b6000612c3e8284612571565b915081905092915050565b6000602082019050612c5e6000830184612553565b92915050565b6000606082019050612c796000830186612553565b612c866020830185612553565b612c936040830184612c23565b949350505050565b6000604082019050612cb06000830185612553565b612cbd6020830184612c23565b9392505050565b6000602082019050612cd96000830184612562565b92915050565b60006020820190508181036000830152612cf981846125a2565b905092915050565b60006020820190508181036000830152612d1a816125db565b9050919050565b60006020820190508181036000830152612d3a81612641565b9050919050565b60006020820190508181036000830152612d5a816126a7565b9050919050565b60006020820190508181036000830152612d7a8161270d565b9050919050565b60006020820190508181036000830152612d9a81612773565b9050919050565b60006020820190508181036000830152612dba816127b3565b9050919050565b60006020820190508181036000830152612dda81612819565b9050919050565b60006020820190508181036000830152612dfa81612859565b9050919050565b60006020820190508181036000830152612e1a816128bf565b9050919050565b60006020820190508181036000830152612e3a81612925565b9050919050565b60006020820190508181036000830152612e5a81612965565b9050919050565b60006020820190508181036000830152612e7a816129cb565b9050919050565b60006020820190508181036000830152612e9a81612a0b565b9050919050565b60006020820190508181036000830152612eba81612a71565b9050919050565b60006020820190508181036000830152612eda81612ad7565b9050919050565b60006020820190508181036000830152612efa81612b17565b9050919050565b60006020820190508181036000830152612f1a81612b7d565b9050919050565b60006020820190508181036000830152612f3a81612be3565b9050919050565b6000602082019050612f566000830184612c23565b92915050565b6000604082019050612f716000830185612c23565b612f7e6020830184612562565b9392505050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612fc282613247565b9150612fcd83613247565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561300257613001613291565b5b828201905092915050565b600061301882613247565b915061302383613247565b925082613033576130326132c0565b5b828204905092915050565b6000808291508390505b60018511156130885780860481111561306457613063613291565b5b60018516156130735780820291505b808102905061308185613300565b9450613048565b94509492505050565b600061309c82613247565b91506130a783613247565b92506130d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846130dc565b905092915050565b6000826130ec57600190506131a8565b816130fa57600090506131a8565b8160018114613110576002811461311a57613149565b60019150506131a8565b60ff84111561312c5761312b613291565b5b8360020a91508482111561314357613142613291565b5b506131a8565b5060208310610133831016604e8410600b841016171561317e5782820a90508381111561317957613178613291565b5b6131a8565b61318b848484600161303e565b925090508184048111156131a2576131a1613291565b5b81810290505b9392505050565b60006131ba82613247565b91506131c583613247565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131fe576131fd613291565b5b828202905092915050565b600061321482613227565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561327c578082015181840152602081019050613261565b8381111561328b576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b61331681613209565b811461332157600080fd5b50565b61332d8161321b565b811461333857600080fd5b50565b61334481613247565b811461334f57600080fd5b50565b61335b81613251565b811461336657600080fd5b5056fea2646970667358221220e0b87a7cb22ab6b6a9a33da314012e9e7ff8f4c82248b7db87788ab5e1ddf08264736f6c63430008000033
Deployed Bytecode Sourcemap
27234:5942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29493:159;;;;;;;;;;;;;:::i;:::-;;30291:566;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29660:158;;;;;;;;;;;;;:::i;:::-;;27721:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29205:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29826:170;;;;;;;;;;;;;:::i;:::-;;27393:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27808:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13798:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29108:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28850:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27917:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28036:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30936:1566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27521:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27481:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12421:103;;;;;;;;;;;;;:::i;:::-;;33066:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28406:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27629:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11770:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27845:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32951:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27450:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30004:169;;;;;;;;;;;;;:::i;:::-;;27554:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32510:433;;;;;;;;;;;;;:::i;:::-;;27880:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27419;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27776:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12679:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13502:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27981:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13635:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29493:159;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29556:16:::1;;;;;;;;;;;29555:17;29547:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:4;29621:16;;:23;;;;;;;;;;;;;;;;;;29493:159::o:0;30291:566::-;30394:7;30423:16;;;;;;;;;;;30419:57;;30463:1;30456:8;;;;30419:57;30486:14;30531:1;30514:19;;:5;:19;;;30511:315;;30575:4;30557:22;;:7;:14;30565:5;30557:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;30549:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30629:13;30645:11;:18;30657:5;30645:18;;;;;;;;;;;;;;;;30629:34;;30687:39;30720:5;30687:28;30702:12;;30698:2;:16;;;;:::i;:::-;30687:6;:10;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;30678:48;;30511:315;;;;30776:38;30809:4;;30776:28;30791:12;;30787:2;:16;;;;:::i;:::-;30776:6;:10;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;30767:47;;30511:315;30843:6;30836:13;;;30291:566;;;;;:::o;29660:158::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29721:16:::1;;;;;;;;;;;29713:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29805:5;29786:16;;:24;;;;;;;;;;;;;;;;;;29660:158::o:0;27721:46::-;;;;;;;;;;;;;;;;;:::o;29205:280::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29323:7:::1;:15;29331:6;29323:15;;;;;;;;;;;;;;;;;;;;;;;;;29315:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29402:1;29392:6;:11;;29384:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29471:6;29449:11;:19;29461:6;29449:19;;;;;;;;;;;;;;;:28;;;;29205:280:::0;;:::o;29826:170::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29891:18:::1;;;;;;;;;;;29890:19;29882:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29984:4;29963:18;;:25;;;;;;;;;;;;;;;;;;29826:170::o:0;27393:19::-;;;;:::o;27808:30::-;;;;;;;;;;;;;:::o;13798:108::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13873:10:::1;13865:28;;:33;13894:3;13865:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13798:108:::0;:::o;29108:89::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:5:::1;29177:4;:12;;;;29108:89:::0;:::o;28850:250::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28984:1:::1;28974:6;:11;;28966:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29049:4;29031:7;:15;29039:6;29031:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;29086:6;29064:11;:19;29076:6;29064:19;;;;;;;;;;;;;;;:28;;;;28850:250:::0;;:::o;27917:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28036:30::-;;;;:::o;30936:1566::-;31022:16;;;;;;;;;;;31014:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31078:20;31130:1;31112:20;;:6;:20;;;31109:1232;;31166:1;31156:7;:11;31148:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31250:4;31231:23;;:7;:15;31239:6;31231:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31223:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31321:31;31336:6;31344:7;31321:14;:31::i;:::-;31306:46;;31459:11;;31443:12;:27;;31435:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31574:11;;31558:12;31532:11;:23;31544:10;31532:23;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:53;;31524:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31694:18;;31677:12;31659:15;;:30;;;;:::i;:::-;31658:54;;31650:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31768:67;31800:10;31820:4;31827:7;31775:6;31768:31;;;;:67;;;;;;:::i;:::-;31109:1232;;;31891:37;31914:1;31918:9;31891:14;:37::i;:::-;31876:52;;32035:11;;32019:12;:27;;32011:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32150:11;;32134:12;32108:11;:23;32120:10;32108:23;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:53;;32100:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32270:18;;32253:12;32235:15;;:30;;;;:::i;:::-;32234:54;;32226:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31109:1232;32373:12;32354:15;;:31;;;;;;;:::i;:::-;;;;;;;;32431:12;32396;:24;32409:10;32396:24;;;;;;;;;;;;;;;:31;;;:47;;;;;;;:::i;:::-;;;;;;;;32481:12;32454:11;:23;32466:10;32454:23;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;30936:1566;;;:::o;27521:26::-;;;;:::o;27481:33::-;;;;:::o;12421:103::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12486:30:::1;12513:1;12486:18;:30::i;:::-;12421:103::o:0;33066:107::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33153:12:::1;33139:11;:26;;;;33066:107:::0;:::o;28406:378::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28231:16:::1;;;;;;;;;;;28230:17;28221:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28561:10:::2;28549:9;;:22;;;;;;;;;;;;;;;;;;28612:9;;;;;;;;;;;28597:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28582:51;;:12;:51;;;;28665:19;28644:18;:40;;;;28695:81;28730:10;28750:4;28757:18;;28702:9;;;;;;;;;;;28695:34;;;;:81;;;;;;:::i;:::-;28406:378:::0;;:::o;27629:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;11770:87::-;11816:7;11843:6;;;;;;;;;;;11836:13;;11770:87;:::o;27845:28::-;;;;;;;;;;;;;:::o;32951:107::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33038:12:::1;33024:11;:26;;;;32951:107:::0;:::o;27450:24::-;;;;:::o;30004:169::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30067:18:::1;;;;;;;;;;;30059:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30160:5;30139:18;;:26;;;;;;;;;;;;;;;;;;30004:169::o:0;27554:26::-;;;;:::o;32510:433::-;32555:25;32637:5;32599:43;;:12;:24;32612:10;32599:24;;;;;;;;;;;;;;;:34;;;;;;;;;;;;:43;;;32591:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32690:18;;;;;;;;;;;32682:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32780:12;:24;32793:10;32780:24;;;;;;;;;;;;;;;:31;;;32760:51;;32859:4;32822:12;:24;32835:10;32822:24;;;;;;;;;;;;;;;:34;;;:41;;;;;;;;;;;;;;;;;;32874:61;32905:10;32917:17;32881:9;;;;;;;;;;;32874:30;;;;:61;;;;;:::i;:::-;32510:433;:::o;27880:24::-;;;;:::o;27419:::-;;;;;;;;;;;;;:::o;27776:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12679:201::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12788:1:::1;12768:22;;:8;:22;;;;12760:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12844:28;12863:8;12844:18;:28::i;:::-;12679:201:::0;:::o;13502:125::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13576:43:::1;13603:10;13615:3;13583:5;13576:26;;;;:43;;;;;:::i;:::-;13502:125:::0;;:::o;27981:46::-;;;;;;;;;;;;;;;;;:::o;13635:155::-;12001:12;:10;:12::i;:::-;11990:23;;:7;:5;:7::i;:::-;:23;;;11982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13699:11:::1;13720:5;13713:23;;;13745:4;13713:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13699:52;;13762:20;13771:5;13778:3;13762:8;:20::i;:::-;12061:1;13635:155:::0;:::o;10490:98::-;10543:7;10570:10;10563:17;;10490:98;:::o;3476:::-;3534:7;3565:1;3561;:5;;;;:::i;:::-;3554:12;;3476:98;;;;:::o;3875:::-;3933:7;3964:1;3960;:5;;;;:::i;:::-;3953:12;;3875:98;;;;:::o;23293:248::-;23437:96;23457:5;23487:27;;;23516:4;23522:2;23526:5;23464:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23437:19;:96::i;:::-;23293:248;;;;:::o;13040:191::-;13114:16;13133:6;;;;;;;;;;;13114:25;;13159:8;13150:6;;:17;;;;;;;;;;;;;;;;;;13214:8;13183:40;;13204:8;13183:40;;;;;;;;;;;;13040:191;;:::o;23074:211::-;23191:86;23211:5;23241:23;;;23266:2;23270:5;23218:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23191:19;:86::i;:::-;23074:211;;;:::o;25647:716::-;26071:23;26097:69;26125:4;26097:69;;;;;;;;;;;;;;;;;26105:5;26097:27;;;;:69;;;;;:::i;:::-;26071:95;;26201:1;26181:10;:17;:21;26177:179;;;26278:10;26267:30;;;;;;;;;;;;:::i;:::-;26259:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26177:179;25647:716;;;:::o;17848:229::-;17985:12;18017:52;18039:6;18047:4;18053:1;18056:12;18017:21;:52::i;:::-;18010:59;;17848:229;;;;;:::o;18968:510::-;19138:12;19196:5;19171:21;:30;;19163:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19263:18;19274:6;19263:10;:18::i;:::-;19255:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19329:12;19343:23;19370:6;:11;;19389:5;19396:4;19370:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19328:73;;;;19419:51;19436:7;19445:10;19457:12;19419:16;:51::i;:::-;19412:58;;;;18968:510;;;;;;:::o;15042:387::-;15102:4;15310:12;15377:7;15365:20;15357:28;;15420:1;15413:4;:8;15406:15;;;15042:387;;;:::o;21654:712::-;21804:12;21833:7;21829:530;;;21864:10;21857:17;;;;21829:530;21998:1;21978:10;:17;:21;21974:374;;;22176:10;22170:17;22237:15;22224:10;22220:2;22216:19;22209:44;22124:148;22319:12;22312:20;;;;;;;;;;;:::i;:::-;;;;;;;;21654:712;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:143::-;;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;503:80;;;;:::o;589:139::-;;675:6;669:13;660:22;;691:31;716:5;691:31;:::i;:::-;650:78;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:407::-;;;1127:2;1115:9;1106:7;1102:23;1098:32;1095:2;;;1143:1;1140;1133:12;1095:2;1186:1;1211:53;1256:7;1247:6;1236:9;1232:22;1211:53;:::i;:::-;1201:63;;1157:117;1313:2;1339:53;1384:7;1375:6;1364:9;1360:22;1339:53;:::i;:::-;1329:63;;1284:118;1085:324;;;;;:::o;1415:278::-;;1531:2;1519:9;1510:7;1506:23;1502:32;1499:2;;;1547:1;1544;1537:12;1499:2;1590:1;1615:61;1668:7;1659:6;1648:9;1644:22;1615:61;:::i;:::-;1605:71;;1561:125;1489:204;;;;:::o;1699:262::-;;1807:2;1795:9;1786:7;1782:23;1778:32;1775:2;;;1823:1;1820;1813:12;1775:2;1866:1;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1837:117;1765:196;;;;:::o;1967:284::-;;2086:2;2074:9;2065:7;2061:23;2057:32;2054:2;;;2102:1;2099;2092:12;2054:2;2145:1;2170:64;2226:7;2217:6;2206:9;2202:22;2170:64;:::i;:::-;2160:74;;2116:128;2044:207;;;;:::o;2257:280::-;;2374:2;2362:9;2353:7;2349:23;2345:32;2342:2;;;2390:1;2387;2380:12;2342:2;2433:1;2458:62;2512:7;2503:6;2492:9;2488:22;2458:62;:::i;:::-;2448:72;;2404:126;2332:205;;;;:::o;2543:118::-;2630:24;2648:5;2630:24;:::i;:::-;2625:3;2618:37;2608:53;;:::o;2667:109::-;2748:21;2763:5;2748:21;:::i;:::-;2743:3;2736:34;2726:50;;:::o;2782:373::-;;2914:38;2946:5;2914:38;:::i;:::-;2968:88;3049:6;3044:3;2968:88;:::i;:::-;2961:95;;3065:52;3110:6;3105:3;3098:4;3091:5;3087:16;3065:52;:::i;:::-;3142:6;3137:3;3133:16;3126:23;;2890:265;;;;;:::o;3161:364::-;;3277:39;3310:5;3277:39;:::i;:::-;3332:71;3396:6;3391:3;3332:71;:::i;:::-;3325:78;;3412:52;3457:6;3452:3;3445:4;3438:5;3434:16;3412:52;:::i;:::-;3489:29;3511:6;3489:29;:::i;:::-;3484:3;3480:39;3473:46;;3253:272;;;;;:::o;3531:368::-;;3694:67;3758:2;3753:3;3694:67;:::i;:::-;3687:74;;3791:34;3787:1;3782:3;3778:11;3771:55;3857:6;3852:2;3847:3;3843:12;3836:28;3890:2;3885:3;3881:12;3874:19;;3677:222;;;:::o;3905:366::-;;4068:67;4132:2;4127:3;4068:67;:::i;:::-;4061:74;;4165:34;4161:1;4156:3;4152:11;4145:55;4231:4;4226:2;4221:3;4217:12;4210:26;4262:2;4257:3;4253:12;4246:19;;4051:220;;;:::o;4277:370::-;;4440:67;4504:2;4499:3;4440:67;:::i;:::-;4433:74;;4537:34;4533:1;4528:3;4524:11;4517:55;4603:8;4598:2;4593:3;4589:12;4582:30;4638:2;4633:3;4629:12;4622:19;;4423:224;;;:::o;4653:365::-;;4816:67;4880:2;4875:3;4816:67;:::i;:::-;4809:74;;4913:34;4909:1;4904:3;4900:11;4893:55;4979:3;4974:2;4969:3;4965:12;4958:25;5009:2;5004:3;5000:12;4993:19;;4799:219;;;:::o;5024:320::-;;5187:67;5251:2;5246:3;5187:67;:::i;:::-;5180:74;;5284:24;5280:1;5275:3;5271:11;5264:45;5335:2;5330:3;5326:12;5319:19;;5170:174;;;:::o;5350:370::-;;5513:67;5577:2;5572:3;5513:67;:::i;:::-;5506:74;;5610:34;5606:1;5601:3;5597:11;5590:55;5676:8;5671:2;5666:3;5662:12;5655:30;5711:2;5706:3;5702:12;5695:19;;5496:224;;;:::o;5726:328::-;;5889:67;5953:2;5948:3;5889:67;:::i;:::-;5882:74;;5986:32;5982:1;5977:3;5973:11;5966:53;6045:2;6040:3;6036:12;6029:19;;5872:182;;;:::o;6060:370::-;;6223:67;6287:2;6282:3;6223:67;:::i;:::-;6216:74;;6320:34;6316:1;6311:3;6307:11;6300:55;6386:8;6381:2;6376:3;6372:12;6365:30;6421:2;6416:3;6412:12;6405:19;;6206:224;;;:::o;6436:377::-;;6599:67;6663:2;6658:3;6599:67;:::i;:::-;6592:74;;6696:34;6692:1;6687:3;6683:11;6676:55;6762:15;6757:2;6752:3;6748:12;6741:37;6804:2;6799:3;6795:12;6788:19;;6582:231;;;:::o;6819:330::-;;6982:67;7046:2;7041:3;6982:67;:::i;:::-;6975:74;;7079:34;7075:1;7070:3;7066:11;7059:55;7140:2;7135:3;7131:12;7124:19;;6965:184;;;:::o;7155:365::-;;7318:67;7382:2;7377:3;7318:67;:::i;:::-;7311:74;;7415:34;7411:1;7406:3;7402:11;7395:55;7481:3;7476:2;7471:3;7467:12;7460:25;7511:2;7506:3;7502:12;7495:19;;7301:219;;;:::o;7526:328::-;;7689:67;7753:2;7748:3;7689:67;:::i;:::-;7682:74;;7786:32;7782:1;7777:3;7773:11;7766:53;7845:2;7840:3;7836:12;7829:19;;7672:182;;;:::o;7860:370::-;;8023:67;8087:2;8082:3;8023:67;:::i;:::-;8016:74;;8120:34;8116:1;8111:3;8107:11;8100:55;8186:8;8181:2;8176:3;8172:12;8165:30;8221:2;8216:3;8212:12;8205:19;;8006:224;;;:::o;8236:368::-;;8399:67;8463:2;8458:3;8399:67;:::i;:::-;8392:74;;8496:34;8492:1;8487:3;8483:11;8476:55;8562:6;8557:2;8552:3;8548:12;8541:28;8595:2;8590:3;8586:12;8579:19;;8382:222;;;:::o;8610:327::-;;8773:67;8837:2;8832:3;8773:67;:::i;:::-;8766:74;;8870:31;8866:1;8861:3;8857:11;8850:52;8928:2;8923:3;8919:12;8912:19;;8756:181;;;:::o;8943:374::-;;9106:67;9170:2;9165:3;9106:67;:::i;:::-;9099:74;;9203:34;9199:1;9194:3;9190:11;9183:55;9269:12;9264:2;9259:3;9255:12;9248:34;9308:2;9303:3;9299:12;9292:19;;9089:228;;;:::o;9323:366::-;;9486:67;9550:2;9545:3;9486:67;:::i;:::-;9479:74;;9583:34;9579:1;9574:3;9570:11;9563:55;9649:4;9644:2;9639:3;9635:12;9628:26;9680:2;9675:3;9671:12;9664:19;;9469:220;;;:::o;9695:322::-;;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9955:26;9951:1;9946:3;9942:11;9935:47;10008:2;10003:3;9999:12;9992:19;;9841:176;;;:::o;10023:118::-;10110:24;10128:5;10110:24;:::i;:::-;10105:3;10098:37;10088:53;;:::o;10147:271::-;;10299:93;10388:3;10379:6;10299:93;:::i;:::-;10292:100;;10409:3;10402:10;;10281:137;;;;:::o;10424:222::-;;10555:2;10544:9;10540:18;10532:26;;10568:71;10636:1;10625:9;10621:17;10612:6;10568:71;:::i;:::-;10522:124;;;;:::o;10652:442::-;;10839:2;10828:9;10824:18;10816:26;;10852:71;10920:1;10909:9;10905:17;10896:6;10852:71;:::i;:::-;10933:72;11001:2;10990:9;10986:18;10977:6;10933:72;:::i;:::-;11015;11083:2;11072:9;11068:18;11059:6;11015:72;:::i;:::-;10806:288;;;;;;:::o;11100:332::-;;11259:2;11248:9;11244:18;11236:26;;11272:71;11340:1;11329:9;11325:17;11316:6;11272:71;:::i;:::-;11353:72;11421:2;11410:9;11406:18;11397:6;11353:72;:::i;:::-;11226:206;;;;;:::o;11438:210::-;;11563:2;11552:9;11548:18;11540:26;;11576:65;11638:1;11627:9;11623:17;11614:6;11576:65;:::i;:::-;11530:118;;;;:::o;11654:313::-;;11805:2;11794:9;11790:18;11782:26;;11854:9;11848:4;11844:20;11840:1;11829:9;11825:17;11818:47;11882:78;11955:4;11946:6;11882:78;:::i;:::-;11874:86;;11772:195;;;;:::o;11973:419::-;;12177:2;12166:9;12162:18;12154:26;;12226:9;12220:4;12216:20;12212:1;12201:9;12197:17;12190:47;12254:131;12380:4;12254:131;:::i;:::-;12246:139;;12144:248;;;:::o;12398:419::-;;12602:2;12591:9;12587:18;12579:26;;12651:9;12645:4;12641:20;12637:1;12626:9;12622:17;12615:47;12679:131;12805:4;12679:131;:::i;:::-;12671:139;;12569:248;;;:::o;12823:419::-;;13027:2;13016:9;13012:18;13004:26;;13076:9;13070:4;13066:20;13062:1;13051:9;13047:17;13040:47;13104:131;13230:4;13104:131;:::i;:::-;13096:139;;12994:248;;;:::o;13248:419::-;;13452:2;13441:9;13437:18;13429:26;;13501:9;13495:4;13491:20;13487:1;13476:9;13472:17;13465:47;13529:131;13655:4;13529:131;:::i;:::-;13521:139;;13419:248;;;:::o;13673:419::-;;13877:2;13866:9;13862:18;13854:26;;13926:9;13920:4;13916:20;13912:1;13901:9;13897:17;13890:47;13954:131;14080:4;13954:131;:::i;:::-;13946:139;;13844:248;;;:::o;14098:419::-;;14302:2;14291:9;14287:18;14279:26;;14351:9;14345:4;14341:20;14337:1;14326:9;14322:17;14315:47;14379:131;14505:4;14379:131;:::i;:::-;14371:139;;14269:248;;;:::o;14523:419::-;;14727:2;14716:9;14712:18;14704:26;;14776:9;14770:4;14766:20;14762:1;14751:9;14747:17;14740:47;14804:131;14930:4;14804:131;:::i;:::-;14796:139;;14694:248;;;:::o;14948:419::-;;15152:2;15141:9;15137:18;15129:26;;15201:9;15195:4;15191:20;15187:1;15176:9;15172:17;15165:47;15229:131;15355:4;15229:131;:::i;:::-;15221:139;;15119:248;;;:::o;15373:419::-;;15577:2;15566:9;15562:18;15554:26;;15626:9;15620:4;15616:20;15612:1;15601:9;15597:17;15590:47;15654:131;15780:4;15654:131;:::i;:::-;15646:139;;15544:248;;;:::o;15798:419::-;;16002:2;15991:9;15987:18;15979:26;;16051:9;16045:4;16041:20;16037:1;16026:9;16022:17;16015:47;16079:131;16205:4;16079:131;:::i;:::-;16071:139;;15969:248;;;:::o;16223:419::-;;16427:2;16416:9;16412:18;16404:26;;16476:9;16470:4;16466:20;16462:1;16451:9;16447:17;16440:47;16504:131;16630:4;16504:131;:::i;:::-;16496:139;;16394:248;;;:::o;16648:419::-;;16852:2;16841:9;16837:18;16829:26;;16901:9;16895:4;16891:20;16887:1;16876:9;16872:17;16865:47;16929:131;17055:4;16929:131;:::i;:::-;16921:139;;16819:248;;;:::o;17073:419::-;;17277:2;17266:9;17262:18;17254:26;;17326:9;17320:4;17316:20;17312:1;17301:9;17297:17;17290:47;17354:131;17480:4;17354:131;:::i;:::-;17346:139;;17244:248;;;:::o;17498:419::-;;17702:2;17691:9;17687:18;17679:26;;17751:9;17745:4;17741:20;17737:1;17726:9;17722:17;17715:47;17779:131;17905:4;17779:131;:::i;:::-;17771:139;;17669:248;;;:::o;17923:419::-;;18127:2;18116:9;18112:18;18104:26;;18176:9;18170:4;18166:20;18162:1;18151:9;18147:17;18140:47;18204:131;18330:4;18204:131;:::i;:::-;18196:139;;18094:248;;;:::o;18348:419::-;;18552:2;18541:9;18537:18;18529:26;;18601:9;18595:4;18591:20;18587:1;18576:9;18572:17;18565:47;18629:131;18755:4;18629:131;:::i;:::-;18621:139;;18519:248;;;:::o;18773:419::-;;18977:2;18966:9;18962:18;18954:26;;19026:9;19020:4;19016:20;19012:1;19001:9;18997:17;18990:47;19054:131;19180:4;19054:131;:::i;:::-;19046:139;;18944:248;;;:::o;19198:419::-;;19402:2;19391:9;19387:18;19379:26;;19451:9;19445:4;19441:20;19437:1;19426:9;19422:17;19415:47;19479:131;19605:4;19479:131;:::i;:::-;19471:139;;19369:248;;;:::o;19623:222::-;;19754:2;19743:9;19739:18;19731:26;;19767:71;19835:1;19824:9;19820:17;19811:6;19767:71;:::i;:::-;19721:124;;;;:::o;19851:320::-;;20004:2;19993:9;19989:18;19981:26;;20017:71;20085:1;20074:9;20070:17;20061:6;20017:71;:::i;:::-;20098:66;20160:2;20149:9;20145:18;20136:6;20098:66;:::i;:::-;19971:200;;;;;:::o;20177:98::-;;20262:5;20256:12;20246:22;;20235:40;;;:::o;20281:99::-;;20367:5;20361:12;20351:22;;20340:40;;;:::o;20386:147::-;;20524:3;20509:18;;20499:34;;;;:::o;20539:169::-;;20657:6;20652:3;20645:19;20697:4;20692:3;20688:14;20673:29;;20635:73;;;;:::o;20714:305::-;;20773:20;20791:1;20773:20;:::i;:::-;20768:25;;20807:20;20825:1;20807:20;:::i;:::-;20802:25;;20961:1;20893:66;20889:74;20886:1;20883:81;20880:2;;;20967:18;;:::i;:::-;20880:2;21011:1;21008;21004:9;20997:16;;20758:261;;;;:::o;21025:185::-;;21082:20;21100:1;21082:20;:::i;:::-;21077:25;;21116:20;21134:1;21116:20;:::i;:::-;21111:25;;21155:1;21145:2;;21160:18;;:::i;:::-;21145:2;21202:1;21199;21195:9;21190:14;;21067:143;;;;:::o;21216:848::-;;;21308:6;21299:15;;21332:5;21323:14;;21346:712;21367:1;21357:8;21354:15;21346:712;;;21462:4;21457:3;21453:14;21447:4;21444:24;21441:2;;;21471:18;;:::i;:::-;21441:2;21521:1;21511:8;21507:16;21504:2;;;21936:4;21929:5;21925:16;21916:25;;21504:2;21986:4;21980;21976:15;21968:23;;22016:32;22039:8;22016:32;:::i;:::-;22004:44;;21346:712;;;21289:775;;;;;;;:::o;22070:285::-;;22154:23;22172:4;22154:23;:::i;:::-;22146:31;;22198:27;22216:8;22198:27;:::i;:::-;22186:39;;22244:104;22281:66;22271:8;22265:4;22244:104;:::i;:::-;22235:113;;22136:219;;;;:::o;22361:1073::-;;22606:8;22596:2;;22627:1;22618:10;;22629:5;;22596:2;22655:4;22645:2;;22672:1;22663:10;;22674:5;;22645:2;22741:4;22789:1;22784:27;;;;22825:1;22820:191;;;;22734:277;;22784:27;22802:1;22793:10;;22804:5;;;22820:191;22865:3;22855:8;22852:17;22849:2;;;22872:18;;:::i;:::-;22849:2;22921:8;22918:1;22914:16;22905:25;;22956:3;22949:5;22946:14;22943:2;;;22963:18;;:::i;:::-;22943:2;22996:5;;;22734:277;;23120:2;23110:8;23107:16;23101:3;23095:4;23092:13;23088:36;23070:2;23060:8;23057:16;23052:2;23046:4;23043:12;23039:35;23023:111;23020:2;;;23176:8;23170:4;23166:19;23157:28;;23211:3;23204:5;23201:14;23198:2;;;23218:18;;:::i;:::-;23198:2;23251:5;;23020:2;23291:42;23329:3;23319:8;23313:4;23310:1;23291:42;:::i;:::-;23276:57;;;;23365:4;23360:3;23356:14;23349:5;23346:25;23343:2;;;23374:18;;:::i;:::-;23343:2;23423:4;23416:5;23412:16;23403:25;;22421:1013;;;;;;:::o;23440:348::-;;23503:20;23521:1;23503:20;:::i;:::-;23498:25;;23537:20;23555:1;23537:20;:::i;:::-;23532:25;;23725:1;23657:66;23653:74;23650:1;23647:81;23642:1;23635:9;23628:17;23624:105;23621:2;;;23732:18;;:::i;:::-;23621:2;23780:1;23777;23773:9;23762:20;;23488:300;;;;:::o;23794:96::-;;23860:24;23878:5;23860:24;:::i;:::-;23849:35;;23839:51;;;:::o;23896:90::-;;23973:5;23966:13;23959:21;23948:32;;23938:48;;;:::o;23992:126::-;;24069:42;24062:5;24058:54;24047:65;;24037:81;;;:::o;24124:77::-;;24190:5;24179:16;;24169:32;;;:::o;24207:86::-;;24282:4;24275:5;24271:16;24260:27;;24250:43;;;:::o;24299:307::-;24367:1;24377:113;24391:6;24388:1;24385:13;24377:113;;;24476:1;24471:3;24467:11;24461:18;24457:1;24452:3;24448:11;24441:39;24413:2;24410:1;24406:10;24401:15;;24377:113;;;24508:6;24505:1;24502:13;24499:2;;;24588:1;24579:6;24574:3;24570:16;24563:27;24499:2;24348:258;;;;:::o;24612:180::-;24660:77;24657:1;24650:88;24757:4;24754:1;24747:15;24781:4;24778:1;24771:15;24798:180;24846:77;24843:1;24836:88;24943:4;24940:1;24933:15;24967:4;24964:1;24957:15;24984:102;;25076:2;25072:7;25067:2;25060:5;25056:14;25052:28;25042:38;;25032:54;;;:::o;25092:102::-;;25181:5;25178:1;25174:13;25153:34;;25143:51;;;:::o;25200:122::-;25273:24;25291:5;25273:24;:::i;:::-;25266:5;25263:35;25253:2;;25312:1;25309;25302:12;25253:2;25243:79;:::o;25328:116::-;25398:21;25413:5;25398:21;:::i;:::-;25391:5;25388:32;25378:2;;25434:1;25431;25424:12;25378:2;25368:76;:::o;25450:122::-;25523:24;25541:5;25523:24;:::i;:::-;25516:5;25513:35;25503:2;;25562:1;25559;25552:12;25503:2;25493:79;:::o;25578:118::-;25649:22;25665:5;25649:22;:::i;:::-;25642:5;25639:33;25629:2;;25686:1;25683;25676:12;25629:2;25619:77;:::o
Swarm Source
ipfs://e0b87a7cb22ab6b6a9a33da314012e9e7ff8f4c82248b7db87788ab5e1ddf082
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.