Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 39 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20978719 | 96 days ago | IN | 0 ETH | 0.00198483 | ||||
Commit | 20973864 | 97 days ago | IN | 0 ETH | 0.00226793 | ||||
Withdraw | 20968978 | 97 days ago | IN | 0 ETH | 0.00112311 | ||||
Commit | 20968244 | 97 days ago | IN | 0 ETH | 0.00224162 | ||||
Withdraw | 20957041 | 99 days ago | IN | 0 ETH | 0.00109294 | ||||
Commit | 20937534 | 102 days ago | IN | 0 ETH | 0.00203283 | ||||
Withdraw | 20911941 | 105 days ago | IN | 0 ETH | 0.00049223 | ||||
Withdraw | 20911939 | 105 days ago | IN | 0 ETH | 0.0007211 | ||||
Commit | 20906420 | 106 days ago | IN | 0 ETH | 0.00190391 | ||||
Commit | 20886009 | 109 days ago | IN | 0 ETH | 0.00309271 | ||||
Withdraw | 20872970 | 111 days ago | IN | 0 ETH | 0.00125791 | ||||
Commit | 20872499 | 111 days ago | IN | 0 ETH | 0.00450342 | ||||
Withdraw | 20871486 | 111 days ago | IN | 0 ETH | 0.00389877 | ||||
Commit | 20871443 | 111 days ago | IN | 0 ETH | 0.01012729 | ||||
Withdraw | 20864507 | 112 days ago | IN | 0 ETH | 0.00163245 | ||||
Commit | 20864344 | 112 days ago | IN | 0 ETH | 0.00443315 | ||||
Withdraw | 20855440 | 113 days ago | IN | 0 ETH | 0.00072116 | ||||
Commit | 20855397 | 113 days ago | IN | 0 ETH | 0.00147941 | ||||
Withdraw | 20854935 | 113 days ago | IN | 0 ETH | 0.00074569 | ||||
Commit | 20853024 | 114 days ago | IN | 0 ETH | 0.00122772 | ||||
Withdraw | 20840624 | 115 days ago | IN | 0 ETH | 0.00094853 | ||||
Withdraw | 20840616 | 115 days ago | IN | 0 ETH | 0.00109187 | ||||
Commit | 20837845 | 116 days ago | IN | 0 ETH | 0.00283673 | ||||
Commit | 20836664 | 116 days ago | IN | 0 ETH | 0.00555845 | ||||
Withdraw | 20828816 | 117 days ago | IN | 0 ETH | 0.00361665 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
WoD_Commitment
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-18 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IERC20_USDT { function transferFrom(address from, address to, uint value) external; function transfer(address, uint256) external; } // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @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 EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * 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; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract WoD_Commitment is ReentrancyGuard, Ownable { struct Commitment { uint256 amount; bool accepted; bool refunded; uint256 timestamp; } uint256 public constant MAXIMUM_COMMITMENT = 20000e6; uint256 public constant MINIMUM_COMMITMENT = 100e6; address public usdtAddress = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // ERC20 USDT Token address mapping(address => mapping(address => Commitment[])) public commitments; address[] public allowedTokens; address[] public participants; Commitment[] public allCommitments; event Committed(address indexed user, address indexed tokenAddress, uint256 amount, uint256 timestamp); event Refunded(address indexed user, uint256 amount, address indexed tokenAddress); event Accepted(address indexed user, address indexed tokenAddress); event Withdrawn(address indexed owner, uint256 amount, address indexed tokenAddress); constructor(address[] memory _tokenAddresses) Ownable(msg.sender) { require(_tokenAddresses.length > 0, "No token addresses provided"); allowedTokens = _tokenAddresses; } function addAllowedToken(address _tokenAddress) external onlyOwner { allowedTokens.push(_tokenAddress); } function commit(address tokenAddress, uint256 amount) external nonReentrant { require(isAllowedToken(tokenAddress), "Token not allowed"); require(amount >= MINIMUM_COMMITMENT, "Commitment amount must be greater than 100"); uint256 totalCommitted = 0; for (uint256 i = 0; i < commitments[msg.sender][tokenAddress].length; i++) { Commitment storage existingCommitment = commitments[msg.sender][tokenAddress][i]; require(!existingCommitment.accepted, "Commitment already accepted, cannot commit again"); require(!existingCommitment.refunded, "Commitment already refunded, cannot commit again"); totalCommitted += existingCommitment.amount; } require(totalCommitted + amount <= MAXIMUM_COMMITMENT, "Exceeds maximum commitment limit"); Commitment memory newCommitment = Commitment({ amount: amount, accepted: false, refunded: false, timestamp: block.timestamp }); commitments[msg.sender][tokenAddress].push(newCommitment); allCommitments.push(newCommitment); if (tokenAddress == usdtAddress) { IERC20_USDT(tokenAddress).transferFrom(msg.sender, address(this), amount); } else { require(IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount), "Token transfer failed"); } if (commitments[msg.sender][tokenAddress].length == 1) { participants.push(msg.sender); } emit Committed(msg.sender, tokenAddress, amount, block.timestamp); } function _refund(address user, address tokenAddress, uint256 index) private { Commitment storage userCommitment = commitments[user][tokenAddress][index]; require(userCommitment.amount > 0, "No commitment to refund"); require(!userCommitment.refunded, "Commitment already refunded"); require(!userCommitment.accepted, "Commitment already accepted"); uint256 amountToRefund = userCommitment.amount; userCommitment.refunded = true; userCommitment.amount = 0; if (tokenAddress == usdtAddress) { IERC20_USDT(tokenAddress).transfer(user, amountToRefund); } else { IERC20(tokenAddress).transfer(user, amountToRefund); } emit Refunded(user, amountToRefund, tokenAddress); } function _accept(address user, address tokenAddress, uint256 index) private { Commitment storage userCommitment = commitments[user][tokenAddress][index]; require(userCommitment.amount > 0, "No commitment to accept"); require(!userCommitment.refunded, "Commitment already refunded"); require(!userCommitment.accepted, "Commitment already accepted"); userCommitment.accepted = true; emit Accepted(user, tokenAddress); } function refund(address user, address tokenAddress, uint256 index) external onlyOwner nonReentrant { _refund(user, tokenAddress, index); } function accept(address user, address tokenAddress, uint256 index) external onlyOwner { _accept(user, tokenAddress, index); } function batchRefund(address[] calldata users, address tokenAddress, uint256[] calldata indexes) external onlyOwner nonReentrant { require(users.length == indexes.length, "Mismatched users and indexes"); for (uint256 i = 0; i < users.length; i++) { _refund(users[i], tokenAddress, indexes[i]); } } function batchAccept(address[] calldata users, address tokenAddress, uint256[] calldata indexes) external onlyOwner { require(users.length == indexes.length, "Mismatched users and indexes"); for (uint256 i = 0; i < users.length; i++) { _accept(users[i], tokenAddress, indexes[i]); } } function withdraw(address tokenAddress) external onlyOwner { require(isAllowedToken(tokenAddress), "Token not allowed"); IERC20 token = IERC20(tokenAddress); uint256 contractBalance = token.balanceOf(address(this)); require(contractBalance > 0, "No funds to withdraw"); if (tokenAddress == usdtAddress) { IERC20_USDT(tokenAddress).transfer(owner(), contractBalance); } else { token.transfer(owner(), contractBalance); } emit Withdrawn(owner(), contractBalance, tokenAddress); } function viewCommitmentsByStatus(address tokenAddress, bool acceptedStatus, bool refundedStatus) external view returns (address[] memory, uint256[] memory) { uint256 count = 0; address[] memory tempAddresses = new address[](participants.length); uint256[] memory tempAmounts = new uint256[](participants.length); for (uint256 i = 0; i < participants.length; i++) { address user = participants[i]; Commitment[] storage userCommitments = commitments[user][tokenAddress]; for (uint256 j = 0; j < userCommitments.length; j++) { Commitment storage commitment = userCommitments[j]; if (commitment.amount > 0 && commitment.accepted == acceptedStatus && commitment.refunded == refundedStatus) { tempAddresses[count] = user; tempAmounts[count] = commitment.amount; count++; } } } address[] memory users = new address[](count); uint256[] memory amounts = new uint256[](count); for (uint256 i = 0; i < count; i++) { users[i] = tempAddresses[i]; amounts[i] = tempAmounts[i]; } return (users, amounts); } function viewLatestCommitments(uint256 limit) external view returns (Commitment[] memory) { uint256 count = limit > allCommitments.length ? allCommitments.length : limit; Commitment[] memory recentCommitments = new Commitment[](count); for (uint256 i = 0; i < count; i++) { recentCommitments[i] = allCommitments[allCommitments.length - 1 - i]; } return recentCommitments; } function commitmentCountForUser(address user, address tokenAddress) external view returns (uint256) { return commitments[user][tokenAddress].length; } function isAllowedToken(address tokenAddress) public view returns (bool) { for (uint256 i = 0; i < allowedTokens.length; i++) { if (allowedTokens[i] == tokenAddress) { return true; } } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_tokenAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Accepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Committed","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":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"MAXIMUM_COMMITMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_COMMITMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"accept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"addAllowedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allCommitments","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"name":"batchAccept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"name":"batchRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"commit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"commitmentCountForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"commitments","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"isAllowedToken","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":"uint256","name":"","type":"uint256"}],"name":"participants","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"acceptedStatus","type":"bool"},{"internalType":"bool","name":"refundedStatus","type":"bool"}],"name":"viewCommitmentsByStatus","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"viewLatestCommitments","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct WoD_Commitment.Commitment[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273dac17f958d2ee523a2206206994597c13d831ec760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610063575f80fd5b506040516134533803806134538339818101604052810190610085919061048d565b3360015f819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100fd575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100f491906104e3565b60405180910390fd5b61010c8161016d60201b60201c565b505f815111610150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014790610556565b60405180910390fd5b8060049080519060200190610166929190610230565b5050610574565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255905f5260205f209081019282156102a6579160200282015b828111156102a5578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061024e565b5b5090506102b391906102b7565b5090565b5b808211156102ce575f815f9055506001016102b8565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61032d826102e7565b810181811067ffffffffffffffff8211171561034c5761034b6102f7565b5b80604052505050565b5f61035e6102d2565b905061036a8282610324565b919050565b5f67ffffffffffffffff821115610389576103886102f7565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103c78261039e565b9050919050565b6103d7816103bd565b81146103e1575f80fd5b50565b5f815190506103f2816103ce565b92915050565b5f61040a6104058461036f565b610355565b9050808382526020820190506020840283018581111561042d5761042c61039a565b5b835b81811015610456578061044288826103e4565b84526020840193505060208101905061042f565b5050509392505050565b5f82601f830112610474576104736102e3565b5b81516104848482602086016103f8565b91505092915050565b5f602082840312156104a2576104a16102db565b5b5f82015167ffffffffffffffff8111156104bf576104be6102df565b5b6104cb84828501610460565b91505092915050565b6104dd816103bd565b82525050565b5f6020820190506104f65f8301846104d4565b92915050565b5f82825260208201905092915050565b7f4e6f20746f6b656e206164647265737365732070726f766964656400000000005f82015250565b5f610540601b836104fc565b915061054b8261050c565b602082019050919050565b5f6020820190508181035f83015261056d81610534565b9050919050565b612ed2806105815f395ff3fe608060405234801561000f575f80fd5b5060043610610134575f3560e01c806386115165116100b6578063a12614cf1161007a578063a12614cf1461033a578063cbe230c31461036a578063d30bd0b61461039a578063d5f03df6146103b6578063f2fde38b146103d4578063ffeccf09146103f057610134565b806386115165146102915780638da5cb5b146102ad57806394cb7f5f146102cb5780639845d66a146102fe5780639ab4a4451461031c57610134565b80635e5f2e26116100fd5780635e5f2e26146101ec578063715018a61461021c57806380493b931461022657806382ad6f351461025957806384bf15351461027557610134565b806233bbd4146101385780632819ca8d1461015457806335c1d349146101845780634178617f146101b457806351cff8d9146101d0575b5f80fd5b610152600480360381019061014d9190612112565b610421565b005b61016e600480360381019061016991906121a3565b6104ee565b60405161017b91906121f9565b60405180910390f35b61019e6004803603810190610199919061223c565b610573565b6040516101ab9190612276565b60405180910390f35b6101ce60048036038101906101c9919061228f565b6105ae565b005b6101ea60048036038101906101e5919061228f565b610619565b005b6102066004803603810190610201919061223c565b6108e7565b6040516102139190612276565b60405180910390f35b610224610922565b005b610240600480360381019061023b919061223c565b610935565b60405161025094939291906122d4565b60405180910390f35b610273600480360381019061026e9190612317565b610989565b005b61028f600480360381019061028a9190612367565b6109b1565b005b6102ab60048036038101906102a69190612317565b6110ec565b005b6102b5611104565b6040516102c29190612276565b60405180910390f35b6102e560048036038101906102e09190612317565b61112c565b6040516102f594939291906122d4565b60405180910390f35b610306611196565b60405161031391906121f9565b60405180910390f35b61032461119e565b6040516103319190612276565b60405180910390f35b610354600480360381019061034f919061223c565b6111c3565b60405161036191906124be565b60405180910390f35b610384600480360381019061037f919061228f565b611307565b60405161039191906124de565b60405180910390f35b6103b460048036038101906103af9190612112565b6113a9565b005b6103be611466565b6040516103cb91906121f9565b60405180910390f35b6103ee60048036038101906103e9919061228f565b61146f565b005b61040a60048036038101906104059190612521565b6114f3565b6040516104189291906126d0565b60405180910390f35b6104296118e0565b610431611967565b818190508585905014610479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104709061275f565b60405180910390fd5b5f5b858590508110156104de576104d186868381811061049c5761049b61277d565b5b90506020020160208101906104b1919061228f565b858585858181106104c5576104c461277d565b5b905060200201356119ab565b808060010191505061047b565b506104e7611d02565b5050505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905092915050565b60058181548110610582575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105b66118e0565b600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106216118e0565b61062a81611307565b610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906127f4565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106a79190612276565b602060405180830381865afa1580156106c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e69190612826565b90505f811161072a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107219061289b565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f2578273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6107a2611104565b836040518363ffffffff1660e01b81526004016107c09291906128b9565b5f604051808303815f87803b1580156107d7575f80fd5b505af11580156107e9573d5f803e3d5ffd5b50505050610876565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610816611104565b836040518363ffffffff1660e01b81526004016108349291906128b9565b6020604051808303815f875af1158015610850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087491906128f4565b505b8273ffffffffffffffffffffffffffffffffffffffff16610895611104565b73ffffffffffffffffffffffffffffffffffffffff167fcbcdbdf10631a43cc99c80acace8232649421c3f4f73919f16013d47c83a687a836040516108da91906121f9565b60405180910390a3505050565b600481815481106108f6575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61092a6118e0565b6109335f611d0b565b565b60068181548110610944575f80fd5b905f5260205f2090600302015f91509050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b6109916118e0565b610999611967565b6109a48383836119ab565b6109ac611d02565b505050565b6109b9611967565b6109c282611307565b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906127f4565b60405180910390fd5b6305f5e100811015610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f9061298f565b60405180910390fd5b5f805b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050811015610c29575f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110610b5957610b5861277d565b5b905f5260205f2090600302019050806001015f9054906101000a900460ff1615610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612a1d565b60405180910390fd5b8060010160019054906101000a900460ff1615610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190612aab565b60405180910390fd5b805f015483610c199190612af6565b9250508080600101915050610a4b565b506404a817c8008282610c3c9190612af6565b1115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612b73565b60405180910390fd5b5f60405180608001604052808481526020015f151581526020015f1515815260200142815250905060035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f01556020820151816001015f6101000a81548160ff02191690831515021790555060408201518160010160016101000a81548160ff021916908315150217905550606082015181600201555050600681908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f01556020820151816001015f6101000a81548160ff02191690831515021790555060408201518160010160016101000a81548160ff02191690831515021790555060608201518160020155505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ed6578373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610ea493929190612b91565b5f604051808303815f87803b158015610ebb575f80fd5b505af1158015610ecd573d5f803e3d5ffd5b50505050610f93565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610f1393929190612b91565b6020604051808303815f875af1158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5391906128f4565b610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612c10565b60405180910390fd5b5b600160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490500361107757600533908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f30a1ff0f95bd1610ff9d7a03f9c9e8f20604e045b077ab39721915b42cfc836585426040516110d6929190612c2e565b60405180910390a350506110e8611d02565b5050565b6110f46118e0565b6110ff838383611dce565b505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003602052825f5260405f20602052815f5260405f20818154811061114f575f80fd5b905f5260205f2090600302015f925092505050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b6305f5e10081565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f60068054905083116111d857826111df565b6006805490505b90505f8167ffffffffffffffff8111156111fc576111fb612c55565b5b60405190808252806020026020018201604052801561123557816020015b611222611fd2565b81526020019060019003908161121a5790505b5090505f5b828110156112fc5760068160016006805490506112579190612c82565b6112619190612c82565b815481106112725761127161277d565b5b905f5260205f2090600302016040518060800160405290815f8201548152602001600182015f9054906101000a900460ff161515151581526020016001820160019054906101000a900460ff161515151581526020016002820154815250508282815181106112e4576112e361277d565b5b6020026020010181905250808060010191505061123a565b508092505050919050565b5f805f90505b60048054905081101561139f578273ffffffffffffffffffffffffffffffffffffffff16600482815481106113455761134461277d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113925760019150506113a4565b808060010191505061130d565b505f90505b919050565b6113b16118e0565b8181905085859050146113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f09061275f565b60405180910390fd5b5f5b8585905081101561145e5761145186868381811061141c5761141b61277d565b5b9050602002016020810190611431919061228f565b858585858181106114455761144461277d565b5b90506020020135611dce565b80806001019150506113fb565b505050505050565b6404a817c80081565b6114776118e0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e7575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114de9190612276565b60405180910390fd5b6114f081611d0b565b50565b6060805f8060058054905067ffffffffffffffff81111561151757611516612c55565b5b6040519080825280602002602001820160405280156115455781602001602082028036833780820191505090505b5090505f60058054905067ffffffffffffffff81111561156857611567612c55565b5b6040519080825280602002602001820160405280156115965781602001602082028036833780820191505090505b5090505f5b60058054905081101561177a575f600582815481106115bd576115bc61277d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5b818054905081101561176a575f8282815481106116845761168361277d565b5b905f5260205f20906003020190505f815f01541180156116b757508b1515816001015f9054906101000a900460ff161515145b80156116d757508a15158160010160019054906101000a900460ff161515145b1561175c57838789815181106116f0576116ef61277d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f01548689815181106117415761174061277d565b5b602002602001018181525050878061175890612cb5565b9850505b508080600101915050611664565b505050808060010191505061159b565b505f8367ffffffffffffffff81111561179657611795612c55565b5b6040519080825280602002602001820160405280156117c45781602001602082028036833780820191505090505b5090505f8467ffffffffffffffff8111156117e2576117e1612c55565b5b6040519080825280602002602001820160405280156118105781602001602082028036833780820191505090505b5090505f5b858110156118cc578481815181106118305761182f61277d565b5b602002602001015183828151811061184b5761184a61277d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508381815181106118985761189761277d565b5b60200260200101518282815181106118b3576118b261277d565b5b6020026020010181815250508080600101915050611815565b508181965096505050505050935093915050565b6118e8611fcb565b73ffffffffffffffffffffffffffffffffffffffff16611906611104565b73ffffffffffffffffffffffffffffffffffffffff161461196557611929611fcb565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161195c9190612276565b60405180910390fd5b565b60025f54036119a2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611a3657611a3561277d565b5b905f5260205f20906003020190505f815f015411611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090612d46565b60405180910390fd5b8060010160019054906101000a900460ff1615611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290612dae565b60405180910390fd5b806001015f9054906101000a900460ff1615611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390612e16565b60405180910390fd5b5f815f0154905060018260010160016101000a81548160ff0219169083151502179055505f825f018190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c19578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401611be79291906128b9565b5f604051808303815f87803b158015611bfe575f80fd5b505af1158015611c10573d5f803e3d5ffd5b50505050611c96565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401611c549291906128b9565b6020604051808303815f875af1158015611c70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9491906128f4565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb44b3631755227290f8fbd7b248fa4be405129d15351313e3c332a3fb991941783604051611cf391906121f9565b60405180910390a35050505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611e5957611e5861277d565b5b905f5260205f20906003020190505f815f015411611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390612e7e565b60405180910390fd5b8060010160019054906101000a900460ff1615611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590612dae565b60405180910390fd5b806001015f9054906101000a900460ff1615611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690612e16565b60405180910390fd5b6001816001015f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4cd361b37129a4a13dff2704ff3bc0261c22f688c60784c2849582de8b77f1f560405160405180910390a350505050565b5f33905090565b60405180608001604052805f81526020015f151581526020015f151581526020015f81525090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261202357612022612002565b5b8235905067ffffffffffffffff8111156120405761203f612006565b5b60208301915083602082028301111561205c5761205b61200a565b5b9250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61208c82612063565b9050919050565b61209c81612082565b81146120a6575f80fd5b50565b5f813590506120b781612093565b92915050565b5f8083601f8401126120d2576120d1612002565b5b8235905067ffffffffffffffff8111156120ef576120ee612006565b5b60208301915083602082028301111561210b5761210a61200a565b5b9250929050565b5f805f805f6060868803121561212b5761212a611ffa565b5b5f86013567ffffffffffffffff81111561214857612147611ffe565b5b6121548882890161200e565b95509550506020612167888289016120a9565b935050604086013567ffffffffffffffff81111561218857612187611ffe565b5b612194888289016120bd565b92509250509295509295909350565b5f80604083850312156121b9576121b8611ffa565b5b5f6121c6858286016120a9565b92505060206121d7858286016120a9565b9150509250929050565b5f819050919050565b6121f3816121e1565b82525050565b5f60208201905061220c5f8301846121ea565b92915050565b61221b816121e1565b8114612225575f80fd5b50565b5f8135905061223681612212565b92915050565b5f6020828403121561225157612250611ffa565b5b5f61225e84828501612228565b91505092915050565b61227081612082565b82525050565b5f6020820190506122895f830184612267565b92915050565b5f602082840312156122a4576122a3611ffa565b5b5f6122b1848285016120a9565b91505092915050565b5f8115159050919050565b6122ce816122ba565b82525050565b5f6080820190506122e75f8301876121ea565b6122f460208301866122c5565b61230160408301856122c5565b61230e60608301846121ea565b95945050505050565b5f805f6060848603121561232e5761232d611ffa565b5b5f61233b868287016120a9565b935050602061234c868287016120a9565b925050604061235d86828701612228565b9150509250925092565b5f806040838503121561237d5761237c611ffa565b5b5f61238a858286016120a9565b925050602061239b85828601612228565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6123d7816121e1565b82525050565b6123e6816122ba565b82525050565b608082015f8201516124005f8501826123ce565b50602082015161241360208501826123dd565b50604082015161242660408501826123dd565b50606082015161243960608501826123ce565b50505050565b5f61244a83836123ec565b60808301905092915050565b5f602082019050919050565b5f61246c826123a5565b61247681856123af565b9350612481836123bf565b805f5b838110156124b1578151612498888261243f565b97506124a383612456565b925050600181019050612484565b5085935050505092915050565b5f6020820190508181035f8301526124d68184612462565b905092915050565b5f6020820190506124f15f8301846122c5565b92915050565b612500816122ba565b811461250a575f80fd5b50565b5f8135905061251b816124f7565b92915050565b5f805f6060848603121561253857612537611ffa565b5b5f612545868287016120a9565b93505060206125568682870161250d565b92505060406125678682870161250d565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125a381612082565b82525050565b5f6125b4838361259a565b60208301905092915050565b5f602082019050919050565b5f6125d682612571565b6125e0818561257b565b93506125eb8361258b565b805f5b8381101561261b57815161260288826125a9565b975061260d836125c0565b9250506001810190506125ee565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61265c83836123ce565b60208301905092915050565b5f602082019050919050565b5f61267e82612628565b6126888185612632565b935061269383612642565b805f5b838110156126c35781516126aa8882612651565b97506126b583612668565b925050600181019050612696565b5085935050505092915050565b5f6040820190508181035f8301526126e881856125cc565b905081810360208301526126fc8184612674565b90509392505050565b5f82825260208201905092915050565b7f4d69736d61746368656420757365727320616e6420696e6465786573000000005f82015250565b5f612749601c83612705565b915061275482612715565b602082019050919050565b5f6020820190508181035f8301526127768161273d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f546f6b656e206e6f7420616c6c6f7765640000000000000000000000000000005f82015250565b5f6127de601183612705565b91506127e9826127aa565b602082019050919050565b5f6020820190508181035f83015261280b816127d2565b9050919050565b5f8151905061282081612212565b92915050565b5f6020828403121561283b5761283a611ffa565b5b5f61284884828501612812565b91505092915050565b7f4e6f2066756e647320746f2077697468647261770000000000000000000000005f82015250565b5f612885601483612705565b915061289082612851565b602082019050919050565b5f6020820190508181035f8301526128b281612879565b9050919050565b5f6040820190506128cc5f830185612267565b6128d960208301846121ea565b9392505050565b5f815190506128ee816124f7565b92915050565b5f6020828403121561290957612908611ffa565b5b5f612916848285016128e0565b91505092915050565b7f436f6d6d69746d656e7420616d6f756e74206d757374206265206772656174655f8201527f72207468616e2031303000000000000000000000000000000000000000000000602082015250565b5f612979602a83612705565b91506129848261291f565b604082019050919050565b5f6020820190508181035f8301526129a68161296d565b9050919050565b7f436f6d6d69746d656e7420616c72656164792061636365707465642c2063616e5f8201527f6e6f7420636f6d6d697420616761696e00000000000000000000000000000000602082015250565b5f612a07603083612705565b9150612a12826129ad565b604082019050919050565b5f6020820190508181035f830152612a34816129fb565b9050919050565b7f436f6d6d69746d656e7420616c726561647920726566756e6465642c2063616e5f8201527f6e6f7420636f6d6d697420616761696e00000000000000000000000000000000602082015250565b5f612a95603083612705565b9150612aa082612a3b565b604082019050919050565b5f6020820190508181035f830152612ac281612a89565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b00826121e1565b9150612b0b836121e1565b9250828201905080821115612b2357612b22612ac9565b5b92915050565b7f45786365656473206d6178696d756d20636f6d6d69746d656e74206c696d69745f82015250565b5f612b5d602083612705565b9150612b6882612b29565b602082019050919050565b5f6020820190508181035f830152612b8a81612b51565b9050919050565b5f606082019050612ba45f830186612267565b612bb16020830185612267565b612bbe60408301846121ea565b949350505050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f612bfa601583612705565b9150612c0582612bc6565b602082019050919050565b5f6020820190508181035f830152612c2781612bee565b9050919050565b5f604082019050612c415f8301856121ea565b612c4e60208301846121ea565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f612c8c826121e1565b9150612c97836121e1565b9250828203905081811115612caf57612cae612ac9565b5b92915050565b5f612cbf826121e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cf157612cf0612ac9565b5b600182019050919050565b7f4e6f20636f6d6d69746d656e7420746f20726566756e640000000000000000005f82015250565b5f612d30601783612705565b9150612d3b82612cfc565b602082019050919050565b5f6020820190508181035f830152612d5d81612d24565b9050919050565b7f436f6d6d69746d656e7420616c726561647920726566756e64656400000000005f82015250565b5f612d98601b83612705565b9150612da382612d64565b602082019050919050565b5f6020820190508181035f830152612dc581612d8c565b9050919050565b7f436f6d6d69746d656e7420616c726561647920616363657074656400000000005f82015250565b5f612e00601b83612705565b9150612e0b82612dcc565b602082019050919050565b5f6020820190508181035f830152612e2d81612df4565b9050919050565b7f4e6f20636f6d6d69746d656e7420746f206163636570740000000000000000005f82015250565b5f612e68601783612705565b9150612e7382612e34565b602082019050919050565b5f6020820190508181035f830152612e9581612e5c565b905091905056fea2646970667358221220d8c0968865a85a8a3c2258d584025e70309f1cd175ae10edc4fb707afab338ea64736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610134575f3560e01c806386115165116100b6578063a12614cf1161007a578063a12614cf1461033a578063cbe230c31461036a578063d30bd0b61461039a578063d5f03df6146103b6578063f2fde38b146103d4578063ffeccf09146103f057610134565b806386115165146102915780638da5cb5b146102ad57806394cb7f5f146102cb5780639845d66a146102fe5780639ab4a4451461031c57610134565b80635e5f2e26116100fd5780635e5f2e26146101ec578063715018a61461021c57806380493b931461022657806382ad6f351461025957806384bf15351461027557610134565b806233bbd4146101385780632819ca8d1461015457806335c1d349146101845780634178617f146101b457806351cff8d9146101d0575b5f80fd5b610152600480360381019061014d9190612112565b610421565b005b61016e600480360381019061016991906121a3565b6104ee565b60405161017b91906121f9565b60405180910390f35b61019e6004803603810190610199919061223c565b610573565b6040516101ab9190612276565b60405180910390f35b6101ce60048036038101906101c9919061228f565b6105ae565b005b6101ea60048036038101906101e5919061228f565b610619565b005b6102066004803603810190610201919061223c565b6108e7565b6040516102139190612276565b60405180910390f35b610224610922565b005b610240600480360381019061023b919061223c565b610935565b60405161025094939291906122d4565b60405180910390f35b610273600480360381019061026e9190612317565b610989565b005b61028f600480360381019061028a9190612367565b6109b1565b005b6102ab60048036038101906102a69190612317565b6110ec565b005b6102b5611104565b6040516102c29190612276565b60405180910390f35b6102e560048036038101906102e09190612317565b61112c565b6040516102f594939291906122d4565b60405180910390f35b610306611196565b60405161031391906121f9565b60405180910390f35b61032461119e565b6040516103319190612276565b60405180910390f35b610354600480360381019061034f919061223c565b6111c3565b60405161036191906124be565b60405180910390f35b610384600480360381019061037f919061228f565b611307565b60405161039191906124de565b60405180910390f35b6103b460048036038101906103af9190612112565b6113a9565b005b6103be611466565b6040516103cb91906121f9565b60405180910390f35b6103ee60048036038101906103e9919061228f565b61146f565b005b61040a60048036038101906104059190612521565b6114f3565b6040516104189291906126d0565b60405180910390f35b6104296118e0565b610431611967565b818190508585905014610479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104709061275f565b60405180910390fd5b5f5b858590508110156104de576104d186868381811061049c5761049b61277d565b5b90506020020160208101906104b1919061228f565b858585858181106104c5576104c461277d565b5b905060200201356119ab565b808060010191505061047b565b506104e7611d02565b5050505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050905092915050565b60058181548110610582575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105b66118e0565b600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106216118e0565b61062a81611307565b610669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610660906127f4565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106a79190612276565b602060405180830381865afa1580156106c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e69190612826565b90505f811161072a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107219061289b565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f2578273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6107a2611104565b836040518363ffffffff1660e01b81526004016107c09291906128b9565b5f604051808303815f87803b1580156107d7575f80fd5b505af11580156107e9573d5f803e3d5ffd5b50505050610876565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610816611104565b836040518363ffffffff1660e01b81526004016108349291906128b9565b6020604051808303815f875af1158015610850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087491906128f4565b505b8273ffffffffffffffffffffffffffffffffffffffff16610895611104565b73ffffffffffffffffffffffffffffffffffffffff167fcbcdbdf10631a43cc99c80acace8232649421c3f4f73919f16013d47c83a687a836040516108da91906121f9565b60405180910390a3505050565b600481815481106108f6575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61092a6118e0565b6109335f611d0b565b565b60068181548110610944575f80fd5b905f5260205f2090600302015f91509050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b6109916118e0565b610999611967565b6109a48383836119ab565b6109ac611d02565b505050565b6109b9611967565b6109c282611307565b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906127f4565b60405180910390fd5b6305f5e100811015610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f9061298f565b60405180910390fd5b5f805b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050811015610c29575f60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110610b5957610b5861277d565b5b905f5260205f2090600302019050806001015f9054906101000a900460ff1615610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612a1d565b60405180910390fd5b8060010160019054906101000a900460ff1615610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0190612aab565b60405180910390fd5b805f015483610c199190612af6565b9250508080600101915050610a4b565b506404a817c8008282610c3c9190612af6565b1115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490612b73565b60405180910390fd5b5f60405180608001604052808481526020015f151581526020015f1515815260200142815250905060035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f01556020820151816001015f6101000a81548160ff02191690831515021790555060408201518160010160016101000a81548160ff021916908315150217905550606082015181600201555050600681908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f01556020820151816001015f6101000a81548160ff02191690831515021790555060408201518160010160016101000a81548160ff02191690831515021790555060608201518160020155505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ed6578373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610ea493929190612b91565b5f604051808303815f87803b158015610ebb575f80fd5b505af1158015610ecd573d5f803e3d5ffd5b50505050610f93565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401610f1393929190612b91565b6020604051808303815f875af1158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5391906128f4565b610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612c10565b60405180910390fd5b5b600160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490500361107757600533908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f30a1ff0f95bd1610ff9d7a03f9c9e8f20604e045b077ab39721915b42cfc836585426040516110d6929190612c2e565b60405180910390a350506110e8611d02565b5050565b6110f46118e0565b6110ff838383611dce565b505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003602052825f5260405f20602052815f5260405f20818154811061114f575f80fd5b905f5260205f2090600302015f925092505050805f015490806001015f9054906101000a900460ff16908060010160019054906101000a900460ff16908060020154905084565b6305f5e10081565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60605f60068054905083116111d857826111df565b6006805490505b90505f8167ffffffffffffffff8111156111fc576111fb612c55565b5b60405190808252806020026020018201604052801561123557816020015b611222611fd2565b81526020019060019003908161121a5790505b5090505f5b828110156112fc5760068160016006805490506112579190612c82565b6112619190612c82565b815481106112725761127161277d565b5b905f5260205f2090600302016040518060800160405290815f8201548152602001600182015f9054906101000a900460ff161515151581526020016001820160019054906101000a900460ff161515151581526020016002820154815250508282815181106112e4576112e361277d565b5b6020026020010181905250808060010191505061123a565b508092505050919050565b5f805f90505b60048054905081101561139f578273ffffffffffffffffffffffffffffffffffffffff16600482815481106113455761134461277d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113925760019150506113a4565b808060010191505061130d565b505f90505b919050565b6113b16118e0565b8181905085859050146113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f09061275f565b60405180910390fd5b5f5b8585905081101561145e5761145186868381811061141c5761141b61277d565b5b9050602002016020810190611431919061228f565b858585858181106114455761144461277d565b5b90506020020135611dce565b80806001019150506113fb565b505050505050565b6404a817c80081565b6114776118e0565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e7575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114de9190612276565b60405180910390fd5b6114f081611d0b565b50565b6060805f8060058054905067ffffffffffffffff81111561151757611516612c55565b5b6040519080825280602002602001820160405280156115455781602001602082028036833780820191505090505b5090505f60058054905067ffffffffffffffff81111561156857611567612c55565b5b6040519080825280602002602001820160405280156115965781602001602082028036833780820191505090505b5090505f5b60058054905081101561177a575f600582815481106115bd576115bc61277d565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f5b818054905081101561176a575f8282815481106116845761168361277d565b5b905f5260205f20906003020190505f815f01541180156116b757508b1515816001015f9054906101000a900460ff161515145b80156116d757508a15158160010160019054906101000a900460ff161515145b1561175c57838789815181106116f0576116ef61277d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050805f01548689815181106117415761174061277d565b5b602002602001018181525050878061175890612cb5565b9850505b508080600101915050611664565b505050808060010191505061159b565b505f8367ffffffffffffffff81111561179657611795612c55565b5b6040519080825280602002602001820160405280156117c45781602001602082028036833780820191505090505b5090505f8467ffffffffffffffff8111156117e2576117e1612c55565b5b6040519080825280602002602001820160405280156118105781602001602082028036833780820191505090505b5090505f5b858110156118cc578481815181106118305761182f61277d565b5b602002602001015183828151811061184b5761184a61277d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508381815181106118985761189761277d565b5b60200260200101518282815181106118b3576118b261277d565b5b6020026020010181815250508080600101915050611815565b508181965096505050505050935093915050565b6118e8611fcb565b73ffffffffffffffffffffffffffffffffffffffff16611906611104565b73ffffffffffffffffffffffffffffffffffffffff161461196557611929611fcb565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161195c9190612276565b60405180910390fd5b565b60025f54036119a2576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611a3657611a3561277d565b5b905f5260205f20906003020190505f815f015411611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090612d46565b60405180910390fd5b8060010160019054906101000a900460ff1615611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad290612dae565b60405180910390fd5b806001015f9054906101000a900460ff1615611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2390612e16565b60405180910390fd5b5f815f0154905060018260010160016101000a81548160ff0219169083151502179055505f825f018190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c19578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401611be79291906128b9565b5f604051808303815f87803b158015611bfe575f80fd5b505af1158015611c10573d5f803e3d5ffd5b50505050611c96565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401611c549291906128b9565b6020604051808303815f875af1158015611c70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9491906128f4565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb44b3631755227290f8fbd7b248fa4be405129d15351313e3c332a3fb991941783604051611cf391906121f9565b60405180910390a35050505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611e5957611e5861277d565b5b905f5260205f20906003020190505f815f015411611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea390612e7e565b60405180910390fd5b8060010160019054906101000a900460ff1615611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590612dae565b60405180910390fd5b806001015f9054906101000a900460ff1615611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690612e16565b60405180910390fd5b6001816001015f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f4cd361b37129a4a13dff2704ff3bc0261c22f688c60784c2849582de8b77f1f560405160405180910390a350505050565b5f33905090565b60405180608001604052805f81526020015f151581526020015f151581526020015f81525090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261202357612022612002565b5b8235905067ffffffffffffffff8111156120405761203f612006565b5b60208301915083602082028301111561205c5761205b61200a565b5b9250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61208c82612063565b9050919050565b61209c81612082565b81146120a6575f80fd5b50565b5f813590506120b781612093565b92915050565b5f8083601f8401126120d2576120d1612002565b5b8235905067ffffffffffffffff8111156120ef576120ee612006565b5b60208301915083602082028301111561210b5761210a61200a565b5b9250929050565b5f805f805f6060868803121561212b5761212a611ffa565b5b5f86013567ffffffffffffffff81111561214857612147611ffe565b5b6121548882890161200e565b95509550506020612167888289016120a9565b935050604086013567ffffffffffffffff81111561218857612187611ffe565b5b612194888289016120bd565b92509250509295509295909350565b5f80604083850312156121b9576121b8611ffa565b5b5f6121c6858286016120a9565b92505060206121d7858286016120a9565b9150509250929050565b5f819050919050565b6121f3816121e1565b82525050565b5f60208201905061220c5f8301846121ea565b92915050565b61221b816121e1565b8114612225575f80fd5b50565b5f8135905061223681612212565b92915050565b5f6020828403121561225157612250611ffa565b5b5f61225e84828501612228565b91505092915050565b61227081612082565b82525050565b5f6020820190506122895f830184612267565b92915050565b5f602082840312156122a4576122a3611ffa565b5b5f6122b1848285016120a9565b91505092915050565b5f8115159050919050565b6122ce816122ba565b82525050565b5f6080820190506122e75f8301876121ea565b6122f460208301866122c5565b61230160408301856122c5565b61230e60608301846121ea565b95945050505050565b5f805f6060848603121561232e5761232d611ffa565b5b5f61233b868287016120a9565b935050602061234c868287016120a9565b925050604061235d86828701612228565b9150509250925092565b5f806040838503121561237d5761237c611ffa565b5b5f61238a858286016120a9565b925050602061239b85828601612228565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6123d7816121e1565b82525050565b6123e6816122ba565b82525050565b608082015f8201516124005f8501826123ce565b50602082015161241360208501826123dd565b50604082015161242660408501826123dd565b50606082015161243960608501826123ce565b50505050565b5f61244a83836123ec565b60808301905092915050565b5f602082019050919050565b5f61246c826123a5565b61247681856123af565b9350612481836123bf565b805f5b838110156124b1578151612498888261243f565b97506124a383612456565b925050600181019050612484565b5085935050505092915050565b5f6020820190508181035f8301526124d68184612462565b905092915050565b5f6020820190506124f15f8301846122c5565b92915050565b612500816122ba565b811461250a575f80fd5b50565b5f8135905061251b816124f7565b92915050565b5f805f6060848603121561253857612537611ffa565b5b5f612545868287016120a9565b93505060206125568682870161250d565b92505060406125678682870161250d565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125a381612082565b82525050565b5f6125b4838361259a565b60208301905092915050565b5f602082019050919050565b5f6125d682612571565b6125e0818561257b565b93506125eb8361258b565b805f5b8381101561261b57815161260288826125a9565b975061260d836125c0565b9250506001810190506125ee565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61265c83836123ce565b60208301905092915050565b5f602082019050919050565b5f61267e82612628565b6126888185612632565b935061269383612642565b805f5b838110156126c35781516126aa8882612651565b97506126b583612668565b925050600181019050612696565b5085935050505092915050565b5f6040820190508181035f8301526126e881856125cc565b905081810360208301526126fc8184612674565b90509392505050565b5f82825260208201905092915050565b7f4d69736d61746368656420757365727320616e6420696e6465786573000000005f82015250565b5f612749601c83612705565b915061275482612715565b602082019050919050565b5f6020820190508181035f8301526127768161273d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f546f6b656e206e6f7420616c6c6f7765640000000000000000000000000000005f82015250565b5f6127de601183612705565b91506127e9826127aa565b602082019050919050565b5f6020820190508181035f83015261280b816127d2565b9050919050565b5f8151905061282081612212565b92915050565b5f6020828403121561283b5761283a611ffa565b5b5f61284884828501612812565b91505092915050565b7f4e6f2066756e647320746f2077697468647261770000000000000000000000005f82015250565b5f612885601483612705565b915061289082612851565b602082019050919050565b5f6020820190508181035f8301526128b281612879565b9050919050565b5f6040820190506128cc5f830185612267565b6128d960208301846121ea565b9392505050565b5f815190506128ee816124f7565b92915050565b5f6020828403121561290957612908611ffa565b5b5f612916848285016128e0565b91505092915050565b7f436f6d6d69746d656e7420616d6f756e74206d757374206265206772656174655f8201527f72207468616e2031303000000000000000000000000000000000000000000000602082015250565b5f612979602a83612705565b91506129848261291f565b604082019050919050565b5f6020820190508181035f8301526129a68161296d565b9050919050565b7f436f6d6d69746d656e7420616c72656164792061636365707465642c2063616e5f8201527f6e6f7420636f6d6d697420616761696e00000000000000000000000000000000602082015250565b5f612a07603083612705565b9150612a12826129ad565b604082019050919050565b5f6020820190508181035f830152612a34816129fb565b9050919050565b7f436f6d6d69746d656e7420616c726561647920726566756e6465642c2063616e5f8201527f6e6f7420636f6d6d697420616761696e00000000000000000000000000000000602082015250565b5f612a95603083612705565b9150612aa082612a3b565b604082019050919050565b5f6020820190508181035f830152612ac281612a89565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b00826121e1565b9150612b0b836121e1565b9250828201905080821115612b2357612b22612ac9565b5b92915050565b7f45786365656473206d6178696d756d20636f6d6d69746d656e74206c696d69745f82015250565b5f612b5d602083612705565b9150612b6882612b29565b602082019050919050565b5f6020820190508181035f830152612b8a81612b51565b9050919050565b5f606082019050612ba45f830186612267565b612bb16020830185612267565b612bbe60408301846121ea565b949350505050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f612bfa601583612705565b9150612c0582612bc6565b602082019050919050565b5f6020820190508181035f830152612c2781612bee565b9050919050565b5f604082019050612c415f8301856121ea565b612c4e60208301846121ea565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f612c8c826121e1565b9150612c97836121e1565b9250828203905081811115612caf57612cae612ac9565b5b92915050565b5f612cbf826121e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cf157612cf0612ac9565b5b600182019050919050565b7f4e6f20636f6d6d69746d656e7420746f20726566756e640000000000000000005f82015250565b5f612d30601783612705565b9150612d3b82612cfc565b602082019050919050565b5f6020820190508181035f830152612d5d81612d24565b9050919050565b7f436f6d6d69746d656e7420616c726561647920726566756e64656400000000005f82015250565b5f612d98601b83612705565b9150612da382612d64565b602082019050919050565b5f6020820190508181035f830152612dc581612d8c565b9050919050565b7f436f6d6d69746d656e7420616c726561647920616363657074656400000000005f82015250565b5f612e00601b83612705565b9150612e0b82612dcc565b602082019050919050565b5f6020820190508181035f830152612e2d81612df4565b9050919050565b7f4e6f20636f6d6d69746d656e7420746f206163636570740000000000000000005f82015250565b5f612e68601783612705565b9150612e7382612e34565b602082019050919050565b5f6020820190508181035f830152612e9581612e5c565b905091905056fea2646970667358221220d8c0968865a85a8a3c2258d584025e70309f1cd175ae10edc4fb707afab338ea64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
-----Decoded View---------------
Arg [0] : _tokenAddresses (address[]): 0xdAC17F958D2ee523a2206206994597C13D831ec7,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Deployed Bytecode Sourcemap
10569:7925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15008:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18044:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11103:29;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11747:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15695:563;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11066:30;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9733:103;;;:::i;:::-;;11139:34;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14701:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11874:1527;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14861:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9058:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10988:71;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;10823:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10880:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17596:440;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18216:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15358:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10763:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9991:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16266:1322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;15008:342;8944:13;:11;:13::i;:::-;5570:21:::1;:19;:21::i;:::-;15172:7:::2;;:14;;15156:5;;:12;;:30;15148:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15235:9;15230:113;15254:5;;:12;;15250:1;:16;15230:113;;;15288:43;15296:5;;15302:1;15296:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15306:12;15320:7;;15328:1;15320:10;;;;;;;:::i;:::-;;;;;;;;15288:7;:43::i;:::-;15268:3;;;;;;;15230:113;;;;5614:20:::1;:18;:20::i;:::-;15008:342:::0;;;;;:::o;18044:164::-;18135:7;18162:11;:17;18174:4;18162:17;;;;;;;;;;;;;;;:31;18180:12;18162:31;;;;;;;;;;;;;;;:38;;;;18155:45;;18044:164;;;;:::o;11103:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11747:119::-;8944:13;:11;:13::i;:::-;11825::::1;11844;11825:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11747:119:::0;:::o;15695:563::-;8944:13;:11;:13::i;:::-;15773:28:::1;15788:12;15773:14;:28::i;:::-;15765:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15834:12;15856;15834:35;;15880:23;15906:5;:15;;;15930:4;15906:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15880:56;;15973:1;15955:15;:19;15947:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;16028:11;;;;;;;;;;;16012:27;;:12;:27;;::::0;16008:176:::1;;16064:12;16052:34;;;16087:7;:5;:7::i;:::-;16096:15;16052:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16008:176;;;16136:5;:14;;;16151:7;:5;:7::i;:::-;16160:15;16136:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16008:176;16237:12;16201:49;;16211:7;:5;:7::i;:::-;16201:49;;;16220:15;16201:49;;;;;;:::i;:::-;;;;;;;;15754:504;;15695:563:::0;:::o;11066:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9733:103::-;8944:13;:11;:13::i;:::-;9798:30:::1;9825:1;9798:18;:30::i;:::-;9733:103::o:0;11139:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14701:152::-;8944:13;:11;:13::i;:::-;5570:21:::1;:19;:21::i;:::-;14811:34:::2;14819:4;14825:12;14839:5;14811:7;:34::i;:::-;5614:20:::1;:18;:20::i;:::-;14701:152:::0;;;:::o;11874:1527::-;5570:21;:19;:21::i;:::-;11965:28:::1;11980:12;11965:14;:28::i;:::-;11957:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10868:5;12030:6;:28;;12022:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;12114:22;12152:9:::0;12147:428:::1;12171:11;:23;12183:10;12171:23;;;;;;;;;;;;;;;:37;12195:12;12171:37;;;;;;;;;;;;;;;:44;;;;12167:1;:48;12147:428;;;12233:37;12273:11;:23;12285:10;12273:23;;;;;;;;;;;;;;;:37;12297:12;12273:37;;;;;;;;;;;;;;;12311:1;12273:40;;;;;;;;:::i;:::-;;;;;;;;;;;;12233:80;;12333:18;:27;;;;;;;;;;;;12332:28;12324:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12433:18;:27;;;;;;;;;;;;12432:28;12424:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;12542:18;:25;;;12524:43;;;;;:::i;:::-;;;12222:353;12217:3;;;;;;;12147:428;;;;10808:7;12606:6;12589:14;:23;;;;:::i;:::-;:45;;12581:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;12680:31;12714:133;;;;;;;;12744:6;12714:133;;;;12771:5;12714:133;;;;;;12797:5;12714:133;;;;;;12824:15;12714:133;;::::0;12680:167:::1;;12854:11;:23;12866:10;12854:23;;;;;;;;;;;;;;;:37;12878:12;12854:37;;;;;;;;;;;;;;;12897:13;12854:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12918:14;12938:13;12918:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12981:11;;;;;;;;;;;12965:27;;:12;:27;;::::0;12961:252:::1;;13017:12;13005:38;;;13044:10;13064:4;13071:6;13005:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12961:252;;;13118:12;13111:33;;;13145:10;13165:4;13172:6;13111:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13103:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12961:252;13273:1;13225:11;:23;13237:10;13225:23;;;;;;;;;;;;;;;:37;13249:12;13225:37;;;;;;;;;;;;;;;:44;;;;:49:::0;13221:103:::1;;13287:12;13305:10;13287:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13221:103;13359:12;13337:60;;13347:10;13337:60;;;13373:6;13381:15;13337:60;;;;;;;:::i;:::-;;;;;;;;11950:1451;;5614:20:::0;:18;:20::i;:::-;11874:1527;;:::o;14861:139::-;8944:13;:11;:13::i;:::-;14958:34:::1;14966:4;14972:12;14986:5;14958:7;:34::i;:::-;14861:139:::0;;;:::o;9058:87::-;9104:7;9131:6;;;;;;;;;;;9124:13;;9058:87;:::o;10988:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10823:50::-;10868:5;10823:50;:::o;10880:71::-;;;;;;;;;;;;;:::o;17596:440::-;17665:19;17697:13;17721:14;:21;;;;17713:5;:29;:61;;17769:5;17713:61;;;17745:14;:21;;;;17713:61;17697:77;;17785:37;17842:5;17825:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17785:63;;17866:9;17861:131;17885:5;17881:1;:9;17861:131;;;17935:14;17978:1;17974;17950:14;:21;;;;:25;;;;:::i;:::-;:29;;;;:::i;:::-;17935:45;;;;;;;;:::i;:::-;;;;;;;;;;;;17912:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;17930:1;17912:20;;;;;;;;:::i;:::-;;;;;;;:68;;;;17892:3;;;;;;;17861:131;;;;18011:17;18004:24;;;;17596:440;;;:::o;18216:275::-;18283:4;18305:9;18317:1;18305:13;;18300:161;18324:13;:20;;;;18320:1;:24;18300:161;;;18390:12;18370:32;;:13;18384:1;18370:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;18366:84;;18430:4;18423:11;;;;;18366:84;18346:3;;;;;;;18300:161;;;;18478:5;18471:12;;18216:275;;;;:::o;15358:329::-;8944:13;:11;:13::i;:::-;15509:7:::1;;:14;;15493:5;;:12;;:30;15485:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15572:9;15567:113;15591:5;;:12;;15587:1;:16;15567:113;;;15625:43;15633:5;;15639:1;15633:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15643:12;15657:7;;15665:1;15657:10;;;;;;;:::i;:::-;;;;;;;;15625:7;:43::i;:::-;15605:3;;;;;;;15567:113;;;;15358:329:::0;;;;;:::o;10763:52::-;10808:7;10763:52;:::o;9991:220::-;8944:13;:11;:13::i;:::-;10096:1:::1;10076:22;;:8;:22;;::::0;10072:93:::1;;10150:1;10122:31;;;;;;;;;;;:::i;:::-;;;;;;;;10072:93;10175:28;10194:8;10175:18;:28::i;:::-;9991:220:::0;:::o;16266:1322::-;16416:16;16434;16469:13;16497:30;16544:12;:19;;;;16530:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16497:67;;16575:28;16620:12;:19;;;;16606:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16575:65;;16658:9;16653:632;16677:12;:19;;;;16673:1;:23;16653:632;;;16718:12;16733;16746:1;16733:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16718:30;;16763:36;16802:11;:17;16814:4;16802:17;;;;;;;;;;;;;;;:31;16820:12;16802:31;;;;;;;;;;;;;;;16763:70;;16853:9;16848:426;16872:15;:22;;;;16868:1;:26;16848:426;;;16920:29;16952:15;16968:1;16952:18;;;;;;;;:::i;:::-;;;;;;;;;;;;16920:50;;17013:1;16993:10;:17;;;:21;:62;;;;;17041:14;17018:37;;:10;:19;;;;;;;;;;;;:37;;;16993:62;:103;;;;;17082:14;17059:37;;:10;:19;;;;;;;;;;;;:37;;;16993:103;16989:270;;;17144:4;17121:13;17135:5;17121:20;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;17192:10;:17;;;17171:11;17183:5;17171:18;;;;;;;;:::i;:::-;;;;;;;:38;;;;;17232:7;;;;;:::i;:::-;;;;16989:270;16901:373;16896:3;;;;;;;16848:426;;;;16703:582;;16698:3;;;;;;;16653:632;;;;17297:22;17336:5;17322:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17297:45;;17353:24;17394:5;17380:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17353:47;;17418:9;17413:132;17437:5;17433:1;:9;17413:132;;;17475:13;17489:1;17475:16;;;;;;;;:::i;:::-;;;;;;;;17464:5;17470:1;17464:8;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;17519:11;17531:1;17519:14;;;;;;;;:::i;:::-;;;;;;;;17506:7;17514:1;17506:10;;;;;;;;:::i;:::-;;;;;;;:27;;;;;17444:3;;;;;;;17413:132;;;;17565:5;17572:7;17557:23;;;;;;;;;16266:1322;;;;;;:::o;9223:166::-;9294:12;:10;:12::i;:::-;9283:23;;:7;:5;:7::i;:::-;:23;;;9279:103;;9357:12;:10;:12::i;:::-;9330:40;;;;;;;;;;;:::i;:::-;;;;;;;;9279:103;9223:166::o;5650:315::-;4948:1;5779:7;;:18;5775:88;;5821:30;;;;;;;;;;;;;;5775:88;4948:1;5940:7;:17;;;;5650:315::o;13409:796::-;13496:33;13532:11;:17;13544:4;13532:17;;;;;;;;;;;;;;;:31;13550:12;13532:31;;;;;;;;;;;;;;;13564:5;13532:38;;;;;;;;:::i;:::-;;;;;;;;;;;;13496:74;;13613:1;13589:14;:21;;;:25;13581:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;13662:14;:23;;;;;;;;;;;;13661:24;13653:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13737:14;:23;;;;;;;;;;;;13736:24;13728:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13805:22;13830:14;:21;;;13805:46;;13890:4;13864:14;:23;;;:30;;;;;;;;;;;;;;;;;;13929:1;13905:14;:21;;:25;;;;13964:11;;;;;;;;;;;13948:27;;:12;:27;;;13944:192;;14000:12;13988:34;;;14023:4;14029:14;13988:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13944:192;;;14080:12;14073:29;;;14103:4;14109:14;14073:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13944:192;14184:12;14153:44;;14162:4;14153:44;;;14168:14;14153:44;;;;;;:::i;:::-;;;;;;;;13485:720;;13409:796;;;:::o;5973:212::-;4905:1;6156:7;:21;;;;5973:212::o;10371:191::-;10445:16;10464:6;;;;;;;;;;;10445:25;;10490:8;10481:6;;:17;;;;;;;;;;;;;;;;;;10545:8;10514:40;;10535:8;10514:40;;;;;;;;;;;;10434:128;10371:191;:::o;14213:480::-;14300:33;14336:11;:17;14348:4;14336:17;;;;;;;;;;;;;;;:31;14354:12;14336:31;;;;;;;;;;;;;;;14368:5;14336:38;;;;;;;;:::i;:::-;;;;;;;;;;;;14300:74;;14417:1;14393:14;:21;;;:25;14385:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;14466:14;:23;;;;;;;;;;;;14465:24;14457:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14541:14;:23;;;;;;;;;;;;14540:24;14532:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14635:4;14609:14;:23;;;:30;;;;;;;;;;;;;;;;;;14672:12;14657:28;;14666:4;14657:28;;;;;;;;;;;;14289:404;14213:480;;;:::o;7126:98::-;7179:7;7206:10;7199:17;;7126:98;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:126::-;1331:7;1371:42;1364:5;1360:54;1349:65;;1294:126;;;:::o;1426:96::-;1463:7;1492:24;1510:5;1492:24;:::i;:::-;1481:35;;1426:96;;;:::o;1528:122::-;1601:24;1619:5;1601:24;:::i;:::-;1594:5;1591:35;1581:63;;1640:1;1637;1630:12;1581:63;1528:122;:::o;1656:139::-;1702:5;1740:6;1727:20;1718:29;;1756:33;1783:5;1756:33;:::i;:::-;1656:139;;;;:::o;1818:568::-;1891:8;1901:6;1951:3;1944:4;1936:6;1932:17;1928:27;1918:122;;1959:79;;:::i;:::-;1918:122;2072:6;2059:20;2049:30;;2102:18;2094:6;2091:30;2088:117;;;2124:79;;:::i;:::-;2088:117;2238:4;2230:6;2226:17;2214:29;;2292:3;2284:4;2276:6;2272:17;2262:8;2258:32;2255:41;2252:128;;;2299:79;;:::i;:::-;2252:128;1818:568;;;;;:::o;2392:1079::-;2523:6;2531;2539;2547;2555;2604:2;2592:9;2583:7;2579:23;2575:32;2572:119;;;2610:79;;:::i;:::-;2572:119;2758:1;2747:9;2743:17;2730:31;2788:18;2780:6;2777:30;2774:117;;;2810:79;;:::i;:::-;2774:117;2923:80;2995:7;2986:6;2975:9;2971:22;2923:80;:::i;:::-;2905:98;;;;2701:312;3052:2;3078:53;3123:7;3114:6;3103:9;3099:22;3078:53;:::i;:::-;3068:63;;3023:118;3208:2;3197:9;3193:18;3180:32;3239:18;3231:6;3228:30;3225:117;;;3261:79;;:::i;:::-;3225:117;3374:80;3446:7;3437:6;3426:9;3422:22;3374:80;:::i;:::-;3356:98;;;;3151:313;2392:1079;;;;;;;;:::o;3477:474::-;3545:6;3553;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3855:2;3881:53;3926:7;3917:6;3906:9;3902:22;3881:53;:::i;:::-;3871:63;;3826:118;3477:474;;;;;:::o;3957:77::-;3994:7;4023:5;4012:16;;3957:77;;;:::o;4040:118::-;4127:24;4145:5;4127:24;:::i;:::-;4122:3;4115:37;4040:118;;:::o;4164:222::-;4257:4;4295:2;4284:9;4280:18;4272:26;;4308:71;4376:1;4365:9;4361:17;4352:6;4308:71;:::i;:::-;4164:222;;;;:::o;4392:122::-;4465:24;4483:5;4465:24;:::i;:::-;4458:5;4455:35;4445:63;;4504:1;4501;4494:12;4445:63;4392:122;:::o;4520:139::-;4566:5;4604:6;4591:20;4582:29;;4620:33;4647:5;4620:33;:::i;:::-;4520:139;;;;:::o;4665:329::-;4724:6;4773:2;4761:9;4752:7;4748:23;4744:32;4741:119;;;4779:79;;:::i;:::-;4741:119;4899:1;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4870:117;4665:329;;;;:::o;5000:118::-;5087:24;5105:5;5087:24;:::i;:::-;5082:3;5075:37;5000:118;;:::o;5124:222::-;5217:4;5255:2;5244:9;5240:18;5232:26;;5268:71;5336:1;5325:9;5321:17;5312:6;5268:71;:::i;:::-;5124:222;;;;:::o;5352:329::-;5411:6;5460:2;5448:9;5439:7;5435:23;5431:32;5428:119;;;5466:79;;:::i;:::-;5428:119;5586:1;5611:53;5656:7;5647:6;5636:9;5632:22;5611:53;:::i;:::-;5601:63;;5557:117;5352:329;;;;:::o;5687:90::-;5721:7;5764:5;5757:13;5750:21;5739:32;;5687:90;;;:::o;5783:109::-;5864:21;5879:5;5864:21;:::i;:::-;5859:3;5852:34;5783:109;;:::o;5898:529::-;6063:4;6101:3;6090:9;6086:19;6078:27;;6115:71;6183:1;6172:9;6168:17;6159:6;6115:71;:::i;:::-;6196:66;6258:2;6247:9;6243:18;6234:6;6196:66;:::i;:::-;6272;6334:2;6323:9;6319:18;6310:6;6272:66;:::i;:::-;6348:72;6416:2;6405:9;6401:18;6392:6;6348:72;:::i;:::-;5898:529;;;;;;;:::o;6433:619::-;6510:6;6518;6526;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6701:1;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6672:117;6828:2;6854:53;6899:7;6890:6;6879:9;6875:22;6854:53;:::i;:::-;6844:63;;6799:118;6956:2;6982:53;7027:7;7018:6;7007:9;7003:22;6982:53;:::i;:::-;6972:63;;6927:118;6433:619;;;;;:::o;7058:474::-;7126:6;7134;7183:2;7171:9;7162:7;7158:23;7154:32;7151:119;;;7189:79;;:::i;:::-;7151:119;7309:1;7334:53;7379:7;7370:6;7359:9;7355:22;7334:53;:::i;:::-;7324:63;;7280:117;7436:2;7462:53;7507:7;7498:6;7487:9;7483:22;7462:53;:::i;:::-;7452:63;;7407:118;7058:474;;;;;:::o;7538:141::-;7632:6;7666:5;7660:12;7650:22;;7538:141;;;:::o;7685:211::-;7811:11;7845:6;7840:3;7833:19;7885:4;7880:3;7876:14;7861:29;;7685:211;;;;:::o;7902:159::-;7996:4;8019:3;8011:11;;8049:4;8044:3;8040:14;8032:22;;7902:159;;;:::o;8067:108::-;8144:24;8162:5;8144:24;:::i;:::-;8139:3;8132:37;8067:108;;:::o;8181:99::-;8252:21;8267:5;8252:21;:::i;:::-;8247:3;8240:34;8181:99;;:::o;8362:852::-;8503:4;8498:3;8494:14;8592:4;8585:5;8581:16;8575:23;8611:63;8668:4;8663:3;8659:14;8645:12;8611:63;:::i;:::-;8518:166;8770:4;8763:5;8759:16;8753:23;8789:57;8840:4;8835:3;8831:14;8817:12;8789:57;:::i;:::-;8694:162;8942:4;8935:5;8931:16;8925:23;8961:57;9012:4;9007:3;9003:14;8989:12;8961:57;:::i;:::-;8866:162;9115:4;9108:5;9104:16;9098:23;9134:63;9191:4;9186:3;9182:14;9168:12;9134:63;:::i;:::-;9038:169;8472:742;8362:852;;:::o;9220:287::-;9343:10;9364:100;9460:3;9452:6;9364:100;:::i;:::-;9496:4;9491:3;9487:14;9473:28;;9220:287;;;;:::o;9513:140::-;9610:4;9642;9637:3;9633:14;9625:22;;9513:140;;;:::o;9739:948::-;9912:3;9941:81;10016:5;9941:81;:::i;:::-;10038:113;10144:6;10139:3;10038:113;:::i;:::-;10031:120;;10175:83;10252:5;10175:83;:::i;:::-;10281:7;10312:1;10297:365;10322:6;10319:1;10316:13;10297:365;;;10398:6;10392:13;10425:117;10538:3;10523:13;10425:117;:::i;:::-;10418:124;;10565:87;10645:6;10565:87;:::i;:::-;10555:97;;10357:305;10344:1;10341;10337:9;10332:14;;10297:365;;;10301:14;10678:3;10671:10;;9917:770;;;9739:948;;;;:::o;10693:481::-;10890:4;10928:2;10917:9;10913:18;10905:26;;10977:9;10971:4;10967:20;10963:1;10952:9;10948:17;10941:47;11005:162;11162:4;11153:6;11005:162;:::i;:::-;10997:170;;10693:481;;;;:::o;11180:210::-;11267:4;11305:2;11294:9;11290:18;11282:26;;11318:65;11380:1;11369:9;11365:17;11356:6;11318:65;:::i;:::-;11180:210;;;;:::o;11396:116::-;11466:21;11481:5;11466:21;:::i;:::-;11459:5;11456:32;11446:60;;11502:1;11499;11492:12;11446:60;11396:116;:::o;11518:133::-;11561:5;11599:6;11586:20;11577:29;;11615:30;11639:5;11615:30;:::i;:::-;11518:133;;;;:::o;11657:607::-;11728:6;11736;11744;11793:2;11781:9;11772:7;11768:23;11764:32;11761:119;;;11799:79;;:::i;:::-;11761:119;11919:1;11944:53;11989:7;11980:6;11969:9;11965:22;11944:53;:::i;:::-;11934:63;;11890:117;12046:2;12072:50;12114:7;12105:6;12094:9;12090:22;12072:50;:::i;:::-;12062:60;;12017:115;12171:2;12197:50;12239:7;12230:6;12219:9;12215:22;12197:50;:::i;:::-;12187:60;;12142:115;11657:607;;;;;:::o;12270:114::-;12337:6;12371:5;12365:12;12355:22;;12270:114;;;:::o;12390:184::-;12489:11;12523:6;12518:3;12511:19;12563:4;12558:3;12554:14;12539:29;;12390:184;;;;:::o;12580:132::-;12647:4;12670:3;12662:11;;12700:4;12695:3;12691:14;12683:22;;12580:132;;;:::o;12718:108::-;12795:24;12813:5;12795:24;:::i;:::-;12790:3;12783:37;12718:108;;:::o;12832:179::-;12901:10;12922:46;12964:3;12956:6;12922:46;:::i;:::-;13000:4;12995:3;12991:14;12977:28;;12832:179;;;;:::o;13017:113::-;13087:4;13119;13114:3;13110:14;13102:22;;13017:113;;;:::o;13166:732::-;13285:3;13314:54;13362:5;13314:54;:::i;:::-;13384:86;13463:6;13458:3;13384:86;:::i;:::-;13377:93;;13494:56;13544:5;13494:56;:::i;:::-;13573:7;13604:1;13589:284;13614:6;13611:1;13608:13;13589:284;;;13690:6;13684:13;13717:63;13776:3;13761:13;13717:63;:::i;:::-;13710:70;;13803:60;13856:6;13803:60;:::i;:::-;13793:70;;13649:224;13636:1;13633;13629:9;13624:14;;13589:284;;;13593:14;13889:3;13882:10;;13290:608;;;13166:732;;;;:::o;13904:114::-;13971:6;14005:5;13999:12;13989:22;;13904:114;;;:::o;14024:184::-;14123:11;14157:6;14152:3;14145:19;14197:4;14192:3;14188:14;14173:29;;14024:184;;;;:::o;14214:132::-;14281:4;14304:3;14296:11;;14334:4;14329:3;14325:14;14317:22;;14214:132;;;:::o;14352:179::-;14421:10;14442:46;14484:3;14476:6;14442:46;:::i;:::-;14520:4;14515:3;14511:14;14497:28;;14352:179;;;;:::o;14537:113::-;14607:4;14639;14634:3;14630:14;14622:22;;14537:113;;;:::o;14686:732::-;14805:3;14834:54;14882:5;14834:54;:::i;:::-;14904:86;14983:6;14978:3;14904:86;:::i;:::-;14897:93;;15014:56;15064:5;15014:56;:::i;:::-;15093:7;15124:1;15109:284;15134:6;15131:1;15128:13;15109:284;;;15210:6;15204:13;15237:63;15296:3;15281:13;15237:63;:::i;:::-;15230:70;;15323:60;15376:6;15323:60;:::i;:::-;15313:70;;15169:224;15156:1;15153;15149:9;15144:14;;15109:284;;;15113:14;15409:3;15402:10;;14810:608;;;14686:732;;;;:::o;15424:634::-;15645:4;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:108;15863:4;15854:6;15760:108;:::i;:::-;15752:116;;15915:9;15909:4;15905:20;15900:2;15889:9;15885:18;15878:48;15943:108;16046:4;16037:6;15943:108;:::i;:::-;15935:116;;15424:634;;;;;:::o;16064:169::-;16148:11;16182:6;16177:3;16170:19;16222:4;16217:3;16213:14;16198:29;;16064:169;;;;:::o;16239:178::-;16379:30;16375:1;16367:6;16363:14;16356:54;16239:178;:::o;16423:366::-;16565:3;16586:67;16650:2;16645:3;16586:67;:::i;:::-;16579:74;;16662:93;16751:3;16662:93;:::i;:::-;16780:2;16775:3;16771:12;16764:19;;16423:366;;;:::o;16795:419::-;16961:4;16999:2;16988:9;16984:18;16976:26;;17048:9;17042:4;17038:20;17034:1;17023:9;17019:17;17012:47;17076:131;17202:4;17076:131;:::i;:::-;17068:139;;16795:419;;;:::o;17220:180::-;17268:77;17265:1;17258:88;17365:4;17362:1;17355:15;17389:4;17386:1;17379:15;17406:167;17546:19;17542:1;17534:6;17530:14;17523:43;17406:167;:::o;17579:366::-;17721:3;17742:67;17806:2;17801:3;17742:67;:::i;:::-;17735:74;;17818:93;17907:3;17818:93;:::i;:::-;17936:2;17931:3;17927:12;17920:19;;17579:366;;;:::o;17951:419::-;18117:4;18155:2;18144:9;18140:18;18132:26;;18204:9;18198:4;18194:20;18190:1;18179:9;18175:17;18168:47;18232:131;18358:4;18232:131;:::i;:::-;18224:139;;17951:419;;;:::o;18376:143::-;18433:5;18464:6;18458:13;18449:22;;18480:33;18507:5;18480:33;:::i;:::-;18376:143;;;;:::o;18525:351::-;18595:6;18644:2;18632:9;18623:7;18619:23;18615:32;18612:119;;;18650:79;;:::i;:::-;18612:119;18770:1;18795:64;18851:7;18842:6;18831:9;18827:22;18795:64;:::i;:::-;18785:74;;18741:128;18525:351;;;;:::o;18882:170::-;19022:22;19018:1;19010:6;19006:14;18999:46;18882:170;:::o;19058:366::-;19200:3;19221:67;19285:2;19280:3;19221:67;:::i;:::-;19214:74;;19297:93;19386:3;19297:93;:::i;:::-;19415:2;19410:3;19406:12;19399:19;;19058:366;;;:::o;19430:419::-;19596:4;19634:2;19623:9;19619:18;19611:26;;19683:9;19677:4;19673:20;19669:1;19658:9;19654:17;19647:47;19711:131;19837:4;19711:131;:::i;:::-;19703:139;;19430:419;;;:::o;19855:332::-;19976:4;20014:2;20003:9;19999:18;19991:26;;20027:71;20095:1;20084:9;20080:17;20071:6;20027:71;:::i;:::-;20108:72;20176:2;20165:9;20161:18;20152:6;20108:72;:::i;:::-;19855:332;;;;;:::o;20193:137::-;20247:5;20278:6;20272:13;20263:22;;20294:30;20318:5;20294:30;:::i;:::-;20193:137;;;;:::o;20336:345::-;20403:6;20452:2;20440:9;20431:7;20427:23;20423:32;20420:119;;;20458:79;;:::i;:::-;20420:119;20578:1;20603:61;20656:7;20647:6;20636:9;20632:22;20603:61;:::i;:::-;20593:71;;20549:125;20336:345;;;;:::o;20687:229::-;20827:34;20823:1;20815:6;20811:14;20804:58;20896:12;20891:2;20883:6;20879:15;20872:37;20687:229;:::o;20922:366::-;21064:3;21085:67;21149:2;21144:3;21085:67;:::i;:::-;21078:74;;21161:93;21250:3;21161:93;:::i;:::-;21279:2;21274:3;21270:12;21263:19;;20922:366;;;:::o;21294:419::-;21460:4;21498:2;21487:9;21483:18;21475:26;;21547:9;21541:4;21537:20;21533:1;21522:9;21518:17;21511:47;21575:131;21701:4;21575:131;:::i;:::-;21567:139;;21294:419;;;:::o;21719:235::-;21859:34;21855:1;21847:6;21843:14;21836:58;21928:18;21923:2;21915:6;21911:15;21904:43;21719:235;:::o;21960:366::-;22102:3;22123:67;22187:2;22182:3;22123:67;:::i;:::-;22116:74;;22199:93;22288:3;22199:93;:::i;:::-;22317:2;22312:3;22308:12;22301:19;;21960:366;;;:::o;22332:419::-;22498:4;22536:2;22525:9;22521:18;22513:26;;22585:9;22579:4;22575:20;22571:1;22560:9;22556:17;22549:47;22613:131;22739:4;22613:131;:::i;:::-;22605:139;;22332:419;;;:::o;22757:235::-;22897:34;22893:1;22885:6;22881:14;22874:58;22966:18;22961:2;22953:6;22949:15;22942:43;22757:235;:::o;22998:366::-;23140:3;23161:67;23225:2;23220:3;23161:67;:::i;:::-;23154:74;;23237:93;23326:3;23237:93;:::i;:::-;23355:2;23350:3;23346:12;23339:19;;22998:366;;;:::o;23370:419::-;23536:4;23574:2;23563:9;23559:18;23551:26;;23623:9;23617:4;23613:20;23609:1;23598:9;23594:17;23587:47;23651:131;23777:4;23651:131;:::i;:::-;23643:139;;23370:419;;;:::o;23795:180::-;23843:77;23840:1;23833:88;23940:4;23937:1;23930:15;23964:4;23961:1;23954:15;23981:191;24021:3;24040:20;24058:1;24040:20;:::i;:::-;24035:25;;24074:20;24092:1;24074:20;:::i;:::-;24069:25;;24117:1;24114;24110:9;24103:16;;24138:3;24135:1;24132:10;24129:36;;;24145:18;;:::i;:::-;24129:36;23981:191;;;;:::o;24178:182::-;24318:34;24314:1;24306:6;24302:14;24295:58;24178:182;:::o;24366:366::-;24508:3;24529:67;24593:2;24588:3;24529:67;:::i;:::-;24522:74;;24605:93;24694:3;24605:93;:::i;:::-;24723:2;24718:3;24714:12;24707:19;;24366:366;;;:::o;24738:419::-;24904:4;24942:2;24931:9;24927:18;24919:26;;24991:9;24985:4;24981:20;24977:1;24966:9;24962:17;24955:47;25019:131;25145:4;25019:131;:::i;:::-;25011:139;;24738:419;;;:::o;25163:442::-;25312:4;25350:2;25339:9;25335:18;25327:26;;25363:71;25431:1;25420:9;25416:17;25407:6;25363:71;:::i;:::-;25444:72;25512:2;25501:9;25497:18;25488:6;25444:72;:::i;:::-;25526;25594:2;25583:9;25579:18;25570:6;25526:72;:::i;:::-;25163:442;;;;;;:::o;25611:171::-;25751:23;25747:1;25739:6;25735:14;25728:47;25611:171;:::o;25788:366::-;25930:3;25951:67;26015:2;26010:3;25951:67;:::i;:::-;25944:74;;26027:93;26116:3;26027:93;:::i;:::-;26145:2;26140:3;26136:12;26129:19;;25788:366;;;:::o;26160:419::-;26326:4;26364:2;26353:9;26349:18;26341:26;;26413:9;26407:4;26403:20;26399:1;26388:9;26384:17;26377:47;26441:131;26567:4;26441:131;:::i;:::-;26433:139;;26160:419;;;:::o;26585:332::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26757:71;26825:1;26814:9;26810:17;26801:6;26757:71;:::i;:::-;26838:72;26906:2;26895:9;26891:18;26882:6;26838:72;:::i;:::-;26585:332;;;;;:::o;26923:180::-;26971:77;26968:1;26961:88;27068:4;27065:1;27058:15;27092:4;27089:1;27082:15;27109:194;27149:4;27169:20;27187:1;27169:20;:::i;:::-;27164:25;;27203:20;27221:1;27203:20;:::i;:::-;27198:25;;27247:1;27244;27240:9;27232:17;;27271:1;27265:4;27262:11;27259:37;;;27276:18;;:::i;:::-;27259:37;27109:194;;;;:::o;27309:233::-;27348:3;27371:24;27389:5;27371:24;:::i;:::-;27362:33;;27417:66;27410:5;27407:77;27404:103;;27487:18;;:::i;:::-;27404:103;27534:1;27527:5;27523:13;27516:20;;27309:233;;;:::o;27548:173::-;27688:25;27684:1;27676:6;27672:14;27665:49;27548:173;:::o;27727:366::-;27869:3;27890:67;27954:2;27949:3;27890:67;:::i;:::-;27883:74;;27966:93;28055:3;27966:93;:::i;:::-;28084:2;28079:3;28075:12;28068:19;;27727:366;;;:::o;28099:419::-;28265:4;28303:2;28292:9;28288:18;28280:26;;28352:9;28346:4;28342:20;28338:1;28327:9;28323:17;28316:47;28380:131;28506:4;28380:131;:::i;:::-;28372:139;;28099:419;;;:::o;28524:177::-;28664:29;28660:1;28652:6;28648:14;28641:53;28524:177;:::o;28707:366::-;28849:3;28870:67;28934:2;28929:3;28870:67;:::i;:::-;28863:74;;28946:93;29035:3;28946:93;:::i;:::-;29064:2;29059:3;29055:12;29048:19;;28707:366;;;:::o;29079:419::-;29245:4;29283:2;29272:9;29268:18;29260:26;;29332:9;29326:4;29322:20;29318:1;29307:9;29303:17;29296:47;29360:131;29486:4;29360:131;:::i;:::-;29352:139;;29079:419;;;:::o;29504:177::-;29644:29;29640:1;29632:6;29628:14;29621:53;29504:177;:::o;29687:366::-;29829:3;29850:67;29914:2;29909:3;29850:67;:::i;:::-;29843:74;;29926:93;30015:3;29926:93;:::i;:::-;30044:2;30039:3;30035:12;30028:19;;29687:366;;;:::o;30059:419::-;30225:4;30263:2;30252:9;30248:18;30240:26;;30312:9;30306:4;30302:20;30298:1;30287:9;30283:17;30276:47;30340:131;30466:4;30340:131;:::i;:::-;30332:139;;30059:419;;;:::o;30484:173::-;30624:25;30620:1;30612:6;30608:14;30601:49;30484:173;:::o;30663:366::-;30805:3;30826:67;30890:2;30885:3;30826:67;:::i;:::-;30819:74;;30902:93;30991:3;30902:93;:::i;:::-;31020:2;31015:3;31011:12;31004:19;;30663:366;;;:::o;31035:419::-;31201:4;31239:2;31228:9;31224:18;31216:26;;31288:9;31282:4;31278:20;31274:1;31263:9;31259:17;31252:47;31316:131;31442:4;31316:131;:::i;:::-;31308:139;;31035:419;;;:::o
Swarm Source
ipfs://d8c0968865a85a8a3c2258d584025e70309f1cd175ae10edc4fb707afab338ea
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.