Source Code
Latest 25 from a total of 16,405 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 8880846 | 1294 days ago | IN | 0 BTT | 36.57241219 | ||||
| Claim | 8535246 | 1302 days ago | IN | 0 BTT | 36.5826 | ||||
| Claim | 8495909 | 1303 days ago | IN | 0 BTT | 36.5724 | ||||
| Claim | 8495805 | 1303 days ago | IN | 0 BTT | 36.5904 | ||||
| Claim | 8487194 | 1303 days ago | IN | 0 BTT | 36.5832 | ||||
| Claim | 8487165 | 1303 days ago | IN | 0 BTT | 36.5802 | ||||
| Claim | 8487113 | 1303 days ago | IN | 0 BTT | 36.5862 | ||||
| Claim | 8487090 | 1303 days ago | IN | 0 BTT | 36.5898 | ||||
| Claim | 8487040 | 1303 days ago | IN | 0 BTT | 36.5934 | ||||
| Claim | 8487011 | 1303 days ago | IN | 0 BTT | 36.5664 | ||||
| Claim | 8486975 | 1303 days ago | IN | 0 BTT | 36.5796 | ||||
| Claim | 8486948 | 1303 days ago | IN | 0 BTT | 36.5736 | ||||
| Claim | 8486877 | 1303 days ago | IN | 0 BTT | 36.5868 | ||||
| Claim | 8486826 | 1303 days ago | IN | 0 BTT | 36.5706 | ||||
| Claim | 8486795 | 1303 days ago | IN | 0 BTT | 36.5772 | ||||
| Claim | 8486749 | 1303 days ago | IN | 0 BTT | 36.5796 | ||||
| Claim | 8486713 | 1303 days ago | IN | 0 BTT | 36.5694 | ||||
| Claim | 8486672 | 1303 days ago | IN | 0 BTT | 36.5772 | ||||
| Claim | 8486631 | 1303 days ago | IN | 0 BTT | 36.573 | ||||
| Claim | 8486578 | 1303 days ago | IN | 0 BTT | 36.5706 | ||||
| Claim | 8486535 | 1303 days ago | IN | 0 BTT | 36.5718 | ||||
| Claim | 8486504 | 1303 days ago | IN | 0 BTT | 36.5628 | ||||
| Claim | 8486454 | 1303 days ago | IN | 0 BTT | 36.5838 | ||||
| Claim | 8486412 | 1303 days ago | IN | 0 BTT | 36.5694 | ||||
| Claim | 8486372 | 1303 days ago | IN | 0 BTT | 36.5802 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
KyberSwapDistributor
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import {ReentrancyGuard} from './ReentrancyGuard.sol';
import {Ownable} from './Ownable.sol';
import {SafeERC20} from './SafeERC20.sol';
import {IERC20} from './IERC20.sol';
import {Address} from './Address.sol';
import {MerkleProof} from './MerkleProof.sol';
import {IKyberSwapDistributor} from './IKyberSwapDistributor.sol';
/**
* @title Distributor contract for Kyberswap
*
**/
contract KyberSwapDistributor is IKyberSwapDistributor, Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
using Address for address payable;
uint256 public phaseId;
//phaseId => Distribution
mapping(uint256 => Distribution) public distributionInfo;
// wallet => phase id => token => claimedAmount
mapping(address => mapping(uint256 => mapping(IERC20 => uint256))) public claimedAmounts;
//phaseId => token => total
mapping(uint256 => mapping(IERC20 => uint256)) public totalClaimedAmounts;
constructor(address admin) {
transferOwnership(admin);
}
receive() external payable {}
/**
* @dev Allow owner to withdraw reward tokens
*/
function ownerWithdraw(IERC20[] calldata tokens, uint256[] calldata amounts)
external
override
onlyOwner
{
for (uint256 i = 0; i < tokens.length; i++) {
if (tokens[i] == IERC20(address(0))) {
payable(_msgSender()).sendValue(amounts[i]);
} else {
tokens[i].safeTransfer(_msgSender(), amounts[i]);
}
}
}
/**
* @dev Claim accumulated rewards for a set of tokens at a phase
* @param id phase id number
* @param index user reward info index in the array of reward info
* during merkle tree generation
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimable by reward beneficiary
* @param amounts cumulative token amounts claimable by reward beneficiary
* @param merkleProof merkle proof of claim
**/
function claim(
uint256 id,
uint256 index,
address user,
IERC20[] calldata tokens,
uint256[] calldata amounts,
bytes32[] calldata merkleProof
) external override nonReentrant {
// verify if can claim
require(isValidClaim(id, index, user, tokens, amounts, merkleProof), 'invalid claim data');
uint256[] memory claimAmounts = new uint256[](tokens.length);
// claim each token
for (uint256 i = 0; i < tokens.length; i++) {
// if none claimable, skip
if (amounts[i] == 0) continue;
uint256 claimable = amounts[i] - claimedAmounts[user][id][tokens[i]];
if (claimable == 0) continue;
if (tokens[i] == IERC20(address(0))) {
payable(user).sendValue(claimable);
} else {
tokens[i].safeTransfer(user, claimable);
}
claimedAmounts[user][id][tokens[i]] = amounts[i];
claimAmounts[i] = claimable;
totalClaimedAmounts[id][tokens[i]] += claimable;
}
emit Claimed(id, user, tokens, claimAmounts);
}
/// @notice Propose a new phase distribution, only by admin
function proposeDistribution(
bytes32 root,
uint256 deadline,
string memory content
) external override onlyOwner {
distributionInfo[phaseId] = Distribution(root, deadline, content);
emit PhaseCreated(phaseId++, root, deadline, content);
}
function updateDistributionTime(uint256 id, uint256 newTime) external onlyOwner {
require(phaseId >= id, 'Invalid phase');
require(newTime >= _getBlockTime(), 'Invalid time');
distributionInfo[id].deadline = newTime;
emit PhaseUpdated(id, newTime);
}
/**
* @dev Fetch claimed rewards for a set of tokens in a phase
* @param id phase Id number
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimed by reward beneficiary
* @return userClaimedAmounts claimed token amounts by reward beneficiary in a phase
**/
function getClaimedAmounts(
uint256 id,
address user,
IERC20[] calldata tokens
) external view override returns (uint256[] memory userClaimedAmounts) {
userClaimedAmounts = new uint256[](tokens.length);
for (uint256 i = 0; i < tokens.length; i++) {
userClaimedAmounts[i] = claimedAmounts[user][id][tokens[i]];
}
}
function encodeClaim(
uint256 id,
uint256 index,
address account,
IERC20[] calldata tokens,
uint256[] calldata amounts
) external pure returns (bytes memory encodedData, bytes32 encodedDataHash) {
require(tokens.length == amounts.length, 'bad tokens and amounts length');
encodedData = abi.encode(id, index, account, tokens, amounts);
encodedDataHash = keccak256(encodedData);
}
/**
* @dev Checks whether a claim is valid or not
* @param id phase Id number
* @param index user reward info index in the array of reward info
* during merkle tree generation
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimable by reward beneficiary
* @param amounts reward token amounts claimable by reward beneficiary
* @param merkleProof merkle proof of claim
* @return true if valid claim, false otherwise
**/
function isValidClaim(
uint256 id,
uint256 index,
address user,
IERC20[] calldata tokens,
uint256[] calldata amounts,
bytes32[] calldata merkleProof
) public view override returns (bool) {
if (tokens.length != amounts.length) return false;
if (_getBlockTime() >= distributionInfo[id].deadline) return false;
bytes32 node = keccak256(abi.encode(id, index, user, tokens, amounts));
return MerkleProof.verify(merkleProof, distributionInfo[id].root, node);
}
/// @notice get block timestamp
function _getBlockTime() internal view virtual returns (uint32) {
return uint32(block.timestamp);
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
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;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import {IERC20} from './IERC20.sol';
interface IKyberSwapDistributor {
struct Distribution {
bytes32 root;
uint256 deadline;
string content;
}
event Claimed(uint256 indexed id, address user, IERC20[] tokens, uint256[] claimAmounts);
event PhaseCreated(uint256 indexed id, bytes32 root, uint256 indexed deadline, string content);
event PhaseUpdated(uint256 indexed id, uint256 indexed newTime);
/**
* @dev Claim accumulated rewards for a set of tokens at a phase
* @param id phase Id number
* @param index user reward info index in the array of reward info
* during merkle tree generation
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimable by reward beneficiary
* @param amounts cumulative token amounts claimable by reward beneficiary
* @param merkleProof merkle proof of claim
**/
function claim(
uint256 id,
uint256 index,
address user,
IERC20[] calldata tokens,
uint256[] calldata amounts,
bytes32[] calldata merkleProof
) external;
function ownerWithdraw(IERC20[] calldata tokens, uint256[] calldata amounts) external;
function proposeDistribution(
bytes32 root,
uint256 deadline,
string memory content
) external;
function updateDistributionTime(uint256 id, uint256 newTime) external;
/**
* @dev Checks whether a claim is valid or not
* @param id phase Id number
* @param index user reward info index in the array of reward info
* during merkle tree generation
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimable by reward beneficiary
* @param amounts reward token amounts claimable by reward beneficiary
* @param merkleProof merkle proof of claim
* @return true if valid claim, false otherwise
**/
function isValidClaim(
uint256 id,
uint256 index,
address user,
IERC20[] calldata tokens,
uint256[] calldata amounts,
bytes32[] calldata merkleProof
) external view returns (bool);
/**
* @dev Fetch claimed rewards for a set of tokens in a phase
* @param id phase Id number
* @param user wallet address of reward beneficiary
* @param tokens array of tokens claimed by reward beneficiary
* @return userClaimedAmounts claimed token amounts by reward beneficiary in a phase
**/
function getClaimedAmounts(
uint256 id,
address user,
IERC20[] calldata tokens
) external view returns (uint256[] memory userClaimedAmounts);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Trees proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
} else {
// Hash(current element of the proof + current computed hash)
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
}
}
// Check if the computed hash (root) is equal to the provided root
return computedHash == root;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Context.sol";
/**
* @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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
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 make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"claimAmounts","type":"uint256[]"}],"name":"Claimed","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":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"deadline","type":"uint256"},{"indexed":false,"internalType":"string","name":"content","type":"string"}],"name":"PhaseCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"PhaseUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"contract IERC20","name":"","type":"address"}],"name":"claimedAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"distributionInfo","outputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"string","name":"content","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"encodeClaim","outputs":[{"internalType":"bytes","name":"encodedData","type":"bytes"},{"internalType":"bytes32","name":"encodedDataHash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"getClaimedAmounts","outputs":[{"internalType":"uint256[]","name":"userClaimedAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"isValidClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"phaseId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"string","name":"content","type":"string"}],"name":"proposeDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"contract IERC20","name":"","type":"address"}],"name":"totalClaimedAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"updateDistributionTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003280380380620032808339818101604052810190620000379190620002eb565b620000576200004b6200007660201b60201c565b6200007e60201b60201c565b600180819055506200006f816200014260201b60201c565b5062000438565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001526200007660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001786200025860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620001d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c8906200037e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200023b9062000416565b60405180910390fd5b62000255816200007e60201b60201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002b38262000286565b9050919050565b620002c581620002a6565b8114620002d157600080fd5b50565b600081519050620002e581620002ba565b92915050565b60006020828403121562000304576200030362000281565b5b60006200031484828501620002d4565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620003666020836200031d565b915062000373826200032e565b602082019050919050565b60006020820190508181036000830152620003998162000357565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620003fe6026836200031d565b91506200040b82620003a0565b604082019050919050565b600060208201905081810360008301526200043181620003ef565b9050919050565b612e3880620004486000396000f3fe6080604052600436106100e05760003560e01c80638da5cb5b1161007f578063cb3b0bab11610059578063cb3b0bab146102cb578063f2fde38b14610308578063f4ec1cf314610331578063f960713f1461035a576100e7565b80638da5cb5b1461023957806397e971d014610264578063c390d331146102a2576100e7565b8063390556f2116100bb578063390556f21461019157806358303b10146101ba578063662f734e146101e5578063715018a614610222576100e7565b8062db01e0146100ec57806301bc5898146101155780632b6063a314610152576100e7565b366100e757005b600080fd5b3480156100f857600080fd5b50610113600480360381019061010e91906118a8565b610397565b005b34801561012157600080fd5b5061013c60048036038101906101379190611a57565b6104f5565b6040516101499190611b61565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611b7c565b6105ea565b60405161018893929190611c6a565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611ca8565b61069c565b005b3480156101c657600080fd5b506101cf61085d565b6040516101dc9190611d29565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611d82565b610863565b6040516102199190611d29565b60405180910390f35b34801561022e57600080fd5b50610237610888565b005b34801561024557600080fd5b5061024e610910565b60405161025b9190611dd1565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190611dec565b610939565b604051610299929190611efd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190611a57565b6109c9565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190611f2d565b610e9c565b6040516102ff919061205f565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190612081565b610fea565b005b34801561033d57600080fd5b506103586004803603810190610353919061220a565b6110e2565b005b34801561036657600080fd5b50610381600480360381019061037c9190612279565b611218565b60405161038e9190611d29565b60405180910390f35b61039f61124a565b73ffffffffffffffffffffffffffffffffffffffff166103bd610910565b73ffffffffffffffffffffffffffffffffffffffff1614610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040a90612318565b60405180910390fd5b816002541015610458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044f90612384565b60405180910390fd5b610460611252565b63ffffffff168110156104a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049f906123f0565b60405180910390fd5b80600360008481526020019081526020016000206001018190555080827fa89951a03e2758c1bc16583a91fbb676c836dcda755bf7d40c05625b2bfdccec60405160405180910390a35050565b600084849050878790501461050d57600090506105dd565b600360008b81526020019081526020016000206001015461052c611252565b63ffffffff161061054057600090506105dd565b60008a8a8a8a8a8a8a60405160200161055f9796959493929190612584565b6040516020818303038152906040528051906020012090506105d9848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600360008e8152602001908152602001600020600001548361125a565b9150505b9998505050505050505050565b600360205280600052604060002060009150905080600001549080600101549080600201805461061990612618565b80601f016020809104026020016040519081016040528092919081815260200182805461064590612618565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905083565b6106a461124a565b73ffffffffffffffffffffffffffffffffffffffff166106c2610910565b73ffffffffffffffffffffffffffffffffffffffff1614610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f90612318565b60405180910390fd5b60005b8484905081101561085657600073ffffffffffffffffffffffffffffffffffffffff168585838181106107515761075061264a565b5b90506020020160208101906107669190612679565b73ffffffffffffffffffffffffffffffffffffffff1614156107d0576107cb8383838181106107985761079761264a565b5b905060200201356107a761124a565b73ffffffffffffffffffffffffffffffffffffffff1661131090919063ffffffff16565b610843565b6108426107db61124a565b8484848181106107ee576107ed61264a565b5b905060200201358787858181106108085761080761264a565b5b905060200201602081019061081d9190612679565b73ffffffffffffffffffffffffffffffffffffffff166114049092919063ffffffff16565b5b808061084e906126d5565b91505061071b565b5050505050565b60025481565b6005602052816000526040600020602052806000526040600020600091509150505481565b61089061124a565b73ffffffffffffffffffffffffffffffffffffffff166108ae610910565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90612318565b60405180910390fd5b61090e600061148a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606000838390508686905014610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c9061276a565b60405180910390fd5b888888888888886040516020016109a29796959493929190612584565b60405160208183030381529060405291508180519060200120905097509795505050505050565b60026001541415610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a06906127d6565b60405180910390fd5b6002600181905550610a288989898989898989896104f5565b610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90612842565b60405180910390fd5b60008686905067ffffffffffffffff811115610a8657610a856120df565b5b604051908082528060200260200182016040528015610ab45781602001602082028036833780820191505090505b50905060005b87879050811015610e4a576000868683818110610ada57610ad961264a565b5b905060200201351415610aec57610e37565b6000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002060008a8a85818110610b5357610b5261264a565b5b9050602002016020810190610b689190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054878784818110610bb657610bb561264a565b5b90506020020135610bc79190612862565b90506000811415610bd85750610e37565b600073ffffffffffffffffffffffffffffffffffffffff16898984818110610c0357610c0261264a565b5b9050602002016020810190610c189190612679565b73ffffffffffffffffffffffffffffffffffffffff161415610c6257610c5d818b73ffffffffffffffffffffffffffffffffffffffff1661131090919063ffffffff16565b610cb5565b610cb48a828b8b86818110610c7a57610c7961264a565b5b9050602002016020810190610c8f9190612679565b73ffffffffffffffffffffffffffffffffffffffff166114049092919063ffffffff16565b5b868683818110610cc857610cc761264a565b5b90506020020135600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e815260200190815260200160002060008b8b86818110610d3457610d3361264a565b5b9050602002016020810190610d499190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080838381518110610d9b57610d9a61264a565b5b60200260200101818152505080600560008e815260200190815260200160002060008b8b86818110610dd057610dcf61264a565b5b9050602002016020810190610de59190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2e9190612896565b92505081905550505b8080610e42906126d5565b915050610aba565b50897f1869cd8d657c37384f585ccf16d7d1baddfcb0552617440f4fefe638726094c489898985604051610e8194939291906128ec565b60405180910390a25060018081905550505050505050505050565b60608282905067ffffffffffffffff811115610ebb57610eba6120df565b5b604051908082528060200260200182016040528015610ee95781602001602082028036833780820191505090505b50905060005b83839050811015610fe157600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206000858584818110610f5f57610f5e61264a565b5b9050602002016020810190610f749190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610fc257610fc161264a565b5b6020026020010181815250508080610fd9906126d5565b915050610eef565b50949350505050565b610ff261124a565b73ffffffffffffffffffffffffffffffffffffffff16611010610910565b73ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90612318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd906129a5565b60405180910390fd5b6110df8161148a565b50565b6110ea61124a565b73ffffffffffffffffffffffffffffffffffffffff16611108610910565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612318565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600360006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020190805190602001906111be9291906117bb565b5090505081600260008154809291906111d6906126d5565b919050557fb920eca87e99c1731d756a5533a92f0e02ae5e4c79d50260a7303364f210ad01858460405161120b9291906129c5565b60405180910390a3505050565b600460205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600033905090565b600042905090565b60008082905060005b85518110156113025760008682815181106112815761128061264a565b5b602002602001015190508083116112c25782816040516020016112a5929190612a16565b6040516020818303038152906040528051906020012092506112ee565b80836040516020016112d5929190612a16565b6040516020818303038152906040528051906020012092505b5080806112fa906126d5565b915050611263565b508381149150509392505050565b80471015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612a8e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161137990612adf565b60006040518083038185875af1925050503d80600081146113b6576040519150601f19603f3d011682016040523d82523d6000602084013e6113bb565b606091505b50509050806113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612b66565b60405180910390fd5b505050565b6114858363a9059cbb60e01b8484604051602401611423929190612b86565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061154e565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006115b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116159092919063ffffffff16565b905060008151111561161057808060200190518101906115d09190612bdb565b61160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690612c7a565b60405180910390fd5b5b505050565b6060611624848460008561162d565b90509392505050565b606082471015611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990612d0c565b60405180910390fd5b61167b85611741565b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190612d78565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116e39190612dc9565b60006040518083038185875af1925050503d8060008114611720576040519150601f19603f3d011682016040523d82523d6000602084013e611725565b606091505b5091509150611735828286611754565b92505050949350505050565b600080823b905060008111915050919050565b60608315611764578290506117b4565b6000835111156117775782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab9190612de0565b60405180910390fd5b9392505050565b8280546117c790612618565b90600052602060002090601f0160209004810192826117e95760008555611830565b82601f1061180257805160ff1916838001178555611830565b82800160010185558215611830579182015b8281111561182f578251825591602001919060010190611814565b5b50905061183d9190611841565b5090565b5b8082111561185a576000816000905550600101611842565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61188581611872565b811461189057600080fd5b50565b6000813590506118a28161187c565b92915050565b600080604083850312156118bf576118be611868565b5b60006118cd85828601611893565b92505060206118de85828601611893565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611913826118e8565b9050919050565b61192381611908565b811461192e57600080fd5b50565b6000813590506119408161191a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261196b5761196a611946565b5b8235905067ffffffffffffffff8111156119885761198761194b565b5b6020830191508360208202830111156119a4576119a3611950565b5b9250929050565b60008083601f8401126119c1576119c0611946565b5b8235905067ffffffffffffffff8111156119de576119dd61194b565b5b6020830191508360208202830111156119fa576119f9611950565b5b9250929050565b60008083601f840112611a1757611a16611946565b5b8235905067ffffffffffffffff811115611a3457611a3361194b565b5b602083019150836020820283011115611a5057611a4f611950565b5b9250929050565b600080600080600080600080600060c08a8c031215611a7957611a78611868565b5b6000611a878c828d01611893565b9950506020611a988c828d01611893565b9850506040611aa98c828d01611931565b97505060608a013567ffffffffffffffff811115611aca57611ac961186d565b5b611ad68c828d01611955565b965096505060808a013567ffffffffffffffff811115611af957611af861186d565b5b611b058c828d016119ab565b945094505060a08a013567ffffffffffffffff811115611b2857611b2761186d565b5b611b348c828d01611a01565b92509250509295985092959850929598565b60008115159050919050565b611b5b81611b46565b82525050565b6000602082019050611b766000830184611b52565b92915050565b600060208284031215611b9257611b91611868565b5b6000611ba084828501611893565b91505092915050565b6000819050919050565b611bbc81611ba9565b82525050565b611bcb81611872565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c0b578082015181840152602081019050611bf0565b83811115611c1a576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c3c82611bd1565b611c468185611bdc565b9350611c56818560208601611bed565b611c5f81611c20565b840191505092915050565b6000606082019050611c7f6000830186611bb3565b611c8c6020830185611bc2565b8181036040830152611c9e8184611c31565b9050949350505050565b60008060008060408587031215611cc257611cc1611868565b5b600085013567ffffffffffffffff811115611ce057611cdf61186d565b5b611cec87828801611955565b9450945050602085013567ffffffffffffffff811115611d0f57611d0e61186d565b5b611d1b878288016119ab565b925092505092959194509250565b6000602082019050611d3e6000830184611bc2565b92915050565b6000611d4f82611908565b9050919050565b611d5f81611d44565b8114611d6a57600080fd5b50565b600081359050611d7c81611d56565b92915050565b60008060408385031215611d9957611d98611868565b5b6000611da785828601611893565b9250506020611db885828601611d6d565b9150509250929050565b611dcb81611908565b82525050565b6000602082019050611de66000830184611dc2565b92915050565b600080600080600080600060a0888a031215611e0b57611e0a611868565b5b6000611e198a828b01611893565b9750506020611e2a8a828b01611893565b9650506040611e3b8a828b01611931565b955050606088013567ffffffffffffffff811115611e5c57611e5b61186d565b5b611e688a828b01611955565b9450945050608088013567ffffffffffffffff811115611e8b57611e8a61186d565b5b611e978a828b016119ab565b925092505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b6000611ecf82611ea8565b611ed98185611eb3565b9350611ee9818560208601611bed565b611ef281611c20565b840191505092915050565b60006040820190508181036000830152611f178185611ec4565b9050611f266020830184611bb3565b9392505050565b60008060008060608587031215611f4757611f46611868565b5b6000611f5587828801611893565b9450506020611f6687828801611931565b935050604085013567ffffffffffffffff811115611f8757611f8661186d565b5b611f9387828801611955565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd681611872565b82525050565b6000611fe88383611fcd565b60208301905092915050565b6000602082019050919050565b600061200c82611fa1565b6120168185611fac565b935061202183611fbd565b8060005b838110156120525781516120398882611fdc565b975061204483611ff4565b925050600181019050612025565b5085935050505092915050565b600060208201905081810360008301526120798184612001565b905092915050565b60006020828403121561209757612096611868565b5b60006120a584828501611931565b91505092915050565b6120b781611ba9565b81146120c257600080fd5b50565b6000813590506120d4816120ae565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61211782611c20565b810181811067ffffffffffffffff82111715612136576121356120df565b5b80604052505050565b600061214961185e565b9050612155828261210e565b919050565b600067ffffffffffffffff821115612175576121746120df565b5b61217e82611c20565b9050602081019050919050565b82818337600083830152505050565b60006121ad6121a88461215a565b61213f565b9050828152602081018484840111156121c9576121c86120da565b5b6121d484828561218b565b509392505050565b600082601f8301126121f1576121f0611946565b5b813561220184826020860161219a565b91505092915050565b60008060006060848603121561222357612222611868565b5b6000612231868287016120c5565b935050602061224286828701611893565b925050604084013567ffffffffffffffff8111156122635761226261186d565b5b61226f868287016121dc565b9150509250925092565b60008060006060848603121561229257612291611868565b5b60006122a086828701611931565b93505060206122b186828701611893565b92505060406122c286828701611d6d565b9150509250925092565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612302602083611bdc565b915061230d826122cc565b602082019050919050565b60006020820190508181036000830152612331816122f5565b9050919050565b7f496e76616c696420706861736500000000000000000000000000000000000000600082015250565b600061236e600d83611bdc565b915061237982612338565b602082019050919050565b6000602082019050818103600083015261239d81612361565b9050919050565b7f496e76616c69642074696d650000000000000000000000000000000000000000600082015250565b60006123da600c83611bdc565b91506123e5826123a4565b602082019050919050565b60006020820190508181036000830152612409816123cd565b9050919050565b600082825260208201905092915050565b6000819050919050565b6000819050919050565b600061245061244b612446846118e8565b61242b565b6118e8565b9050919050565b600061246282612435565b9050919050565b600061247482612457565b9050919050565b61248481612469565b82525050565b6000612496838361247b565b60208301905092915050565b60006124b16020840184611d6d565b905092915050565b6000602082019050919050565b60006124d28385612410565b93506124dd82612421565b8060005b85811015612516576124f382846124a2565b6124fd888261248a565b9750612508836124b9565b9250506001810190506124e1565b5085925050509392505050565b600080fd5b60006125348385611fac565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561256757612566612523565b5b60208302925061257883858461218b565b82840190509392505050565b600060a082019050612599600083018a611bc2565b6125a66020830189611bc2565b6125b36040830188611dc2565b81810360608301526125c68186886124c6565b905081810360808301526125db818486612528565b905098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061263057607f821691505b60208210811415612644576126436125e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561268f5761268e611868565b5b600061269d84828501611d6d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e082611872565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612713576127126126a6565b5b600182019050919050565b7f62616420746f6b656e7320616e6420616d6f756e7473206c656e677468000000600082015250565b6000612754601d83611bdc565b915061275f8261271e565b602082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127c0601f83611bdc565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b7f696e76616c696420636c61696d20646174610000000000000000000000000000600082015250565b600061282c601283611bdc565b9150612837826127f6565b602082019050919050565b6000602082019050818103600083015261285b8161281f565b9050919050565b600061286d82611872565b915061287883611872565b92508282101561288b5761288a6126a6565b5b828203905092915050565b60006128a182611872565b91506128ac83611872565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128e1576128e06126a6565b5b828201905092915050565b60006060820190506129016000830187611dc2565b81810360208301526129148185876124c6565b905081810360408301526129288184612001565b905095945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061298f602683611bdc565b915061299a82612933565b604082019050919050565b600060208201905081810360008301526129be81612982565b9050919050565b60006040820190506129da6000830185611bb3565b81810360208301526129ec8184611c31565b90509392505050565b6000819050919050565b612a10612a0b82611ba9565b6129f5565b82525050565b6000612a2282856129ff565b602082019150612a3282846129ff565b6020820191508190509392505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612a78601d83611bdc565b9150612a8382612a42565b602082019050919050565b60006020820190508181036000830152612aa781612a6b565b9050919050565b600081905092915050565b50565b6000612ac9600083612aae565b9150612ad482612ab9565b600082019050919050565b6000612aea82612abc565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000612b50603a83611bdc565b9150612b5b82612af4565b604082019050919050565b60006020820190508181036000830152612b7f81612b43565b9050919050565b6000604082019050612b9b6000830185611dc2565b612ba86020830184611bc2565b9392505050565b612bb881611b46565b8114612bc357600080fd5b50565b600081519050612bd581612baf565b92915050565b600060208284031215612bf157612bf0611868565b5b6000612bff84828501612bc6565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612c64602a83611bdc565b9150612c6f82612c08565b604082019050919050565b60006020820190508181036000830152612c9381612c57565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612cf6602683611bdc565b9150612d0182612c9a565b604082019050919050565b60006020820190508181036000830152612d2581612ce9565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612d62601d83611bdc565b9150612d6d82612d2c565b602082019050919050565b60006020820190508181036000830152612d9181612d55565b9050919050565b6000612da382611ea8565b612dad8185612aae565b9350612dbd818560208601611bed565b80840191505092915050565b6000612dd58284612d98565b915081905092915050565b60006020820190508181036000830152612dfa8184611c31565b90509291505056fea2646970667358221220d420f3e5cca704ce900e21d0bf53c28b3a4308f6ef15d38c462aa7034a2788c864736f6c6343000809003300000000000000000000000006058942ef19da2054fb669793d3889de42d6c38
Deployed Bytecode
0x6080604052600436106100e05760003560e01c80638da5cb5b1161007f578063cb3b0bab11610059578063cb3b0bab146102cb578063f2fde38b14610308578063f4ec1cf314610331578063f960713f1461035a576100e7565b80638da5cb5b1461023957806397e971d014610264578063c390d331146102a2576100e7565b8063390556f2116100bb578063390556f21461019157806358303b10146101ba578063662f734e146101e5578063715018a614610222576100e7565b8062db01e0146100ec57806301bc5898146101155780632b6063a314610152576100e7565b366100e757005b600080fd5b3480156100f857600080fd5b50610113600480360381019061010e91906118a8565b610397565b005b34801561012157600080fd5b5061013c60048036038101906101379190611a57565b6104f5565b6040516101499190611b61565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611b7c565b6105ea565b60405161018893929190611c6a565b60405180910390f35b34801561019d57600080fd5b506101b860048036038101906101b39190611ca8565b61069c565b005b3480156101c657600080fd5b506101cf61085d565b6040516101dc9190611d29565b60405180910390f35b3480156101f157600080fd5b5061020c60048036038101906102079190611d82565b610863565b6040516102199190611d29565b60405180910390f35b34801561022e57600080fd5b50610237610888565b005b34801561024557600080fd5b5061024e610910565b60405161025b9190611dd1565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190611dec565b610939565b604051610299929190611efd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190611a57565b6109c9565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190611f2d565b610e9c565b6040516102ff919061205f565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190612081565b610fea565b005b34801561033d57600080fd5b506103586004803603810190610353919061220a565b6110e2565b005b34801561036657600080fd5b50610381600480360381019061037c9190612279565b611218565b60405161038e9190611d29565b60405180910390f35b61039f61124a565b73ffffffffffffffffffffffffffffffffffffffff166103bd610910565b73ffffffffffffffffffffffffffffffffffffffff1614610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040a90612318565b60405180910390fd5b816002541015610458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044f90612384565b60405180910390fd5b610460611252565b63ffffffff168110156104a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049f906123f0565b60405180910390fd5b80600360008481526020019081526020016000206001018190555080827fa89951a03e2758c1bc16583a91fbb676c836dcda755bf7d40c05625b2bfdccec60405160405180910390a35050565b600084849050878790501461050d57600090506105dd565b600360008b81526020019081526020016000206001015461052c611252565b63ffffffff161061054057600090506105dd565b60008a8a8a8a8a8a8a60405160200161055f9796959493929190612584565b6040516020818303038152906040528051906020012090506105d9848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600360008e8152602001908152602001600020600001548361125a565b9150505b9998505050505050505050565b600360205280600052604060002060009150905080600001549080600101549080600201805461061990612618565b80601f016020809104026020016040519081016040528092919081815260200182805461064590612618565b80156106925780601f1061066757610100808354040283529160200191610692565b820191906000526020600020905b81548152906001019060200180831161067557829003601f168201915b5050505050905083565b6106a461124a565b73ffffffffffffffffffffffffffffffffffffffff166106c2610910565b73ffffffffffffffffffffffffffffffffffffffff1614610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f90612318565b60405180910390fd5b60005b8484905081101561085657600073ffffffffffffffffffffffffffffffffffffffff168585838181106107515761075061264a565b5b90506020020160208101906107669190612679565b73ffffffffffffffffffffffffffffffffffffffff1614156107d0576107cb8383838181106107985761079761264a565b5b905060200201356107a761124a565b73ffffffffffffffffffffffffffffffffffffffff1661131090919063ffffffff16565b610843565b6108426107db61124a565b8484848181106107ee576107ed61264a565b5b905060200201358787858181106108085761080761264a565b5b905060200201602081019061081d9190612679565b73ffffffffffffffffffffffffffffffffffffffff166114049092919063ffffffff16565b5b808061084e906126d5565b91505061071b565b5050505050565b60025481565b6005602052816000526040600020602052806000526040600020600091509150505481565b61089061124a565b73ffffffffffffffffffffffffffffffffffffffff166108ae610910565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90612318565b60405180910390fd5b61090e600061148a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606000838390508686905014610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c9061276a565b60405180910390fd5b888888888888886040516020016109a29796959493929190612584565b60405160208183030381529060405291508180519060200120905097509795505050505050565b60026001541415610a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a06906127d6565b60405180910390fd5b6002600181905550610a288989898989898989896104f5565b610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e90612842565b60405180910390fd5b60008686905067ffffffffffffffff811115610a8657610a856120df565b5b604051908082528060200260200182016040528015610ab45781602001602082028036833780820191505090505b50905060005b87879050811015610e4a576000868683818110610ada57610ad961264a565b5b905060200201351415610aec57610e37565b6000600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002060008a8a85818110610b5357610b5261264a565b5b9050602002016020810190610b689190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054878784818110610bb657610bb561264a565b5b90506020020135610bc79190612862565b90506000811415610bd85750610e37565b600073ffffffffffffffffffffffffffffffffffffffff16898984818110610c0357610c0261264a565b5b9050602002016020810190610c189190612679565b73ffffffffffffffffffffffffffffffffffffffff161415610c6257610c5d818b73ffffffffffffffffffffffffffffffffffffffff1661131090919063ffffffff16565b610cb5565b610cb48a828b8b86818110610c7a57610c7961264a565b5b9050602002016020810190610c8f9190612679565b73ffffffffffffffffffffffffffffffffffffffff166114049092919063ffffffff16565b5b868683818110610cc857610cc761264a565b5b90506020020135600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e815260200190815260200160002060008b8b86818110610d3457610d3361264a565b5b9050602002016020810190610d499190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080838381518110610d9b57610d9a61264a565b5b60200260200101818152505080600560008e815260200190815260200160002060008b8b86818110610dd057610dcf61264a565b5b9050602002016020810190610de59190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2e9190612896565b92505081905550505b8080610e42906126d5565b915050610aba565b50897f1869cd8d657c37384f585ccf16d7d1baddfcb0552617440f4fefe638726094c489898985604051610e8194939291906128ec565b60405180910390a25060018081905550505050505050505050565b60608282905067ffffffffffffffff811115610ebb57610eba6120df565b5b604051908082528060200260200182016040528015610ee95781602001602082028036833780820191505090505b50905060005b83839050811015610fe157600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206000858584818110610f5f57610f5e61264a565b5b9050602002016020810190610f749190612679565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610fc257610fc161264a565b5b6020026020010181815250508080610fd9906126d5565b915050610eef565b50949350505050565b610ff261124a565b73ffffffffffffffffffffffffffffffffffffffff16611010610910565b73ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90612318565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd906129a5565b60405180910390fd5b6110df8161148a565b50565b6110ea61124a565b73ffffffffffffffffffffffffffffffffffffffff16611108610910565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612318565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600360006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020190805190602001906111be9291906117bb565b5090505081600260008154809291906111d6906126d5565b919050557fb920eca87e99c1731d756a5533a92f0e02ae5e4c79d50260a7303364f210ad01858460405161120b9291906129c5565b60405180910390a3505050565b600460205282600052604060002060205281600052604060002060205280600052604060002060009250925050505481565b600033905090565b600042905090565b60008082905060005b85518110156113025760008682815181106112815761128061264a565b5b602002602001015190508083116112c25782816040516020016112a5929190612a16565b6040516020818303038152906040528051906020012092506112ee565b80836040516020016112d5929190612a16565b6040516020818303038152906040528051906020012092505b5080806112fa906126d5565b915050611263565b508381149150509392505050565b80471015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612a8e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161137990612adf565b60006040518083038185875af1925050503d80600081146113b6576040519150601f19603f3d011682016040523d82523d6000602084013e6113bb565b606091505b50509050806113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612b66565b60405180910390fd5b505050565b6114858363a9059cbb60e01b8484604051602401611423929190612b86565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061154e565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006115b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116159092919063ffffffff16565b905060008151111561161057808060200190518101906115d09190612bdb565b61160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690612c7a565b60405180910390fd5b5b505050565b6060611624848460008561162d565b90509392505050565b606082471015611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990612d0c565b60405180910390fd5b61167b85611741565b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190612d78565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116e39190612dc9565b60006040518083038185875af1925050503d8060008114611720576040519150601f19603f3d011682016040523d82523d6000602084013e611725565b606091505b5091509150611735828286611754565b92505050949350505050565b600080823b905060008111915050919050565b60608315611764578290506117b4565b6000835111156117775782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab9190612de0565b60405180910390fd5b9392505050565b8280546117c790612618565b90600052602060002090601f0160209004810192826117e95760008555611830565b82601f1061180257805160ff1916838001178555611830565b82800160010185558215611830579182015b8281111561182f578251825591602001919060010190611814565b5b50905061183d9190611841565b5090565b5b8082111561185a576000816000905550600101611842565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61188581611872565b811461189057600080fd5b50565b6000813590506118a28161187c565b92915050565b600080604083850312156118bf576118be611868565b5b60006118cd85828601611893565b92505060206118de85828601611893565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611913826118e8565b9050919050565b61192381611908565b811461192e57600080fd5b50565b6000813590506119408161191a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261196b5761196a611946565b5b8235905067ffffffffffffffff8111156119885761198761194b565b5b6020830191508360208202830111156119a4576119a3611950565b5b9250929050565b60008083601f8401126119c1576119c0611946565b5b8235905067ffffffffffffffff8111156119de576119dd61194b565b5b6020830191508360208202830111156119fa576119f9611950565b5b9250929050565b60008083601f840112611a1757611a16611946565b5b8235905067ffffffffffffffff811115611a3457611a3361194b565b5b602083019150836020820283011115611a5057611a4f611950565b5b9250929050565b600080600080600080600080600060c08a8c031215611a7957611a78611868565b5b6000611a878c828d01611893565b9950506020611a988c828d01611893565b9850506040611aa98c828d01611931565b97505060608a013567ffffffffffffffff811115611aca57611ac961186d565b5b611ad68c828d01611955565b965096505060808a013567ffffffffffffffff811115611af957611af861186d565b5b611b058c828d016119ab565b945094505060a08a013567ffffffffffffffff811115611b2857611b2761186d565b5b611b348c828d01611a01565b92509250509295985092959850929598565b60008115159050919050565b611b5b81611b46565b82525050565b6000602082019050611b766000830184611b52565b92915050565b600060208284031215611b9257611b91611868565b5b6000611ba084828501611893565b91505092915050565b6000819050919050565b611bbc81611ba9565b82525050565b611bcb81611872565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c0b578082015181840152602081019050611bf0565b83811115611c1a576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c3c82611bd1565b611c468185611bdc565b9350611c56818560208601611bed565b611c5f81611c20565b840191505092915050565b6000606082019050611c7f6000830186611bb3565b611c8c6020830185611bc2565b8181036040830152611c9e8184611c31565b9050949350505050565b60008060008060408587031215611cc257611cc1611868565b5b600085013567ffffffffffffffff811115611ce057611cdf61186d565b5b611cec87828801611955565b9450945050602085013567ffffffffffffffff811115611d0f57611d0e61186d565b5b611d1b878288016119ab565b925092505092959194509250565b6000602082019050611d3e6000830184611bc2565b92915050565b6000611d4f82611908565b9050919050565b611d5f81611d44565b8114611d6a57600080fd5b50565b600081359050611d7c81611d56565b92915050565b60008060408385031215611d9957611d98611868565b5b6000611da785828601611893565b9250506020611db885828601611d6d565b9150509250929050565b611dcb81611908565b82525050565b6000602082019050611de66000830184611dc2565b92915050565b600080600080600080600060a0888a031215611e0b57611e0a611868565b5b6000611e198a828b01611893565b9750506020611e2a8a828b01611893565b9650506040611e3b8a828b01611931565b955050606088013567ffffffffffffffff811115611e5c57611e5b61186d565b5b611e688a828b01611955565b9450945050608088013567ffffffffffffffff811115611e8b57611e8a61186d565b5b611e978a828b016119ab565b925092505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b6000611ecf82611ea8565b611ed98185611eb3565b9350611ee9818560208601611bed565b611ef281611c20565b840191505092915050565b60006040820190508181036000830152611f178185611ec4565b9050611f266020830184611bb3565b9392505050565b60008060008060608587031215611f4757611f46611868565b5b6000611f5587828801611893565b9450506020611f6687828801611931565b935050604085013567ffffffffffffffff811115611f8757611f8661186d565b5b611f9387828801611955565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd681611872565b82525050565b6000611fe88383611fcd565b60208301905092915050565b6000602082019050919050565b600061200c82611fa1565b6120168185611fac565b935061202183611fbd565b8060005b838110156120525781516120398882611fdc565b975061204483611ff4565b925050600181019050612025565b5085935050505092915050565b600060208201905081810360008301526120798184612001565b905092915050565b60006020828403121561209757612096611868565b5b60006120a584828501611931565b91505092915050565b6120b781611ba9565b81146120c257600080fd5b50565b6000813590506120d4816120ae565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61211782611c20565b810181811067ffffffffffffffff82111715612136576121356120df565b5b80604052505050565b600061214961185e565b9050612155828261210e565b919050565b600067ffffffffffffffff821115612175576121746120df565b5b61217e82611c20565b9050602081019050919050565b82818337600083830152505050565b60006121ad6121a88461215a565b61213f565b9050828152602081018484840111156121c9576121c86120da565b5b6121d484828561218b565b509392505050565b600082601f8301126121f1576121f0611946565b5b813561220184826020860161219a565b91505092915050565b60008060006060848603121561222357612222611868565b5b6000612231868287016120c5565b935050602061224286828701611893565b925050604084013567ffffffffffffffff8111156122635761226261186d565b5b61226f868287016121dc565b9150509250925092565b60008060006060848603121561229257612291611868565b5b60006122a086828701611931565b93505060206122b186828701611893565b92505060406122c286828701611d6d565b9150509250925092565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612302602083611bdc565b915061230d826122cc565b602082019050919050565b60006020820190508181036000830152612331816122f5565b9050919050565b7f496e76616c696420706861736500000000000000000000000000000000000000600082015250565b600061236e600d83611bdc565b915061237982612338565b602082019050919050565b6000602082019050818103600083015261239d81612361565b9050919050565b7f496e76616c69642074696d650000000000000000000000000000000000000000600082015250565b60006123da600c83611bdc565b91506123e5826123a4565b602082019050919050565b60006020820190508181036000830152612409816123cd565b9050919050565b600082825260208201905092915050565b6000819050919050565b6000819050919050565b600061245061244b612446846118e8565b61242b565b6118e8565b9050919050565b600061246282612435565b9050919050565b600061247482612457565b9050919050565b61248481612469565b82525050565b6000612496838361247b565b60208301905092915050565b60006124b16020840184611d6d565b905092915050565b6000602082019050919050565b60006124d28385612410565b93506124dd82612421565b8060005b85811015612516576124f382846124a2565b6124fd888261248a565b9750612508836124b9565b9250506001810190506124e1565b5085925050509392505050565b600080fd5b60006125348385611fac565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561256757612566612523565b5b60208302925061257883858461218b565b82840190509392505050565b600060a082019050612599600083018a611bc2565b6125a66020830189611bc2565b6125b36040830188611dc2565b81810360608301526125c68186886124c6565b905081810360808301526125db818486612528565b905098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061263057607f821691505b60208210811415612644576126436125e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561268f5761268e611868565b5b600061269d84828501611d6d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126e082611872565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612713576127126126a6565b5b600182019050919050565b7f62616420746f6b656e7320616e6420616d6f756e7473206c656e677468000000600082015250565b6000612754601d83611bdc565b915061275f8261271e565b602082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127c0601f83611bdc565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b7f696e76616c696420636c61696d20646174610000000000000000000000000000600082015250565b600061282c601283611bdc565b9150612837826127f6565b602082019050919050565b6000602082019050818103600083015261285b8161281f565b9050919050565b600061286d82611872565b915061287883611872565b92508282101561288b5761288a6126a6565b5b828203905092915050565b60006128a182611872565b91506128ac83611872565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128e1576128e06126a6565b5b828201905092915050565b60006060820190506129016000830187611dc2565b81810360208301526129148185876124c6565b905081810360408301526129288184612001565b905095945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061298f602683611bdc565b915061299a82612933565b604082019050919050565b600060208201905081810360008301526129be81612982565b9050919050565b60006040820190506129da6000830185611bb3565b81810360208301526129ec8184611c31565b90509392505050565b6000819050919050565b612a10612a0b82611ba9565b6129f5565b82525050565b6000612a2282856129ff565b602082019150612a3282846129ff565b6020820191508190509392505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000612a78601d83611bdc565b9150612a8382612a42565b602082019050919050565b60006020820190508181036000830152612aa781612a6b565b9050919050565b600081905092915050565b50565b6000612ac9600083612aae565b9150612ad482612ab9565b600082019050919050565b6000612aea82612abc565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000612b50603a83611bdc565b9150612b5b82612af4565b604082019050919050565b60006020820190508181036000830152612b7f81612b43565b9050919050565b6000604082019050612b9b6000830185611dc2565b612ba86020830184611bc2565b9392505050565b612bb881611b46565b8114612bc357600080fd5b50565b600081519050612bd581612baf565b92915050565b600060208284031215612bf157612bf0611868565b5b6000612bff84828501612bc6565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612c64602a83611bdc565b9150612c6f82612c08565b604082019050919050565b60006020820190508181036000830152612c9381612c57565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612cf6602683611bdc565b9150612d0182612c9a565b604082019050919050565b60006020820190508181036000830152612d2581612ce9565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612d62601d83611bdc565b9150612d6d82612d2c565b602082019050919050565b60006020820190508181036000830152612d9181612d55565b9050919050565b6000612da382611ea8565b612dad8185612aae565b9350612dbd818560208601611bed565b80840191505092915050565b6000612dd58284612d98565b915081905092915050565b60006020820190508181036000830152612dfa8184611c31565b90509291505056fea2646970667358221220d420f3e5cca704ce900e21d0bf53c28b3a4308f6ef15d38c462aa7034a2788c864736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000006058942ef19da2054fb669793d3889de42d6c38
-----Decoded View---------------
Arg [0] : admin (address): 0x06058942EF19dA2054Fb669793D3889dE42d6c38
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000006058942ef19da2054fb669793d3889de42d6c38
Deployed Bytecode Sourcemap
441:5333:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3290:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5131:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;649:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;1118:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;594:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;881:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:6;;;;;;;;;;;;;:::i;:::-;;966:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4226:414:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1940:1017;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3875:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3023:263:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;759:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3290:268;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3395:2:4::1;3384:7;;:13;;3376:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;3440:15;:13;:15::i;:::-;3429:26;;:7;:26;;3421:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;3510:7;3478:16;:20;3495:2;3478:20;;;;;;;;;;;:29;;:39;;;;3545:7;3541:2;3528:25;;;;;;;;;;3290:268:::0;;:::o;5131:498::-;5338:4;5371:7;;:14;;5354:6;;:13;;:31;5350:49;;5394:5;5387:12;;;;5350:49;5428:16;:20;5445:2;5428:20;;;;;;;;;;;:29;;;5409:15;:13;:15::i;:::-;:48;;;5405:66;;5466:5;5459:12;;;;5405:66;5477:12;5513:2;5517:5;5524:4;5530:6;;5538:7;;5502:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5492:55;;;;;;5477:70;;5560:64;5579:11;;5560:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5592:16;:20;5609:2;5592:20;;;;;;;;;;;:25;;;5619:4;5560:18;:64::i;:::-;5553:71;;;5131:498;;;;;;;;;;;;:::o;649:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1118:359::-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1248:9:4::1;1243:230;1267:6;;:13;;1263:1;:17;1243:230;;;1327:1;1299:31;;:6;;1306:1;1299:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:31;;;1295:172;;;1342:43;1374:7;;1382:1;1374:10;;;;;;;:::i;:::-;;;;;;;;1350:12;:10;:12::i;:::-;1342:31;;;;:43;;;;:::i;:::-;1295:172;;;1410:48;1433:12;:10;:12::i;:::-;1447:7;;1455:1;1447:10;;;;;;;:::i;:::-;;;;;;;;1410:6;;1417:1;1410:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:22;;;;:48;;;;;:::i;:::-;1295:172;1282:3;;;;;:::i;:::-;;;;1243:230;;;;1118:359:::0;;;;:::o;594:22::-;;;;:::o;881:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1598:92:6:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;966:85::-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;4226:414:4:-;4392:24;4418:23;4474:7;;:14;;4457:6;;:13;;:31;4449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4553:2;4557:5;4564:7;4573:6;;4581:7;;4542:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4528:61;;4623:11;4613:22;;;;;;4595:40;;4226:414;;;;;;;;;;:::o;1940:1017::-;1680:1:7;2259:7;;:19;;2251:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1680:1;2389:7;:18;;;;2182:59:4::1;2195:2;2199:5;2206:4;2212:6;;2220:7;;2229:11;;2182:12;:59::i;:::-;2174:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;2270:29;2316:6;;:13;;2302:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2270:60;;2366:9;2361:542;2385:6;;:13;;2381:1;:17;2361:542;;;2464:1;2450:7;;2458:1;2450:10;;;;;;;:::i;:::-;;;;;;;;:15;2446:29;;;2467:8;;2446:29;2484:17;2517:14;:20;2532:4;2517:20;;;;;;;;;;;;;;;:24;2538:2;2517:24;;;;;;;;;;;:35;2542:6;;2549:1;2542:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2517:35;;;;;;;;;;;;;;;;2504:7;;2512:1;2504:10;;;;;;;:::i;:::-;;;;;;;;:48;;;;:::i;:::-;2484:68;;2577:1;2564:9;:14;2560:28;;;2580:8;;;2560:28;2629:1;2601:31;;:6;;2608:1;2601:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:31;;;2597:154;;;2644:34;2668:9;2652:4;2644:23;;;;:34;;;;:::i;:::-;2597:154;;;2703:39;2726:4;2732:9;2703:6;;2710:1;2703:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:22;;;;:39;;;;;:::i;:::-;2597:154;2796:7;;2804:1;2796:10;;;;;;;:::i;:::-;;;;;;;;2758:14;:20;2773:4;2758:20;;;;;;;;;;;;;;;:24;2779:2;2758:24;;;;;;;;;;;:35;2783:6;;2790:1;2783:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2758:35;;;;;;;;;;;;;;;:48;;;;2832:9;2814:12;2827:1;2814:15;;;;;;;;:::i;:::-;;;;;;;:27;;;::::0;::::1;2887:9;2849:19;:23;2869:2;2849:23;;;;;;;;;;;:34;2873:6;;2880:1;2873:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2849:34;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;2405:498;2361:542;2400:3;;;;;:::i;:::-;;;;2361:542;;;;2921:2;2913:39;2925:4;2931:6;;2939:12;2913:39;;;;;;;;;:::i;:::-;;;;;;;;2141:816;1637:1:7::0;2562:7;:22;;;;1940:1017:4;;;;;;;;;:::o;3875:347::-;4002:35;4080:6;;:13;;4066:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4045:49;;4105:9;4100:118;4124:6;;:13;;4120:1;:17;4100:118;;;4176:14;:20;4191:4;4176:20;;;;;;;;;;;;;;;:24;4197:2;4176:24;;;;;;;;;;;:35;4201:6;;4208:1;4201:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4176:35;;;;;;;;;;;;;;;;4152:18;4171:1;4152:21;;;;;;;;:::i;:::-;;;;;;;:59;;;;;4139:3;;;;;:::i;:::-;;;;4100:118;;;;3875:347;;;;;;:::o;1839:189:6:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;3023:263:4:-;1189:12:6;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3185:37:4::1;;;;;;;;3198:4;3185:37;;;;3204:8;3185:37;;;;3214:7;3185:37;;::::0;3157:16:::1;:25;3174:7;;3157:25;;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3263:8;3246:7;;:9;;;;;;;;;:::i;:::-;;;;;3233:48;3257:4;3273:7;3233:48;;;;;;;:::i;:::-;;;;;;;;3023:263:::0;;;:::o;759:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;5667:105:4:-;5723:6;5751:15;5737:30;;5667:105;:::o;777:809:5:-;898:4;914:20;937:4;914:27;;957:9;952:515;976:5;:12;972:1;:16;952:515;;;1009:20;1032:5;1038:1;1032:8;;;;;;;;:::i;:::-;;;;;;;;1009:31;;1075:12;1059;:28;1055:402;;1227:12;1241;1210:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1200:55;;;;;;1185:70;;1055:402;;;1414:12;1428;1397:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1387:55;;;;;;1372:70;;1055:402;995:472;990:3;;;;;:::i;:::-;;;;952:515;;;;1575:4;1559:12;:20;1552:27;;;777:809;;;;;:::o;2012:312:0:-;2126:6;2101:21;:31;;2093:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2178:12;2196:9;:14;;2218:6;2196:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2177:52;;;2247:7;2239:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2083:241;2012:312;;:::o;620:205:8:-;732:86;752:5;782:23;;;807:2;811:5;759:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;732:19;:86::i;:::-;620:205;;;:::o;2034:169:6:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;3126:706:8:-;3545:23;3571:69;3599:4;3571:69;;;;;;;;;;;;;;;;;3579:5;3571:27;;;;:69;;;;;:::i;:::-;3545:95;;3674:1;3654:10;:17;:21;3650:176;;;3749:10;3738:30;;;;;;;;;;;;:::i;:::-;3730:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3650:176;3196:636;3126:706;;:::o;3461:223:0:-;3594:12;3625:52;3647:6;3655:4;3661:1;3664:12;3625:21;:52::i;:::-;3618:59;;3461:223;;;;;:::o;4548:499::-;4713:12;4770:5;4745:21;:30;;4737:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;4836:18;4847:6;4836:10;:18::i;:::-;4828:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4900:12;4914:23;4941:6;:11;;4960:5;4967:4;4941:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4899:73;;;;4989:51;5006:7;5015:10;5027:12;4989:16;:51::i;:::-;4982:58;;;;4548:499;;;;;;:::o;718:377::-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;7161:692::-;7307:12;7335:7;7331:516;;;7365:10;7358:17;;;;7331:516;7496:1;7476:10;:17;:21;7472:365;;;7670:10;7664:17;7730:15;7717:10;7713:2;7709:19;7702:44;7472:365;7809:12;7802:20;;;;;;;;;;;:::i;:::-;;;;;;;;7161:692;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:9:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:122::-;1477:24;1495:5;1477:24;:::i;:::-;1470:5;1467:35;1457:63;;1516:1;1513;1506:12;1457:63;1404:122;:::o;1532:139::-;1578:5;1616:6;1603:20;1594:29;;1632:33;1659:5;1632:33;:::i;:::-;1532:139;;;;:::o;1677:117::-;1786:1;1783;1776:12;1800:117;1909:1;1906;1899:12;1923:117;2032:1;2029;2022:12;2071:582;2158:8;2168:6;2218:3;2211:4;2203:6;2199:17;2195:27;2185:122;;2226:79;;:::i;:::-;2185:122;2339:6;2326:20;2316:30;;2369:18;2361:6;2358:30;2355:117;;;2391:79;;:::i;:::-;2355:117;2505:4;2497:6;2493:17;2481:29;;2559:3;2551:4;2543:6;2539:17;2529:8;2525:32;2522:41;2519:128;;;2566:79;;:::i;:::-;2519:128;2071:582;;;;;:::o;2676:568::-;2749:8;2759:6;2809:3;2802:4;2794:6;2790:17;2786:27;2776:122;;2817:79;;:::i;:::-;2776:122;2930:6;2917:20;2907:30;;2960:18;2952:6;2949:30;2946:117;;;2982:79;;:::i;:::-;2946:117;3096:4;3088:6;3084:17;3072:29;;3150:3;3142:4;3134:6;3130:17;3120:8;3116:32;3113:41;3110:128;;;3157:79;;:::i;:::-;3110:128;2676:568;;;;;:::o;3267:::-;3340:8;3350:6;3400:3;3393:4;3385:6;3381:17;3377:27;3367:122;;3408:79;;:::i;:::-;3367:122;3521:6;3508:20;3498:30;;3551:18;3543:6;3540:30;3537:117;;;3573:79;;:::i;:::-;3537:117;3687:4;3679:6;3675:17;3663:29;;3741:3;3733:4;3725:6;3721:17;3711:8;3707:32;3704:41;3701:128;;;3748:79;;:::i;:::-;3701:128;3267:568;;;;;:::o;3841:1775::-;4040:6;4048;4056;4064;4072;4080;4088;4096;4104;4153:3;4141:9;4132:7;4128:23;4124:33;4121:120;;;4160:79;;:::i;:::-;4121:120;4280:1;4305:53;4350:7;4341:6;4330:9;4326:22;4305:53;:::i;:::-;4295:63;;4251:117;4407:2;4433:53;4478:7;4469:6;4458:9;4454:22;4433:53;:::i;:::-;4423:63;;4378:118;4535:2;4561:53;4606:7;4597:6;4586:9;4582:22;4561:53;:::i;:::-;4551:63;;4506:118;4691:2;4680:9;4676:18;4663:32;4722:18;4714:6;4711:30;4708:117;;;4744:79;;:::i;:::-;4708:117;4857:94;4943:7;4934:6;4923:9;4919:22;4857:94;:::i;:::-;4839:112;;;;4634:327;5028:3;5017:9;5013:19;5000:33;5060:18;5052:6;5049:30;5046:117;;;5082:79;;:::i;:::-;5046:117;5195:80;5267:7;5258:6;5247:9;5243:22;5195:80;:::i;:::-;5177:98;;;;4971:314;5352:3;5341:9;5337:19;5324:33;5384:18;5376:6;5373:30;5370:117;;;5406:79;;:::i;:::-;5370:117;5519:80;5591:7;5582:6;5571:9;5567:22;5519:80;:::i;:::-;5501:98;;;;5295:314;3841:1775;;;;;;;;;;;:::o;5622:90::-;5656:7;5699:5;5692:13;5685:21;5674:32;;5622:90;;;:::o;5718:109::-;5799:21;5814:5;5799:21;:::i;:::-;5794:3;5787:34;5718:109;;:::o;5833:210::-;5920:4;5958:2;5947:9;5943:18;5935:26;;5971:65;6033:1;6022:9;6018:17;6009:6;5971:65;:::i;:::-;5833:210;;;;:::o;6049:329::-;6108:6;6157:2;6145:9;6136:7;6132:23;6128:32;6125:119;;;6163:79;;:::i;:::-;6125:119;6283:1;6308:53;6353:7;6344:6;6333:9;6329:22;6308:53;:::i;:::-;6298:63;;6254:117;6049:329;;;;:::o;6384:77::-;6421:7;6450:5;6439:16;;6384:77;;;:::o;6467:118::-;6554:24;6572:5;6554:24;:::i;:::-;6549:3;6542:37;6467:118;;:::o;6591:::-;6678:24;6696:5;6678:24;:::i;:::-;6673:3;6666:37;6591:118;;:::o;6715:99::-;6767:6;6801:5;6795:12;6785:22;;6715:99;;;:::o;6820:169::-;6904:11;6938:6;6933:3;6926:19;6978:4;6973:3;6969:14;6954:29;;6820:169;;;;:::o;6995:307::-;7063:1;7073:113;7087:6;7084:1;7081:13;7073:113;;;7172:1;7167:3;7163:11;7157:18;7153:1;7148:3;7144:11;7137:39;7109:2;7106:1;7102:10;7097:15;;7073:113;;;7204:6;7201:1;7198:13;7195:101;;;7284:1;7275:6;7270:3;7266:16;7259:27;7195:101;7044:258;6995:307;;;:::o;7308:102::-;7349:6;7400:2;7396:7;7391:2;7384:5;7380:14;7376:28;7366:38;;7308:102;;;:::o;7416:364::-;7504:3;7532:39;7565:5;7532:39;:::i;:::-;7587:71;7651:6;7646:3;7587:71;:::i;:::-;7580:78;;7667:52;7712:6;7707:3;7700:4;7693:5;7689:16;7667:52;:::i;:::-;7744:29;7766:6;7744:29;:::i;:::-;7739:3;7735:39;7728:46;;7508:272;7416:364;;;;:::o;7786:533::-;7955:4;7993:2;7982:9;7978:18;7970:26;;8006:71;8074:1;8063:9;8059:17;8050:6;8006:71;:::i;:::-;8087:72;8155:2;8144:9;8140:18;8131:6;8087:72;:::i;:::-;8206:9;8200:4;8196:20;8191:2;8180:9;8176:18;8169:48;8234:78;8307:4;8298:6;8234:78;:::i;:::-;8226:86;;7786:533;;;;;;:::o;8325:962::-;8461:6;8469;8477;8485;8534:2;8522:9;8513:7;8509:23;8505:32;8502:119;;;8540:79;;:::i;:::-;8502:119;8688:1;8677:9;8673:17;8660:31;8718:18;8710:6;8707:30;8704:117;;;8740:79;;:::i;:::-;8704:117;8853:94;8939:7;8930:6;8919:9;8915:22;8853:94;:::i;:::-;8835:112;;;;8631:326;9024:2;9013:9;9009:18;8996:32;9055:18;9047:6;9044:30;9041:117;;;9077:79;;:::i;:::-;9041:117;9190:80;9262:7;9253:6;9242:9;9238:22;9190:80;:::i;:::-;9172:98;;;;8967:313;8325:962;;;;;;;:::o;9293:222::-;9386:4;9424:2;9413:9;9409:18;9401:26;;9437:71;9505:1;9494:9;9490:17;9481:6;9437:71;:::i;:::-;9293:222;;;;:::o;9521:110::-;9572:7;9601:24;9619:5;9601:24;:::i;:::-;9590:35;;9521:110;;;:::o;9637:150::-;9724:38;9756:5;9724:38;:::i;:::-;9717:5;9714:49;9704:77;;9777:1;9774;9767:12;9704:77;9637:150;:::o;9793:167::-;9853:5;9891:6;9878:20;9869:29;;9907:47;9948:5;9907:47;:::i;:::-;9793:167;;;;:::o;9966:502::-;10048:6;10056;10105:2;10093:9;10084:7;10080:23;10076:32;10073:119;;;10111:79;;:::i;:::-;10073:119;10231:1;10256:53;10301:7;10292:6;10281:9;10277:22;10256:53;:::i;:::-;10246:63;;10202:117;10358:2;10384:67;10443:7;10434:6;10423:9;10419:22;10384:67;:::i;:::-;10374:77;;10329:132;9966:502;;;;;:::o;10474:118::-;10561:24;10579:5;10561:24;:::i;:::-;10556:3;10549:37;10474:118;;:::o;10598:222::-;10691:4;10729:2;10718:9;10714:18;10706:26;;10742:71;10810:1;10799:9;10795:17;10786:6;10742:71;:::i;:::-;10598:222;;;;:::o;10826:1399::-;10989:6;10997;11005;11013;11021;11029;11037;11086:3;11074:9;11065:7;11061:23;11057:33;11054:120;;;11093:79;;:::i;:::-;11054:120;11213:1;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11184:117;11340:2;11366:53;11411:7;11402:6;11391:9;11387:22;11366:53;:::i;:::-;11356:63;;11311:118;11468:2;11494:53;11539:7;11530:6;11519:9;11515:22;11494:53;:::i;:::-;11484:63;;11439:118;11624:2;11613:9;11609:18;11596:32;11655:18;11647:6;11644:30;11641:117;;;11677:79;;:::i;:::-;11641:117;11790:94;11876:7;11867:6;11856:9;11852:22;11790:94;:::i;:::-;11772:112;;;;11567:327;11961:3;11950:9;11946:19;11933:33;11993:18;11985:6;11982:30;11979:117;;;12015:79;;:::i;:::-;11979:117;12128:80;12200:7;12191:6;12180:9;12176:22;12128:80;:::i;:::-;12110:98;;;;11904:314;10826:1399;;;;;;;;;;:::o;12231:98::-;12282:6;12316:5;12310:12;12300:22;;12231:98;;;:::o;12335:168::-;12418:11;12452:6;12447:3;12440:19;12492:4;12487:3;12483:14;12468:29;;12335:168;;;;:::o;12509:360::-;12595:3;12623:38;12655:5;12623:38;:::i;:::-;12677:70;12740:6;12735:3;12677:70;:::i;:::-;12670:77;;12756:52;12801:6;12796:3;12789:4;12782:5;12778:16;12756:52;:::i;:::-;12833:29;12855:6;12833:29;:::i;:::-;12828:3;12824:39;12817:46;;12599:270;12509:360;;;;:::o;12875:419::-;13014:4;13052:2;13041:9;13037:18;13029:26;;13101:9;13095:4;13091:20;13087:1;13076:9;13072:17;13065:47;13129:76;13200:4;13191:6;13129:76;:::i;:::-;13121:84;;13215:72;13283:2;13272:9;13268:18;13259:6;13215:72;:::i;:::-;12875:419;;;;;:::o;13300:877::-;13418:6;13426;13434;13442;13491:2;13479:9;13470:7;13466:23;13462:32;13459:119;;;13497:79;;:::i;:::-;13459:119;13617:1;13642:53;13687:7;13678:6;13667:9;13663:22;13642:53;:::i;:::-;13632:63;;13588:117;13744:2;13770:53;13815:7;13806:6;13795:9;13791:22;13770:53;:::i;:::-;13760:63;;13715:118;13900:2;13889:9;13885:18;13872:32;13931:18;13923:6;13920:30;13917:117;;;13953:79;;:::i;:::-;13917:117;14066:94;14152:7;14143:6;14132:9;14128:22;14066:94;:::i;:::-;14048:112;;;;13843:327;13300:877;;;;;;;:::o;14183:114::-;14250:6;14284:5;14278:12;14268:22;;14183:114;;;:::o;14303:184::-;14402:11;14436:6;14431:3;14424:19;14476:4;14471:3;14467:14;14452:29;;14303:184;;;;:::o;14493:132::-;14560:4;14583:3;14575:11;;14613:4;14608:3;14604:14;14596:22;;14493:132;;;:::o;14631:108::-;14708:24;14726:5;14708:24;:::i;:::-;14703:3;14696:37;14631:108;;:::o;14745:179::-;14814:10;14835:46;14877:3;14869:6;14835:46;:::i;:::-;14913:4;14908:3;14904:14;14890:28;;14745:179;;;;:::o;14930:113::-;15000:4;15032;15027:3;15023:14;15015:22;;14930:113;;;:::o;15079:732::-;15198:3;15227:54;15275:5;15227:54;:::i;:::-;15297:86;15376:6;15371:3;15297:86;:::i;:::-;15290:93;;15407:56;15457:5;15407:56;:::i;:::-;15486:7;15517:1;15502:284;15527:6;15524:1;15521:13;15502:284;;;15603:6;15597:13;15630:63;15689:3;15674:13;15630:63;:::i;:::-;15623:70;;15716:60;15769:6;15716:60;:::i;:::-;15706:70;;15562:224;15549:1;15546;15542:9;15537:14;;15502:284;;;15506:14;15802:3;15795:10;;15203:608;;;15079:732;;;;:::o;15817:373::-;15960:4;15998:2;15987:9;15983:18;15975:26;;16047:9;16041:4;16037:20;16033:1;16022:9;16018:17;16011:47;16075:108;16178:4;16169:6;16075:108;:::i;:::-;16067:116;;15817:373;;;;:::o;16196:329::-;16255:6;16304:2;16292:9;16283:7;16279:23;16275:32;16272:119;;;16310:79;;:::i;:::-;16272:119;16430:1;16455:53;16500:7;16491:6;16480:9;16476:22;16455:53;:::i;:::-;16445:63;;16401:117;16196:329;;;;:::o;16531:122::-;16604:24;16622:5;16604:24;:::i;:::-;16597:5;16594:35;16584:63;;16643:1;16640;16633:12;16584:63;16531:122;:::o;16659:139::-;16705:5;16743:6;16730:20;16721:29;;16759:33;16786:5;16759:33;:::i;:::-;16659:139;;;;:::o;16804:117::-;16913:1;16910;16903:12;16927:180;16975:77;16972:1;16965:88;17072:4;17069:1;17062:15;17096:4;17093:1;17086:15;17113:281;17196:27;17218:4;17196:27;:::i;:::-;17188:6;17184:40;17326:6;17314:10;17311:22;17290:18;17278:10;17275:34;17272:62;17269:88;;;17337:18;;:::i;:::-;17269:88;17377:10;17373:2;17366:22;17156:238;17113:281;;:::o;17400:129::-;17434:6;17461:20;;:::i;:::-;17451:30;;17490:33;17518:4;17510:6;17490:33;:::i;:::-;17400:129;;;:::o;17535:308::-;17597:4;17687:18;17679:6;17676:30;17673:56;;;17709:18;;:::i;:::-;17673:56;17747:29;17769:6;17747:29;:::i;:::-;17739:37;;17831:4;17825;17821:15;17813:23;;17535:308;;;:::o;17849:154::-;17933:6;17928:3;17923;17910:30;17995:1;17986:6;17981:3;17977:16;17970:27;17849:154;;;:::o;18009:412::-;18087:5;18112:66;18128:49;18170:6;18128:49;:::i;:::-;18112:66;:::i;:::-;18103:75;;18201:6;18194:5;18187:21;18239:4;18232:5;18228:16;18277:3;18268:6;18263:3;18259:16;18256:25;18253:112;;;18284:79;;:::i;:::-;18253:112;18374:41;18408:6;18403:3;18398;18374:41;:::i;:::-;18093:328;18009:412;;;;;:::o;18441:340::-;18497:5;18546:3;18539:4;18531:6;18527:17;18523:27;18513:122;;18554:79;;:::i;:::-;18513:122;18671:6;18658:20;18696:79;18771:3;18763:6;18756:4;18748:6;18744:17;18696:79;:::i;:::-;18687:88;;18503:278;18441:340;;;;:::o;18787:799::-;18874:6;18882;18890;18939:2;18927:9;18918:7;18914:23;18910:32;18907:119;;;18945:79;;:::i;:::-;18907:119;19065:1;19090:53;19135:7;19126:6;19115:9;19111:22;19090:53;:::i;:::-;19080:63;;19036:117;19192:2;19218:53;19263:7;19254:6;19243:9;19239:22;19218:53;:::i;:::-;19208:63;;19163:118;19348:2;19337:9;19333:18;19320:32;19379:18;19371:6;19368:30;19365:117;;;19401:79;;:::i;:::-;19365:117;19506:63;19561:7;19552:6;19541:9;19537:22;19506:63;:::i;:::-;19496:73;;19291:288;18787:799;;;;;:::o;19592:647::-;19683:6;19691;19699;19748:2;19736:9;19727:7;19723:23;19719:32;19716:119;;;19754:79;;:::i;:::-;19716:119;19874:1;19899:53;19944:7;19935:6;19924:9;19920:22;19899:53;:::i;:::-;19889:63;;19845:117;20001:2;20027:53;20072:7;20063:6;20052:9;20048:22;20027:53;:::i;:::-;20017:63;;19972:118;20129:2;20155:67;20214:7;20205:6;20194:9;20190:22;20155:67;:::i;:::-;20145:77;;20100:132;19592:647;;;;;:::o;20245:182::-;20385:34;20381:1;20373:6;20369:14;20362:58;20245:182;:::o;20433:366::-;20575:3;20596:67;20660:2;20655:3;20596:67;:::i;:::-;20589:74;;20672:93;20761:3;20672:93;:::i;:::-;20790:2;20785:3;20781:12;20774:19;;20433:366;;;:::o;20805:419::-;20971:4;21009:2;20998:9;20994:18;20986:26;;21058:9;21052:4;21048:20;21044:1;21033:9;21029:17;21022:47;21086:131;21212:4;21086:131;:::i;:::-;21078:139;;20805:419;;;:::o;21230:163::-;21370:15;21366:1;21358:6;21354:14;21347:39;21230:163;:::o;21399:366::-;21541:3;21562:67;21626:2;21621:3;21562:67;:::i;:::-;21555:74;;21638:93;21727:3;21638:93;:::i;:::-;21756:2;21751:3;21747:12;21740:19;;21399:366;;;:::o;21771:419::-;21937:4;21975:2;21964:9;21960:18;21952:26;;22024:9;22018:4;22014:20;22010:1;21999:9;21995:17;21988:47;22052:131;22178:4;22052:131;:::i;:::-;22044:139;;21771:419;;;:::o;22196:162::-;22336:14;22332:1;22324:6;22320:14;22313:38;22196:162;:::o;22364:366::-;22506:3;22527:67;22591:2;22586:3;22527:67;:::i;:::-;22520:74;;22603:93;22692:3;22603:93;:::i;:::-;22721:2;22716:3;22712:12;22705:19;;22364:366;;;:::o;22736:419::-;22902:4;22940:2;22929:9;22925:18;22917:26;;22989:9;22983:4;22979:20;22975:1;22964:9;22960:17;22953:47;23017:131;23143:4;23017:131;:::i;:::-;23009:139;;22736:419;;;:::o;23161:184::-;23260:11;23294:6;23289:3;23282:19;23334:4;23329:3;23325:14;23310:29;;23161:184;;;;:::o;23351:116::-;23434:4;23457:3;23449:11;;23351:116;;;:::o;23473:60::-;23501:3;23522:5;23515:12;;23473:60;;;:::o;23539:142::-;23589:9;23622:53;23640:34;23649:24;23667:5;23649:24;:::i;:::-;23640:34;:::i;:::-;23622:53;:::i;:::-;23609:66;;23539:142;;;:::o;23687:126::-;23737:9;23770:37;23801:5;23770:37;:::i;:::-;23757:50;;23687:126;;;:::o;23819:140::-;23883:9;23916:37;23947:5;23916:37;:::i;:::-;23903:50;;23819:140;;;:::o;23965:149::-;24056:51;24101:5;24056:51;:::i;:::-;24051:3;24044:64;23965:149;;:::o;24120:207::-;24203:10;24224:60;24280:3;24272:6;24224:60;:::i;:::-;24316:4;24311:3;24307:14;24293:28;;24120:207;;;;:::o;24333:150::-;24399:5;24424:53;24473:2;24468:3;24464:12;24459:3;24424:53;:::i;:::-;24415:62;;24333:150;;;;:::o;24489:129::-;24575:4;24607;24602:3;24598:14;24590:22;;24489:129;;;:::o;24662:769::-;24805:3;24828:86;24907:6;24902:3;24828:86;:::i;:::-;24821:93;;24938:72;25004:5;24938:72;:::i;:::-;25033:7;25064:1;25049:357;25074:6;25071:1;25068:13;25049:357;;;25144:56;25193:6;25184:7;25144:56;:::i;:::-;25220:77;25293:3;25278:13;25220:77;:::i;:::-;25213:84;;25320:76;25389:6;25320:76;:::i;:::-;25310:86;;25109:297;25096:1;25093;25089:9;25084:14;;25049:357;;;25053:14;25422:3;25415:10;;24810:621;;24662:769;;;;;:::o;25437:117::-;25546:1;25543;25536:12;25590:537;25718:3;25739:86;25818:6;25813:3;25739:86;:::i;:::-;25732:93;;25849:66;25841:6;25838:78;25835:165;;;25919:79;;:::i;:::-;25835:165;26031:4;26023:6;26019:17;26009:27;;26046:43;26082:6;26077:3;26070:5;26046:43;:::i;:::-;26114:6;26109:3;26105:16;26098:23;;25590:537;;;;;:::o;26133:1034::-;26472:4;26510:3;26499:9;26495:19;26487:27;;26524:71;26592:1;26581:9;26577:17;26568:6;26524:71;:::i;:::-;26605:72;26673:2;26662:9;26658:18;26649:6;26605:72;:::i;:::-;26687;26755:2;26744:9;26740:18;26731:6;26687:72;:::i;:::-;26806:9;26800:4;26796:20;26791:2;26780:9;26776:18;26769:48;26834:132;26961:4;26952:6;26944;26834:132;:::i;:::-;26826:140;;27014:9;27008:4;27004:20;26998:3;26987:9;26983:19;26976:49;27042:118;27155:4;27146:6;27138;27042:118;:::i;:::-;27034:126;;26133:1034;;;;;;;;;;:::o;27173:180::-;27221:77;27218:1;27211:88;27318:4;27315:1;27308:15;27342:4;27339:1;27332:15;27359:320;27403:6;27440:1;27434:4;27430:12;27420:22;;27487:1;27481:4;27477:12;27508:18;27498:81;;27564:4;27556:6;27552:17;27542:27;;27498:81;27626:2;27618:6;27615:14;27595:18;27592:38;27589:84;;;27645:18;;:::i;:::-;27589:84;27410:269;27359:320;;;:::o;27685:180::-;27733:77;27730:1;27723:88;27830:4;27827:1;27820:15;27854:4;27851:1;27844:15;27871:357;27944:6;27993:2;27981:9;27972:7;27968:23;27964:32;27961:119;;;27999:79;;:::i;:::-;27961:119;28119:1;28144:67;28203:7;28194:6;28183:9;28179:22;28144:67;:::i;:::-;28134:77;;28090:131;27871:357;;;;:::o;28234:180::-;28282:77;28279:1;28272:88;28379:4;28376:1;28369:15;28403:4;28400:1;28393:15;28420:233;28459:3;28482:24;28500:5;28482:24;:::i;:::-;28473:33;;28528:66;28521:5;28518:77;28515:103;;;28598:18;;:::i;:::-;28515:103;28645:1;28638:5;28634:13;28627:20;;28420:233;;;:::o;28659:179::-;28799:31;28795:1;28787:6;28783:14;28776:55;28659:179;:::o;28844:366::-;28986:3;29007:67;29071:2;29066:3;29007:67;:::i;:::-;29000:74;;29083:93;29172:3;29083:93;:::i;:::-;29201:2;29196:3;29192:12;29185:19;;28844:366;;;:::o;29216:419::-;29382:4;29420:2;29409:9;29405:18;29397:26;;29469:9;29463:4;29459:20;29455:1;29444:9;29440:17;29433:47;29497:131;29623:4;29497:131;:::i;:::-;29489:139;;29216:419;;;:::o;29641:181::-;29781:33;29777:1;29769:6;29765:14;29758:57;29641:181;:::o;29828:366::-;29970:3;29991:67;30055:2;30050:3;29991:67;:::i;:::-;29984:74;;30067:93;30156:3;30067:93;:::i;:::-;30185:2;30180:3;30176:12;30169:19;;29828:366;;;:::o;30200:419::-;30366:4;30404:2;30393:9;30389:18;30381:26;;30453:9;30447:4;30443:20;30439:1;30428:9;30424:17;30417:47;30481:131;30607:4;30481:131;:::i;:::-;30473:139;;30200:419;;;:::o;30625:168::-;30765:20;30761:1;30753:6;30749:14;30742:44;30625:168;:::o;30799:366::-;30941:3;30962:67;31026:2;31021:3;30962:67;:::i;:::-;30955:74;;31038:93;31127:3;31038:93;:::i;:::-;31156:2;31151:3;31147:12;31140:19;;30799:366;;;:::o;31171:419::-;31337:4;31375:2;31364:9;31360:18;31352:26;;31424:9;31418:4;31414:20;31410:1;31399:9;31395:17;31388:47;31452:131;31578:4;31452:131;:::i;:::-;31444:139;;31171:419;;;:::o;31596:191::-;31636:4;31656:20;31674:1;31656:20;:::i;:::-;31651:25;;31690:20;31708:1;31690:20;:::i;:::-;31685:25;;31729:1;31726;31723:8;31720:34;;;31734:18;;:::i;:::-;31720:34;31779:1;31776;31772:9;31764:17;;31596:191;;;;:::o;31793:305::-;31833:3;31852:20;31870:1;31852:20;:::i;:::-;31847:25;;31886:20;31904:1;31886:20;:::i;:::-;31881:25;;32040:1;31972:66;31968:74;31965:1;31962:81;31959:107;;;32046:18;;:::i;:::-;31959:107;32090:1;32087;32083:9;32076:16;;31793:305;;;;:::o;32104:792::-;32377:4;32415:2;32404:9;32400:18;32392:26;;32428:71;32496:1;32485:9;32481:17;32472:6;32428:71;:::i;:::-;32546:9;32540:4;32536:20;32531:2;32520:9;32516:18;32509:48;32574:132;32701:4;32692:6;32684;32574:132;:::i;:::-;32566:140;;32753:9;32747:4;32743:20;32738:2;32727:9;32723:18;32716:48;32781:108;32884:4;32875:6;32781:108;:::i;:::-;32773:116;;32104:792;;;;;;;:::o;32902:225::-;33042:34;33038:1;33030:6;33026:14;33019:58;33111:8;33106:2;33098:6;33094:15;33087:33;32902:225;:::o;33133:366::-;33275:3;33296:67;33360:2;33355:3;33296:67;:::i;:::-;33289:74;;33372:93;33461:3;33372:93;:::i;:::-;33490:2;33485:3;33481:12;33474:19;;33133:366;;;:::o;33505:419::-;33671:4;33709:2;33698:9;33694:18;33686:26;;33758:9;33752:4;33748:20;33744:1;33733:9;33729:17;33722:47;33786:131;33912:4;33786:131;:::i;:::-;33778:139;;33505:419;;;:::o;33930:423::-;34071:4;34109:2;34098:9;34094:18;34086:26;;34122:71;34190:1;34179:9;34175:17;34166:6;34122:71;:::i;:::-;34240:9;34234:4;34230:20;34225:2;34214:9;34210:18;34203:48;34268:78;34341:4;34332:6;34268:78;:::i;:::-;34260:86;;33930:423;;;;;:::o;34359:79::-;34398:7;34427:5;34416:16;;34359:79;;;:::o;34444:157::-;34549:45;34569:24;34587:5;34569:24;:::i;:::-;34549:45;:::i;:::-;34544:3;34537:58;34444:157;;:::o;34607:397::-;34747:3;34762:75;34833:3;34824:6;34762:75;:::i;:::-;34862:2;34857:3;34853:12;34846:19;;34875:75;34946:3;34937:6;34875:75;:::i;:::-;34975:2;34970:3;34966:12;34959:19;;34995:3;34988:10;;34607:397;;;;;:::o;35010:179::-;35150:31;35146:1;35138:6;35134:14;35127:55;35010:179;:::o;35195:366::-;35337:3;35358:67;35422:2;35417:3;35358:67;:::i;:::-;35351:74;;35434:93;35523:3;35434:93;:::i;:::-;35552:2;35547:3;35543:12;35536:19;;35195:366;;;:::o;35567:419::-;35733:4;35771:2;35760:9;35756:18;35748:26;;35820:9;35814:4;35810:20;35806:1;35795:9;35791:17;35784:47;35848:131;35974:4;35848:131;:::i;:::-;35840:139;;35567:419;;;:::o;35992:147::-;36093:11;36130:3;36115:18;;35992:147;;;;:::o;36145:114::-;;:::o;36265:398::-;36424:3;36445:83;36526:1;36521:3;36445:83;:::i;:::-;36438:90;;36537:93;36626:3;36537:93;:::i;:::-;36655:1;36650:3;36646:11;36639:18;;36265:398;;;:::o;36669:379::-;36853:3;36875:147;37018:3;36875:147;:::i;:::-;36868:154;;37039:3;37032:10;;36669:379;;;:::o;37054:245::-;37194:34;37190:1;37182:6;37178:14;37171:58;37263:28;37258:2;37250:6;37246:15;37239:53;37054:245;:::o;37305:366::-;37447:3;37468:67;37532:2;37527:3;37468:67;:::i;:::-;37461:74;;37544:93;37633:3;37544:93;:::i;:::-;37662:2;37657:3;37653:12;37646:19;;37305:366;;;:::o;37677:419::-;37843:4;37881:2;37870:9;37866:18;37858:26;;37930:9;37924:4;37920:20;37916:1;37905:9;37901:17;37894:47;37958:131;38084:4;37958:131;:::i;:::-;37950:139;;37677:419;;;:::o;38102:332::-;38223:4;38261:2;38250:9;38246:18;38238:26;;38274:71;38342:1;38331:9;38327:17;38318:6;38274:71;:::i;:::-;38355:72;38423:2;38412:9;38408:18;38399:6;38355:72;:::i;:::-;38102:332;;;;;:::o;38440:116::-;38510:21;38525:5;38510:21;:::i;:::-;38503:5;38500:32;38490:60;;38546:1;38543;38536:12;38490:60;38440:116;:::o;38562:137::-;38616:5;38647:6;38641:13;38632:22;;38663:30;38687:5;38663:30;:::i;:::-;38562:137;;;;:::o;38705:345::-;38772:6;38821:2;38809:9;38800:7;38796:23;38792:32;38789:119;;;38827:79;;:::i;:::-;38789:119;38947:1;38972:61;39025:7;39016:6;39005:9;39001:22;38972:61;:::i;:::-;38962:71;;38918:125;38705:345;;;;:::o;39056:229::-;39196:34;39192:1;39184:6;39180:14;39173:58;39265:12;39260:2;39252:6;39248:15;39241:37;39056:229;:::o;39291:366::-;39433:3;39454:67;39518:2;39513:3;39454:67;:::i;:::-;39447:74;;39530:93;39619:3;39530:93;:::i;:::-;39648:2;39643:3;39639:12;39632:19;;39291:366;;;:::o;39663:419::-;39829:4;39867:2;39856:9;39852:18;39844:26;;39916:9;39910:4;39906:20;39902:1;39891:9;39887:17;39880:47;39944:131;40070:4;39944:131;:::i;:::-;39936:139;;39663:419;;;:::o;40088:225::-;40228:34;40224:1;40216:6;40212:14;40205:58;40297:8;40292:2;40284:6;40280:15;40273:33;40088:225;:::o;40319:366::-;40461:3;40482:67;40546:2;40541:3;40482:67;:::i;:::-;40475:74;;40558:93;40647:3;40558:93;:::i;:::-;40676:2;40671:3;40667:12;40660:19;;40319:366;;;:::o;40691:419::-;40857:4;40895:2;40884:9;40880:18;40872:26;;40944:9;40938:4;40934:20;40930:1;40919:9;40915:17;40908:47;40972:131;41098:4;40972:131;:::i;:::-;40964:139;;40691:419;;;:::o;41116:179::-;41256:31;41252:1;41244:6;41240:14;41233:55;41116:179;:::o;41301:366::-;41443:3;41464:67;41528:2;41523:3;41464:67;:::i;:::-;41457:74;;41540:93;41629:3;41540:93;:::i;:::-;41658:2;41653:3;41649:12;41642:19;;41301:366;;;:::o;41673:419::-;41839:4;41877:2;41866:9;41862:18;41854:26;;41926:9;41920:4;41916:20;41912:1;41901:9;41897:17;41890:47;41954:131;42080:4;41954:131;:::i;:::-;41946:139;;41673:419;;;:::o;42098:373::-;42202:3;42230:38;42262:5;42230:38;:::i;:::-;42284:88;42365:6;42360:3;42284:88;:::i;:::-;42277:95;;42381:52;42426:6;42421:3;42414:4;42407:5;42403:16;42381:52;:::i;:::-;42458:6;42453:3;42449:16;42442:23;;42206:265;42098:373;;;;:::o;42477:271::-;42607:3;42629:93;42718:3;42709:6;42629:93;:::i;:::-;42622:100;;42739:3;42732:10;;42477:271;;;;:::o;42754:313::-;42867:4;42905:2;42894:9;42890:18;42882:26;;42954:9;42948:4;42944:20;42940:1;42929:9;42925:17;42918:47;42982:78;43055:4;43046:6;42982:78;:::i;:::-;42974:86;;42754:313;;;;:::o
Swarm Source
ipfs://d420f3e5cca704ce900e21d0bf53c28b3a4308f6ef15d38c462aa7034a2788c8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in BTT
Token Allocations
BTTC
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BTTC | 100.00% | <$0.000001 | 1,000 | $0.000407 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.