Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw FTM | 757558 | 10 hrs ago | IN | 0 S | 0.00003648 | ||||
Buy | 751080 | 11 hrs ago | IN | 120 S | 0.00011832 | ||||
Buy | 749078 | 12 hrs ago | IN | 200 S | 0.00011832 | ||||
Buy | 747825 | 12 hrs ago | IN | 100 S | 0.00019187 | ||||
Buy | 746856 | 12 hrs ago | IN | 115 S | 0.00011142 | ||||
Buy | 746777 | 12 hrs ago | IN | 780 S | 0.00011832 | ||||
Buy | 746501 | 12 hrs ago | IN | 250 S | 0.00011832 | ||||
Buy | 746381 | 12 hrs ago | IN | 500 S | 0.00015818 | ||||
Add Register Mul... | 737643 | 13 hrs ago | IN | 0 S | 0.00005572 | ||||
Add Register Mul... | 700985 | 17 hrs ago | IN | 0 S | 0.00019111 | ||||
Add Register Mul... | 700937 | 17 hrs ago | IN | 0 S | 0.00197819 | ||||
Add Register Mul... | 700880 | 17 hrs ago | IN | 0 S | 0.00200523 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
757558 | 10 hrs ago | 2,065 S |
Loading...
Loading
Contract Name:
PreSale
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-19 */ /** *Submitted for verification at SonicScan.org on 2024-12-19 */ // SPDX-License-Identifier: MIT AND UNLICENSED // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File @openzeppelin/contracts/utils/structs/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol) // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ```solidity * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure * unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an * array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } // File contracts/presale2.sol // Original license: SPDX_License_Identifier: UNLICENSED pragma solidity 0.8.19; contract PreSale is Ownable, ReentrancyGuard { using Address for address payable; using EnumerableSet for EnumerableSet.AddressSet; mapping(uint256 => address) public userIndex; mapping(address => UserData) public users; struct UserData { uint256 ftmContributed; uint256 bonesBought; bool preRegistered; bool once; } constructor() Ownable() {} uint256 public walletMax = 5000 ether; uint256 public walletMin = 100 ether; uint256 public totalContribution; uint256 public userCount; uint256 public presaleStartTime = 1734634800; uint256 public bonePrice = 1e18; uint256 public totalbonesBought; bool public end; bool public openForAll; uint256 public hardCap = 150000 ether; event buy(address buyer, uint256 amountContributed, uint256 bonesBought); event TimeSet(uint256 presaleStartTime); event End(bool status); event WalletParametersSet(uint256 walletMin, uint256 walletMax); event OpenForAllSet(bool status); event HardCapSet(uint256 newHardCap); function setHardCap(uint256 _hardCap) public onlyOwner { require(_hardCap > 0, "Hard cap must be greater than zero"); hardCap = _hardCap; emit HardCapSet(_hardCap); } function setWalletParameters(uint256 _walletMin, uint256 _walletMax) public onlyOwner { walletMin = _walletMin; walletMax = _walletMax; emit WalletParametersSet(_walletMin, _walletMax); } function setEnd(bool _end) public onlyOwner { end = _end; emit End(_end); } function setRegisterPre(address _addr, bool _status) public onlyOwner { require(_addr != address(0), "Invalid address"); UserData storage user = users[_addr]; user.preRegistered = _status; } function addRegisterMultiplePre(address[] memory _addrs) public onlyOwner { for (uint256 i = 0; i < _addrs.length; i++) { require(_addrs[i] != address(0), "Invalid address in array"); UserData storage user = users[_addrs[i]]; user.preRegistered = true; } } function setTime( uint256 _presaleStartTime ) public onlyOwner { presaleStartTime = _presaleStartTime; emit TimeSet(_presaleStartTime); } function WithdrawFTM(uint256 amount) public onlyOwner { payable(msg.sender).transfer(amount); } function WithdrawFTMcall(uint256 amount) public onlyOwner { require(address(this).balance >= amount, "Not enough balance"); payable(msg.sender).sendValue(amount); } function renounceOwnership() public virtual override onlyOwner { revert("Ownership renunciation is disabled"); } function setOpenForAll(bool _status) public onlyOwner { openForAll = _status; emit OpenForAllSet(_status); } // public call function function Buy() public payable nonReentrant { uint256 amount = msg.value; UserData storage user = users[msg.sender]; require(end == false, "presale is stopped"); require(block.timestamp > presaleStartTime, "Not started yet!"); require(user.once == false, "Only one time allowed"); require(amount >= walletMin && amount <= walletMax, "Buy amount out of range"); require(openForAll || user.preRegistered, "Not registered"); require(totalContribution + amount <= hardCap, "Hard cap reached"); totalContribution += amount; user.once = true; user.ftmContributed += amount; user.bonesBought += (bonePrice * amount) / 1e18; totalbonesBought += (bonePrice * amount) / 1e18; emit buy(msg.sender,amount,(bonePrice * amount) / 1e18); } function checkContractBalance() public view returns (uint256) { return address(this).balance; } function getUserData(address _user) public view returns (UserData memory) { return users[_user]; } receive() external payable { revert("Direct FTM transfers not allowed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"End","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newHardCap","type":"uint256"}],"name":"HardCapSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"OpenForAllSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"presaleStartTime","type":"uint256"}],"name":"TimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"walletMax","type":"uint256"}],"name":"WalletParametersSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountContributed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonesBought","type":"uint256"}],"name":"buy","type":"event"},{"inputs":[],"name":"Buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFTMcall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"}],"name":"addRegisterMultiplePre","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"end","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserData","outputs":[{"components":[{"internalType":"uint256","name":"ftmContributed","type":"uint256"},{"internalType":"uint256","name":"bonesBought","type":"uint256"},{"internalType":"bool","name":"preRegistered","type":"bool"},{"internalType":"bool","name":"once","type":"bool"}],"internalType":"struct PreSale.UserData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_end","type":"bool"}],"name":"setEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardCap","type":"uint256"}],"name":"setHardCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setOpenForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setRegisterPre","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"}],"name":"setTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletMin","type":"uint256"},{"internalType":"uint256","name":"_walletMax","type":"uint256"}],"name":"setWalletParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalContribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalbonesBought","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":"userCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"ftmContributed","type":"uint256"},{"internalType":"uint256","name":"bonesBought","type":"uint256"},{"internalType":"bool","name":"preRegistered","type":"bool"},{"internalType":"bool","name":"once","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405269010f0cf064dd5920000060045568056bc75e2d631000006005556367646d30600855670de0b6b3a7640000600955691fc3842bd1f071c00000600c5534801561004d57600080fd5b5061006a61005f61007660201b60201c565b61007e60201b60201c565b60018081905550610142565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122c280620001526000396000f3fe6080604052600436106101a05760003560e01c8063be54eba5116100ec578063efbe1c1c1161008a578063f2fde38b11610064578063f2fde38b146105a2578063fb86a404146105cb578063fe314524146105f6578063ffc9896b14610621576101e0565b8063efbe1c1c14610523578063f0e3d1ba1461054e578063f10c8fe314610577576101e0565b8063c9dc5bc6116100c6578063c9dc5bc61461047b578063d18d944b146104a6578063d85afe3b146104cf578063da99e881146104fa576101e0565b8063be54eba5146103ec578063bf1a49d414610415578063c37dfd6e1461043e576101e0565b8063715018a611610159578063925ca20c11610133578063925ca20c1461034e578063974c86b514610377578063a82524b214610381578063a87430ba146103ac576101e0565b8063715018a6146102e157806373a8f514146102f85780638da5cb5b14610323576101e0565b806307973ccf146101e55780630dcf4b8f146102105780633beb26c41461023b5780634a1d4e631461026457806350312c9e1461028d5780636692514f146102b8576101e0565b366101e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d790611418565b60405180910390fd5b600080fd5b3480156101f157600080fd5b506101fa61065e565b6040516102079190611451565b60405180910390f35b34801561021c57600080fd5b50610225610664565b6040516102329190611451565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d91906114ac565b61066a565b005b34801561027057600080fd5b5061028b600480360381019061028691906114ac565b6106b3565b005b34801561029957600080fd5b506102a261072a565b6040516102af9190611451565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906114ac565b610732565b005b3480156102ed57600080fd5b506102f6610784565b005b34801561030457600080fd5b5061030d6107c7565b60405161031a9190611451565b60405180910390f35b34801561032f57600080fd5b506103386107cd565b604051610345919061151a565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190611599565b6107f6565b005b61037f6108d1565b005b34801561038d57600080fd5b50610396610c4c565b6040516103a39190611451565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906115d9565b610c52565b6040516103e39493929190611615565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061165a565b610c9c565b005b34801561042157600080fd5b5061043c600480360381019061043791906117e0565b610cf8565b005b34801561044a57600080fd5b50610465600480360381019061046091906114ac565b610e27565b604051610472919061151a565b60405180910390f35b34801561048757600080fd5b50610490610e5a565b60405161049d9190611829565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906114ac565b610e6d565b005b3480156104db57600080fd5b506104e4610ef9565b6040516104f19190611451565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190611844565b610eff565b005b34801561052f57600080fd5b50610538610f52565b6040516105459190611829565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061165a565b610f65565b005b34801561058357600080fd5b5061058c610fc1565b6040516105999190611451565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906115d9565b610fc7565b005b3480156105d757600080fd5b506105e061104a565b6040516105ed9190611451565b60405180910390f35b34801561060257600080fd5b5061060b611050565b6040516106189190611451565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906115d9565b611056565b60405161065591906118f7565b60405180910390f35b60075481565b60065481565b6106726110f9565b806008819055507f442838d6fd5d665f7e178d487609a403ef51f3626ed47bc205e2d4295711cf28816040516106a89190611451565b60405180910390a150565b6106bb6110f9565b804710156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f59061195e565b60405180910390fd5b610727813373ffffffffffffffffffffffffffffffffffffffff1661117790919063ffffffff16565b50565b600047905090565b61073a6110f9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610780573d6000803e3d6000fd5b5050565b61078c6110f9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be906119f0565b60405180910390fd5b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107fe6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611a5c565b60405180910390fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160020160006101000a81548160ff021916908315150217905550505050565b6108d961126b565b60003490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060001515600b60009054906101000a900460ff16151514610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90611ac8565b60405180910390fd5b60085442116109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290611b34565b60405180910390fd5b600015158160020160019054906101000a900460ff16151514610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90611ba0565b60405180910390fd5b6005548210158015610a2757506004548211155b610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90611c0c565b60405180910390fd5b600b60019054906101000a900460ff1680610a8f57508060020160009054906101000a900460ff165b610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590611c78565b60405180910390fd5b600c5482600654610adf9190611cc7565b1115610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790611d47565b60405180910390fd5b8160066000828254610b329190611cc7565b9250508190555060018160020160016101000a81548160ff02191690831515021790555081816000016000828254610b6a9190611cc7565b92505081905550670de0b6b3a764000082600954610b889190611d67565b610b929190611dd8565b816001016000828254610ba59190611cc7565b92505081905550670de0b6b3a764000082600954610bc39190611d67565b610bcd9190611dd8565b600a6000828254610bde9190611cc7565b925050819055507fa59ac6dd8b1d00e4c8ba9abba262aaac3d4d05e77324205b07a39a002e479b5f3383670de0b6b3a764000085600954610c1f9190611d67565b610c299190611dd8565b604051610c3893929190611e09565b60405180910390a15050610c4a6112ba565b565b60085481565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b610ca46110f9565b80600b60016101000a81548160ff0219169083151502179055507fc6ee91f277747645bb645c271d108c2b590ce8191ff120582597c43d7b463fe781604051610ced9190611829565b60405180910390a150565b610d006110f9565b60005b8151811015610e2357600073ffffffffffffffffffffffffffffffffffffffff16828281518110610d3757610d36611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90611ebb565b60405180910390fd5b600060036000848481518110610dae57610dad611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160020160006101000a81548160ff021916908315150217905550508080610e1b90611edb565b915050610d03565b5050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b610e756110f9565b60008111610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611f95565b60405180910390fd5b80600c819055507f917681cdf3d8a5ef720fb56128d5382782db742feb1d89fc6d376111254537b181604051610eee9190611451565b60405180910390a150565b60055481565b610f076110f9565b81600581905550806004819055507fce04aa61eda600992913a5486c90a49b9bee640d4b208249cdb41e2c46f005618282604051610f46929190611fb5565b60405180910390a15050565b600b60009054906101000a900460ff1681565b610f6d6110f9565b80600b60006101000a81548160ff0219169083151502179055507f3e883667baa27834636706acfa6dd8c0ba584fcc0968c2dfa029aa58bbb14fc181604051610fb69190611829565b60405180910390a150565b60095481565b610fcf6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612050565b60405180910390fd5b611047816112c3565b50565b600c5481565b60045481565b61105e61138f565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff1615151515815250509050919050565b611101611387565b73ffffffffffffffffffffffffffffffffffffffff1661111f6107cd565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906120bc565b60405180910390fd5b565b804710156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612128565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516111e090612179565b60006040518083038185875af1925050503d806000811461121d576040519150601f19603f3d011682016040523d82523d6000602084013e611222565b606091505b5050905080611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90612200565b60405180910390fd5b505050565b6002600154036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061226c565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b604051806080016040528060008152602001600081526020016000151581526020016000151581525090565b600082825260208201905092915050565b7f4469726563742046544d207472616e7366657273206e6f7420616c6c6f776564600082015250565b60006114026020836113bb565b915061140d826113cc565b602082019050919050565b60006020820190508181036000830152611431816113f5565b9050919050565b6000819050919050565b61144b81611438565b82525050565b60006020820190506114666000830184611442565b92915050565b6000604051905090565b600080fd5b600080fd5b61148981611438565b811461149457600080fd5b50565b6000813590506114a681611480565b92915050565b6000602082840312156114c2576114c1611476565b5b60006114d084828501611497565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611504826114d9565b9050919050565b611514816114f9565b82525050565b600060208201905061152f600083018461150b565b92915050565b61153e816114f9565b811461154957600080fd5b50565b60008135905061155b81611535565b92915050565b60008115159050919050565b61157681611561565b811461158157600080fd5b50565b6000813590506115938161156d565b92915050565b600080604083850312156115b0576115af611476565b5b60006115be8582860161154c565b92505060206115cf85828601611584565b9150509250929050565b6000602082840312156115ef576115ee611476565b5b60006115fd8482850161154c565b91505092915050565b61160f81611561565b82525050565b600060808201905061162a6000830187611442565b6116376020830186611442565b6116446040830185611606565b6116516060830184611606565b95945050505050565b6000602082840312156116705761166f611476565b5b600061167e84828501611584565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116d58261168c565b810181811067ffffffffffffffff821117156116f4576116f361169d565b5b80604052505050565b600061170761146c565b905061171382826116cc565b919050565b600067ffffffffffffffff8211156117335761173261169d565b5b602082029050602081019050919050565b600080fd5b600061175c61175784611718565b6116fd565b9050808382526020820190506020840283018581111561177f5761177e611744565b5b835b818110156117a85780611794888261154c565b845260208401935050602081019050611781565b5050509392505050565b600082601f8301126117c7576117c6611687565b5b81356117d7848260208601611749565b91505092915050565b6000602082840312156117f6576117f5611476565b5b600082013567ffffffffffffffff8111156118145761181361147b565b5b611820848285016117b2565b91505092915050565b600060208201905061183e6000830184611606565b92915050565b6000806040838503121561185b5761185a611476565b5b600061186985828601611497565b925050602061187a85828601611497565b9150509250929050565b61188d81611438565b82525050565b61189c81611561565b82525050565b6080820160008201516118b86000850182611884565b5060208201516118cb6020850182611884565b5060408201516118de6040850182611893565b5060608201516118f16060850182611893565b50505050565b600060808201905061190c60008301846118a2565b92915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b60006119486012836113bb565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f4f776e6572736869702072656e756e63696174696f6e2069732064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6022836113bb565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000611a46600f836113bb565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b7f70726573616c652069732073746f707065640000000000000000000000000000600082015250565b6000611ab26012836113bb565b9150611abd82611a7c565b602082019050919050565b60006020820190508181036000830152611ae181611aa5565b9050919050565b7f4e6f742073746172746564207965742100000000000000000000000000000000600082015250565b6000611b1e6010836113bb565b9150611b2982611ae8565b602082019050919050565b60006020820190508181036000830152611b4d81611b11565b9050919050565b7f4f6e6c79206f6e652074696d6520616c6c6f7765640000000000000000000000600082015250565b6000611b8a6015836113bb565b9150611b9582611b54565b602082019050919050565b60006020820190508181036000830152611bb981611b7d565b9050919050565b7f42757920616d6f756e74206f7574206f662072616e6765000000000000000000600082015250565b6000611bf66017836113bb565b9150611c0182611bc0565b602082019050919050565b60006020820190508181036000830152611c2581611be9565b9050919050565b7f4e6f742072656769737465726564000000000000000000000000000000000000600082015250565b6000611c62600e836113bb565b9150611c6d82611c2c565b602082019050919050565b60006020820190508181036000830152611c9181611c55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cd282611438565b9150611cdd83611438565b9250828201905080821115611cf557611cf4611c98565b5b92915050565b7f4861726420636170207265616368656400000000000000000000000000000000600082015250565b6000611d316010836113bb565b9150611d3c82611cfb565b602082019050919050565b60006020820190508181036000830152611d6081611d24565b9050919050565b6000611d7282611438565b9150611d7d83611438565b9250828202611d8b81611438565b91508282048414831517611da257611da1611c98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611de382611438565b9150611dee83611438565b925082611dfe57611dfd611da9565b5b828204905092915050565b6000606082019050611e1e600083018661150b565b611e2b6020830185611442565b611e386040830184611442565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c6964206164647265737320696e2061727261790000000000000000600082015250565b6000611ea56018836113bb565b9150611eb082611e6f565b602082019050919050565b60006020820190508181036000830152611ed481611e98565b9050919050565b6000611ee682611438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f1857611f17611c98565b5b600182019050919050565b7f4861726420636170206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7f6022836113bb565b9150611f8a82611f23565b604082019050919050565b60006020820190508181036000830152611fae81611f72565b9050919050565b6000604082019050611fca6000830185611442565b611fd76020830184611442565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061203a6026836113bb565b915061204582611fde565b604082019050919050565b600060208201905081810360008301526120698161202d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120a66020836113bb565b91506120b182612070565b602082019050919050565b600060208201905081810360008301526120d581612099565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612112601d836113bb565b915061211d826120dc565b602082019050919050565b6000602082019050818103600083015261214181612105565b9050919050565b600081905092915050565b50565b6000612163600083612148565b915061216e82612153565b600082019050919050565b600061218482612156565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006121ea603a836113bb565b91506121f58261218e565b604082019050919050565b60006020820190508181036000830152612219816121dd565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612256601f836113bb565b915061226182612220565b602082019050919050565b6000602082019050818103600083015261228581612249565b905091905056fea2646970667358221220e7494d0ba9c5c30d82fc36f3c7c48a001cd111535abe37c5663b12085c8931c464736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101a05760003560e01c8063be54eba5116100ec578063efbe1c1c1161008a578063f2fde38b11610064578063f2fde38b146105a2578063fb86a404146105cb578063fe314524146105f6578063ffc9896b14610621576101e0565b8063efbe1c1c14610523578063f0e3d1ba1461054e578063f10c8fe314610577576101e0565b8063c9dc5bc6116100c6578063c9dc5bc61461047b578063d18d944b146104a6578063d85afe3b146104cf578063da99e881146104fa576101e0565b8063be54eba5146103ec578063bf1a49d414610415578063c37dfd6e1461043e576101e0565b8063715018a611610159578063925ca20c11610133578063925ca20c1461034e578063974c86b514610377578063a82524b214610381578063a87430ba146103ac576101e0565b8063715018a6146102e157806373a8f514146102f85780638da5cb5b14610323576101e0565b806307973ccf146101e55780630dcf4b8f146102105780633beb26c41461023b5780634a1d4e631461026457806350312c9e1461028d5780636692514f146102b8576101e0565b366101e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d790611418565b60405180910390fd5b600080fd5b3480156101f157600080fd5b506101fa61065e565b6040516102079190611451565b60405180910390f35b34801561021c57600080fd5b50610225610664565b6040516102329190611451565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d91906114ac565b61066a565b005b34801561027057600080fd5b5061028b600480360381019061028691906114ac565b6106b3565b005b34801561029957600080fd5b506102a261072a565b6040516102af9190611451565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906114ac565b610732565b005b3480156102ed57600080fd5b506102f6610784565b005b34801561030457600080fd5b5061030d6107c7565b60405161031a9190611451565b60405180910390f35b34801561032f57600080fd5b506103386107cd565b604051610345919061151a565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190611599565b6107f6565b005b61037f6108d1565b005b34801561038d57600080fd5b50610396610c4c565b6040516103a39190611451565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906115d9565b610c52565b6040516103e39493929190611615565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061165a565b610c9c565b005b34801561042157600080fd5b5061043c600480360381019061043791906117e0565b610cf8565b005b34801561044a57600080fd5b50610465600480360381019061046091906114ac565b610e27565b604051610472919061151a565b60405180910390f35b34801561048757600080fd5b50610490610e5a565b60405161049d9190611829565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906114ac565b610e6d565b005b3480156104db57600080fd5b506104e4610ef9565b6040516104f19190611451565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190611844565b610eff565b005b34801561052f57600080fd5b50610538610f52565b6040516105459190611829565b60405180910390f35b34801561055a57600080fd5b506105756004803603810190610570919061165a565b610f65565b005b34801561058357600080fd5b5061058c610fc1565b6040516105999190611451565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906115d9565b610fc7565b005b3480156105d757600080fd5b506105e061104a565b6040516105ed9190611451565b60405180910390f35b34801561060257600080fd5b5061060b611050565b6040516106189190611451565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906115d9565b611056565b60405161065591906118f7565b60405180910390f35b60075481565b60065481565b6106726110f9565b806008819055507f442838d6fd5d665f7e178d487609a403ef51f3626ed47bc205e2d4295711cf28816040516106a89190611451565b60405180910390a150565b6106bb6110f9565b804710156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f59061195e565b60405180910390fd5b610727813373ffffffffffffffffffffffffffffffffffffffff1661117790919063ffffffff16565b50565b600047905090565b61073a6110f9565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610780573d6000803e3d6000fd5b5050565b61078c6110f9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be906119f0565b60405180910390fd5b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107fe6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361086d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086490611a5c565b60405180910390fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160020160006101000a81548160ff021916908315150217905550505050565b6108d961126b565b60003490506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060001515600b60009054906101000a900460ff16151514610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90611ac8565b60405180910390fd5b60085442116109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290611b34565b60405180910390fd5b600015158160020160019054906101000a900460ff16151514610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90611ba0565b60405180910390fd5b6005548210158015610a2757506004548211155b610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90611c0c565b60405180910390fd5b600b60019054906101000a900460ff1680610a8f57508060020160009054906101000a900460ff165b610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590611c78565b60405180910390fd5b600c5482600654610adf9190611cc7565b1115610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1790611d47565b60405180910390fd5b8160066000828254610b329190611cc7565b9250508190555060018160020160016101000a81548160ff02191690831515021790555081816000016000828254610b6a9190611cc7565b92505081905550670de0b6b3a764000082600954610b889190611d67565b610b929190611dd8565b816001016000828254610ba59190611cc7565b92505081905550670de0b6b3a764000082600954610bc39190611d67565b610bcd9190611dd8565b600a6000828254610bde9190611cc7565b925050819055507fa59ac6dd8b1d00e4c8ba9abba262aaac3d4d05e77324205b07a39a002e479b5f3383670de0b6b3a764000085600954610c1f9190611d67565b610c299190611dd8565b604051610c3893929190611e09565b60405180910390a15050610c4a6112ba565b565b60085481565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905084565b610ca46110f9565b80600b60016101000a81548160ff0219169083151502179055507fc6ee91f277747645bb645c271d108c2b590ce8191ff120582597c43d7b463fe781604051610ced9190611829565b60405180910390a150565b610d006110f9565b60005b8151811015610e2357600073ffffffffffffffffffffffffffffffffffffffff16828281518110610d3757610d36611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90611ebb565b60405180910390fd5b600060036000848481518110610dae57610dad611e40565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160020160006101000a81548160ff021916908315150217905550508080610e1b90611edb565b915050610d03565b5050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60019054906101000a900460ff1681565b610e756110f9565b60008111610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90611f95565b60405180910390fd5b80600c819055507f917681cdf3d8a5ef720fb56128d5382782db742feb1d89fc6d376111254537b181604051610eee9190611451565b60405180910390a150565b60055481565b610f076110f9565b81600581905550806004819055507fce04aa61eda600992913a5486c90a49b9bee640d4b208249cdb41e2c46f005618282604051610f46929190611fb5565b60405180910390a15050565b600b60009054906101000a900460ff1681565b610f6d6110f9565b80600b60006101000a81548160ff0219169083151502179055507f3e883667baa27834636706acfa6dd8c0ba584fcc0968c2dfa029aa58bbb14fc181604051610fb69190611829565b60405180910390a150565b60095481565b610fcf6110f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612050565b60405180910390fd5b611047816112c3565b50565b600c5481565b60045481565b61105e61138f565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff1615151515815250509050919050565b611101611387565b73ffffffffffffffffffffffffffffffffffffffff1661111f6107cd565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906120bc565b60405180910390fd5b565b804710156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612128565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516111e090612179565b60006040518083038185875af1925050503d806000811461121d576040519150601f19603f3d011682016040523d82523d6000602084013e611222565b606091505b5050905080611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90612200565b60405180910390fd5b505050565b6002600154036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061226c565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b604051806080016040528060008152602001600081526020016000151581526020016000151581525090565b600082825260208201905092915050565b7f4469726563742046544d207472616e7366657273206e6f7420616c6c6f776564600082015250565b60006114026020836113bb565b915061140d826113cc565b602082019050919050565b60006020820190508181036000830152611431816113f5565b9050919050565b6000819050919050565b61144b81611438565b82525050565b60006020820190506114666000830184611442565b92915050565b6000604051905090565b600080fd5b600080fd5b61148981611438565b811461149457600080fd5b50565b6000813590506114a681611480565b92915050565b6000602082840312156114c2576114c1611476565b5b60006114d084828501611497565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611504826114d9565b9050919050565b611514816114f9565b82525050565b600060208201905061152f600083018461150b565b92915050565b61153e816114f9565b811461154957600080fd5b50565b60008135905061155b81611535565b92915050565b60008115159050919050565b61157681611561565b811461158157600080fd5b50565b6000813590506115938161156d565b92915050565b600080604083850312156115b0576115af611476565b5b60006115be8582860161154c565b92505060206115cf85828601611584565b9150509250929050565b6000602082840312156115ef576115ee611476565b5b60006115fd8482850161154c565b91505092915050565b61160f81611561565b82525050565b600060808201905061162a6000830187611442565b6116376020830186611442565b6116446040830185611606565b6116516060830184611606565b95945050505050565b6000602082840312156116705761166f611476565b5b600061167e84828501611584565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6116d58261168c565b810181811067ffffffffffffffff821117156116f4576116f361169d565b5b80604052505050565b600061170761146c565b905061171382826116cc565b919050565b600067ffffffffffffffff8211156117335761173261169d565b5b602082029050602081019050919050565b600080fd5b600061175c61175784611718565b6116fd565b9050808382526020820190506020840283018581111561177f5761177e611744565b5b835b818110156117a85780611794888261154c565b845260208401935050602081019050611781565b5050509392505050565b600082601f8301126117c7576117c6611687565b5b81356117d7848260208601611749565b91505092915050565b6000602082840312156117f6576117f5611476565b5b600082013567ffffffffffffffff8111156118145761181361147b565b5b611820848285016117b2565b91505092915050565b600060208201905061183e6000830184611606565b92915050565b6000806040838503121561185b5761185a611476565b5b600061186985828601611497565b925050602061187a85828601611497565b9150509250929050565b61188d81611438565b82525050565b61189c81611561565b82525050565b6080820160008201516118b86000850182611884565b5060208201516118cb6020850182611884565b5060408201516118de6040850182611893565b5060608201516118f16060850182611893565b50505050565b600060808201905061190c60008301846118a2565b92915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b60006119486012836113bb565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f4f776e6572736869702072656e756e63696174696f6e2069732064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6022836113bb565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000611a46600f836113bb565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b7f70726573616c652069732073746f707065640000000000000000000000000000600082015250565b6000611ab26012836113bb565b9150611abd82611a7c565b602082019050919050565b60006020820190508181036000830152611ae181611aa5565b9050919050565b7f4e6f742073746172746564207965742100000000000000000000000000000000600082015250565b6000611b1e6010836113bb565b9150611b2982611ae8565b602082019050919050565b60006020820190508181036000830152611b4d81611b11565b9050919050565b7f4f6e6c79206f6e652074696d6520616c6c6f7765640000000000000000000000600082015250565b6000611b8a6015836113bb565b9150611b9582611b54565b602082019050919050565b60006020820190508181036000830152611bb981611b7d565b9050919050565b7f42757920616d6f756e74206f7574206f662072616e6765000000000000000000600082015250565b6000611bf66017836113bb565b9150611c0182611bc0565b602082019050919050565b60006020820190508181036000830152611c2581611be9565b9050919050565b7f4e6f742072656769737465726564000000000000000000000000000000000000600082015250565b6000611c62600e836113bb565b9150611c6d82611c2c565b602082019050919050565b60006020820190508181036000830152611c9181611c55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cd282611438565b9150611cdd83611438565b9250828201905080821115611cf557611cf4611c98565b5b92915050565b7f4861726420636170207265616368656400000000000000000000000000000000600082015250565b6000611d316010836113bb565b9150611d3c82611cfb565b602082019050919050565b60006020820190508181036000830152611d6081611d24565b9050919050565b6000611d7282611438565b9150611d7d83611438565b9250828202611d8b81611438565b91508282048414831517611da257611da1611c98565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611de382611438565b9150611dee83611438565b925082611dfe57611dfd611da9565b5b828204905092915050565b6000606082019050611e1e600083018661150b565b611e2b6020830185611442565b611e386040830184611442565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f496e76616c6964206164647265737320696e2061727261790000000000000000600082015250565b6000611ea56018836113bb565b9150611eb082611e6f565b602082019050919050565b60006020820190508181036000830152611ed481611e98565b9050919050565b6000611ee682611438565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f1857611f17611c98565b5b600182019050919050565b7f4861726420636170206d7573742062652067726561746572207468616e207a6560008201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7f6022836113bb565b9150611f8a82611f23565b604082019050919050565b60006020820190508181036000830152611fae81611f72565b9050919050565b6000604082019050611fca6000830185611442565b611fd76020830184611442565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061203a6026836113bb565b915061204582611fde565b604082019050919050565b600060208201905081810360008301526120698161202d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120a66020836113bb565b91506120b182612070565b602082019050919050565b600060208201905081810360008301526120d581612099565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612112601d836113bb565b915061211d826120dc565b602082019050919050565b6000602082019050818103600083015261214181612105565b9050919050565b600081905092915050565b50565b6000612163600083612148565b915061216e82612153565b600082019050919050565b600061218482612156565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006121ea603a836113bb565b91506121f58261218e565b604082019050919050565b60006020820190508181036000830152612219816121dd565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612256601f836113bb565b915061226182612220565b602082019050919050565b6000602082019050818103600083015261228581612249565b905091905056fea2646970667358221220e7494d0ba9c5c30d82fc36f3c7c48a001cd111535abe37c5663b12085c8931c464736f6c63430008130033
Deployed Bytecode Sourcemap
30482:4196:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34625:42;;;;;;;;;;:::i;:::-;;;;;;;;30482:4196;;;;31034:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30995:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32692:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32991:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34350:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32874;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33186:126;;;;;;;;;;;;;:::i;:::-;;31154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2482:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32136:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33488:854;;;:::i;:::-;;31065:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33320:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32366:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30631:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31214:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31597:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30952:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31803:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31192:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32030:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31116:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3381:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31243:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30908;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34467:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31034:24;;;;:::o;30995:32::-;;;;:::o;32692:174::-;2368:13;:11;:13::i;:::-;32799:17:::1;32780:16;:36;;;;32832:26;32840:17;32832:26;;;;;;:::i;:::-;;;;;;;;32692:174:::0;:::o;32991:187::-;2368:13;:11;:13::i;:::-;33093:6:::1;33068:21;:31;;33060:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33133:37;33163:6;33141:10;33133:29;;;;:37;;;;:::i;:::-;32991:187:::0;:::o;34350:109::-;34403:7;34430:21;34423:28;;34350:109;:::o;32874:::-;2368:13;:11;:13::i;:::-;32947:10:::1;32939:28;;:36;32968:6;32939:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32874:109:::0;:::o;33186:126::-;2368:13;:11;:13::i;:::-;33260:44:::1;;;;;;;;;;:::i;:::-;;;;;;;;31154:31:::0;;;;:::o;2482:87::-;2528:7;2555:6;;;;;;;;;;;2548:13;;2482:87;:::o;32136:222::-;2368:13;:11;:13::i;:::-;32242:1:::1;32225:19;;:5;:19;;::::0;32217:47:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:21;32299:5;:12;32305:5;32299:12;;;;;;;;;;;;;;;32275:36;;32343:7;32322:4;:18;;;:28;;;;;;;;;;;;;;;;;;32206:152;32136:222:::0;;:::o;33488:854::-;6342:21;:19;:21::i;:::-;33542:14:::1;33559:9;33542:26;;33579:21;33603:5;:17;33609:10;33603:17;;;;;;;;;;;;;;;33579:41;;33646:5;33639:12;;:3;;;;;;;;;;;:12;;;33631:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33711:16;;33693:15;:34;33685:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33780:5;33767:18;;:4;:9;;;;;;;;;;;;:18;;;33759:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;33840:9;;33830:6;:19;;:42;;;;;33863:9;;33853:6;:19;;33830:42;33822:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33919:10;;;;;;;;;;;:32;;;;33933:4;:18;;;;;;;;;;;;33919:32;33911:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34019:7;;34009:6;33989:17;;:26;;;;:::i;:::-;:37;;33981:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34079:6;34058:17;;:27;;;;;;;:::i;:::-;;;;;;;;34108:4;34096;:9;;;:16;;;;;;;;;;;;;;;;;;34146:6;34123:4;:19;;;:29;;;;;;;:::i;:::-;;;;;;;;34206:4;34196:6;34184:9;;:18;;;;:::i;:::-;34183:27;;;;:::i;:::-;34163:4;:16;;;:47;;;;;;;:::i;:::-;;;;;;;;34264:4;34254:6;34242:9;;:18;;;;:::i;:::-;34241:27;;;;:::i;:::-;34221:16;;:47;;;;;;;:::i;:::-;;;;;;;;34284:50;34288:10;34299:6;34329:4;34319:6;34307:9;;:18;;;;:::i;:::-;34306:27;;;;:::i;:::-;34284:50;;;;;;;;:::i;:::-;;;;;;;;33531:811;;6386:20:::0;:18;:20::i;:::-;33488:854::o;31065:44::-;;;;:::o;30682:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33320:131::-;2368:13;:11;:13::i;:::-;33398:7:::1;33385:10;;:20;;;;;;;;;;;;;;;;;;33421:22;33435:7;33421:22;;;;;;:::i;:::-;;;;;;;;33320:131:::0;:::o;32366:318::-;2368:13;:11;:13::i;:::-;32456:9:::1;32451:226;32475:6;:13;32471:1;:17;32451:226;;;32539:1;32518:23;;:6;32525:1;32518:9;;;;;;;;:::i;:::-;;;;;;;;:23;;::::0;32510:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32585:21;32609:5;:16;32615:6;32622:1;32615:9;;;;;;;;:::i;:::-;;;;;;;;32609:16;;;;;;;;;;;;;;;32585:40;;32661:4;32640;:18;;;:25;;;;;;;;;;;;;;;;;;32495:182;32490:3;;;;;:::i;:::-;;;;32451:226;;;;32366:318:::0;:::o;30631:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;31214:22::-;;;;;;;;;;;;;:::o;31597:198::-;2368:13;:11;:13::i;:::-;31682:1:::1;31671:8;:12;31663:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31743:8;31733:7;:18;;;;31767:20;31778:8;31767:20;;;;;;:::i;:::-;;;;;;;;31597:198:::0;:::o;30952:36::-;;;;:::o;31803:219::-;2368:13;:11;:13::i;:::-;31912:10:::1;31900:9;:22;;;;31945:10;31933:9;:22;;;;31971:43;31991:10;32003;31971:43;;;;;;;:::i;:::-;;;;;;;;31803:219:::0;;:::o;31192:15::-;;;;;;;;;;;;;:::o;32030:98::-;2368:13;:11;:13::i;:::-;32091:4:::1;32085:3;;:10;;;;;;;;;;;;;;;;;;32111:9;32115:4;32111:9;;;;;;:::i;:::-;;;;;;;;32030:98:::0;:::o;31116:31::-;;;;:::o;3381:201::-;2368:13;:11;:13::i;:::-;3490:1:::1;3470:22;;:8;:22;;::::0;3462:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3546:28;3565:8;3546:18;:28::i;:::-;3381:201:::0;:::o;31243:37::-;;;;:::o;30908:::-;;;;:::o;34467:112::-;34524:15;;:::i;:::-;34559:5;:12;34565:5;34559:12;;;;;;;;;;;;;;;34552:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34467:112;;;:::o;2647:132::-;2722:12;:10;:12::i;:::-;2711:23;;:7;:5;:7::i;:::-;:23;;;2703:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2647:132::o;10027:317::-;10142:6;10117:21;:31;;10109:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10196:12;10214:9;:14;;10236:6;10214:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10195:52;;;10266:7;10258:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10098:246;10027:317;;:::o;6422:293::-;5824:1;6556:7;;:19;6548:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5824:1;6689:7;:18;;;;6422:293::o;6723:213::-;5780:1;6906:7;:22;;;;6723:213::o;3742:191::-;3816:16;3835:6;;;;;;;;;;;3816:25;;3861:8;3852:6;;:17;;;;;;;;;;;;;;;;;;3916:8;3885:40;;3906:8;3885:40;;;;;;;;;;;;3805:128;3742:191;:::o;871:98::-;924:7;951:10;944:17;;871:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:182::-;322:34;318:1;310:6;306:14;299:58;182:182;:::o;370:366::-;512:3;533:67;597:2;592:3;533:67;:::i;:::-;526:74;;609:93;698:3;609:93;:::i;:::-;727:2;722:3;718:12;711:19;;370:366;;;:::o;742:419::-;908:4;946:2;935:9;931:18;923:26;;995:9;989:4;985:20;981:1;970:9;966:17;959:47;1023:131;1149:4;1023:131;:::i;:::-;1015:139;;742:419;;;:::o;1167:77::-;1204:7;1233:5;1222:16;;1167:77;;;:::o;1250:118::-;1337:24;1355:5;1337:24;:::i;:::-;1332:3;1325:37;1250:118;;:::o;1374:222::-;1467:4;1505:2;1494:9;1490:18;1482:26;;1518:71;1586:1;1575:9;1571:17;1562:6;1518:71;:::i;:::-;1374:222;;;;:::o;1602:75::-;1635:6;1668:2;1662:9;1652:19;;1602:75;:::o;1683:117::-;1792:1;1789;1782:12;1806:117;1915:1;1912;1905:12;1929:122;2002:24;2020:5;2002:24;:::i;:::-;1995:5;1992:35;1982:63;;2041:1;2038;2031:12;1982:63;1929:122;:::o;2057:139::-;2103:5;2141:6;2128:20;2119:29;;2157:33;2184:5;2157:33;:::i;:::-;2057:139;;;;:::o;2202:329::-;2261:6;2310:2;2298:9;2289:7;2285:23;2281:32;2278:119;;;2316:79;;:::i;:::-;2278:119;2436:1;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2407:117;2202:329;;;;:::o;2537:126::-;2574:7;2614:42;2607:5;2603:54;2592:65;;2537:126;;;:::o;2669:96::-;2706:7;2735:24;2753:5;2735:24;:::i;:::-;2724:35;;2669:96;;;:::o;2771:118::-;2858:24;2876:5;2858:24;:::i;:::-;2853:3;2846:37;2771:118;;:::o;2895:222::-;2988:4;3026:2;3015:9;3011:18;3003:26;;3039:71;3107:1;3096:9;3092:17;3083:6;3039:71;:::i;:::-;2895:222;;;;:::o;3123:122::-;3196:24;3214:5;3196:24;:::i;:::-;3189:5;3186:35;3176:63;;3235:1;3232;3225:12;3176:63;3123:122;:::o;3251:139::-;3297:5;3335:6;3322:20;3313:29;;3351:33;3378:5;3351:33;:::i;:::-;3251:139;;;;:::o;3396:90::-;3430:7;3473:5;3466:13;3459:21;3448:32;;3396:90;;;:::o;3492:116::-;3562:21;3577:5;3562:21;:::i;:::-;3555:5;3552:32;3542:60;;3598:1;3595;3588:12;3542:60;3492:116;:::o;3614:133::-;3657:5;3695:6;3682:20;3673:29;;3711:30;3735:5;3711:30;:::i;:::-;3614:133;;;;:::o;3753:468::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:50;4196:7;4187:6;4176:9;4172:22;4154:50;:::i;:::-;4144:60;;4099:115;3753:468;;;;;:::o;4227:329::-;4286:6;4335:2;4323:9;4314:7;4310:23;4306:32;4303:119;;;4341:79;;:::i;:::-;4303:119;4461:1;4486:53;4531:7;4522:6;4511:9;4507:22;4486:53;:::i;:::-;4476:63;;4432:117;4227:329;;;;:::o;4562:109::-;4643:21;4658:5;4643:21;:::i;:::-;4638:3;4631:34;4562:109;;:::o;4677:529::-;4842:4;4880:3;4869:9;4865:19;4857:27;;4894:71;4962:1;4951:9;4947:17;4938:6;4894:71;:::i;:::-;4975:72;5043:2;5032:9;5028:18;5019:6;4975:72;:::i;:::-;5057:66;5119:2;5108:9;5104:18;5095:6;5057:66;:::i;:::-;5133;5195:2;5184:9;5180:18;5171:6;5133:66;:::i;:::-;4677:529;;;;;;;:::o;5212:323::-;5268:6;5317:2;5305:9;5296:7;5292:23;5288:32;5285:119;;;5323:79;;:::i;:::-;5285:119;5443:1;5468:50;5510:7;5501:6;5490:9;5486:22;5468:50;:::i;:::-;5458:60;;5414:114;5212:323;;;;:::o;5541:117::-;5650:1;5647;5640:12;5664:102;5705:6;5756:2;5752:7;5747:2;5740:5;5736:14;5732:28;5722:38;;5664:102;;;:::o;5772:180::-;5820:77;5817:1;5810:88;5917:4;5914:1;5907:15;5941:4;5938:1;5931:15;5958:281;6041:27;6063:4;6041:27;:::i;:::-;6033:6;6029:40;6171:6;6159:10;6156:22;6135:18;6123:10;6120:34;6117:62;6114:88;;;6182:18;;:::i;:::-;6114:88;6222:10;6218:2;6211:22;6001:238;5958:281;;:::o;6245:129::-;6279:6;6306:20;;:::i;:::-;6296:30;;6335:33;6363:4;6355:6;6335:33;:::i;:::-;6245:129;;;:::o;6380:311::-;6457:4;6547:18;6539:6;6536:30;6533:56;;;6569:18;;:::i;:::-;6533:56;6619:4;6611:6;6607:17;6599:25;;6679:4;6673;6669:15;6661:23;;6380:311;;;:::o;6697:117::-;6806:1;6803;6796:12;6837:710;6933:5;6958:81;6974:64;7031:6;6974:64;:::i;:::-;6958:81;:::i;:::-;6949:90;;7059:5;7088:6;7081:5;7074:21;7122:4;7115:5;7111:16;7104:23;;7175:4;7167:6;7163:17;7155:6;7151:30;7204:3;7196:6;7193:15;7190:122;;;7223:79;;:::i;:::-;7190:122;7338:6;7321:220;7355:6;7350:3;7347:15;7321:220;;;7430:3;7459:37;7492:3;7480:10;7459:37;:::i;:::-;7454:3;7447:50;7526:4;7521:3;7517:14;7510:21;;7397:144;7381:4;7376:3;7372:14;7365:21;;7321:220;;;7325:21;6939:608;;6837:710;;;;;:::o;7570:370::-;7641:5;7690:3;7683:4;7675:6;7671:17;7667:27;7657:122;;7698:79;;:::i;:::-;7657:122;7815:6;7802:20;7840:94;7930:3;7922:6;7915:4;7907:6;7903:17;7840:94;:::i;:::-;7831:103;;7647:293;7570:370;;;;:::o;7946:539::-;8030:6;8079:2;8067:9;8058:7;8054:23;8050:32;8047:119;;;8085:79;;:::i;:::-;8047:119;8233:1;8222:9;8218:17;8205:31;8263:18;8255:6;8252:30;8249:117;;;8285:79;;:::i;:::-;8249:117;8390:78;8460:7;8451:6;8440:9;8436:22;8390:78;:::i;:::-;8380:88;;8176:302;7946:539;;;;:::o;8491:210::-;8578:4;8616:2;8605:9;8601:18;8593:26;;8629:65;8691:1;8680:9;8676:17;8667:6;8629:65;:::i;:::-;8491:210;;;;:::o;8707:474::-;8775:6;8783;8832:2;8820:9;8811:7;8807:23;8803:32;8800:119;;;8838:79;;:::i;:::-;8800:119;8958:1;8983:53;9028:7;9019:6;9008:9;9004:22;8983:53;:::i;:::-;8973:63;;8929:117;9085:2;9111:53;9156:7;9147:6;9136:9;9132:22;9111:53;:::i;:::-;9101:63;;9056:118;8707:474;;;;;:::o;9187:108::-;9264:24;9282:5;9264:24;:::i;:::-;9259:3;9252:37;9187:108;;:::o;9301:99::-;9372:21;9387:5;9372:21;:::i;:::-;9367:3;9360:34;9301:99;;:::o;9464:871::-;9613:4;9608:3;9604:14;9710:4;9703:5;9699:16;9693:23;9729:63;9786:4;9781:3;9777:14;9763:12;9729:63;:::i;:::-;9628:174;9891:4;9884:5;9880:16;9874:23;9910:63;9967:4;9962:3;9958:14;9944:12;9910:63;:::i;:::-;9812:171;10074:4;10067:5;10063:16;10057:23;10093:57;10144:4;10139:3;10135:14;10121:12;10093:57;:::i;:::-;9993:167;10242:4;10235:5;10231:16;10225:23;10261:57;10312:4;10307:3;10303:14;10289:12;10261:57;:::i;:::-;10170:158;9582:753;9464:871;;:::o;10341:327::-;10486:4;10524:3;10513:9;10509:19;10501:27;;10538:123;10658:1;10647:9;10643:17;10634:6;10538:123;:::i;:::-;10341:327;;;;:::o;10674:168::-;10814:20;10810:1;10802:6;10798:14;10791:44;10674:168;:::o;10848:366::-;10990:3;11011:67;11075:2;11070:3;11011:67;:::i;:::-;11004:74;;11087:93;11176:3;11087:93;:::i;:::-;11205:2;11200:3;11196:12;11189:19;;10848:366;;;:::o;11220:419::-;11386:4;11424:2;11413:9;11409:18;11401:26;;11473:9;11467:4;11463:20;11459:1;11448:9;11444:17;11437:47;11501:131;11627:4;11501:131;:::i;:::-;11493:139;;11220:419;;;:::o;11645:221::-;11785:34;11781:1;11773:6;11769:14;11762:58;11854:4;11849:2;11841:6;11837:15;11830:29;11645:221;:::o;11872:366::-;12014:3;12035:67;12099:2;12094:3;12035:67;:::i;:::-;12028:74;;12111:93;12200:3;12111:93;:::i;:::-;12229:2;12224:3;12220:12;12213:19;;11872:366;;;:::o;12244:419::-;12410:4;12448:2;12437:9;12433:18;12425:26;;12497:9;12491:4;12487:20;12483:1;12472:9;12468:17;12461:47;12525:131;12651:4;12525:131;:::i;:::-;12517:139;;12244:419;;;:::o;12669:165::-;12809:17;12805:1;12797:6;12793:14;12786:41;12669:165;:::o;12840:366::-;12982:3;13003:67;13067:2;13062:3;13003:67;:::i;:::-;12996:74;;13079:93;13168:3;13079:93;:::i;:::-;13197:2;13192:3;13188:12;13181:19;;12840:366;;;:::o;13212:419::-;13378:4;13416:2;13405:9;13401:18;13393:26;;13465:9;13459:4;13455:20;13451:1;13440:9;13436:17;13429:47;13493:131;13619:4;13493:131;:::i;:::-;13485:139;;13212:419;;;:::o;13637:168::-;13777:20;13773:1;13765:6;13761:14;13754:44;13637:168;:::o;13811:366::-;13953:3;13974:67;14038:2;14033:3;13974:67;:::i;:::-;13967:74;;14050:93;14139:3;14050:93;:::i;:::-;14168:2;14163:3;14159:12;14152:19;;13811:366;;;:::o;14183:419::-;14349:4;14387:2;14376:9;14372:18;14364:26;;14436:9;14430:4;14426:20;14422:1;14411:9;14407:17;14400:47;14464:131;14590:4;14464:131;:::i;:::-;14456:139;;14183:419;;;:::o;14608:166::-;14748:18;14744:1;14736:6;14732:14;14725:42;14608:166;:::o;14780:366::-;14922:3;14943:67;15007:2;15002:3;14943:67;:::i;:::-;14936:74;;15019:93;15108:3;15019:93;:::i;:::-;15137:2;15132:3;15128:12;15121:19;;14780:366;;;:::o;15152:419::-;15318:4;15356:2;15345:9;15341:18;15333:26;;15405:9;15399:4;15395:20;15391:1;15380:9;15376:17;15369:47;15433:131;15559:4;15433:131;:::i;:::-;15425:139;;15152:419;;;:::o;15577:171::-;15717:23;15713:1;15705:6;15701:14;15694:47;15577:171;:::o;15754:366::-;15896:3;15917:67;15981:2;15976:3;15917:67;:::i;:::-;15910:74;;15993:93;16082:3;15993:93;:::i;:::-;16111:2;16106:3;16102:12;16095:19;;15754:366;;;:::o;16126:419::-;16292:4;16330:2;16319:9;16315:18;16307:26;;16379:9;16373:4;16369:20;16365:1;16354:9;16350:17;16343:47;16407:131;16533:4;16407:131;:::i;:::-;16399:139;;16126:419;;;:::o;16551:173::-;16691:25;16687:1;16679:6;16675:14;16668:49;16551:173;:::o;16730:366::-;16872:3;16893:67;16957:2;16952:3;16893:67;:::i;:::-;16886:74;;16969:93;17058:3;16969:93;:::i;:::-;17087:2;17082:3;17078:12;17071:19;;16730:366;;;:::o;17102:419::-;17268:4;17306:2;17295:9;17291:18;17283:26;;17355:9;17349:4;17345:20;17341:1;17330:9;17326:17;17319:47;17383:131;17509:4;17383:131;:::i;:::-;17375:139;;17102:419;;;:::o;17527:164::-;17667:16;17663:1;17655:6;17651:14;17644:40;17527:164;:::o;17697:366::-;17839:3;17860:67;17924:2;17919:3;17860:67;:::i;:::-;17853:74;;17936:93;18025:3;17936:93;:::i;:::-;18054:2;18049:3;18045:12;18038:19;;17697:366;;;:::o;18069:419::-;18235:4;18273:2;18262:9;18258:18;18250:26;;18322:9;18316:4;18312:20;18308:1;18297:9;18293:17;18286:47;18350:131;18476:4;18350:131;:::i;:::-;18342:139;;18069:419;;;:::o;18494:180::-;18542:77;18539:1;18532:88;18639:4;18636:1;18629:15;18663:4;18660:1;18653:15;18680:191;18720:3;18739:20;18757:1;18739:20;:::i;:::-;18734:25;;18773:20;18791:1;18773:20;:::i;:::-;18768:25;;18816:1;18813;18809:9;18802:16;;18837:3;18834:1;18831:10;18828:36;;;18844:18;;:::i;:::-;18828:36;18680:191;;;;:::o;18877:166::-;19017:18;19013:1;19005:6;19001:14;18994:42;18877:166;:::o;19049:366::-;19191:3;19212:67;19276:2;19271:3;19212:67;:::i;:::-;19205:74;;19288:93;19377:3;19288:93;:::i;:::-;19406:2;19401:3;19397:12;19390:19;;19049:366;;;:::o;19421:419::-;19587:4;19625:2;19614:9;19610:18;19602:26;;19674:9;19668:4;19664:20;19660:1;19649:9;19645:17;19638:47;19702:131;19828:4;19702:131;:::i;:::-;19694:139;;19421:419;;;:::o;19846:410::-;19886:7;19909:20;19927:1;19909:20;:::i;:::-;19904:25;;19943:20;19961:1;19943:20;:::i;:::-;19938:25;;19998:1;19995;19991:9;20020:30;20038:11;20020:30;:::i;:::-;20009:41;;20199:1;20190:7;20186:15;20183:1;20180:22;20160:1;20153:9;20133:83;20110:139;;20229:18;;:::i;:::-;20110:139;19894:362;19846:410;;;;:::o;20262:180::-;20310:77;20307:1;20300:88;20407:4;20404:1;20397:15;20431:4;20428:1;20421:15;20448:185;20488:1;20505:20;20523:1;20505:20;:::i;:::-;20500:25;;20539:20;20557:1;20539:20;:::i;:::-;20534:25;;20578:1;20568:35;;20583:18;;:::i;:::-;20568:35;20625:1;20622;20618:9;20613:14;;20448:185;;;;:::o;20639:442::-;20788:4;20826:2;20815:9;20811:18;20803:26;;20839:71;20907:1;20896:9;20892:17;20883:6;20839:71;:::i;:::-;20920:72;20988:2;20977:9;20973:18;20964:6;20920:72;:::i;:::-;21002;21070:2;21059:9;21055:18;21046:6;21002:72;:::i;:::-;20639:442;;;;;;:::o;21087:180::-;21135:77;21132:1;21125:88;21232:4;21229:1;21222:15;21256:4;21253:1;21246:15;21273:174;21413:26;21409:1;21401:6;21397:14;21390:50;21273:174;:::o;21453:366::-;21595:3;21616:67;21680:2;21675:3;21616:67;:::i;:::-;21609:74;;21692:93;21781:3;21692:93;:::i;:::-;21810:2;21805:3;21801:12;21794:19;;21453:366;;;:::o;21825:419::-;21991:4;22029:2;22018:9;22014:18;22006:26;;22078:9;22072:4;22068:20;22064:1;22053:9;22049:17;22042:47;22106:131;22232:4;22106:131;:::i;:::-;22098:139;;21825:419;;;:::o;22250:233::-;22289:3;22312:24;22330:5;22312:24;:::i;:::-;22303:33;;22358:66;22351:5;22348:77;22345:103;;22428:18;;:::i;:::-;22345:103;22475:1;22468:5;22464:13;22457:20;;22250:233;;;:::o;22489:221::-;22629:34;22625:1;22617:6;22613:14;22606:58;22698:4;22693:2;22685:6;22681:15;22674:29;22489:221;:::o;22716:366::-;22858:3;22879:67;22943:2;22938:3;22879:67;:::i;:::-;22872:74;;22955:93;23044:3;22955:93;:::i;:::-;23073:2;23068:3;23064:12;23057:19;;22716:366;;;:::o;23088:419::-;23254:4;23292:2;23281:9;23277:18;23269:26;;23341:9;23335:4;23331:20;23327:1;23316:9;23312:17;23305:47;23369:131;23495:4;23369:131;:::i;:::-;23361:139;;23088:419;;;:::o;23513:332::-;23634:4;23672:2;23661:9;23657:18;23649:26;;23685:71;23753:1;23742:9;23738:17;23729:6;23685:71;:::i;:::-;23766:72;23834:2;23823:9;23819:18;23810:6;23766:72;:::i;:::-;23513:332;;;;;:::o;23851:225::-;23991:34;23987:1;23979:6;23975:14;23968:58;24060:8;24055:2;24047:6;24043:15;24036:33;23851:225;:::o;24082:366::-;24224:3;24245:67;24309:2;24304:3;24245:67;:::i;:::-;24238:74;;24321:93;24410:3;24321:93;:::i;:::-;24439:2;24434:3;24430:12;24423:19;;24082:366;;;:::o;24454:419::-;24620:4;24658:2;24647:9;24643:18;24635:26;;24707:9;24701:4;24697:20;24693:1;24682:9;24678:17;24671:47;24735:131;24861:4;24735:131;:::i;:::-;24727:139;;24454:419;;;:::o;24879:182::-;25019:34;25015:1;25007:6;25003:14;24996:58;24879:182;:::o;25067:366::-;25209:3;25230:67;25294:2;25289:3;25230:67;:::i;:::-;25223:74;;25306:93;25395:3;25306:93;:::i;:::-;25424:2;25419:3;25415:12;25408:19;;25067:366;;;:::o;25439:419::-;25605:4;25643:2;25632:9;25628:18;25620:26;;25692:9;25686:4;25682:20;25678:1;25667:9;25663:17;25656:47;25720:131;25846:4;25720:131;:::i;:::-;25712:139;;25439:419;;;:::o;25864:179::-;26004:31;26000:1;25992:6;25988:14;25981:55;25864:179;:::o;26049:366::-;26191:3;26212:67;26276:2;26271:3;26212:67;:::i;:::-;26205:74;;26288:93;26377:3;26288:93;:::i;:::-;26406:2;26401:3;26397:12;26390:19;;26049:366;;;:::o;26421:419::-;26587:4;26625:2;26614:9;26610:18;26602:26;;26674:9;26668:4;26664:20;26660:1;26649:9;26645:17;26638:47;26702:131;26828:4;26702:131;:::i;:::-;26694:139;;26421:419;;;:::o;26846:147::-;26947:11;26984:3;26969:18;;26846:147;;;;:::o;26999:114::-;;:::o;27119:398::-;27278:3;27299:83;27380:1;27375:3;27299:83;:::i;:::-;27292:90;;27391:93;27480:3;27391:93;:::i;:::-;27509:1;27504:3;27500:11;27493:18;;27119:398;;;:::o;27523:379::-;27707:3;27729:147;27872:3;27729:147;:::i;:::-;27722:154;;27893:3;27886:10;;27523:379;;;:::o;27908:245::-;28048:34;28044:1;28036:6;28032:14;28025:58;28117:28;28112:2;28104:6;28100:15;28093:53;27908:245;:::o;28159:366::-;28301:3;28322:67;28386:2;28381:3;28322:67;:::i;:::-;28315:74;;28398:93;28487:3;28398:93;:::i;:::-;28516:2;28511:3;28507:12;28500:19;;28159:366;;;:::o;28531:419::-;28697:4;28735:2;28724:9;28720:18;28712:26;;28784:9;28778:4;28774:20;28770:1;28759:9;28755:17;28748:47;28812:131;28938:4;28812:131;:::i;:::-;28804:139;;28531:419;;;:::o;28956:181::-;29096:33;29092:1;29084:6;29080:14;29073:57;28956:181;:::o;29143:366::-;29285:3;29306:67;29370:2;29365:3;29306:67;:::i;:::-;29299:74;;29382:93;29471:3;29382:93;:::i;:::-;29500:2;29495:3;29491:12;29484:19;;29143:366;;;:::o;29515:419::-;29681:4;29719:2;29708:9;29704:18;29696:26;;29768:9;29762:4;29758:20;29754:1;29743:9;29739:17;29732:47;29796:131;29922:4;29796:131;:::i;:::-;29788:139;;29515:419;;;:::o
Swarm Source
ipfs://e7494d0ba9c5c30d82fc36f3c7c48a001cd111535abe37c5663b12085c8931c4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.