Source Code
Latest 12 from a total of 12 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Token | 21783889 | 410 days ago | IN | 0.031 ETH | 0.00018901 | ||||
| Buy Token | 20975586 | 522 days ago | IN | 0 ETH | 0.00074794 | ||||
| Buy Token | 20723779 | 558 days ago | IN | 0 ETH | 0.00019277 | ||||
| Buy Token | 20723774 | 558 days ago | IN | 0.0000087 ETH | 0.00061037 | ||||
| Buy Token | 20723689 | 558 days ago | IN | 0.0000087 ETH | 0.00028434 | ||||
| Buy Token | 20708914 | 560 days ago | IN | 0.0000087 ETH | 0.00079001 | ||||
| Buy Token | 20586136 | 577 days ago | IN | 0.0087 ETH | 0.00014994 | ||||
| Buy Token | 20585564 | 577 days ago | IN | 0.0261 ETH | 0.00021491 | ||||
| Transfer Ownersh... | 20575000 | 578 days ago | IN | 0 ETH | 0.00002464 | ||||
| Buy Token | 20573378 | 579 days ago | IN | 0.0087 ETH | 0.00020435 | ||||
| Start Presale | 20571603 | 579 days ago | IN | 0 ETH | 0.00007603 | ||||
| Set Sale Token P... | 20538381 | 583 days ago | IN | 0 ETH | 0.00007863 |
Latest 7 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 21783889 | 410 days ago | 0.031 ETH | ||||
| Transfer | 20723774 | 558 days ago | 0.0000087 ETH | ||||
| Transfer | 20723689 | 558 days ago | 0.0000087 ETH | ||||
| Transfer | 20708914 | 560 days ago | 0.0000087 ETH | ||||
| Transfer | 20586136 | 577 days ago | 0.0087 ETH | ||||
| Transfer | 20585564 | 577 days ago | 0.0261 ETH | ||||
| Transfer | 20573378 | 579 days ago | 0.0087 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StormePresale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-08-16
*/
/*
* Security Contact: support@storme.io
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.7;
// 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;
}
}
}
/**
* @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);
}
/**
* @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;
}
}
/**
* @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);
}
}
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);
// }
}
/**
* @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);
}
}
}
}
/**
* @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");
}
}
}
/**
* @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);
}
contract StormePresale 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 = 7_918_825_433 * 10**18; // 1%
uint256 public minBuyLimit = 0;
address public presaleWallet = 0x60004297d3128f07deb5E04f7e3434f49Ebc8A7e;
//address public DAI = 0x3Cf204795c4995cCf9C1a0B3191F00c01B03C56C; // testnet
address public DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // mainnet
// 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;
uint256 distribution1;
uint256 distribution2;
uint256 distribution3;
uint256 distribution4;
}
struct Stage {
uint256 endTime;
uint256 ethPrice; // price per token in wei
uint256 tokenPrice; // price per token in wei
uint256 tokensAvailable; // tokens available for sale in this stage
uint256 tokensSold;
}
Stage[45] public stages;
uint256 public currentStage;
uint256 public unlockTime;
constructor() {
// Initialize the stages - Total for presale 197,970,635,836 STORME at 1 ETH = $2550
stages[0] = Stage(1723326659, 0.0000000087 ether, 0.0000222 ether, 45_045_045_045 * 10**18, 0);
stages[1] = Stage(1723326779, 0.0000000174 ether, 0.0000444 ether, 22_522_522_523 * 10**18, 0);
stages[2] = Stage(1723326899, 0.0000000261 ether, 0.0000666 ether, 15_015_015_015 * 10**18, 0);
stages[3] = Stage(1723326899, 0.0000000348 ether, 0.0000888 ether, 11_261_261_261 * 10**18, 0);
stages[4] = Stage(1723326899, 0.0000000435 ether, 0.0001110 ether, 9_009_009_009 * 10**18, 0);
stages[5] = Stage(1723326899, 0.0000000522 ether, 0.0001332 ether, 7_507_507_508 * 10**18, 0);
stages[6] = Stage(1723326899, 0.0000000609 ether, 0.0001554 ether, 6_435_006_436 * 10**18, 0);
stages[7] = Stage(1723326899, 0.0000000696 ether, 0.0001776 ether, 5_630_630_631 * 10**18, 0);
stages[8] = Stage(1723326899, 0.0000000784 ether, 0.0001998 ether, 5_005_005_005 * 10**18, 0);
stages[9] = Stage(1723326899, 0.0000000871 ether, 0.0002220 ether, 4_504_504_505 * 10**18, 0);
stages[10] = Stage(1723326899, 0.0000000958 ether, 0.0002442 ether, 4_095_004_095 * 10**18, 0);
stages[11] = Stage(1723326899, 0.0000001045 ether, 0.0002664 ether, 3_753_753_754 * 10**18, 0);
stages[12] = Stage(1723326899, 0.0000001132 ether, 0.0002886 ether, 3_465_003_465 * 10**18, 0);
stages[13] = Stage(1723326899, 0.0000001219 ether, 0.0003108 ether, 3_217_503_218 * 10**18, 0);
stages[14] = Stage(1723326899, 0.0000001306 ether, 0.0003330 ether, 3_003_003_003 * 10**18, 0);
stages[15] = Stage(1723326899, 0.0000001393 ether, 0.0003552 ether, 2_815_315_315 * 10**18, 0);
stages[16] = Stage(1723326899, 0.0000001480 ether, 0.0003774 ether, 2_649_709_650 * 10**18, 0);
stages[17] = Stage(1723326899, 0.0000001567 ether, 0.0003996 ether, 2_502_502_503 * 10**18, 0);
stages[18] = Stage(1723326899, 0.0000001654 ether, 0.0004218 ether, 2_370_792_371 * 10**18, 0);
stages[19] = Stage(1723326899, 0.0000001741 ether, 0.0004440 ether, 2_252_252_252 * 10**18, 0);
stages[20] = Stage(1723326899, 0.0000001828 ether, 0.0004662 ether, 2_145_002_145 * 10**18, 0);
stages[21] = Stage(1723326899, 0.0000001915 ether, 0.0004884 ether, 2_047_502_048 * 10**18, 0);
stages[22] = Stage(1723326899, 0.0000002002 ether, 0.0005106 ether, 1_958_480_244 * 10**18, 0);
stages[23] = Stage(1723326899, 0.0000002089 ether, 0.0005328 ether, 1_876_876_877 * 10**18, 0);
stages[24] = Stage(1723326899, 0.0000002176 ether, 0.0005550 ether, 1_801_801_802 * 10**18, 0);
stages[25] = Stage(1723326899, 0.0000002264 ether, 0.0005772 ether, 1_732_502_174 * 10**18, 0);
stages[26] = Stage(1723326899, 0.0000002351 ether, 0.0005994 ether, 1_668_334_950 * 10**18, 0);
stages[27] = Stage(1723326899, 0.0000002438 ether, 0.0006216 ether, 1_608_751_876 * 10**18, 0);
stages[28] = Stage(1723326899, 0.0000002525 ether, 0.0006438 ether, 1_553_276_977 * 10**18, 0);
stages[29] = Stage(1723326899, 0.0000002612 ether, 0.0006660 ether, 1_501_501_502 * 10**18, 0);
stages[30] = Stage(1723326899, 0.0000002699 ether, 0.0006882 ether, 1_453_066_667 * 10**18, 0);
stages[31] = Stage(1723326899, 0.0000002786 ether, 0.0007104 ether, 1_407_657_658 * 10**18, 0);
stages[32] = Stage(1723326899, 0.0000002873 ether, 0.0007326 ether, 1_365_000_683 * 10**18, 0);
stages[33] = Stage(1723326899, 0.0000002960 ether, 0.0007548 ether, 1_324_853_522 * 10**18, 0);
stages[34] = Stage(1723326899, 0.0000003047 ether, 0.0007770 ether, 1_287_001_287 * 10**18, 0);
stages[35] = Stage(1723326899, 0.0000003134 ether, 0.0007992 ether, 1_251_251_251 * 10**18, 0);
stages[36] = Stage(1723326899, 0.0000003221 ether, 0.0008214 ether, 1_217_434_469 * 10**18, 0);
stages[37] = Stage(1723326899, 0.0000003308 ether, 0.0008436 ether, 1_185_396_040 * 10**18, 0);
stages[38] = Stage(1723326899, 0.0000003395 ether, 0.0008658 ether, 1_155_001_156 * 10**18, 0);
stages[39] = Stage(1723326899, 0.0000003482 ether, 0.0008880 ether, 1_126_126_126 * 10**18, 0);
stages[40] = Stage(1723326899, 0.0000003569 ether, 0.0009102 ether, 1_098_659_854 * 10**18, 0);
stages[41] = Stage(1723326899, 0.0000003656 ether, 0.0009324 ether, 1_072_501_073 * 10**18, 0);
stages[42] = Stage(1723326899, 0.0000003744 ether, 0.0009546 ether, 1_047_558_817 * 10**18, 0);
stages[43] = Stage(1723326899, 0.0000003831 ether, 0.0009768 ether, 1_023_751_024 * 10**18, 0);
stages[44] = Stage(1723326899, 0.0000003918 ether, 0.0009990 ether, 1_001_001_001 * 10**18, 0);
currentStage = 0;
totalTokensforSale = stages[currentStage].tokensAvailable;
tokenWL[DAI] = true;
rate = stages[currentStage].ethPrice;
tokenPrices[DAI] = stages[currentStage].tokenPrice;
}
modifier saleStarted(){
require (!isPresaleStarted, "PreSale: Sale has already started");
_;
}
function updateNextStage() public onlyOwner{
currentStage = currentStage.add(1);
tokenPrices[DAI] = stages[currentStage].tokenPrice;
rate = stages[currentStage].ethPrice;
totalTokensSold = 0;
totalTokensforSale = stages[currentStage].tokensAvailable;
}
function updateEthPrice(uint256 _phaseId, uint256 _pricePerToken)
public
onlyOwner
{
stages[_phaseId].tokenPrice = _pricePerToken;
}
function updatePrice(uint256 _phaseId, uint256 _pricePerToken)
public
onlyOwner
{
stages[_phaseId].tokenPrice = _pricePerToken;
}
//function to set information of Token sold in Pre-Sale and its rate in Native currency
function setSaleTokenParams(
address _saleToken
) external onlyOwner saleStarted{
saleToken = _saleToken;
saleTokenDec = IERC20Metadata(saleToken).decimals();
}
// Add a token to buy presale token from, with price
function addWhiteListedToken(
address _token
) external onlyOwner {
tokenWL[_token] = true;
tokenPrices[_token] = stages[currentStage].tokenPrice;
}
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;
unlockTime = block.timestamp;
}
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 = stages[currentStage].tokenPrice;
amtOut = amount.mul(10**saleTokenDec).div(price);
}
else{
uint256 priceEth = stages[currentStage].ethPrice;
amtOut = amount.mul(10**saleTokenDec).div(priceEth);
}
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!");
require((stages[currentStage].tokensSold + saleTokenAmt) <= stages[currentStage].tokensAvailable, "PreSale: Total Token Sale Reached!");
IERC20(_token).safeTransferFrom(msg.sender, presaleWallet, _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!");
require((stages[currentStage].tokensSold + saleTokenAmt) <= stages[currentStage].tokensAvailable, "PreSale: Total Token Sale Reached!");
payable(presaleWallet).transfer(_amount);
}
//IERC20(saleToken).safeTransfer(msg.sender, saleTokenAmt); // To allow investor to receive tokens on purchase
totalTokensSold += saleTokenAmt;
stages[currentStage].tokensSold += saleTokenAmt;
buyersAmount[msg.sender].amount += saleTokenAmt;
presaleData[msg.sender] += saleTokenAmt;
/*
if (stages[currentStage].tokensAvailable == 0 || block.timestamp > stages[currentStage].endTime) {
currentStage = currentStage.add(1);
stages[currentStage].tokensSold = 0;
if(_token != address(0)){
tokenPrices[DAI] = stages[currentStage].tokenPrice;
} else {
rate = stages[currentStage].ethPrice;
}
}
*/
buyersAmount[msg.sender].distribution1 += saleTokenAmt / 4;
buyersAmount[msg.sender].distribution2 += saleTokenAmt / 4;
buyersAmount[msg.sender].distribution3 += saleTokenAmt / 4;
buyersAmount[msg.sender].distribution4 += saleTokenAmt / 4;
}
function claimPurchasedTokens() 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;
if (unlockTime < block.timestamp + 7 days) {
require(isUnlockingStarted, "Presale: Locking period not over yet");
} else if (unlockTime >= block.timestamp + 7 days) {
tokensforWithdraw = buyersAmount[msg.sender].distribution1;
} else if (unlockTime >= block.timestamp + 30 days) {
tokensforWithdraw = buyersAmount[msg.sender].distribution2;
} else if (unlockTime >= block.timestamp + 60 days) {
tokensforWithdraw = buyersAmount[msg.sender].distribution3;
} else if (unlockTime >= block.timestamp + 90 days) {
tokensforWithdraw = buyersAmount[msg.sender].distribution4;
} else {
tokensforWithdraw = buyersAmount[msg.sender].distribution1 + buyersAmount[msg.sender].distribution2 + buyersAmount[msg.sender].distribution3 + buyersAmount[msg.sender].distribution4;
}
if (tokensforWithdraw == 0) {
buyersAmount[msg.sender].isClaimed = true;
}
//buyersAmount[msg.sender].isClaimed = true;
IERC20(saleToken).safeTransfer(msg.sender, tokensforWithdraw);
}
function changeClaim (address _investorsWallet, bool _value ) public onlyOwner {
buyersAmount[_investorsWallet].isClaimed = _value;
}
function setMinBuyLimit(uint _minBuyLimit) external onlyOwner {
minBuyLimit = _minBuyLimit;
}
function setMaxBuyLimit(uint _maxBuyLimit) external onlyOwner {
maxBuyLimit = _maxBuyLimit;
}
function updatePresaleWallet(address wallet) external onlyOwner {
require(wallet != presaleWallet, "Address is already presale wallet");
presaleWallet = wallet;
}
}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":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"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"},{"internalType":"uint256","name":"distribution1","type":"uint256"},{"internalType":"uint256","name":"distribution2","type":"uint256"},{"internalType":"uint256","name":"distribution3","type":"uint256"},{"internalType":"uint256","name":"distribution4","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_investorsWallet","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"changeClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimPurchasedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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"}],"name":"setSaleTokenParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stages","outputs":[{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"ethPrice","type":"uint256"},{"internalType":"uint256","name":"tokenPrice","type":"uint256"},{"internalType":"uint256","name":"tokensAvailable","type":"uint256"},{"internalType":"uint256","name":"tokensSold","type":"uint256"}],"stateMutability":"view","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":[],"name":"unlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phaseId","type":"uint256"},{"internalType":"uint256","name":"_pricePerToken","type":"uint256"}],"name":"updateEthPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateEthRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateNextStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"updatePresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phaseId","type":"uint256"},{"internalType":"uint256","name":"_pricePerToken","type":"uint256"}],"name":"updatePrice","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526b19964c82e64c66523fc400006005556000600655600780546001600160a01b03199081167360004297d3128f07deb5e04f7e3434f49ebc8a7e1790915560088054909116736b175474e89094c44da98b954eedeac495271d0f1790553480156200006e57600080fd5b506200007a3362001b0c565b6040518060a001604052806366b7e0c381526020016402068f77008152602001651430d71d300081526020016b918c6350dff439d6a3b400008152602001600081525060116000602d8110620000d457620000d462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e13b815260200164040d1eee008152602001652861ae3a600081526020016b48c631a876ea7845258c00008152602001600081525060116001602d811062000167576200016762001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001640613ae65008152602001653c928557900081526020016b3084211af551689ce13c00008152602001600081525060116002602d8110620001fa57620001fa62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164081a3ddc0081526020016550c35c74c00081526020016b246318d43484e0c8bf1400008152602001600081525060116003602d81106200028d576200028d62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001640a20cd530081526020016564f43391f00081526020016b1d1c13dcf9973ec4872400008152602001600081525060116004602d811062000320576200032062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001640c275cca0081526020016579250aaf200081526020016b1842108d81990fa8445000008152602001600081525060116005602d8110620003b357620003b362001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001640e2dec41008152602001658d55e1cc500081526020016b14cae99de4ba75d2511000008152602001600081525060116006602d811062000446576200044662001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016410347bb800815260200165a186b8e9800081526020016b12318c6a2132cbbe333c00008152602001600081525060116007602d8110620004d957620004d962001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641241011000815260200165b5b79006b00081526020016b102c0b08fc7078344b1400008152602001600081525060116008602d81106200056c576200056c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641447908700815260200165c9e86723e00081526020016b0e8e09ee83bbfabc174400008152602001600081525060116009602d8110620005ff57620005ff62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164164e1ffe00815260200165de193e41100081526020016b0d3b4ed8ce8a90e4f79c0000815260200160008152506011600a602d811062000692576200069262001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641854af7500815260200165f24a155e400081526020016b0c210846c0cc87d422280000815260200160008152506011600b602d811062000725576200072562001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641a5b3eec0081526020016601067aec7b700081526020016b0b322f06389ca1fcd1840000815260200160008152506011600c602d8110620007b957620007b962001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641c61ce6300815260200166011aabc398a00081526020016b0a6574cef25d3ae928880000815260200160008152506011600d602d81106200084d576200084d62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001641e685dda00815260200166012edc9ab5d00081526020016b09b4069efddd14ec2d0c0000815260200160008152506011600e602d8110620008e157620008e162001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164206eed510081526020016601430d71d3000081526020016b0918c63509a90a8545ec0000815260200160008152506011600f602d811062000975576200097562001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016422757cc80081526020016601573e48f0300081526020016b088fc9d7f304b00f8e0800008152602001600081525060116010602d811062000a095762000a0962001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164247c0c3f00815260200166016b6f200d600081526020016b0816058485289773f93c000081526020016000815250601180602d811062000a9c5762000a9c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016426829bb600815260200166017f9ff72a900081526020016b07a912cff51f9270d6ec00008152602001600081525060116012602d811062000b305762000b3062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016428892b2d008152602001660193d0ce47c00081526020016b074704f73aeda20437f000008152602001600081525060116013602d811062000bc45762000bc462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001642a8fbaa40081526020016601a801a564f00081526020016b06ee4ddf479dea5f8de400008152602001600081525060116014602d811062000c585762000c5862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001642c964a1b0081526020016601bc327c82200081526020016b069da76c6e35a3cc4f8000008152602001600081525060116015602d811062000cec5762000cec62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001642e9cd9920081526020016601d063539f500081526020016b06540452c40757ba5d5000008152602001600081525060116016602d811062000d805762000d8062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016430a369090081526020016601e4942abc800081526020016b06108423606643ea111400008152602001600081525060116017602d811062000e145762000e1462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016432a9f8800081526020016601f8c501d9b00081526020016b05d26a5f67e4cab1a2e800008152602001600081525060116018602d811062000ea85762000ea862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016434b67dd800815260200166020cf5d8f6e00081526020016b0599179b0b5967d397b800008152602001600081525060116019602d811062000f3c5762000f3c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016436bd0d4f00815260200166022126b014100081526020016b056403aadc75f324a5d80000815260200160008152506011601a602d811062000fd05762000fd062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016438c39cc6008152602001660235578731400081526020016b0532ba75f28d2ad429900000815260200160008152506011601b602d811062001064576200106462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001643aca2c3d008152602001660249885e4e700081526020016b0504d731a591ca838a240000815260200160008152506011601c602d8110620010f857620010f862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001643cd0bbb400815260200166025db9356ba00081526020016b04da034f85dee5cfea380000815260200160008152506011601d602d81106200118c576200118c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001643ed74b2b008152602001660271ea0c88d00081526020016b04b1f2d5db3bf3d353cc0000815260200160008152506011601e602d811062001220576200122062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016440dddaa20081526020016602861ae3a6000081526020016b048c631a8bc4e09c76a80000815260200160008152506011601f602d8110620012b457620012b462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016442e46a1900815260200166029a4bbac3300081526020016b04691a234c32205b0ccc00008152602001600081525060116020602d811062001348576200134862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016444eaf9900081526020016602ae7c91e0600081526020016b0447e4a556c06b9ec90800008152602001600081525060116021602d8110620013dc57620013dc62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016446f189070081526020016602c2ad68fd900081526020016b0428951f915ebfd2eebc00008152602001600081525060116022602d811062001470576200147062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016448f8187e0081526020016602d6de401ac00081526020016b040b02c23ba3f06028ec00008152602001600081525060116023602d811062001504576200150462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001644afea7f50081526020016602eb0f1737f00081526020016b03ef09c6ceb3863f767400008152602001600081525060116024602d811062001598576200159862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001644d05376c0081526020016602ff3fee55200081526020016b03d489601757f21cc82000008152602001600081525060116025602d81106200162c576200162c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001644f0bc6e300815260200166031370c572500081526020016b03bb650220bf975d429000008152602001600081525060116026602d8110620016c057620016c062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001645112565a008152602001660327a19c8f800081526020016b03a3827b9d76d1021bf800008152602001600081525060116027602d811062001754576200175462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001645318e5d100815260200166033bd273acb00081526020016b038cca4606c6c2e1077800008152602001600081525060116028602d8110620017e857620017e862001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164551f7548008152602001660350034ac9e00081526020016b037726efaabf50899aa400008152602001600081525060116029602d81106200187c576200187c62001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b3815260200164572bfaa00081526020016603643421e7100081526020016b036285354287f881ede40000815260200160008152506011602a602d811062001910576200191062001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b381526020016459328a1700815260200166037864f904400081526020016b034ed3b6371ad1e627c00000815260200160008152506011602b602d8110620019a457620019a462001b5c565b6005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506040518060a001604052806366b7e1b38152602001645b39198e00815260200166038c95d021700081526020016b033c0234ff49b1a40f040000815260200160008152506011602c602d811062001a385762001a3862001b5c565b825160059190910291909101908155602080830151600180840191909155604080850151600285015560608501516003850155608090940151600493840155600060f28181556014549094556008546001600160a01b031681526009909252929020805460ff191690921790915554601190602d811062001abd5762001abd62001b5c565b6005020160010154600181905550601160f254602d811062001ae35762001ae362001b5c565b60050201600201546008546001600160a01b03166000908152600a602052604090205562001b72565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052603260045260246000fd5b6121648062001b826000396000f3fe6080604052600436106102535760003560e01c8063845ddcb211610138578063d293187c116100b0578063f2aa821811610077578063f2aa821814610720578063f2c3f4f414610740578063f2fde38b14610760578063f3fef3a314610780578063f8951a00146107a0578063fa09e630146107cd57005b8063d293187c1461068a578063e0bab4c4146106a0578063e985e367146106c0578063ebbed167146106e0578063efd2c77b1461070057005b806399b77032116100ff57806399b77032146106145780639a72be8214610634578063ace1741c14610649578063b5b0763c1461065f578063b81df74214610674578063c740691e1461051f57005b8063845ddcb21461053f5780638ce0b9d2146105875780638da5cb5b146105b75780638e17c017146105d557806398d6d8ed146105f557005b80633f6f7ed6116101cb57806368f8fc101161019257806368f8fc10146104ab5780636aa5b37f146104be5780636bcedf9c146104d4578063715018a6146104ea578063757765f8146104ff57806382367b2d1461051f57005b80633f6f7ed6146103c957806354a9f102146103e95780635bf5d54c1461046a5780635c6161971461048057806363b201171461049557005b8063226ac3211161021a578063226ac3211461031e578063251c1aa31461033e5780632a95c24c146103545780632c4e722e146103695780633848a7711461037f5780633c00a36c146103a957005b806304c98b2b1461025c578063115ece4c146102715780631ad2ad1a146102a45780631ed77dc8146102b9578063204120bc146102f157005b3661025a57005b005b34801561026857600080fd5b5061025a6107ed565b34801561027d57600080fd5b5061029161028c366004611cb5565b610859565b6040519081526020015b60405180910390f35b3480156102b057600080fd5b5061025a610951565b3480156102c557600080fd5b506007546102d9906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156102fd57600080fd5b5061029161030c366004611c63565b600a6020526000908152604090205481565b34801561032a57600080fd5b5061025a610339366004611cb5565b6109e9565b34801561034a57600080fd5b5061029160f35481565b34801561036057600080fd5b5061025a610ab4565b34801561037557600080fd5b5061029160015481565b34801561038b57600080fd5b50600c546103999060ff1681565b604051901515815260200161029b565b3480156103b557600080fd5b5061025a6103c4366004611cfc565b610b53565b3480156103d557600080fd5b5061025a6103e4366004611cfc565b610bae565b3480156103f557600080fd5b5061043d610404366004611c63565b600e60205260009081526040902080546001820154600283015460038401546004850154600590950154939460ff909316939192909186565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161029b565b34801561047657600080fd5b5061029160f25481565b34801561048c57600080fd5b5061025a610bdd565b3480156104a157600080fd5b5061029160105481565b61025a6104b9366004611cb5565b610ca1565b3480156104ca57600080fd5b5061029160055481565b3480156104e057600080fd5b5061029160045481565b3480156104f657600080fd5b5061025a6110f6565b34801561050b57600080fd5b5061025a61051a366004611cfc565b61112c565b34801561052b57600080fd5b5061025a61053a366004611d2e565b61115b565b34801561054b57600080fd5b5061055f61055a366004611cfc565b6111a8565b604080519586526020860194909452928401919091526060830152608082015260a00161029b565b34801561059357600080fd5b506103996105a2366004611c63565b60096020526000908152604090205460ff1681565b3480156105c357600080fd5b506000546001600160a01b03166102d9565b3480156105e157600080fd5b5061025a6105f0366004611c63565b6111dd565b34801561060157600080fd5b50600c5461039990610100900460ff1681565b34801561062057600080fd5b5061025a61062f366004611cfc565b611291565b34801561064057600080fd5b5061025a6112c0565b34801561065557600080fd5b5061029160035481565b34801561066b57600080fd5b5061025a6114d3565b34801561068057600080fd5b5061029160065481565b34801561069657600080fd5b50610291600d5481565b3480156106ac57600080fd5b506008546102d9906001600160a01b031681565b3480156106cc57600080fd5b506002546102d9906001600160a01b031681565b3480156106ec57600080fd5b5061025a6106fb366004611c63565b61156a565b34801561070c57600080fd5b5061025a61071b366004611c7e565b611651565b34801561072c57600080fd5b506102d961073b366004611cfc565b6116a9565b34801561074c57600080fd5b5061025a61075b366004611c63565b6116d3565b34801561076c57600080fd5b5061025a61077b366004611c63565b61175b565b34801561078c57600080fd5b5061025a61079b366004611cb5565b6117f3565b3480156107ac57600080fd5b506102916107bb366004611c63565b600f6020526000908152604090205481565b3480156107d957600080fd5b5061025a6107e8366004611c63565b611831565b6000546001600160a01b031633146108205760405162461bcd60e51b815260040161081790611e95565b60405180910390fd5b600c54610100900460ff16156108485760405162461bcd60e51b815260040161081790611eca565b600c805461ff001916610100179055565b600c54600090610100900460ff166108735750600061094b565b60006001600160a01b0384161561090d576001600160a01b03841660009081526009602052604090205460ff1615156001146108c15760405162461bcd60e51b815260040161081790611f0b565b6000601160f254602d81106108d8576108d861210a565b60050201600201549050610905816108ff600354600a6108f89190612001565b87906118e1565b906118ed565b915050610948565b6000601160f254602d81106109245761092461210a565b60050201600101549050610944816108ff600354600a6108f89190612001565b9150505b90505b92915050565b6000546001600160a01b0316331461097b5760405162461bcd60e51b815260040161081790611e95565b600c54610100900460ff166109dc5760405162461bcd60e51b815260206004820152602160248201527f50726553616c653a2053616c65206861736e27742073746172746564207965746044820152602160f81b6064820152608401610817565b600c805461ff0019169055565b6000546001600160a01b03163314610a135760405162461bcd60e51b815260040161081790611e95565b6001600160a01b03821660009081526009602052604090205460ff16610a4b5760405162461bcd60e51b815260040161081790611f0b565b80610a985760405162461bcd60e51b815260206004820152601e60248201527f50726573616c653a2043616e6e6f742073657420707269636520746f203000006044820152606401610817565b6001600160a01b039091166000908152600a6020526040902055565b6000546001600160a01b03163314610ade5760405162461bcd60e51b815260040161081790611e95565b600c5460ff1615610b405760405162461bcd60e51b815260206004820152602660248201527f50726553616c653a20556e6c6f636b696e672068617320616c726561647920736044820152651d185c9d195960d21b6064820152608401610817565b600c805460ff191660011790554260f355565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b815260040161081790611e95565b604051339082156108fc029083906000818181858888f19350505050158015610baa573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610bd85760405162461bcd60e51b815260040161081790611e95565b600155565b6000546001600160a01b03163314610c075760405162461bcd60e51b815260040161081790611e95565b60f254610c159060016118f9565b60f2819055601190602d8110610c2d57610c2d61210a565b60050201600201546008546001600160a01b03166000908152600a602052604090205560f254601190602d8110610c6657610c6661210a565b60050201600101546001819055506000601081905550601160f254602d8110610c9157610c9161210a565b6005020160030154600481905550565b600c54610100900460ff16610cf15760405162461bcd60e51b815260206004820152601660248201527550726553616c653a2053616c652073746f707065642160501b6044820152606401610817565b60006001600160a01b03831615610e895760008211610d5e5760405162461bcd60e51b8152602060048201526024808201527f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d6044820152631bdd5b9d60e21b6064820152608401610817565b6001600160a01b03831660009081526009602052604090205460ff161515600114610d9b5760405162461bcd60e51b815260040161081790611f0b565b610da58383610859565b9050600654811015610dc95760405162461bcd60e51b815260040161081790611f42565b600554336000908152600f6020526040902054610de7908390611f84565b1115610e055760405162461bcd60e51b815260040161081790611e48565b601160f254602d8110610e1a57610e1a61210a565b600502016003015481601160f254602d8110610e3857610e3861210a565b6005020160040154610e4a9190611f84565b1115610e685760405162461bcd60e51b815260040161081790611e06565b600754610e84906001600160a01b038581169133911685611905565b610f93565b610e94600034610859565b9050600654811015610eb85760405162461bcd60e51b815260040161081790611f42565b600554336000908152600f6020526040902054610ed6908390611f84565b1115610ef45760405162461bcd60e51b815260040161081790611e48565b601160f254602d8110610f0957610f0961210a565b600502016003015481601160f254602d8110610f2757610f2761210a565b6005020160040154610f399190611f84565b1115610f575760405162461bcd60e51b815260040161081790611e06565b6007546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610f91573d6000803e3d6000fd5b505b8060106000828254610fa59190611f84565b9250508190555080601160f254602d8110610fc257610fc261210a565b600502016004016000828254610fd89190611f84565b9091555050336000908152600e602052604081208054839290610ffc908490611f84565b9091555050336000908152600f602052604081208054839290611020908490611f84565b909155506110319050600482611f9c565b336000908152600e602052604081206002018054909190611053908490611f84565b909155506110649050600482611f9c565b336000908152600e602052604081206003018054909190611086908490611f84565b909155506110979050600482611f9c565b336000908152600e6020526040812060040180549091906110b9908490611f84565b909155506110ca9050600482611f9c565b336000908152600e6020526040812060050180549091906110ec908490611f84565b9091555050505050565b6000546001600160a01b031633146111205760405162461bcd60e51b815260040161081790611e95565b61112a6000611976565b565b6000546001600160a01b031633146111565760405162461bcd60e51b815260040161081790611e95565b600555565b6000546001600160a01b031633146111855760405162461bcd60e51b815260040161081790611e95565b80601183602d81106111995761119961210a565b60050201600201819055505050565b601181602d81106111b857600080fd5b6005020180546001820154600283015460038401546004909401549294509092909185565b6000546001600160a01b031633146112075760405162461bcd60e51b815260040161081790611e95565b6007546001600160a01b038281169116141561126f5760405162461bcd60e51b815260206004820152602160248201527f4164647265737320697320616c72656164792070726573616c652077616c6c656044820152601d60fa1b6064820152608401610817565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112bb5760405162461bcd60e51b815260040161081790611e95565b600655565b336000908152600e602052604081206001015460ff16156113235760405162461bcd60e51b815260206004820152601860248201527f50726573616c653a20416c726561647920636c61696d656400000000000000006044820152606401610817565b600c5460ff166113455760405162461bcd60e51b815260040161081790611dc2565b50336000908152600e60205260409020546113634262093a80611f84565b60f354101561139357600c5460ff1661138e5760405162461bcd60e51b815260040161081790611dc2565b611494565b6113a04262093a80611f84565b60f354106113c15750336000908152600e6020526040902060020154611494565b6113ce4262278d00611f84565b60f354106113ef5750336000908152600e6020526040902060030154611494565b6113fc42624f1a00611f84565b60f3541061141d5750336000908152600e6020526040902060040154611494565b61142a426276a700611f84565b60f3541061144b5750336000908152600e6020526040902060050154611494565b336000908152600e602052604090206005810154600482015460038301546002909301549192909161147d9190611f84565b6114879190611f84565b6114919190611f84565b90505b806114b957336000908152600e602052604090206001908101805460ff191690911790555b6002546114d0906001600160a01b031633836119c6565b50565b6000546001600160a01b031633146114fd5760405162461bcd60e51b815260040161081790611e95565b600c5460ff1661155e5760405162461bcd60e51b815260206004820152602660248201527f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560448201526564207965742160d01b6064820152608401610817565b600c805460ff19169055565b6000546001600160a01b031633146115945760405162461bcd60e51b815260040161081790611e95565b600c54610100900460ff16156115bc5760405162461bcd60e51b815260040161081790611eca565b600280546001600160a01b0319166001600160a01b0383169081179091556040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b15801561161057600080fd5b505afa158015611624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116489190611d50565b60ff1660035550565b6000546001600160a01b0316331461167b5760405162461bcd60e51b815260040161081790611e95565b6001600160a01b03919091166000908152600e60205260409020600101805460ff1916911515919091179055565b600b81815481106116b957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146116fd5760405162461bcd60e51b815260040161081790611e95565b6001600160a01b0381166000908152600960205260409020805460ff1916600117905560f254601190602d81106117365761173661210a565b60050201600201546001600160a01b03919091166000908152600a6020526040902055565b6000546001600160a01b031633146117855760405162461bcd60e51b815260040161081790611e95565b6001600160a01b0381166117ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610817565b6114d081611976565b6000546001600160a01b0316331461181d5760405162461bcd60e51b815260040161081790611e95565b610baa6001600160a01b03831633836119c6565b6000546001600160a01b0316331461185b5760405162461bcd60e51b815260040161081790611e95565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561189d57600080fd5b505afa1580156118b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d59190611d15565b9050610baa82826117f3565b600061094882846120a9565b60006109488284611f9c565b60006109488284611f84565b6040516001600160a01b03808516602483015283166044820152606481018290526119709085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119fb565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0383166024820152604481018290526119f690849063a9059cbb60e01b90606401611939565b505050565b6000611a50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611acd9092919063ffffffff16565b8051909150156119f65780806020019051810190611a6e9190611cdf565b6119f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610817565b6060611adc8484600085611ae6565b90505b9392505050565b606082471015611b475760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610817565b843b611b955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610817565b600080866001600160a01b03168587604051611bb19190611d73565b60006040518083038185875af1925050503d8060008114611bee576040519150601f19603f3d011682016040523d82523d6000602084013e611bf3565b606091505b5091509150611c03828286611c0e565b979650505050505050565b60608315611c1d575081611adf565b825115611c2d5782518084602001fd5b8160405162461bcd60e51b81526004016108179190611d8f565b80356001600160a01b0381168114611c5e57600080fd5b919050565b600060208284031215611c7557600080fd5b61094882611c47565b60008060408385031215611c9157600080fd5b611c9a83611c47565b91506020830135611caa81612120565b809150509250929050565b60008060408385031215611cc857600080fd5b611cd183611c47565b946020939093013593505050565b600060208284031215611cf157600080fd5b815161094881612120565b600060208284031215611d0e57600080fd5b5035919050565b600060208284031215611d2757600080fd5b5051919050565b60008060408385031215611d4157600080fd5b50508035926020909101359150565b600060208284031215611d6257600080fd5b815160ff8116811461094857600080fd5b60008251611d858184602087016120c8565b9190910192915050565b6020815260008251806020840152611dae8160408501602087016120c8565b601f01601f19169190910160400192915050565b60208082526024908201527f50726573616c653a204c6f636b696e6720706572696f64206e6f74206f766572604082015263081e595d60e21b606082015260800190565b60208082526022908201527f50726553616c653a20546f74616c20546f6b656e2053616c6520526561636865604082015261642160f01b606082015260800190565b6020808252602d908201527f50726573616c653a204d617820627579206c696d69742072656163686564206660408201526c6f72207468697320706861736560981b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f50726553616c653a2053616c652068617320616c7265616479207374617274656040820152601960fa1b606082015260800190565b6020808252601e908201527f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000604082015260600190565b60208082526022908201527f50726573616c653a204d696e20627579206c696d6974206e6f74207265616368604082015261195960f21b606082015260800190565b60008219821115611f9757611f976120f4565b500190565b600082611fb957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611ff9578160001904821115611fdf57611fdf6120f4565b80851615611fec57918102915b93841c9390800290611fc3565b509250929050565b600061094883836000826120175750600161094b565b816120245750600061094b565b816001811461203a576002811461204457612060565b600191505061094b565b60ff841115612055576120556120f4565b50506001821b61094b565b5060208310610133831016604e8410600b8410161715612083575081810a61094b565b61208d8383611fbe565b80600019048211156120a1576120a16120f4565b029392505050565b60008160001904831182151516156120c3576120c36120f4565b500290565b60005b838110156120e35781810151838201526020016120cb565b838111156119705750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146114d057600080fdfea264697066735822122018a2b076b2308759dae244a978adc541f2e44d58bec3b99eab60adead8470f7064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102535760003560e01c8063845ddcb211610138578063d293187c116100b0578063f2aa821811610077578063f2aa821814610720578063f2c3f4f414610740578063f2fde38b14610760578063f3fef3a314610780578063f8951a00146107a0578063fa09e630146107cd57005b8063d293187c1461068a578063e0bab4c4146106a0578063e985e367146106c0578063ebbed167146106e0578063efd2c77b1461070057005b806399b77032116100ff57806399b77032146106145780639a72be8214610634578063ace1741c14610649578063b5b0763c1461065f578063b81df74214610674578063c740691e1461051f57005b8063845ddcb21461053f5780638ce0b9d2146105875780638da5cb5b146105b75780638e17c017146105d557806398d6d8ed146105f557005b80633f6f7ed6116101cb57806368f8fc101161019257806368f8fc10146104ab5780636aa5b37f146104be5780636bcedf9c146104d4578063715018a6146104ea578063757765f8146104ff57806382367b2d1461051f57005b80633f6f7ed6146103c957806354a9f102146103e95780635bf5d54c1461046a5780635c6161971461048057806363b201171461049557005b8063226ac3211161021a578063226ac3211461031e578063251c1aa31461033e5780632a95c24c146103545780632c4e722e146103695780633848a7711461037f5780633c00a36c146103a957005b806304c98b2b1461025c578063115ece4c146102715780631ad2ad1a146102a45780631ed77dc8146102b9578063204120bc146102f157005b3661025a57005b005b34801561026857600080fd5b5061025a6107ed565b34801561027d57600080fd5b5061029161028c366004611cb5565b610859565b6040519081526020015b60405180910390f35b3480156102b057600080fd5b5061025a610951565b3480156102c557600080fd5b506007546102d9906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156102fd57600080fd5b5061029161030c366004611c63565b600a6020526000908152604090205481565b34801561032a57600080fd5b5061025a610339366004611cb5565b6109e9565b34801561034a57600080fd5b5061029160f35481565b34801561036057600080fd5b5061025a610ab4565b34801561037557600080fd5b5061029160015481565b34801561038b57600080fd5b50600c546103999060ff1681565b604051901515815260200161029b565b3480156103b557600080fd5b5061025a6103c4366004611cfc565b610b53565b3480156103d557600080fd5b5061025a6103e4366004611cfc565b610bae565b3480156103f557600080fd5b5061043d610404366004611c63565b600e60205260009081526040902080546001820154600283015460038401546004850154600590950154939460ff909316939192909186565b604080519687529415156020870152938501929092526060840152608083015260a082015260c00161029b565b34801561047657600080fd5b5061029160f25481565b34801561048c57600080fd5b5061025a610bdd565b3480156104a157600080fd5b5061029160105481565b61025a6104b9366004611cb5565b610ca1565b3480156104ca57600080fd5b5061029160055481565b3480156104e057600080fd5b5061029160045481565b3480156104f657600080fd5b5061025a6110f6565b34801561050b57600080fd5b5061025a61051a366004611cfc565b61112c565b34801561052b57600080fd5b5061025a61053a366004611d2e565b61115b565b34801561054b57600080fd5b5061055f61055a366004611cfc565b6111a8565b604080519586526020860194909452928401919091526060830152608082015260a00161029b565b34801561059357600080fd5b506103996105a2366004611c63565b60096020526000908152604090205460ff1681565b3480156105c357600080fd5b506000546001600160a01b03166102d9565b3480156105e157600080fd5b5061025a6105f0366004611c63565b6111dd565b34801561060157600080fd5b50600c5461039990610100900460ff1681565b34801561062057600080fd5b5061025a61062f366004611cfc565b611291565b34801561064057600080fd5b5061025a6112c0565b34801561065557600080fd5b5061029160035481565b34801561066b57600080fd5b5061025a6114d3565b34801561068057600080fd5b5061029160065481565b34801561069657600080fd5b50610291600d5481565b3480156106ac57600080fd5b506008546102d9906001600160a01b031681565b3480156106cc57600080fd5b506002546102d9906001600160a01b031681565b3480156106ec57600080fd5b5061025a6106fb366004611c63565b61156a565b34801561070c57600080fd5b5061025a61071b366004611c7e565b611651565b34801561072c57600080fd5b506102d961073b366004611cfc565b6116a9565b34801561074c57600080fd5b5061025a61075b366004611c63565b6116d3565b34801561076c57600080fd5b5061025a61077b366004611c63565b61175b565b34801561078c57600080fd5b5061025a61079b366004611cb5565b6117f3565b3480156107ac57600080fd5b506102916107bb366004611c63565b600f6020526000908152604090205481565b3480156107d957600080fd5b5061025a6107e8366004611c63565b611831565b6000546001600160a01b031633146108205760405162461bcd60e51b815260040161081790611e95565b60405180910390fd5b600c54610100900460ff16156108485760405162461bcd60e51b815260040161081790611eca565b600c805461ff001916610100179055565b600c54600090610100900460ff166108735750600061094b565b60006001600160a01b0384161561090d576001600160a01b03841660009081526009602052604090205460ff1615156001146108c15760405162461bcd60e51b815260040161081790611f0b565b6000601160f254602d81106108d8576108d861210a565b60050201600201549050610905816108ff600354600a6108f89190612001565b87906118e1565b906118ed565b915050610948565b6000601160f254602d81106109245761092461210a565b60050201600101549050610944816108ff600354600a6108f89190612001565b9150505b90505b92915050565b6000546001600160a01b0316331461097b5760405162461bcd60e51b815260040161081790611e95565b600c54610100900460ff166109dc5760405162461bcd60e51b815260206004820152602160248201527f50726553616c653a2053616c65206861736e27742073746172746564207965746044820152602160f81b6064820152608401610817565b600c805461ff0019169055565b6000546001600160a01b03163314610a135760405162461bcd60e51b815260040161081790611e95565b6001600160a01b03821660009081526009602052604090205460ff16610a4b5760405162461bcd60e51b815260040161081790611f0b565b80610a985760405162461bcd60e51b815260206004820152601e60248201527f50726573616c653a2043616e6e6f742073657420707269636520746f203000006044820152606401610817565b6001600160a01b039091166000908152600a6020526040902055565b6000546001600160a01b03163314610ade5760405162461bcd60e51b815260040161081790611e95565b600c5460ff1615610b405760405162461bcd60e51b815260206004820152602660248201527f50726553616c653a20556e6c6f636b696e672068617320616c726561647920736044820152651d185c9d195960d21b6064820152608401610817565b600c805460ff191660011790554260f355565b6000546001600160a01b03163314610b7d5760405162461bcd60e51b815260040161081790611e95565b604051339082156108fc029083906000818181858888f19350505050158015610baa573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610bd85760405162461bcd60e51b815260040161081790611e95565b600155565b6000546001600160a01b03163314610c075760405162461bcd60e51b815260040161081790611e95565b60f254610c159060016118f9565b60f2819055601190602d8110610c2d57610c2d61210a565b60050201600201546008546001600160a01b03166000908152600a602052604090205560f254601190602d8110610c6657610c6661210a565b60050201600101546001819055506000601081905550601160f254602d8110610c9157610c9161210a565b6005020160030154600481905550565b600c54610100900460ff16610cf15760405162461bcd60e51b815260206004820152601660248201527550726553616c653a2053616c652073746f707065642160501b6044820152606401610817565b60006001600160a01b03831615610e895760008211610d5e5760405162461bcd60e51b8152602060048201526024808201527f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d6044820152631bdd5b9d60e21b6064820152608401610817565b6001600160a01b03831660009081526009602052604090205460ff161515600114610d9b5760405162461bcd60e51b815260040161081790611f0b565b610da58383610859565b9050600654811015610dc95760405162461bcd60e51b815260040161081790611f42565b600554336000908152600f6020526040902054610de7908390611f84565b1115610e055760405162461bcd60e51b815260040161081790611e48565b601160f254602d8110610e1a57610e1a61210a565b600502016003015481601160f254602d8110610e3857610e3861210a565b6005020160040154610e4a9190611f84565b1115610e685760405162461bcd60e51b815260040161081790611e06565b600754610e84906001600160a01b038581169133911685611905565b610f93565b610e94600034610859565b9050600654811015610eb85760405162461bcd60e51b815260040161081790611f42565b600554336000908152600f6020526040902054610ed6908390611f84565b1115610ef45760405162461bcd60e51b815260040161081790611e48565b601160f254602d8110610f0957610f0961210a565b600502016003015481601160f254602d8110610f2757610f2761210a565b6005020160040154610f399190611f84565b1115610f575760405162461bcd60e51b815260040161081790611e06565b6007546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610f91573d6000803e3d6000fd5b505b8060106000828254610fa59190611f84565b9250508190555080601160f254602d8110610fc257610fc261210a565b600502016004016000828254610fd89190611f84565b9091555050336000908152600e602052604081208054839290610ffc908490611f84565b9091555050336000908152600f602052604081208054839290611020908490611f84565b909155506110319050600482611f9c565b336000908152600e602052604081206002018054909190611053908490611f84565b909155506110649050600482611f9c565b336000908152600e602052604081206003018054909190611086908490611f84565b909155506110979050600482611f9c565b336000908152600e6020526040812060040180549091906110b9908490611f84565b909155506110ca9050600482611f9c565b336000908152600e6020526040812060050180549091906110ec908490611f84565b9091555050505050565b6000546001600160a01b031633146111205760405162461bcd60e51b815260040161081790611e95565b61112a6000611976565b565b6000546001600160a01b031633146111565760405162461bcd60e51b815260040161081790611e95565b600555565b6000546001600160a01b031633146111855760405162461bcd60e51b815260040161081790611e95565b80601183602d81106111995761119961210a565b60050201600201819055505050565b601181602d81106111b857600080fd5b6005020180546001820154600283015460038401546004909401549294509092909185565b6000546001600160a01b031633146112075760405162461bcd60e51b815260040161081790611e95565b6007546001600160a01b038281169116141561126f5760405162461bcd60e51b815260206004820152602160248201527f4164647265737320697320616c72656164792070726573616c652077616c6c656044820152601d60fa1b6064820152608401610817565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112bb5760405162461bcd60e51b815260040161081790611e95565b600655565b336000908152600e602052604081206001015460ff16156113235760405162461bcd60e51b815260206004820152601860248201527f50726573616c653a20416c726561647920636c61696d656400000000000000006044820152606401610817565b600c5460ff166113455760405162461bcd60e51b815260040161081790611dc2565b50336000908152600e60205260409020546113634262093a80611f84565b60f354101561139357600c5460ff1661138e5760405162461bcd60e51b815260040161081790611dc2565b611494565b6113a04262093a80611f84565b60f354106113c15750336000908152600e6020526040902060020154611494565b6113ce4262278d00611f84565b60f354106113ef5750336000908152600e6020526040902060030154611494565b6113fc42624f1a00611f84565b60f3541061141d5750336000908152600e6020526040902060040154611494565b61142a426276a700611f84565b60f3541061144b5750336000908152600e6020526040902060050154611494565b336000908152600e602052604090206005810154600482015460038301546002909301549192909161147d9190611f84565b6114879190611f84565b6114919190611f84565b90505b806114b957336000908152600e602052604090206001908101805460ff191690911790555b6002546114d0906001600160a01b031633836119c6565b50565b6000546001600160a01b031633146114fd5760405162461bcd60e51b815260040161081790611e95565b600c5460ff1661155e5760405162461bcd60e51b815260206004820152602660248201527f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560448201526564207965742160d01b6064820152608401610817565b600c805460ff19169055565b6000546001600160a01b031633146115945760405162461bcd60e51b815260040161081790611e95565b600c54610100900460ff16156115bc5760405162461bcd60e51b815260040161081790611eca565b600280546001600160a01b0319166001600160a01b0383169081179091556040805163313ce56760e01b8152905163313ce56791600480820192602092909190829003018186803b15801561161057600080fd5b505afa158015611624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116489190611d50565b60ff1660035550565b6000546001600160a01b0316331461167b5760405162461bcd60e51b815260040161081790611e95565b6001600160a01b03919091166000908152600e60205260409020600101805460ff1916911515919091179055565b600b81815481106116b957600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146116fd5760405162461bcd60e51b815260040161081790611e95565b6001600160a01b0381166000908152600960205260409020805460ff1916600117905560f254601190602d81106117365761173661210a565b60050201600201546001600160a01b03919091166000908152600a6020526040902055565b6000546001600160a01b031633146117855760405162461bcd60e51b815260040161081790611e95565b6001600160a01b0381166117ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610817565b6114d081611976565b6000546001600160a01b0316331461181d5760405162461bcd60e51b815260040161081790611e95565b610baa6001600160a01b03831633836119c6565b6000546001600160a01b0316331461185b5760405162461bcd60e51b815260040161081790611e95565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561189d57600080fd5b505afa1580156118b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d59190611d15565b9050610baa82826117f3565b600061094882846120a9565b60006109488284611f9c565b60006109488284611f84565b6040516001600160a01b03808516602483015283166044820152606481018290526119709085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119fb565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b0383166024820152604481018290526119f690849063a9059cbb60e01b90606401611939565b505050565b6000611a50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611acd9092919063ffffffff16565b8051909150156119f65780806020019051810190611a6e9190611cdf565b6119f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610817565b6060611adc8484600085611ae6565b90505b9392505050565b606082471015611b475760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610817565b843b611b955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610817565b600080866001600160a01b03168587604051611bb19190611d73565b60006040518083038185875af1925050503d8060008114611bee576040519150601f19603f3d011682016040523d82523d6000602084013e611bf3565b606091505b5091509150611c03828286611c0e565b979650505050505050565b60608315611c1d575081611adf565b825115611c2d5782518084602001fd5b8160405162461bcd60e51b81526004016108179190611d8f565b80356001600160a01b0381168114611c5e57600080fd5b919050565b600060208284031215611c7557600080fd5b61094882611c47565b60008060408385031215611c9157600080fd5b611c9a83611c47565b91506020830135611caa81612120565b809150509250929050565b60008060408385031215611cc857600080fd5b611cd183611c47565b946020939093013593505050565b600060208284031215611cf157600080fd5b815161094881612120565b600060208284031215611d0e57600080fd5b5035919050565b600060208284031215611d2757600080fd5b5051919050565b60008060408385031215611d4157600080fd5b50508035926020909101359150565b600060208284031215611d6257600080fd5b815160ff8116811461094857600080fd5b60008251611d858184602087016120c8565b9190910192915050565b6020815260008251806020840152611dae8160408501602087016120c8565b601f01601f19169190910160400192915050565b60208082526024908201527f50726573616c653a204c6f636b696e6720706572696f64206e6f74206f766572604082015263081e595d60e21b606082015260800190565b60208082526022908201527f50726553616c653a20546f74616c20546f6b656e2053616c6520526561636865604082015261642160f01b606082015260800190565b6020808252602d908201527f50726573616c653a204d617820627579206c696d69742072656163686564206660408201526c6f72207468697320706861736560981b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f50726553616c653a2053616c652068617320616c7265616479207374617274656040820152601960fa1b606082015260800190565b6020808252601e908201527f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000604082015260600190565b60208082526022908201527f50726573616c653a204d696e20627579206c696d6974206e6f74207265616368604082015261195960f21b606082015260800190565b60008219821115611f9757611f976120f4565b500190565b600082611fb957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611ff9578160001904821115611fdf57611fdf6120f4565b80851615611fec57918102915b93841c9390800290611fc3565b509250929050565b600061094883836000826120175750600161094b565b816120245750600061094b565b816001811461203a576002811461204457612060565b600191505061094b565b60ff841115612055576120556120f4565b50506001821b61094b565b5060208310610133831016604e8410600b8410161715612083575081810a61094b565b61208d8383611fbe565b80600019048211156120a1576120a16120f4565b029392505050565b60008160001904831182151516156120c3576120c36120f4565b500290565b60005b838110156120e35781810151838201526020016120cb565b838111156119705750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146114d057600080fdfea264697066735822122018a2b076b2308759dae244a978adc541f2e44d58bec3b99eab60adead8470f7064736f6c63430008070033
Deployed Bytecode Sourcemap
26159:14946:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34668:159;;;;;;;;;;;;;:::i;35505:646::-;;;;;;;;;;-1:-1:-1;35505:646:0;;;;;:::i;:::-;;:::i;:::-;;;11405:25:1;;;11393:2;11378:18;35505:646:0;;;;;;;;34835:158;;;;;;;;;;;;;:::i;26549:73::-;;;;;;;;;;-1:-1:-1;26549:73:0;;;;-1:-1:-1;;;;;26549:73:0;;;;;;-1:-1:-1;;;;;2560:32:1;;;2542:51;;2530:2;2515:18;26549:73:0;2396:203:1;26927:46:0;;;;;;;;;;-1:-1:-1;26927:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;34380:280;;;;;;;;;;-1:-1:-1;34380:280:0;;;;;:::i;:::-;;:::i;27833:25::-;;;;;;;;;;;;;;;;35001:209;;;;;;;;;;;;;:::i;26319:19::-;;;;;;;;;;;;;;;;27014:30;;;;;;;;;;-1:-1:-1;27014:30:0;;;;;;;;;;;3428:14:1;;3421:22;3403:41;;3391:2;3376:18;27014:30:0;3263:187:1;13359:108:0;;;;;;;;;;-1:-1:-1;13359:108:0;;;;;:::i;:::-;;:::i;34283:89::-;;;;;;;;;;-1:-1:-1;34283:89:0;;;;;:::i;:::-;;:::i;27123:57::-;;;;;;;;;;-1:-1:-1;27123:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11722:25:1;;;11790:14;;11783:22;11778:2;11763:18;;11756:50;11822:18;;;11815:34;;;;11880:2;11865:18;;11858:34;11923:3;11908:19;;11901:35;11967:3;11952:19;;11945:35;11709:3;11694:19;27123:57:0;11441:545:1;27797:27:0;;;;;;;;;;;;;;;;33073:302;;;;;;;;;;;;;:::i;27242:30::-;;;;;;;;;;;;;;;;36230:2827;;;;;;:::i;:::-;;:::i;26447:51::-;;;;;;;;;;;;;;;;26407:33;;;;;;;;;;;;;;;;12058:103;;;;;;;;;;;;;:::i;40801:107::-;;;;;;;;;;-1:-1:-1;40801:107:0;;;;;:::i;:::-;;:::i;33560:166::-;;;;;;;;;;-1:-1:-1;33560:166:0;;;;;:::i;:::-;;:::i;27767:23::-;;;;;;;;;;-1:-1:-1;27767:23:0;;;;;:::i;:::-;;:::i;:::-;;;;12250:25:1;;;12306:2;12291:18;;12284:34;;;;12334:18;;;12327:34;;;;12392:2;12377:18;;12370:34;12435:3;12420:19;;12413:35;12237:3;12222:19;27767:23:0;11991:463:1;26835:39:0;;;;;;;;;;-1:-1:-1;26835:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11407:87;;;;;;;;;;-1:-1:-1;11453:7:0;11480:6;-1:-1:-1;;;;;11480:6:0;11407:87;;40916:186;;;;;;;;;;-1:-1:-1;40916:186:0;;;;;:::i;:::-;;:::i;27051:28::-;;;;;;;;;;-1:-1:-1;27051:28:0;;;;;;;;;;;40686:107;;;;;;;;;;-1:-1:-1;40686:107:0;;;;;:::i;:::-;;:::i;39065:1458::-;;;;;;;;;;;;;:::i;26376:24::-;;;;;;;;;;;;;;;;35218:169;;;;;;;;;;;;;:::i;26512:30::-;;;;;;;;;;;;;;;;27086:24;;;;;;;;;;;;;;;;26712:63;;;;;;;;;;-1:-1:-1;26712:63:0;;;;-1:-1:-1;;;;;26712:63:0;;;26345:24;;;;;;;;;;-1:-1:-1;26345:24:0;;;;-1:-1:-1;;;;;26345:24:0;;;33827:197;;;;;;;;;;-1:-1:-1;33827:197:0;;;;;:::i;:::-;;:::i;40531:147::-;;;;;;;;;;-1:-1:-1;40531:147:0;;;;;:::i;:::-;;:::i;26982:23::-;;;;;;;;;;-1:-1:-1;26982:23:0;;;;;:::i;:::-;;:::i;34090:185::-;;;;;;;;;;-1:-1:-1;34090:185:0;;;;;:::i;:::-;;:::i;12316:201::-;;;;;;;;;;-1:-1:-1;12316:201:0;;;;;:::i;:::-;;:::i;13063:125::-;;;;;;;;;;-1:-1:-1;13063:125:0;;;;;:::i;:::-;;:::i;27187:46::-;;;;;;;;;;-1:-1:-1;27187:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;13196:155;;;;;;;;;;-1:-1:-1;13196:155:0;;;;;:::i;:::-;;:::i;34668:159::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;;;;;;;;;34731:16:::1;::::0;::::1;::::0;::::1;;;34730:17;34722:63;;;;-1:-1:-1::0;;;34722:63:0::1;;;;;;;:::i;:::-;34796:16;:23:::0;;-1:-1:-1;;34796:23:0::1;;;::::0;;34668:159::o;35505:646::-;35637:16;;35608:7;;35637:16;;;;;35633:57;;-1:-1:-1;35677:1:0;35670:8;;35633:57;35700:14;-1:-1:-1;;;;;35728:19:0;;;35725:395;;-1:-1:-1;;;;;35771:14:0;;;;;;:7;:14;;;;;;;;:22;;:14;:22;35763:65;;;;-1:-1:-1;;;35763:65:0;;;;;;;:::i;:::-;35843:13;35859:6;35866:12;;35859:20;;;;;;;:::i;:::-;;;;:31;;;35843:47;;35914:39;35947:5;35914:28;35929:12;;35925:2;:16;;;;:::i;:::-;35914:6;;:10;:28::i;:::-;:32;;:39::i;:::-;35905:48;;35748:217;35725:395;;;35994:16;36013:6;36020:12;;36013:20;;;;;;;:::i;:::-;;;;:29;;;35994:48;;36066:42;36099:8;36066:28;36081:12;;36077:2;:16;;;;:::i;36066:42::-;36057:51;;35979:141;35725:395;36137:6;-1:-1:-1;35505:646:0;;;;;:::o;34835:158::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;34896:16:::1;::::0;::::1;::::0;::::1;;;34888:62;;;::::0;-1:-1:-1;;;34888:62:0;;5260:2:1;34888:62:0::1;::::0;::::1;5242:21:1::0;5299:2;5279:18;;;5272:30;5338:34;5318:18;;;5311:62;-1:-1:-1;;;5389:18:1;;;5382:31;5430:19;;34888:62:0::1;5058:397:1::0;34888:62:0::1;34961:16;:24:::0;;-1:-1:-1;;34961:24:0::1;::::0;;34835:158::o;34380:280::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34498:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;34490:58;;;;-1:-1:-1::0;;;34490:58:0::1;;;;;;;:::i;:::-;34567:11:::0;34559:54:::1;;;::::0;-1:-1:-1;;;34559:54:0;;6420:2:1;34559:54:0::1;::::0;::::1;6402:21:1::0;6459:2;6439:18;;;6432:30;6498:32;6478:18;;;6471:60;6548:18;;34559:54:0::1;6218:354:1::0;34559:54:0::1;-1:-1:-1::0;;;;;34624:19:0;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;34380:280::o;35001:209::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;35066:18:::1;::::0;::::1;;35065:19;35057:70;;;::::0;-1:-1:-1;;;35057:70:0;;9124:2:1;35057:70:0::1;::::0;::::1;9106:21:1::0;9163:2;9143:18;;;9136:30;9202:34;9182:18;;;9175:62;-1:-1:-1;;;9253:18:1;;;9246:36;9299:19;;35057:70:0::1;8922:402:1::0;35057:70:0::1;35138:18;:25:::0;;-1:-1:-1;;35138:25:0::1;35159:4;35138:25;::::0;;35187:15:::1;35174:10;:28:::0;35001:209::o;13359:108::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;13426:33:::1;::::0;13434:10:::1;::::0;13426:33;::::1;;;::::0;13455:3;;13426:33:::1;::::0;;;13455:3;13434:10;13426:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13359:108:::0;:::o;34283:89::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;34352:4:::1;:12:::0;34283:89::o;33073:302::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;33142:12:::1;::::0;:19:::1;::::0;33159:1:::1;33142:16;:19::i;:::-;33127:12;:34:::0;;;33191:6:::1;::::0;:20:::1;::::0;::::1;;;;;:::i;:::-;;;;:31;;::::0;33184:3:::1;::::0;-1:-1:-1;;;;;33184:3:0::1;33172:16;::::0;;;:11:::1;:16;::::0;;;;:50;33247:12:::1;::::0;33240:6:::1;::::0;:20:::1;::::0;::::1;;;;;:::i;:::-;;;;:29;;;33233:4;:36;;;;33298:1;33280:15;:19;;;;33331:6;33338:12;;33331:20;;;;;;;:::i;:::-;;;;:36;;;33310:18;:57;;;;33073:302::o:0;36230:2827::-;36316:16;;;;;;;36308:51;;;;-1:-1:-1;;;36308:51:0;;5662:2:1;36308:51:0;;;5644:21:1;5701:2;5681:18;;;5674:30;-1:-1:-1;;;5720:18:1;;;5713:52;5782:18;;36308:51:0;5460:346:1;36308:51:0;36376:20;-1:-1:-1;;;;;36410:20:0;;;36407:1591;;36464:1;36454:7;:11;36446:60;;;;-1:-1:-1;;;36446:60:0;;9531:2:1;36446:60:0;;;9513:21:1;9570:2;9550:18;;;9543:30;9609:34;9589:18;;;9582:62;-1:-1:-1;;;9660:18:1;;;9653:34;9704:19;;36446:60:0;9329:400:1;36446:60:0;-1:-1:-1;;;;;36529:15:0;;;;;;:7;:15;;;;;;;;:23;;:15;:23;36521:66;;;;-1:-1:-1;;;36521:66:0;;;;;;;:::i;:::-;36619:31;36634:6;36642:7;36619:14;:31::i;:::-;36604:46;;36757:11;;36741:12;:27;;36733:74;;;;-1:-1:-1;;;36733:74:0;;;;;;;:::i;:::-;36872:11;;36842:10;36830:23;;;;:11;:23;;;;;;:38;;36856:12;;36830:38;:::i;:::-;:53;;36822:111;;;;-1:-1:-1;;;36822:111:0;;;;;;;:::i;:::-;37126:6;37133:12;;37126:20;;;;;;;:::i;:::-;;;;:36;;;37109:12;37075:6;37082:12;;37075:20;;;;;;;:::i;:::-;;;;:31;;;:46;;;;:::i;:::-;37074:88;;37066:135;;;;-1:-1:-1;;;37066:135:0;;;;;;;:::i;:::-;37262:13;;37218:67;;-1:-1:-1;;;;;37218:31:0;;;;37250:10;;37262:13;37277:7;37218:31;:67::i;:::-;36407:1591;;;37341:37;37364:1;37368:9;37341:14;:37::i;:::-;37326:52;;37485:11;;37469:12;:27;;37461:74;;;;-1:-1:-1;;;37461:74:0;;;;;;;:::i;:::-;37600:11;;37570:10;37558:23;;;;:11;:23;;;;;;:38;;37584:12;;37558:38;:::i;:::-;:53;;37550:111;;;;-1:-1:-1;;;37550:111:0;;;;;;;:::i;:::-;37854:6;37861:12;;37854:20;;;;;;;:::i;:::-;;;;:36;;;37837:12;37803:6;37810:12;;37803:20;;;;;;;:::i;:::-;;;;:31;;;:46;;;;:::i;:::-;37802:88;;37794:135;;;;-1:-1:-1;;;37794:135:0;;;;;;;:::i;:::-;37954:13;;37946:40;;-1:-1:-1;;;;;37954:13:0;;;;37946:40;;;;;37978:7;;37954:13;37946:40;37954:13;37946:40;37978:7;37954:13;37946:40;;;;;;;;;;;;;;;;;;;;;36407:1591;38152:12;38133:15;;:31;;;;;;;:::i;:::-;;;;;;;;38210:12;38175:6;38182:12;;38175:20;;;;;;;:::i;:::-;;;;:31;;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;38246:10:0;38233:24;;;;:12;:24;;;;;:47;;38268:12;;38233:24;:47;;38268:12;;38233:47;:::i;:::-;;;;-1:-1:-1;;38303:10:0;38291:23;;;;:11;:23;;;;;:39;;38318:12;;38291:23;:39;;38318:12;;38291:39;:::i;:::-;;;;-1:-1:-1;38826:16:0;;-1:-1:-1;38841:1:0;38826:12;:16;:::i;:::-;38797:10;38784:24;;;;:12;:24;;;;;:38;;:58;;:38;;:24;:58;;;;;:::i;:::-;;;;-1:-1:-1;38895:16:0;;-1:-1:-1;38910:1:0;38895:12;:16;:::i;:::-;38866:10;38853:24;;;;:12;:24;;;;;:38;;:58;;:38;;:24;:58;;;;;:::i;:::-;;;;-1:-1:-1;38964:16:0;;-1:-1:-1;38979:1:0;38964:12;:16;:::i;:::-;38935:10;38922:24;;;;:12;:24;;;;;:38;;:58;;:38;;:24;:58;;;;;:::i;:::-;;;;-1:-1:-1;39033:16:0;;-1:-1:-1;39048:1:0;39033:12;:16;:::i;:::-;39004:10;38991:24;;;;:12;:24;;;;;:38;;:58;;:38;;:24;:58;;;;;:::i;:::-;;;;-1:-1:-1;;;;;36230:2827:0:o;12058:103::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;12123:30:::1;12150:1;12123:18;:30::i;:::-;12058:103::o:0;40801:107::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;40874:11:::1;:26:::0;40801:107::o;33560:166::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;33704:14:::1;33674:6;33681:8;33674:16;;;;;;;:::i;:::-;;;;:27;;:44;;;;33560:166:::0;;:::o;27767:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27767:23:0;;;;;:::o;40916:186::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;41009:13:::1;::::0;-1:-1:-1;;;;;40999:23:0;;::::1;41009:13:::0;::::1;40999:23;;40991:69;;;::::0;-1:-1:-1;;;40991:69:0;;8722:2:1;40991:69:0::1;::::0;::::1;8704:21:1::0;8761:2;8741:18;;;8734:30;8800:34;8780:18;;;8773:62;-1:-1:-1;;;8851:18:1;;;8844:31;8892:19;;40991:69:0::1;8520:397:1::0;40991:69:0::1;41071:13;:22:::0;;-1:-1:-1;;;;;;41071:22:0::1;-1:-1:-1::0;;;;;41071:22:0;;;::::1;::::0;;;::::1;::::0;;40916:186::o;40686:107::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;40759:11:::1;:26:::0;40686:107::o;39065:1458::-;39174:10;39117:25;39161:24;;;:12;:24;;;;;:34;;;;;:43;39153:80;;;;-1:-1:-1;;;39153:80:0;;11108:2:1;39153:80:0;;;11090:21:1;11147:2;11127:18;;;11120:30;11186:26;11166:18;;;11159:54;11230:18;;39153:80:0;10906:348:1;39153:80:0;39252:18;;;;39244:67;;;;-1:-1:-1;;;39244:67:0;;;;;;;:::i;:::-;-1:-1:-1;39355:10:0;39342:24;;;;:12;:24;;;;;:31;39403:24;:15;39421:6;39403:24;:::i;:::-;39390:10;;:37;39386:894;;;39452:18;;;;39444:67;;;;-1:-1:-1;;;39444:67:0;;;;;;;:::i;:::-;39386:894;;;39547:24;:15;39565:6;39547:24;:::i;:::-;39533:10;;:38;39529:751;;-1:-1:-1;39621:10:0;39608:24;;;;:12;:24;;;;;:38;;;39529:751;;;39682:25;:15;39700:7;39682:25;:::i;:::-;39668:10;;:39;39664:616;;-1:-1:-1;39757:10:0;39744:24;;;;:12;:24;;;;;:38;;;39664:616;;;39818:25;:15;39836:7;39818:25;:::i;:::-;39804:10;;:39;39800:480;;-1:-1:-1;39893:10:0;39880:24;;;;:12;:24;;;;;:38;;;39800:480;;;39954:25;:15;39972:7;39954:25;:::i;:::-;39940:10;;:39;39936:344;;-1:-1:-1;40029:10:0;40016:24;;;;:12;:24;;;;;:38;;;39936:344;;;40243:10;40230:24;;;;:12;:24;;;;;:38;;;;40189;;;;40148;;;;40107;;;;;40230;;40189;;40107:79;;40148:38;40107:79;:::i;:::-;:120;;;;:::i;:::-;:161;;;;:::i;:::-;40087:181;;39936:344;40296:22;40292:96;;40348:10;40335:24;;;;:12;:24;;;;;40372:4;40335:34;;;:41;;-1:-1:-1;;40335:41:0;;;;;;40292:96;40461:9;;40454:61;;-1:-1:-1;;;;;40461:9:0;40485:10;40497:17;40454:30;:61::i;:::-;39106:1417;39065:1458::o;35218:169::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;35281:18:::1;::::0;::::1;;35273:69;;;::::0;-1:-1:-1;;;35273:69:0;;6779:2:1;35273:69:0::1;::::0;::::1;6761:21:1::0;6818:2;6798:18;;;6791:30;6857:34;6837:18;;;6830:62;-1:-1:-1;;;6908:18:1;;;6901:36;6954:19;;35273:69:0::1;6577:402:1::0;35273:69:0::1;35353:18;:26:::0;;-1:-1:-1;;35353:26:0::1;::::0;;35218:169::o;33827:197::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;32991:16:::1;::::0;::::1;::::0;::::1;;;32990:17;32981:64;;;;-1:-1:-1::0;;;32981:64:0::1;;;;;;;:::i;:::-;33932:9:::2;:22:::0;;-1:-1:-1;;;;;;33932:22:0::2;-1:-1:-1::0;;;;;33932:22:0;::::2;::::0;;::::2;::::0;;;33980:36:::2;::::0;;-1:-1:-1;;;33980:36:0;;;;:34:::2;::::0;:36:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;33932:22;33980:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33965:51;;:12;:51:::0;-1:-1:-1;33827:197:0:o;40531:147::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40621:30:0;;;::::1;;::::0;;;:12:::1;:30;::::0;;;;:40:::1;;:49:::0;;-1:-1:-1;;40621:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40531:147::o;26982:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26982:23:0;;-1:-1:-1;26982:23:0;:::o;34090:185::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34181:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;34181:22:0::1;34199:4;34181:22;::::0;;34243:12:::1;::::0;34236:6:::1;::::0;:20:::1;::::0;::::1;;;;;:::i;:::-;;;;:31;;::::0;-1:-1:-1;;;;;34214:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:53;34090:185::o;12316:201::-;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12405:22:0;::::1;12397:73;;;::::0;-1:-1:-1;;;12397:73:0;;4853:2:1;12397:73:0::1;::::0;::::1;4835:21:1::0;4892:2;4872:18;;;4865:30;4931:34;4911:18;;;4904:62;-1:-1:-1;;;4982:18:1;;;4975:36;5028:19;;12397:73:0::1;4651:402:1::0;12397:73:0::1;12481:28;12500:8;12481:18;:28::i;13063:125::-:0;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;13137:43:::1;-1:-1:-1::0;;;;;13137:26:0;::::1;13164:10;13176:3:::0;13137:26:::1;:43::i;13196:155::-:0;11453:7;11480:6;-1:-1:-1;;;;;11480:6:0;10354:10;11627:23;11619:68;;;;-1:-1:-1;;;11619:68:0;;;;;;;:::i;:::-;13274:38:::1;::::0;-1:-1:-1;;;13274:38:0;;13306:4:::1;13274:38;::::0;::::1;2542:51:1::0;13260:11:0::1;::::0;-1:-1:-1;;;;;13274:23:0;::::1;::::0;::::1;::::0;2515:18:1;;13274:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13260:52;;13323:20;13332:5;13339:3;13323:8;:20::i;3560:98::-:0;3618:7;3645:5;3649:1;3645;:5;:::i;3959:98::-;4017:7;4044:5;4048:1;4044;:5;:::i;2822:98::-;2880:7;2907:5;2911:1;2907;:5;:::i;22536:248::-;22707:68;;-1:-1:-1;;;;;2862:15:1;;;22707:68:0;;;2844:34:1;2914:15;;2894:18;;;2887:43;2946:18;;;2939:34;;;22680:96:0;;22700:5;;-1:-1:-1;;;22730:27:0;2779:18:1;;22707:68:0;;;;-1:-1:-1;;22707:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;22707:68:0;-1:-1:-1;;;;;;22707:68:0;;;;;;;;;;22680:19;:96::i;:::-;22536:248;;;;:::o;12677:191::-;12751:16;12770:6;;-1:-1:-1;;;;;12787:17:0;;;-1:-1:-1;;;;;;12787:17:0;;;;;;12820:40;;12770:6;;;;;;;12820:40;;12751:16;12820:40;12740:128;12677:191;:::o;22317:211::-;22461:58;;-1:-1:-1;;;;;3176:32:1;;22461:58:0;;;3158:51:1;3225:18;;;3218:34;;;22434:86:0;;22454:5;;-1:-1:-1;;;22484:23:0;3131:18:1;;22461:58:0;2984:274:1;22434:86:0;22317:211;;;:::o;24890:716::-;25314:23;25340:69;25368:4;25340:69;;;;;;;;;;;;;;;;;25348:5;-1:-1:-1;;;;;25340:27:0;;;:69;;;;;:::i;:::-;25424:17;;25314:95;;-1:-1:-1;25424:21:0;25420:179;;25521:10;25510:30;;;;;;;;;;;;:::i;:::-;25502:85;;;;-1:-1:-1;;;25502:85:0;;10294:2:1;25502:85:0;;;10276:21:1;10333:2;10313:18;;;10306:30;10372:34;10352:18;;;10345:62;-1:-1:-1;;;10423:18:1;;;10416:40;10473:19;;25502:85:0;10092:406:1;17266:229:0;17403:12;17435:52;17457:6;17465:4;17471:1;17474:12;17435:21;:52::i;:::-;17428:59;;17266:229;;;;;;:::o;18386:510::-;18556:12;18614:5;18589:21;:30;;18581:81;;;;-1:-1:-1;;;18581:81:0;;6013:2:1;18581:81:0;;;5995:21:1;6052:2;6032:18;;;6025:30;6091:34;6071:18;;;6064:62;-1:-1:-1;;;6142:18:1;;;6135:36;6188:19;;18581:81:0;5811:402:1;18581:81:0;14783:20;;18673:60;;;;-1:-1:-1;;;18673:60:0;;9936:2:1;18673:60:0;;;9918:21:1;9975:2;9955:18;;;9948:30;10014:31;9994:18;;;9987:59;10063:18;;18673:60:0;9734:353:1;18673:60:0;18747:12;18761:23;18788:6;-1:-1:-1;;;;;18788:11:0;18807:5;18814:4;18788:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18746:73;;;;18837:51;18854:7;18863:10;18875:12;18837:16;:51::i;:::-;18830:58;18386:510;-1:-1:-1;;;;;;;18386:510:0:o;21072:712::-;21222:12;21251:7;21247:530;;;-1:-1:-1;21282:10:0;21275:17;;21247:530;21396:17;;:21;21392:374;;21594:10;21588:17;21655:15;21642:10;21638:2;21634:19;21627:44;21392:374;21737:12;21730:20;;-1:-1:-1;;;21730:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:315::-;448:6;456;509:2;497:9;488:7;484:23;480:32;477:52;;;525:1;522;515:12;477:52;548:29;567:9;548:29;:::i;:::-;538:39;;627:2;616:9;612:18;599:32;640:28;662:5;640:28;:::i;:::-;687:5;677:15;;;383:315;;;;;:::o;703:254::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;871:29;890:9;871:29;:::i;:::-;861:39;947:2;932:18;;;;919:32;;-1:-1:-1;;;703:254:1:o;962:245::-;1029:6;1082:2;1070:9;1061:7;1057:23;1053:32;1050:52;;;1098:1;1095;1088:12;1050:52;1130:9;1124:16;1149:28;1171:5;1149:28;:::i;1212:180::-;1271:6;1324:2;1312:9;1303:7;1299:23;1295:32;1292:52;;;1340:1;1337;1330:12;1292:52;-1:-1:-1;1363:23:1;;1212:180;-1:-1:-1;1212:180:1:o;1397:184::-;1467:6;1520:2;1508:9;1499:7;1495:23;1491:32;1488:52;;;1536:1;1533;1526:12;1488:52;-1:-1:-1;1559:16:1;;1397:184;-1:-1:-1;1397:184:1:o;1586:248::-;1654:6;1662;1715:2;1703:9;1694:7;1690:23;1686:32;1683:52;;;1731:1;1728;1721:12;1683:52;-1:-1:-1;;1754:23:1;;;1824:2;1809:18;;;1796:32;;-1:-1:-1;1586:248:1:o;1839:273::-;1907:6;1960:2;1948:9;1939:7;1935:23;1931:32;1928:52;;;1976:1;1973;1966:12;1928:52;2008:9;2002:16;2058:4;2051:5;2047:16;2040:5;2037:27;2027:55;;2078:1;2075;2068:12;2117:274;2246:3;2284:6;2278:13;2300:53;2346:6;2341:3;2334:4;2326:6;2322:17;2300:53;:::i;:::-;2369:16;;;;;2117:274;-1:-1:-1;;2117:274:1:o;3455:383::-;3604:2;3593:9;3586:21;3567:4;3636:6;3630:13;3679:6;3674:2;3663:9;3659:18;3652:34;3695:66;3754:6;3749:2;3738:9;3734:18;3729:2;3721:6;3717:15;3695:66;:::i;:::-;3822:2;3801:15;-1:-1:-1;;3797:29:1;3782:45;;;;3829:2;3778:54;;3455:383;-1:-1:-1;;3455:383:1:o;3843:400::-;4045:2;4027:21;;;4084:2;4064:18;;;4057:30;4123:34;4118:2;4103:18;;4096:62;-1:-1:-1;;;4189:2:1;4174:18;;4167:34;4233:3;4218:19;;3843:400::o;4248:398::-;4450:2;4432:21;;;4489:2;4469:18;;;4462:30;4528:34;4523:2;4508:18;;4501:62;-1:-1:-1;;;4594:2:1;4579:18;;4572:32;4636:3;4621:19;;4248:398::o;6984:409::-;7186:2;7168:21;;;7225:2;7205:18;;;7198:30;7264:34;7259:2;7244:18;;7237:62;-1:-1:-1;;;7330:2:1;7315:18;;7308:43;7383:3;7368:19;;6984:409::o;7398:356::-;7600:2;7582:21;;;7619:18;;;7612:30;7678:34;7673:2;7658:18;;7651:62;7745:2;7730:18;;7398:356::o;7759:397::-;7961:2;7943:21;;;8000:2;7980:18;;;7973:30;8039:34;8034:2;8019:18;;8012:62;-1:-1:-1;;;8105:2:1;8090:18;;8083:31;8146:3;8131:19;;7759:397::o;8161:354::-;8363:2;8345:21;;;8402:2;8382:18;;;8375:30;8441:32;8436:2;8421:18;;8414:60;8506:2;8491:18;;8161:354::o;10503:398::-;10705:2;10687:21;;;10744:2;10724:18;;;10717:30;10783:34;10778:2;10763:18;;10756:62;-1:-1:-1;;;10849:2:1;10834:18;;10827:32;10891:3;10876:19;;10503:398::o;12459:128::-;12499:3;12530:1;12526:6;12523:1;12520:13;12517:39;;;12536:18;;:::i;:::-;-1:-1:-1;12572:9:1;;12459:128::o;12592:217::-;12632:1;12658;12648:132;;12702:10;12697:3;12693:20;12690:1;12683:31;12737:4;12734:1;12727:15;12765:4;12762:1;12755:15;12648:132;-1:-1:-1;12794:9:1;;12592:217::o;12814:422::-;12903:1;12946:5;12903:1;12960:270;12981:7;12971:8;12968:21;12960:270;;;13040:4;13036:1;13032:6;13028:17;13022:4;13019:27;13016:53;;;13049:18;;:::i;:::-;13099:7;13089:8;13085:22;13082:55;;;13119:16;;;;13082:55;13198:22;;;;13158:15;;;;12960:270;;;12964:3;12814:422;;;;;:::o;13241:131::-;13301:5;13330:36;13357:8;13351:4;13426:5;13456:8;13446:80;;-1:-1:-1;13497:1:1;13511:5;;13446:80;13545:4;13535:76;;-1:-1:-1;13582:1:1;13596:5;;13535:76;13627:4;13645:1;13640:59;;;;13713:1;13708:130;;;;13620:218;;13640:59;13670:1;13661:10;;13684:5;;;13708:130;13745:3;13735:8;13732:17;13729:43;;;13752:18;;:::i;:::-;-1:-1:-1;;13808:1:1;13794:16;;13823:5;;13620:218;;13922:2;13912:8;13909:16;13903:3;13897:4;13894:13;13890:36;13884:2;13874:8;13871:16;13866:2;13860:4;13857:12;13853:35;13850:77;13847:159;;;-1:-1:-1;13959:19:1;;;13991:5;;13847:159;14038:34;14063:8;14057:4;14038:34;:::i;:::-;14108:6;14104:1;14100:6;14096:19;14087:7;14084:32;14081:58;;;14119:18;;:::i;:::-;14157:20;;13377:806;-1:-1:-1;;;13377:806:1:o;14188:168::-;14228:7;14294:1;14290;14286:6;14282:14;14279:1;14276:21;14271:1;14264:9;14257:17;14253:45;14250:71;;;14301:18;;:::i;:::-;-1:-1:-1;14341:9:1;;14188:168::o;14361:258::-;14433:1;14443:113;14457:6;14454:1;14451:13;14443:113;;;14533:11;;;14527:18;14514:11;;;14507:39;14479:2;14472:10;14443:113;;;14574:6;14571:1;14568:13;14565:48;;;-1:-1:-1;;14609:1:1;14591:16;;14584:27;14361:258::o;14624:127::-;14685:10;14680:3;14676:20;14673:1;14666:31;14716:4;14713:1;14706:15;14740:4;14737:1;14730:15;14756:127;14817:10;14812:3;14808:20;14805:1;14798:31;14848:4;14845:1;14838:15;14872:4;14869:1;14862:15;14888:118;14974:5;14967:13;14960:21;14953:5;14950:32;14940:60;;14996:1;14993;14986:12
Swarm Source
ipfs://18a2b076b2308759dae244a978adc541f2e44d58bec3b99eab60adead8470f70
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.