Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 12825565 | 1160 days ago | IN | 0 ETH | 0.00176094 | ||||
Renounce Role | 12813659 | 1162 days ago | IN | 0 ETH | 0.00075107 | ||||
Renounce Role | 12813649 | 1162 days ago | IN | 0 ETH | 0.00067401 | ||||
Grant Role | 12813381 | 1162 days ago | IN | 0 ETH | 0.00249537 | ||||
Grant Role | 12813367 | 1162 days ago | IN | 0 ETH | 0.00247752 | ||||
0x60806040 | 12523300 | 1207 days ago | IN | 0 ETH | 0.08950798 |
Loading...
Loading
Contract Name:
GAMI
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-28 */ // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/access/AccessControl.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: contracts/GAMIToken.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract GAMI is ERC20, AccessControl { string private __name = "GAMI Token"; string private __symbol = "GAMI"; uint8 private __decimals = 2; uint private __INITIAL_SUPPLY = 30120090000; uint private __lockedSupply = 0; bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); struct LockStruct { address beneficiary; uint256 balance; uint256 releaseTime; } LockStruct[] public lockStructs; event LogLockDeposit(address beneficiary, uint256 amount, uint256 releaseTime); event LogUnlockDeposit(address receiver, uint256 amount); event Burned(address addr, uint256 amount); constructor() public ERC20(__name, __symbol) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(BURNER_ROLE, msg.sender); _mint(msg.sender, __INITIAL_SUPPLY); } function burn(address from, uint256 amount) public { require(hasRole(BURNER_ROLE, _msgSender()), "GAMI Token: Caller is not a burner"); _burn(from, amount); emit Burned(from, amount); } function decimals() public view virtual override returns (uint8) { return __decimals; } function lockDeposit(address beneficiary, uint256 amount, uint256 releaseDays) public returns(bool success) { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender)); require((balanceOf(msg.sender) - __lockedSupply) > amount, "GAMI Token: transfer amount exceeds balance"); LockStruct memory l; l.beneficiary = beneficiary; l.balance = amount; l.releaseTime = block.timestamp + releaseDays * 1 days; lockStructs.push(l); __lockedSupply += amount; emit LogLockDeposit(l.beneficiary, l.balance, l.releaseTime); return true; } function unlockDeposit(uint256 lockNumber) public returns(bool success) { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender)); LockStruct storage l = lockStructs[lockNumber]; require(l.releaseTime <= block.timestamp); uint256 amount = l.balance; require(__lockedSupply >= amount); l.balance = 0; __lockedSupply -= amount; emit LogUnlockDeposit(l.beneficiary, amount); require(transfer(l.beneficiary, amount)); return true; } function lockedSupply() public view returns(uint256) { return __lockedSupply; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"releaseTime","type":"uint256"}],"name":"LogLockDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogUnlockDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"releaseDays","type":"uint256"}],"name":"lockDeposit","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockStructs","outputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockNumber","type":"uint256"}],"name":"unlockDeposit","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600a81526020017f47414d4920546f6b656e00000000000000000000000000000000000000000000815250600690805190602001906200005192919062000578565b506040518060400160405280600481526020017f47414d4900000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000578565b506002600860006101000a81548160ff021916908360ff1602179055506407034c19906009556000600a55348015620000d757600080fd5b5060068054620000e79062000732565b80601f0160208091040260200160405190810160405280929190818152602001828054620001159062000732565b8015620001665780601f106200013a5761010080835404028352916020019162000166565b820191906000526020600020905b8154815290600101906020018083116200014857829003601f168201915b5050505050600780546200017a9062000732565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a89062000732565b8015620001f95780601f10620001cd57610100808354040283529160200191620001f9565b820191906000526020600020905b815481529060010190602001808311620001db57829003601f168201915b505050505081600390805190602001906200021692919062000578565b5080600490805190602001906200022f92919062000578565b505050620002476000801b336200029360201b60201c565b620002797f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848336200029360201b60201c565b6200028d33600954620002a960201b60201c565b620007c6565b620002a582826200040e60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200031c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000313906200067b565b60405180910390fd5b62000330600083836200050060201b60201c565b8060026000828254620003449190620006cb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200039b9190620006cb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200040291906200069d565b60405180910390a35050565b6200042082826200050560201b60201c565b620004fc5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004a16200057060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620005869062000732565b90600052602060002090601f016020900481019282620005aa5760008555620005f6565b82601f10620005c557805160ff1916838001178555620005f6565b82800160010185558215620005f6579182015b82811115620005f5578251825591602001919060010190620005d8565b5b50905062000605919062000609565b5090565b5b80821115620006245760008160009055506001016200060a565b5090565b600062000637601f83620006ba565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620006758162000728565b82525050565b60006020820190508181036000830152620006968162000628565b9050919050565b6000602082019050620006b460008301846200066a565b92915050565b600082825260208201905092915050565b6000620006d88262000728565b9150620006e58362000728565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200071d576200071c62000768565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200074b57607f821691505b6020821081141562000762576200076162000797565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612add80620007d66000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806377b9de8e116100c3578063a457c2d71161007c578063a457c2d714610417578063a9059cbb14610447578063bf0e92c414610477578063ca5c7b91146104a7578063d547741f146104c5578063dd62ed3e146104e157610158565b806377b9de8e1461032d57806384c533d91461035d57806391d148541461038f57806395d89b41146103bf5780639dc29fac146103dd578063a217fddf146103f957610158565b8063282c51f311610115578063282c51f3146102595780632f2ff15d14610277578063313ce5671461029357806336568abe146102b157806339509351146102cd57806370a08231146102fd57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b61017760048036038101906101729190611e60565b610511565b6040516101849190612589565b60405180910390f35b61019561058b565b6040516101a291906125bf565b60405180910390f35b6101c560048036038101906101c09190611d70565b61061d565b6040516101d29190612589565b60405180910390f35b6101e361063b565b6040516101f09190612781565b60405180910390f35b610213600480360381019061020e9190611d21565b610645565b6040516102209190612589565b60405180910390f35b610243600480360381019061023e9190611dfb565b610746565b60405161025091906125a4565b60405180910390f35b610261610766565b60405161026e91906125a4565b60405180910390f35b610291600480360381019061028c9190611e24565b61078a565b005b61029b6107b3565b6040516102a8919061279c565b60405180910390f35b6102cb60048036038101906102c69190611e24565b6107ca565b005b6102e760048036038101906102e29190611d70565b61084d565b6040516102f49190612589565b60405180910390f35b61031760048036038101906103129190611cbc565b6108f9565b6040516103249190612781565b60405180910390f35b61034760048036038101906103429190611e89565b610941565b6040516103549190612589565b60405180910390f35b61037760048036038101906103729190611e89565b610a90565b60405161038693929190612552565b60405180910390f35b6103a960048036038101906103a49190611e24565b610aea565b6040516103b69190612589565b60405180910390f35b6103c7610b55565b6040516103d491906125bf565b60405180910390f35b6103f760048036038101906103f29190611d70565b610be7565b005b610401610c9e565b60405161040e91906125a4565b60405180910390f35b610431600480360381019061042c9190611d70565b610ca5565b60405161043e9190612589565b60405180910390f35b610461600480360381019061045c9190611d70565b610d99565b60405161046e9190612589565b60405180910390f35b610491600480360381019061048c9190611dac565b610db7565b60405161049e9190612589565b60405180910390f35b6104af610f88565b6040516104bc9190612781565b60405180910390f35b6104df60048036038101906104da9190611e24565b610f92565b005b6104fb60048036038101906104f69190611ce5565b610fbb565b6040516105089190612781565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610584575061058382611042565b5b9050919050565b60606003805461059a906129aa565b80601f01602080910402602001604051908101604052809291908181526020018280546105c6906129aa565b80156106135780601f106105e857610100808354040283529160200191610613565b820191906000526020600020905b8154815290600101906020018083116105f657829003601f168201915b5050505050905090565b600061063161062a6110ac565b84846110b4565b6001905092915050565b6000600254905090565b600061065284848461127f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061069d6110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561071d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610714906126c1565b60405180910390fd5b61073a856107296110ac565b8584610735919061288e565b6110b4565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61079382610746565b6107a48161079f6110ac565b6114fe565b6107ae838361159b565b505050565b6000600860009054906101000a900460ff16905090565b6107d26110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083690612761565b60405180910390fd5b610849828261167c565b5050565b60006108ef61085a6110ac565b8484600160006108686110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ea91906127de565b6110b4565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006109506000801b33610aea565b61095957600080fd5b6000600b8381548110610995577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201905042816002015411156109b657600080fd5b60008160010154905080600a5410156109ce57600080fd5b6000826001018190555080600a60008282546109ea919061288e565b925050819055507fcb22cb102a63b0cbca1fb3a0e80b7171137dd46c03b6b031e8d18c2deeb33d088260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a46929190612529565b60405180910390a1610a7c8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610d99565b610a8557600080fd5b600192505050919050565b600b8181548110610aa057600080fd5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b64906129aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906129aa565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b610c187f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610c136110ac565b610aea565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906125e1565b60405180910390fd5b610c61828261175e565b7f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78282604051610c92929190612529565b60405180910390a15050565b6000801b81565b60008060016000610cb46110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890612741565b60405180910390fd5b610d8e610d7c6110ac565b858584610d89919061288e565b6110b4565b600191505092915050565b6000610dad610da66110ac565b848461127f565b6001905092915050565b6000610dc66000801b33610aea565b610dcf57600080fd5b82600a54610ddc336108f9565b610de6919061288e565b11610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90612681565b60405180910390fd5b610e2e611c31565b84816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160200181815250506201518083610e7f9190612834565b42610e8a91906127de565b816040018181525050600b81908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505083600a6000828254610f2e91906127de565b925050819055507fd0d4ae3795896490c4239b32286b7f04fa0ad99263d53224958100571dc155ed816000015182602001518360400151604051610f7493929190612552565b60405180910390a160019150509392505050565b6000600a54905090565b610f9b82610746565b610fac81610fa76110ac565b6114fe565b610fb6838361167c565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90612721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90612661565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112729190612781565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690612701565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690612621565b60405180910390fd5b61136a838383611932565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906126a1565b60405180910390fd5b81816113fc919061288e565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148c91906127de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114f09190612781565b60405180910390a350505050565b6115088282610aea565b6115975761152d8173ffffffffffffffffffffffffffffffffffffffff166014611937565b61153b8360001c6020611937565b60405160200161154c9291906124ef565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e91906125bf565b60405180910390fd5b5050565b6115a58282610aea565b6116785760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161d6110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116868282610aea565b1561175a5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116ff6110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906126e1565b60405180910390fd5b6117da82600083611932565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790612641565b60405180910390fd5b818161186c919061288e565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546118c0919061288e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119259190612781565b60405180910390a3505050565b505050565b60606000600283600261194a9190612834565b61195491906127de565b67ffffffffffffffff811115611993577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119c55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611aad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611aed9190612834565b611af791906127de565b90505b6001811115611be3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611bdc90612980565b9050611afa565b5060008414611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90612601565b60405180910390fd5b8091505092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b600081359050611c7781612a4b565b92915050565b600081359050611c8c81612a62565b92915050565b600081359050611ca181612a79565b92915050565b600081359050611cb681612a90565b92915050565b600060208284031215611cce57600080fd5b6000611cdc84828501611c68565b91505092915050565b60008060408385031215611cf857600080fd5b6000611d0685828601611c68565b9250506020611d1785828601611c68565b9150509250929050565b600080600060608486031215611d3657600080fd5b6000611d4486828701611c68565b9350506020611d5586828701611c68565b9250506040611d6686828701611ca7565b9150509250925092565b60008060408385031215611d8357600080fd5b6000611d9185828601611c68565b9250506020611da285828601611ca7565b9150509250929050565b600080600060608486031215611dc157600080fd5b6000611dcf86828701611c68565b9350506020611de086828701611ca7565b9250506040611df186828701611ca7565b9150509250925092565b600060208284031215611e0d57600080fd5b6000611e1b84828501611c7d565b91505092915050565b60008060408385031215611e3757600080fd5b6000611e4585828601611c7d565b9250506020611e5685828601611c68565b9150509250929050565b600060208284031215611e7257600080fd5b6000611e8084828501611c92565b91505092915050565b600060208284031215611e9b57600080fd5b6000611ea984828501611ca7565b91505092915050565b611ebb816128c2565b82525050565b611eca816128d4565b82525050565b611ed9816128e0565b82525050565b6000611eea826127b7565b611ef481856127c2565b9350611f0481856020860161294d565b611f0d81612a3a565b840191505092915050565b6000611f23826127b7565b611f2d81856127d3565b9350611f3d81856020860161294d565b80840191505092915050565b6000611f566022836127c2565b91507f47414d4920546f6b656e3a2043616c6c6572206973206e6f742061206275726e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fbc6020836127c2565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b6000611ffc6023836127c2565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120626022836127c2565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120c86022836127c2565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061212e602b836127c2565b91507f47414d4920546f6b656e3a207472616e7366657220616d6f756e74206578636560008301527f6564732062616c616e63650000000000000000000000000000000000000000006020830152604082019050919050565b60006121946026836127c2565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121fa6028836127c2565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122606021836127c2565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c66025836127c2565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061232c6024836127c2565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123926017836127d3565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b60006123d26025836127c2565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124386011836127d3565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000612478602f836127c2565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6124da81612936565b82525050565b6124e981612940565b82525050565b60006124fa82612385565b91506125068285611f18565b91506125118261242b565b915061251d8284611f18565b91508190509392505050565b600060408201905061253e6000830185611eb2565b61254b60208301846124d1565b9392505050565b60006060820190506125676000830186611eb2565b61257460208301856124d1565b61258160408301846124d1565b949350505050565b600060208201905061259e6000830184611ec1565b92915050565b60006020820190506125b96000830184611ed0565b92915050565b600060208201905081810360008301526125d98184611edf565b905092915050565b600060208201905081810360008301526125fa81611f49565b9050919050565b6000602082019050818103600083015261261a81611faf565b9050919050565b6000602082019050818103600083015261263a81611fef565b9050919050565b6000602082019050818103600083015261265a81612055565b9050919050565b6000602082019050818103600083015261267a816120bb565b9050919050565b6000602082019050818103600083015261269a81612121565b9050919050565b600060208201905081810360008301526126ba81612187565b9050919050565b600060208201905081810360008301526126da816121ed565b9050919050565b600060208201905081810360008301526126fa81612253565b9050919050565b6000602082019050818103600083015261271a816122b9565b9050919050565b6000602082019050818103600083015261273a8161231f565b9050919050565b6000602082019050818103600083015261275a816123c5565b9050919050565b6000602082019050818103600083015261277a8161246b565b9050919050565b600060208201905061279660008301846124d1565b92915050565b60006020820190506127b160008301846124e0565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006127e982612936565b91506127f483612936565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612829576128286129dc565b5b828201905092915050565b600061283f82612936565b915061284a83612936565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612883576128826129dc565b5b828202905092915050565b600061289982612936565b91506128a483612936565b9250828210156128b7576128b66129dc565b5b828203905092915050565b60006128cd82612916565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561296b578082015181840152602081019050612950565b8381111561297a576000848401525b50505050565b600061298b82612936565b9150600082141561299f5761299e6129dc565b5b600182039050919050565b600060028204905060018216806129c257607f821691505b602082108114156129d6576129d5612a0b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b612a54816128c2565b8114612a5f57600080fd5b50565b612a6b816128e0565b8114612a7657600080fd5b50565b612a82816128ea565b8114612a8d57600080fd5b50565b612a9981612936565b8114612aa457600080fd5b5056fea26469706673582212209bca701c6cb5e4c8b0edc02217df22443e04ab8145a84eec7ab35736439ae15e64736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806377b9de8e116100c3578063a457c2d71161007c578063a457c2d714610417578063a9059cbb14610447578063bf0e92c414610477578063ca5c7b91146104a7578063d547741f146104c5578063dd62ed3e146104e157610158565b806377b9de8e1461032d57806384c533d91461035d57806391d148541461038f57806395d89b41146103bf5780639dc29fac146103dd578063a217fddf146103f957610158565b8063282c51f311610115578063282c51f3146102595780632f2ff15d14610277578063313ce5671461029357806336568abe146102b157806339509351146102cd57806370a08231146102fd57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b61017760048036038101906101729190611e60565b610511565b6040516101849190612589565b60405180910390f35b61019561058b565b6040516101a291906125bf565b60405180910390f35b6101c560048036038101906101c09190611d70565b61061d565b6040516101d29190612589565b60405180910390f35b6101e361063b565b6040516101f09190612781565b60405180910390f35b610213600480360381019061020e9190611d21565b610645565b6040516102209190612589565b60405180910390f35b610243600480360381019061023e9190611dfb565b610746565b60405161025091906125a4565b60405180910390f35b610261610766565b60405161026e91906125a4565b60405180910390f35b610291600480360381019061028c9190611e24565b61078a565b005b61029b6107b3565b6040516102a8919061279c565b60405180910390f35b6102cb60048036038101906102c69190611e24565b6107ca565b005b6102e760048036038101906102e29190611d70565b61084d565b6040516102f49190612589565b60405180910390f35b61031760048036038101906103129190611cbc565b6108f9565b6040516103249190612781565b60405180910390f35b61034760048036038101906103429190611e89565b610941565b6040516103549190612589565b60405180910390f35b61037760048036038101906103729190611e89565b610a90565b60405161038693929190612552565b60405180910390f35b6103a960048036038101906103a49190611e24565b610aea565b6040516103b69190612589565b60405180910390f35b6103c7610b55565b6040516103d491906125bf565b60405180910390f35b6103f760048036038101906103f29190611d70565b610be7565b005b610401610c9e565b60405161040e91906125a4565b60405180910390f35b610431600480360381019061042c9190611d70565b610ca5565b60405161043e9190612589565b60405180910390f35b610461600480360381019061045c9190611d70565b610d99565b60405161046e9190612589565b60405180910390f35b610491600480360381019061048c9190611dac565b610db7565b60405161049e9190612589565b60405180910390f35b6104af610f88565b6040516104bc9190612781565b60405180910390f35b6104df60048036038101906104da9190611e24565b610f92565b005b6104fb60048036038101906104f69190611ce5565b610fbb565b6040516105089190612781565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610584575061058382611042565b5b9050919050565b60606003805461059a906129aa565b80601f01602080910402602001604051908101604052809291908181526020018280546105c6906129aa565b80156106135780601f106105e857610100808354040283529160200191610613565b820191906000526020600020905b8154815290600101906020018083116105f657829003601f168201915b5050505050905090565b600061063161062a6110ac565b84846110b4565b6001905092915050565b6000600254905090565b600061065284848461127f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061069d6110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561071d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610714906126c1565b60405180910390fd5b61073a856107296110ac565b8584610735919061288e565b6110b4565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61079382610746565b6107a48161079f6110ac565b6114fe565b6107ae838361159b565b505050565b6000600860009054906101000a900460ff16905090565b6107d26110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083690612761565b60405180910390fd5b610849828261167c565b5050565b60006108ef61085a6110ac565b8484600160006108686110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108ea91906127de565b6110b4565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006109506000801b33610aea565b61095957600080fd5b6000600b8381548110610995577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060030201905042816002015411156109b657600080fd5b60008160010154905080600a5410156109ce57600080fd5b6000826001018190555080600a60008282546109ea919061288e565b925050819055507fcb22cb102a63b0cbca1fb3a0e80b7171137dd46c03b6b031e8d18c2deeb33d088260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610a46929190612529565b60405180910390a1610a7c8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610d99565b610a8557600080fd5b600192505050919050565b600b8181548110610aa057600080fd5b90600052602060002090600302016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b64906129aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906129aa565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b610c187f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610c136110ac565b610aea565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906125e1565b60405180910390fd5b610c61828261175e565b7f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78282604051610c92929190612529565b60405180910390a15050565b6000801b81565b60008060016000610cb46110ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890612741565b60405180910390fd5b610d8e610d7c6110ac565b858584610d89919061288e565b6110b4565b600191505092915050565b6000610dad610da66110ac565b848461127f565b6001905092915050565b6000610dc66000801b33610aea565b610dcf57600080fd5b82600a54610ddc336108f9565b610de6919061288e565b11610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90612681565b60405180910390fd5b610e2e611c31565b84816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050838160200181815250506201518083610e7f9190612834565b42610e8a91906127de565b816040018181525050600b81908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155505083600a6000828254610f2e91906127de565b925050819055507fd0d4ae3795896490c4239b32286b7f04fa0ad99263d53224958100571dc155ed816000015182602001518360400151604051610f7493929190612552565b60405180910390a160019150509392505050565b6000600a54905090565b610f9b82610746565b610fac81610fa76110ac565b6114fe565b610fb6838361167c565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90612721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90612661565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112729190612781565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690612701565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690612621565b60405180910390fd5b61136a838383611932565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e7906126a1565b60405180910390fd5b81816113fc919061288e565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148c91906127de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114f09190612781565b60405180910390a350505050565b6115088282610aea565b6115975761152d8173ffffffffffffffffffffffffffffffffffffffff166014611937565b61153b8360001c6020611937565b60405160200161154c9291906124ef565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e91906125bf565b60405180910390fd5b5050565b6115a58282610aea565b6116785760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161d6110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6116868282610aea565b1561175a5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116ff6110ac565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906126e1565b60405180910390fd5b6117da82600083611932565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790612641565b60405180910390fd5b818161186c919061288e565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546118c0919061288e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119259190612781565b60405180910390a3505050565b505050565b60606000600283600261194a9190612834565b61195491906127de565b67ffffffffffffffff811115611993577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119c55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611a23577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611aad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611aed9190612834565b611af791906127de565b90505b6001811115611be3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611b5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611bdc90612980565b9050611afa565b5060008414611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90612601565b60405180910390fd5b8091505092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b600081359050611c7781612a4b565b92915050565b600081359050611c8c81612a62565b92915050565b600081359050611ca181612a79565b92915050565b600081359050611cb681612a90565b92915050565b600060208284031215611cce57600080fd5b6000611cdc84828501611c68565b91505092915050565b60008060408385031215611cf857600080fd5b6000611d0685828601611c68565b9250506020611d1785828601611c68565b9150509250929050565b600080600060608486031215611d3657600080fd5b6000611d4486828701611c68565b9350506020611d5586828701611c68565b9250506040611d6686828701611ca7565b9150509250925092565b60008060408385031215611d8357600080fd5b6000611d9185828601611c68565b9250506020611da285828601611ca7565b9150509250929050565b600080600060608486031215611dc157600080fd5b6000611dcf86828701611c68565b9350506020611de086828701611ca7565b9250506040611df186828701611ca7565b9150509250925092565b600060208284031215611e0d57600080fd5b6000611e1b84828501611c7d565b91505092915050565b60008060408385031215611e3757600080fd5b6000611e4585828601611c7d565b9250506020611e5685828601611c68565b9150509250929050565b600060208284031215611e7257600080fd5b6000611e8084828501611c92565b91505092915050565b600060208284031215611e9b57600080fd5b6000611ea984828501611ca7565b91505092915050565b611ebb816128c2565b82525050565b611eca816128d4565b82525050565b611ed9816128e0565b82525050565b6000611eea826127b7565b611ef481856127c2565b9350611f0481856020860161294d565b611f0d81612a3a565b840191505092915050565b6000611f23826127b7565b611f2d81856127d3565b9350611f3d81856020860161294d565b80840191505092915050565b6000611f566022836127c2565b91507f47414d4920546f6b656e3a2043616c6c6572206973206e6f742061206275726e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fbc6020836127c2565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b6000611ffc6023836127c2565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120626022836127c2565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120c86022836127c2565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061212e602b836127c2565b91507f47414d4920546f6b656e3a207472616e7366657220616d6f756e74206578636560008301527f6564732062616c616e63650000000000000000000000000000000000000000006020830152604082019050919050565b60006121946026836127c2565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121fa6028836127c2565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122606021836127c2565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c66025836127c2565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061232c6024836127c2565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123926017836127d3565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b60006123d26025836127c2565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124386011836127d3565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000612478602f836127c2565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b6124da81612936565b82525050565b6124e981612940565b82525050565b60006124fa82612385565b91506125068285611f18565b91506125118261242b565b915061251d8284611f18565b91508190509392505050565b600060408201905061253e6000830185611eb2565b61254b60208301846124d1565b9392505050565b60006060820190506125676000830186611eb2565b61257460208301856124d1565b61258160408301846124d1565b949350505050565b600060208201905061259e6000830184611ec1565b92915050565b60006020820190506125b96000830184611ed0565b92915050565b600060208201905081810360008301526125d98184611edf565b905092915050565b600060208201905081810360008301526125fa81611f49565b9050919050565b6000602082019050818103600083015261261a81611faf565b9050919050565b6000602082019050818103600083015261263a81611fef565b9050919050565b6000602082019050818103600083015261265a81612055565b9050919050565b6000602082019050818103600083015261267a816120bb565b9050919050565b6000602082019050818103600083015261269a81612121565b9050919050565b600060208201905081810360008301526126ba81612187565b9050919050565b600060208201905081810360008301526126da816121ed565b9050919050565b600060208201905081810360008301526126fa81612253565b9050919050565b6000602082019050818103600083015261271a816122b9565b9050919050565b6000602082019050818103600083015261273a8161231f565b9050919050565b6000602082019050818103600083015261275a816123c5565b9050919050565b6000602082019050818103600083015261277a8161246b565b9050919050565b600060208201905061279660008301846124d1565b92915050565b60006020820190506127b160008301846124e0565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006127e982612936565b91506127f483612936565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612829576128286129dc565b5b828201905092915050565b600061283f82612936565b915061284a83612936565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612883576128826129dc565b5b828202905092915050565b600061289982612936565b91506128a483612936565b9250828210156128b7576128b66129dc565b5b828203905092915050565b60006128cd82612916565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561296b578082015181840152602081019050612950565b8381111561297a576000848401525b50505050565b600061298b82612936565b9150600082141561299f5761299e6129dc565b5b600182039050919050565b600060028204905060018216806129c257607f821691505b602082108114156129d6576129d5612a0b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b612a54816128c2565b8114612a5f57600080fd5b50565b612a6b816128e0565b8114612a7657600080fd5b50565b612a82816128ea565b8114612a8d57600080fd5b50565b612a9981612936565b8114612aa457600080fd5b5056fea26469706673582212209bca701c6cb5e4c8b0edc02217df22443e04ab8145a84eec7ab35736439ae15e64736f6c63430008000033
Deployed Bytecode Sourcemap
27818:2456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8957:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18948:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21115:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20068:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21766:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10268:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10653:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28926:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11701:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22597:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20239:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29654:516;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28255:31;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9266:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19167:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28701:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7231:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23315:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20579:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29035:611;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30178:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11045:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20817:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8957:217;9042:4;9081:32;9066:47;;;:11;:47;;;;:100;;;;9130:36;9154:11;9130:23;:36::i;:::-;9066:100;9059:107;;8957:217;;;:::o;18948:100::-;19002:13;19035:5;19028:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18948:100;:::o;21115:169::-;21198:4;21215:39;21224:12;:10;:12::i;:::-;21238:7;21247:6;21215:8;:39::i;:::-;21272:4;21265:11;;21115:169;;;;:::o;20068:108::-;20129:7;20156:12;;20149:19;;20068:108;:::o;21766:422::-;21872:4;21889:36;21899:6;21907:9;21918:6;21889:9;:36::i;:::-;21938:24;21965:11;:19;21977:6;21965:19;;;;;;;;;;;;;;;:33;21985:12;:10;:12::i;:::-;21965:33;;;;;;;;;;;;;;;;21938:60;;22037:6;22017:16;:26;;22009:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22099:57;22108:6;22116:12;:10;:12::i;:::-;22149:6;22130:16;:25;;;;:::i;:::-;22099:8;:57::i;:::-;22176:4;22169:11;;;21766:422;;;;;:::o;10268:123::-;10334:7;10361:6;:12;10368:4;10361:12;;;;;;;;;;;:22;;;10354:29;;10268:123;;;:::o;28068:62::-;28106:24;28068:62;:::o;10653:147::-;10736:18;10749:4;10736:12;:18::i;:::-;8835:30;8846:4;8852:12;:10;:12::i;:::-;8835:10;:30::i;:::-;10767:25:::1;10778:4;10784:7;10767:10;:25::i;:::-;10653:147:::0;;;:::o;28926:101::-;28984:5;29009:10;;;;;;;;;;;29002:17;;28926:101;:::o;11701:218::-;11808:12;:10;:12::i;:::-;11797:23;;:7;:23;;;11789:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;11885:26;11897:4;11903:7;11885:11;:26::i;:::-;11701:218;;:::o;22597:215::-;22685:4;22702:80;22711:12;:10;:12::i;:::-;22725:7;22771:10;22734:11;:25;22746:12;:10;:12::i;:::-;22734:25;;;;;;;;;;;;;;;:34;22760:7;22734:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;22702:8;:80::i;:::-;22800:4;22793:11;;22597:215;;;;:::o;20239:127::-;20313:7;20340:9;:18;20350:7;20340:18;;;;;;;;;;;;;;;;20333:25;;20239:127;;;:::o;29654:516::-;29712:12;29745:39;7276:4;29753:18;;29773:10;29745:7;:39::i;:::-;29737:48;;;;;;29796:20;29819:11;29831:10;29819:23;;;;;;;;;;;;;;;;;;;;;;;;;;29796:46;;29878:15;29861:1;:13;;;:32;;29853:41;;;;;;29905:14;29922:1;:9;;;29905:26;;29968:6;29950:14;;:24;;29942:33;;;;;;29998:1;29986;:9;;:13;;;;30028:6;30010:14;;:24;;;;;;;:::i;:::-;;;;;;;;30050:39;30067:1;:13;;;;;;;;;;;;30082:6;30050:39;;;;;;;:::i;:::-;;;;;;;;30108:31;30117:1;:13;;;;;;;;;;;;30132:6;30108:8;:31::i;:::-;30100:40;;;;;;30158:4;30151:11;;;;29654:516;;;:::o;28255:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9266:139::-;9344:4;9368:6;:12;9375:4;9368:12;;;;;;;;;;;:20;;:29;9389:7;9368:29;;;;;;;;;;;;;;;;;;;;;;;;;9361:36;;9266:139;;;;:::o;19167:104::-;19223:13;19256:7;19249:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19167:104;:::o;28701:217::-;28771:34;28106:24;28792:12;:10;:12::i;:::-;28771:7;:34::i;:::-;28763:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28855:19;28861:4;28867:6;28855:5;:19::i;:::-;28890:20;28897:4;28903:6;28890:20;;;;;;;:::i;:::-;;;;;;;;28701:217;;:::o;7231:49::-;7276:4;7231:49;;;:::o;23315:377::-;23408:4;23425:24;23452:11;:25;23464:12;:10;:12::i;:::-;23452:25;;;;;;;;;;;;;;;:34;23478:7;23452:34;;;;;;;;;;;;;;;;23425:61;;23525:15;23505:16;:35;;23497:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23593:67;23602:12;:10;:12::i;:::-;23616:7;23644:15;23625:16;:34;;;;:::i;:::-;23593:8;:67::i;:::-;23680:4;23673:11;;;23315:377;;;;:::o;20579:175::-;20665:4;20682:42;20692:12;:10;:12::i;:::-;20706:9;20717:6;20682:9;:42::i;:::-;20742:4;20735:11;;20579:175;;;;:::o;29035:611::-;29129:12;29162:39;7276:4;29170:18;;29190:10;29162:7;:39::i;:::-;29154:48;;;;;;29264:6;29246:14;;29222:21;29232:10;29222:9;:21::i;:::-;:38;;;;:::i;:::-;29221:49;29213:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;29329:19;;:::i;:::-;29375:11;29359:1;:13;;:27;;;;;;;;;;;29409:6;29397:1;:9;;:18;;;;;29474:6;29460:11;:20;;;;:::i;:::-;29442:15;:38;;;;:::i;:::-;29426:1;:13;;:54;;;;;29491:11;29508:1;29491:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29539:6;29521:14;;:24;;;;;;;:::i;:::-;;;;;;;;29561:55;29576:1;:13;;;29591:1;:9;;;29602:1;:13;;;29561:55;;;;;;;;:::i;:::-;;;;;;;;29634:4;29627:11;;;29035:611;;;;;:::o;30178:93::-;30222:7;30249:14;;30242:21;;30178:93;:::o;11045:149::-;11129:18;11142:4;11129:12;:18::i;:::-;8835:30;8846:4;8852:12;:10;:12::i;:::-;8835:10;:30::i;:::-;11160:26:::1;11172:4;11178:7;11160:11;:26::i;:::-;11045:149:::0;;;:::o;20817:151::-;20906:7;20933:11;:18;20945:5;20933:18;;;;;;;;;;;;;;;:27;20952:7;20933:27;;;;;;;;;;;;;;;;20926:34;;20817:151;;;;:::o;4683:157::-;4768:4;4807:25;4792:40;;;:11;:40;;;;4785:47;;4683:157;;;:::o;624:98::-;677:7;704:10;697:17;;624:98;:::o;26671:346::-;26790:1;26773:19;;:5;:19;;;;26765:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26871:1;26852:21;;:7;:21;;;;26844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26955:6;26925:11;:18;26937:5;26925:18;;;;;;;;;;;;;;;:27;26944:7;26925:27;;;;;;;;;;;;;;;:36;;;;26993:7;26977:32;;26986:5;26977:32;;;27002:6;26977:32;;;;;;:::i;:::-;;;;;;;;26671:346;;;:::o;24182:604::-;24306:1;24288:20;;:6;:20;;;;24280:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24390:1;24369:23;;:9;:23;;;;24361:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24445:47;24466:6;24474:9;24485:6;24445:20;:47::i;:::-;24505:21;24529:9;:17;24539:6;24529:17;;;;;;;;;;;;;;;;24505:41;;24582:6;24565:13;:23;;24557:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24678:6;24662:13;:22;;;;:::i;:::-;24642:9;:17;24652:6;24642:17;;;;;;;;;;;;;;;:42;;;;24719:6;24695:9;:20;24705:9;24695:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;24760:9;24743:35;;24752:6;24743:35;;;24771:6;24743:35;;;;;;:::i;:::-;;;;;;;;24182:604;;;;:::o;9695:384::-;9775:22;9783:4;9789:7;9775;:22::i;:::-;9771:301;;9907:41;9935:7;9907:41;;9945:2;9907:19;:41::i;:::-;10005:38;10033:4;10025:13;;10040:2;10005:19;:38::i;:::-;9828:230;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9814:246;;;;;;;;;;;:::i;:::-;;;;;;;;9771:301;9695:384;;:::o;12949:229::-;13024:22;13032:4;13038:7;13024;:22::i;:::-;13019:152;;13095:4;13063:6;:12;13070:4;13063:12;;;;;;;;;;;:20;;:29;13084:7;13063:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13146:12;:10;:12::i;:::-;13119:40;;13137:7;13119:40;;13131:4;13119:40;;;;;;;;;;13019:152;12949:229;;:::o;13186:230::-;13261:22;13269:4;13275:7;13261;:22::i;:::-;13257:152;;;13332:5;13300:6;:12;13307:4;13300:12;;;;;;;;;;;:20;;:29;13321:7;13300:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;13384:12;:10;:12::i;:::-;13357:40;;13375:7;13357:40;;13369:4;13357:40;;;;;;;;;;13257:152;13186:230;;:::o;25739:494::-;25842:1;25823:21;;:7;:21;;;;25815:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25895:49;25916:7;25933:1;25937:6;25895:20;:49::i;:::-;25957:22;25982:9;:18;25992:7;25982:18;;;;;;;;;;;;;;;;25957:43;;26037:6;26019:14;:24;;26011:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26131:6;26114:14;:23;;;;:::i;:::-;26093:9;:18;26103:7;26093:18;;;;;;;;;;;;;;;:44;;;;26164:6;26148:12;;:22;;;;;;;:::i;:::-;;;;;;;;26214:1;26188:37;;26197:7;26188:37;;;26218:6;26188:37;;;;;;:::i;:::-;;;;;;;;25739:494;;;:::o;27620:92::-;;;;:::o;2580:447::-;2655:13;2681:19;2726:1;2717:6;2713:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;2703:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2681:47;;2739:15;:6;2746:1;2739:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;2765;:6;2772:1;2765:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;2796:9;2821:1;2812:6;2808:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;2796:26;;2791:131;2828:1;2824;:5;2791:131;;;2863:8;2880:3;2872:5;:11;2863:21;;;;;;;;;;;;;;;;;;2851:6;2858:1;2851:9;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;2909:1;2899:11;;;;;2831:3;;;;:::i;:::-;;;2791:131;;;;2949:1;2940:5;:10;2932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;3012:6;2998:21;;;2580:447;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;;;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:552::-;;;;2379:2;2367:9;2358:7;2354:23;2350:32;2347:2;;;2395:1;2392;2385:12;2347:2;2438:1;2463:53;2508:7;2499:6;2488:9;2484:22;2463:53;:::i;:::-;2453:63;;2409:117;2565:2;2591:53;2636:7;2627:6;2616:9;2612:22;2591:53;:::i;:::-;2581:63;;2536:118;2693:2;2719:53;2764:7;2755:6;2744:9;2740:22;2719:53;:::i;:::-;2709:63;;2664:118;2337:452;;;;;:::o;2795:262::-;;2903:2;2891:9;2882:7;2878:23;2874:32;2871:2;;;2919:1;2916;2909:12;2871:2;2962:1;2987:53;3032:7;3023:6;3012:9;3008:22;2987:53;:::i;:::-;2977:63;;2933:117;2861:196;;;;:::o;3063:407::-;;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;3204:1;3201;3194:12;3156:2;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3374:2;3400:53;3445:7;3436:6;3425:9;3421:22;3400:53;:::i;:::-;3390:63;;3345:118;3146:324;;;;;:::o;3476:260::-;;3583:2;3571:9;3562:7;3558:23;3554:32;3551:2;;;3599:1;3596;3589:12;3551:2;3642:1;3667:52;3711:7;3702:6;3691:9;3687:22;3667:52;:::i;:::-;3657:62;;3613:116;3541:195;;;;:::o;3742:262::-;;3850:2;3838:9;3829:7;3825:23;3821:32;3818:2;;;3866:1;3863;3856:12;3818:2;3909:1;3934:53;3979:7;3970:6;3959:9;3955:22;3934:53;:::i;:::-;3924:63;;3880:117;3808:196;;;;:::o;4010:118::-;4097:24;4115:5;4097:24;:::i;:::-;4092:3;4085:37;4075:53;;:::o;4134:109::-;4215:21;4230:5;4215:21;:::i;:::-;4210:3;4203:34;4193:50;;:::o;4249:118::-;4336:24;4354:5;4336:24;:::i;:::-;4331:3;4324:37;4314:53;;:::o;4373:364::-;;4489:39;4522:5;4489:39;:::i;:::-;4544:71;4608:6;4603:3;4544:71;:::i;:::-;4537:78;;4624:52;4669:6;4664:3;4657:4;4650:5;4646:16;4624:52;:::i;:::-;4701:29;4723:6;4701:29;:::i;:::-;4696:3;4692:39;4685:46;;4465:272;;;;;:::o;4743:377::-;;4877:39;4910:5;4877:39;:::i;:::-;4932:89;5014:6;5009:3;4932:89;:::i;:::-;4925:96;;5030:52;5075:6;5070:3;5063:4;5056:5;5052:16;5030:52;:::i;:::-;5107:6;5102:3;5098:16;5091:23;;4853:267;;;;;:::o;5126:366::-;;5289:67;5353:2;5348:3;5289:67;:::i;:::-;5282:74;;5386:34;5382:1;5377:3;5373:11;5366:55;5452:4;5447:2;5442:3;5438:12;5431:26;5483:2;5478:3;5474:12;5467:19;;5272:220;;;:::o;5498:330::-;;5661:67;5725:2;5720:3;5661:67;:::i;:::-;5654:74;;5758:34;5754:1;5749:3;5745:11;5738:55;5819:2;5814:3;5810:12;5803:19;;5644:184;;;:::o;5834:367::-;;5997:67;6061:2;6056:3;5997:67;:::i;:::-;5990:74;;6094:34;6090:1;6085:3;6081:11;6074:55;6160:5;6155:2;6150:3;6146:12;6139:27;6192:2;6187:3;6183:12;6176:19;;5980:221;;;:::o;6207:366::-;;6370:67;6434:2;6429:3;6370:67;:::i;:::-;6363:74;;6467:34;6463:1;6458:3;6454:11;6447:55;6533:4;6528:2;6523:3;6519:12;6512:26;6564:2;6559:3;6555:12;6548:19;;6353:220;;;:::o;6579:366::-;;6742:67;6806:2;6801:3;6742:67;:::i;:::-;6735:74;;6839:34;6835:1;6830:3;6826:11;6819:55;6905:4;6900:2;6895:3;6891:12;6884:26;6936:2;6931:3;6927:12;6920:19;;6725:220;;;:::o;6951:375::-;;7114:67;7178:2;7173:3;7114:67;:::i;:::-;7107:74;;7211:34;7207:1;7202:3;7198:11;7191:55;7277:13;7272:2;7267:3;7263:12;7256:35;7317:2;7312:3;7308:12;7301:19;;7097:229;;;:::o;7332:370::-;;7495:67;7559:2;7554:3;7495:67;:::i;:::-;7488:74;;7592:34;7588:1;7583:3;7579:11;7572:55;7658:8;7653:2;7648:3;7644:12;7637:30;7693:2;7688:3;7684:12;7677:19;;7478:224;;;:::o;7708:372::-;;7871:67;7935:2;7930:3;7871:67;:::i;:::-;7864:74;;7968:34;7964:1;7959:3;7955:11;7948:55;8034:10;8029:2;8024:3;8020:12;8013:32;8071:2;8066:3;8062:12;8055:19;;7854:226;;;:::o;8086:365::-;;8249:67;8313:2;8308:3;8249:67;:::i;:::-;8242:74;;8346:34;8342:1;8337:3;8333:11;8326:55;8412:3;8407:2;8402:3;8398:12;8391:25;8442:2;8437:3;8433:12;8426:19;;8232:219;;;:::o;8457:369::-;;8620:67;8684:2;8679:3;8620:67;:::i;:::-;8613:74;;8717:34;8713:1;8708:3;8704:11;8697:55;8783:7;8778:2;8773:3;8769:12;8762:29;8817:2;8812:3;8808:12;8801:19;;8603:223;;;:::o;8832:368::-;;8995:67;9059:2;9054:3;8995:67;:::i;:::-;8988:74;;9092:34;9088:1;9083:3;9079:11;9072:55;9158:6;9153:2;9148:3;9144:12;9137:28;9191:2;9186:3;9182:12;9175:19;;8978:222;;;:::o;9206:357::-;;9387:85;9469:2;9464:3;9387:85;:::i;:::-;9380:92;;9502:25;9498:1;9493:3;9489:11;9482:46;9554:2;9549:3;9545:12;9538:19;;9370:193;;;:::o;9569:369::-;;9732:67;9796:2;9791:3;9732:67;:::i;:::-;9725:74;;9829:34;9825:1;9820:3;9816:11;9809:55;9895:7;9890:2;9885:3;9881:12;9874:29;9929:2;9924:3;9920:12;9913:19;;9715:223;;;:::o;9944:351::-;;10125:85;10207:2;10202:3;10125:85;:::i;:::-;10118:92;;10240:19;10236:1;10231:3;10227:11;10220:40;10286:2;10281:3;10277:12;10270:19;;10108:187;;;:::o;10301:379::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:17;10622:2;10617:3;10613:12;10606:39;10671:2;10666:3;10662:12;10655:19;;10447:233;;;:::o;10686:118::-;10773:24;10791:5;10773:24;:::i;:::-;10768:3;10761:37;10751:53;;:::o;10810:112::-;10893:22;10909:5;10893:22;:::i;:::-;10888:3;10881:35;10871:51;;:::o;10928:967::-;;11332:148;11476:3;11332:148;:::i;:::-;11325:155;;11497:95;11588:3;11579:6;11497:95;:::i;:::-;11490:102;;11609:148;11753:3;11609:148;:::i;:::-;11602:155;;11774:95;11865:3;11856:6;11774:95;:::i;:::-;11767:102;;11886:3;11879:10;;11314:581;;;;;:::o;11901:332::-;;12060:2;12049:9;12045:18;12037:26;;12073:71;12141:1;12130:9;12126:17;12117:6;12073:71;:::i;:::-;12154:72;12222:2;12211:9;12207:18;12198:6;12154:72;:::i;:::-;12027:206;;;;;:::o;12239:442::-;;12426:2;12415:9;12411:18;12403:26;;12439:71;12507:1;12496:9;12492:17;12483:6;12439:71;:::i;:::-;12520:72;12588:2;12577:9;12573:18;12564:6;12520:72;:::i;:::-;12602;12670:2;12659:9;12655:18;12646:6;12602:72;:::i;:::-;12393:288;;;;;;:::o;12687:210::-;;12812:2;12801:9;12797:18;12789:26;;12825:65;12887:1;12876:9;12872:17;12863:6;12825:65;:::i;:::-;12779:118;;;;:::o;12903:222::-;;13034:2;13023:9;13019:18;13011:26;;13047:71;13115:1;13104:9;13100:17;13091:6;13047:71;:::i;:::-;13001:124;;;;:::o;13131:313::-;;13282:2;13271:9;13267:18;13259:26;;13331:9;13325:4;13321:20;13317:1;13306:9;13302:17;13295:47;13359:78;13432:4;13423:6;13359:78;:::i;:::-;13351:86;;13249:195;;;;:::o;13450:419::-;;13654:2;13643:9;13639:18;13631:26;;13703:9;13697:4;13693:20;13689:1;13678:9;13674:17;13667:47;13731:131;13857:4;13731:131;:::i;:::-;13723:139;;13621:248;;;:::o;13875:419::-;;14079:2;14068:9;14064:18;14056:26;;14128:9;14122:4;14118:20;14114:1;14103:9;14099:17;14092:47;14156:131;14282:4;14156:131;:::i;:::-;14148:139;;14046:248;;;:::o;14300:419::-;;14504:2;14493:9;14489:18;14481:26;;14553:9;14547:4;14543:20;14539:1;14528:9;14524:17;14517:47;14581:131;14707:4;14581:131;:::i;:::-;14573:139;;14471:248;;;:::o;14725:419::-;;14929:2;14918:9;14914:18;14906:26;;14978:9;14972:4;14968:20;14964:1;14953:9;14949:17;14942:47;15006:131;15132:4;15006:131;:::i;:::-;14998:139;;14896:248;;;:::o;15150:419::-;;15354:2;15343:9;15339:18;15331:26;;15403:9;15397:4;15393:20;15389:1;15378:9;15374:17;15367:47;15431:131;15557:4;15431:131;:::i;:::-;15423:139;;15321:248;;;:::o;15575:419::-;;15779:2;15768:9;15764:18;15756:26;;15828:9;15822:4;15818:20;15814:1;15803:9;15799:17;15792:47;15856:131;15982:4;15856:131;:::i;:::-;15848:139;;15746:248;;;:::o;16000:419::-;;16204:2;16193:9;16189:18;16181:26;;16253:9;16247:4;16243:20;16239:1;16228:9;16224:17;16217:47;16281:131;16407:4;16281:131;:::i;:::-;16273:139;;16171:248;;;:::o;16425:419::-;;16629:2;16618:9;16614:18;16606:26;;16678:9;16672:4;16668:20;16664:1;16653:9;16649:17;16642:47;16706:131;16832:4;16706:131;:::i;:::-;16698:139;;16596:248;;;:::o;16850:419::-;;17054:2;17043:9;17039:18;17031:26;;17103:9;17097:4;17093:20;17089:1;17078:9;17074:17;17067:47;17131:131;17257:4;17131:131;:::i;:::-;17123:139;;17021:248;;;:::o;17275:419::-;;17479:2;17468:9;17464:18;17456:26;;17528:9;17522:4;17518:20;17514:1;17503:9;17499:17;17492:47;17556:131;17682:4;17556:131;:::i;:::-;17548:139;;17446:248;;;:::o;17700:419::-;;17904:2;17893:9;17889:18;17881:26;;17953:9;17947:4;17943:20;17939:1;17928:9;17924:17;17917:47;17981:131;18107:4;17981:131;:::i;:::-;17973:139;;17871:248;;;:::o;18125:419::-;;18329:2;18318:9;18314:18;18306:26;;18378:9;18372:4;18368:20;18364:1;18353:9;18349:17;18342:47;18406:131;18532:4;18406:131;:::i;:::-;18398:139;;18296:248;;;:::o;18550:419::-;;18754:2;18743:9;18739:18;18731:26;;18803:9;18797:4;18793:20;18789:1;18778:9;18774:17;18767:47;18831:131;18957:4;18831:131;:::i;:::-;18823:139;;18721:248;;;:::o;18975:222::-;;19106:2;19095:9;19091:18;19083:26;;19119:71;19187:1;19176:9;19172:17;19163:6;19119:71;:::i;:::-;19073:124;;;;:::o;19203:214::-;;19330:2;19319:9;19315:18;19307:26;;19343:67;19407:1;19396:9;19392:17;19383:6;19343:67;:::i;:::-;19297:120;;;;:::o;19423:99::-;;19509:5;19503:12;19493:22;;19482:40;;;:::o;19528:169::-;;19646:6;19641:3;19634:19;19686:4;19681:3;19677:14;19662:29;;19624:73;;;;:::o;19703:148::-;;19842:3;19827:18;;19817:34;;;;:::o;19857:305::-;;19916:20;19934:1;19916:20;:::i;:::-;19911:25;;19950:20;19968:1;19950:20;:::i;:::-;19945:25;;20104:1;20036:66;20032:74;20029:1;20026:81;20023:2;;;20110:18;;:::i;:::-;20023:2;20154:1;20151;20147:9;20140:16;;19901:261;;;;:::o;20168:348::-;;20231:20;20249:1;20231:20;:::i;:::-;20226:25;;20265:20;20283:1;20265:20;:::i;:::-;20260:25;;20453:1;20385:66;20381:74;20378:1;20375:81;20370:1;20363:9;20356:17;20352:105;20349:2;;;20460:18;;:::i;:::-;20349:2;20508:1;20505;20501:9;20490:20;;20216:300;;;;:::o;20522:191::-;;20582:20;20600:1;20582:20;:::i;:::-;20577:25;;20616:20;20634:1;20616:20;:::i;:::-;20611:25;;20655:1;20652;20649:8;20646:2;;;20660:18;;:::i;:::-;20646:2;20705:1;20702;20698:9;20690:17;;20567:146;;;;:::o;20719:96::-;;20785:24;20803:5;20785:24;:::i;:::-;20774:35;;20764:51;;;:::o;20821:90::-;;20898:5;20891:13;20884:21;20873:32;;20863:48;;;:::o;20917:77::-;;20983:5;20972:16;;20962:32;;;:::o;21000:149::-;;21076:66;21069:5;21065:78;21054:89;;21044:105;;;:::o;21155:126::-;;21232:42;21225:5;21221:54;21210:65;;21200:81;;;:::o;21287:77::-;;21353:5;21342:16;;21332:32;;;:::o;21370:86::-;;21445:4;21438:5;21434:16;21423:27;;21413:43;;;:::o;21462:307::-;21530:1;21540:113;21554:6;21551:1;21548:13;21540:113;;;21639:1;21634:3;21630:11;21624:18;21620:1;21615:3;21611:11;21604:39;21576:2;21573:1;21569:10;21564:15;;21540:113;;;21671:6;21668:1;21665:13;21662:2;;;21751:1;21742:6;21737:3;21733:16;21726:27;21662:2;21511:258;;;;:::o;21775:171::-;;21837:24;21855:5;21837:24;:::i;:::-;21828:33;;21883:4;21876:5;21873:15;21870:2;;;21891:18;;:::i;:::-;21870:2;21938:1;21931:5;21927:13;21920:20;;21818:128;;;:::o;21952:320::-;;22033:1;22027:4;22023:12;22013:22;;22080:1;22074:4;22070:12;22101:18;22091:2;;22157:4;22149:6;22145:17;22135:27;;22091:2;22219;22211:6;22208:14;22188:18;22185:38;22182:2;;;22238:18;;:::i;:::-;22182:2;22003:269;;;;:::o;22278:180::-;22326:77;22323:1;22316:88;22423:4;22420:1;22413:15;22447:4;22444:1;22437:15;22464:180;22512:77;22509:1;22502:88;22609:4;22606:1;22599:15;22633:4;22630:1;22623:15;22650:102;;22742:2;22738:7;22733:2;22726:5;22722:14;22718:28;22708:38;;22698:54;;;:::o;22758:122::-;22831:24;22849:5;22831:24;:::i;:::-;22824:5;22821:35;22811:2;;22870:1;22867;22860:12;22811:2;22801:79;:::o;22886:122::-;22959:24;22977:5;22959:24;:::i;:::-;22952:5;22949:35;22939:2;;22998:1;22995;22988:12;22939:2;22929:79;:::o;23014:120::-;23086:23;23103:5;23086:23;:::i;:::-;23079:5;23076:34;23066:2;;23124:1;23121;23114:12;23066:2;23056:78;:::o;23140:122::-;23213:24;23231:5;23213:24;:::i;:::-;23206:5;23203:35;23193:2;;23252:1;23249;23242:12;23193:2;23183:79;:::o
Swarm Source
ipfs://9bca701c6cb5e4c8b0edc02217df22443e04ab8145a84eec7ab35736439ae15e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.