Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TestToken
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-29 */ // File: eth-onboarding/Week 2/LibraryLock.sol pragma solidity ^0.8.18; contract LibraryLockDataLayout { bool public initialized = false; } contract LibraryLock is LibraryLockDataLayout { // Ensures no one can manipulate the Logic Contract once it is deployed. // PARITY WALLET HACK PREVENTION function initialize() internal { initialized = true; } modifier delegatedOnly() { require( initialized == true, "The library is locked. No direct 'call' is allowed" ); _; } } // File: eth-onboarding/Week 2/Proxiable.sol pragma solidity ^0.8.18; contract Proxiable { // Code position in storage is keccak256("PROXIABLE") = "0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7" function updateCodeAddress(address newAddress) internal { require( bytes32( 0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7 ) == Proxiable(newAddress).proxiableUUID(), "Not compatible" ); assembly { // solium-disable-line sstore( 0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7, newAddress ) } } function proxiableUUID() public pure returns (bytes32) { return 0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7; } } // File: eth-onboarding/Week 2/Owned.sol pragma solidity ^0.8.18; contract Owned is Proxiable { // ensures no one can manipulate this contract once it is deployed address public owner = address(1); function constructorOwned() internal { // ensures this can be called only once per *proxy* contract deployed require(owner == address(0)); owner = msg.sender; } function setOwner(address _owner) public onlyOwner { owner = _owner; } modifier onlyOwner() { require( msg.sender == owner, "Only owner is allowed to perform this action" ); _; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts (last updated v4.8.0) (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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead 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 default 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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: * * - `account` 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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(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"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: eth-onboarding/Week 2/TestToken.sol pragma solidity ^0.8.18; contract TestToken is ERC20, Owned, LibraryLock { constructor() ERC20("TestToken", "TST") { } function constructorTestToken() public { initialize(); constructorOwned(); _mint(msg.sender, 1000000000 ether); } function updateCode(address newCode) public onlyOwner delegatedOnly { updateCodeAddress(newCode); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal delegatedOnly override { super._beforeTokenTransfer(from, to, amount); } }
Contract ABI
API[{"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":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":[{"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":[],"name":"constructorTestToken","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCode","type":"address"}],"name":"updateCode","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff0219169083151502179055503480156200006e57600080fd5b506040518060400160405280600981526020017f54657374546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f54535400000000000000000000000000000000000000000000000000000000008152508160039081620000ec919062000381565b508060049081620000fe919062000381565b50505062000468565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200018957607f821691505b6020821081036200019f576200019e62000141565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620001ca565b620002158683620001ca565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002626200025c62000256846200022d565b62000237565b6200022d565b9050919050565b6000819050919050565b6200027e8362000241565b620002966200028d8262000269565b848454620001d7565b825550505050565b600090565b620002ad6200029e565b620002ba81848462000273565b505050565b5b81811015620002e257620002d6600082620002a3565b600181019050620002c0565b5050565b601f8211156200033157620002fb81620001a5565b6200030684620001ba565b8101602085101562000316578190505b6200032e6200032585620001ba565b830182620002bf565b50505b505050565b600082821c905092915050565b6000620003566000198460080262000336565b1980831691505092915050565b600062000371838362000343565b9150826002028217905092915050565b6200038c8262000107565b67ffffffffffffffff811115620003a857620003a762000112565b5b620003b4825462000170565b620003c1828285620002e6565b600060209050601f831160018114620003f95760008415620003e4578287015190505b620003f0858262000363565b86555062000460565b601f1984166200040986620001a5565b60005b8281101562000433578489015182556001820191506020850194506020810190506200040c565b868310156200045357848901516200044f601f89168262000343565b8355505b6001600288020188555050505b505050505050565b611ba280620004786000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806346951954116100a257806395d89b411161007157806395d89b41146102bc578063a457c2d7146102da578063a8d07c161461030a578063a9059cbb14610314578063dd62ed3e146103445761010b565b8063469519541461023457806352d1902d1461025057806370a082311461026e5780638da5cb5b1461029e5761010b565b806318160ddd116100de57806318160ddd1461019857806323b872dd146101b6578063313ce567146101e657806339509351146102045761010b565b806306fdde0314610110578063095ea7b31461012e57806313af40351461015e578063158ef93e1461017a575b600080fd5b610118610374565b60405161012591906111cc565b60405180910390f35b61014860048036038101906101439190611287565b610406565b60405161015591906112e2565b60405180910390f35b610178600480360381019061017391906112fd565b610429565b005b6101826104fd565b60405161018f91906112e2565b60405180910390f35b6101a0610510565b6040516101ad9190611339565b60405180910390f35b6101d060048036038101906101cb9190611354565b61051a565b6040516101dd91906112e2565b60405180910390f35b6101ee610549565b6040516101fb91906113c3565b60405180910390f35b61021e60048036038101906102199190611287565b610552565b60405161022b91906112e2565b60405180910390f35b61024e600480360381019061024991906112fd565b610589565b005b61025861067b565b60405161026591906113f7565b60405180910390f35b610288600480360381019061028391906112fd565b6106a6565b6040516102959190611339565b60405180910390f35b6102a66106ee565b6040516102b39190611421565b60405180910390f35b6102c4610714565b6040516102d191906111cc565b60405180910390f35b6102f460048036038101906102ef9190611287565b6107a6565b60405161030191906112e2565b60405180910390f35b61031261081d565b005b61032e60048036038101906103299190611287565b610845565b60405161033b91906112e2565b60405180910390f35b61035e6004803603810190610359919061143c565b610868565b60405161036b9190611339565b60405180910390f35b606060038054610383906114ab565b80601f01602080910402602001604051908101604052809291908181526020018280546103af906114ab565b80156103fc5780601f106103d1576101008083540402835291602001916103fc565b820191906000526020600020905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b6000806104116108ef565b905061041e8185856108f7565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09061154e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560149054906101000a900460ff1681565b6000600254905090565b6000806105256108ef565b9050610532858285610ac0565b61053d858585610b4c565b60019150509392505050565b60006012905090565b60008061055d6108ef565b905061057e81858561056f8589610868565b610579919061159d565b6108f7565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061154e565b60405180910390fd5b60011515600560149054906101000a900460ff1615151461066f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066690611643565b60405180910390fd5b61067881610dc2565b50565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610723906114ab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f906114ab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b5050505050905090565b6000806107b16108ef565b905060006107bf8286610868565b905083811015610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb906116d5565b60405180910390fd5b61081182868684036108f7565b60019250505092915050565b610825610ebb565b61082d610ed8565b610843336b033b2e3c9fd0803ce8000000610f76565b565b6000806108506108ef565b905061085d818585610b4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90611767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc906117f9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ab39190611339565b60405180910390a3505050565b6000610acc8484610868565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b465781811015610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90611865565b60405180910390fd5b610b4584848484036108f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906118f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190611989565b60405180910390fd5b610c358383836110cc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290611a1b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610da99190611339565b60405180910390a3610dbc848484611132565b50505050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611a67565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90611ae0565b60405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b6001600560146101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3357600080fd5b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90611b4c565b60405180910390fd5b610ff1600083836110cc565b8060026000828254611003919061159d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110b49190611339565b60405180910390a36110c860008383611132565b5050565b60011515600560149054906101000a900460ff16151514611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990611643565b60405180910390fd5b61112d838383611137565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561117657808201518184015260208101905061115b565b60008484015250505050565b6000601f19601f8301169050919050565b600061119e8261113c565b6111a88185611147565b93506111b8818560208601611158565b6111c181611182565b840191505092915050565b600060208201905081810360008301526111e68184611193565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061121e826111f3565b9050919050565b61122e81611213565b811461123957600080fd5b50565b60008135905061124b81611225565b92915050565b6000819050919050565b61126481611251565b811461126f57600080fd5b50565b6000813590506112818161125b565b92915050565b6000806040838503121561129e5761129d6111ee565b5b60006112ac8582860161123c565b92505060206112bd85828601611272565b9150509250929050565b60008115159050919050565b6112dc816112c7565b82525050565b60006020820190506112f760008301846112d3565b92915050565b600060208284031215611313576113126111ee565b5b60006113218482850161123c565b91505092915050565b61133381611251565b82525050565b600060208201905061134e600083018461132a565b92915050565b60008060006060848603121561136d5761136c6111ee565b5b600061137b8682870161123c565b935050602061138c8682870161123c565b925050604061139d86828701611272565b9150509250925092565b600060ff82169050919050565b6113bd816113a7565b82525050565b60006020820190506113d860008301846113b4565b92915050565b6000819050919050565b6113f1816113de565b82525050565b600060208201905061140c60008301846113e8565b92915050565b61141b81611213565b82525050565b60006020820190506114366000830184611412565b92915050565b60008060408385031215611453576114526111ee565b5b60006114618582860161123c565b92505060206114728582860161123c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114c357607f821691505b6020821081036114d6576114d561147c565b5b50919050565b7f4f6e6c79206f776e657220697320616c6c6f77656420746f20706572666f726d60008201527f207468697320616374696f6e0000000000000000000000000000000000000000602082015250565b6000611538602c83611147565b9150611543826114dc565b604082019050919050565b600060208201905081810360008301526115678161152b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115a882611251565b91506115b383611251565b92508282019050808211156115cb576115ca61156e565b5b92915050565b7f546865206c696272617279206973206c6f636b65642e204e6f2064697265637460008201527f202763616c6c2720697320616c6c6f7765640000000000000000000000000000602082015250565b600061162d603283611147565b9150611638826115d1565b604082019050919050565b6000602082019050818103600083015261165c81611620565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006116bf602583611147565b91506116ca82611663565b604082019050919050565b600060208201905081810360008301526116ee816116b2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611751602483611147565b915061175c826116f5565b604082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006117e3602283611147565b91506117ee82611787565b604082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061184f601d83611147565b915061185a82611819565b602082019050919050565b6000602082019050818103600083015261187e81611842565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006118e1602583611147565b91506118ec82611885565b604082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611973602383611147565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a05602683611147565b9150611a10826119a9565b604082019050919050565b60006020820190508181036000830152611a34816119f8565b9050919050565b611a44816113de565b8114611a4f57600080fd5b50565b600081519050611a6181611a3b565b92915050565b600060208284031215611a7d57611a7c6111ee565b5b6000611a8b84828501611a52565b91505092915050565b7f4e6f7420636f6d70617469626c65000000000000000000000000000000000000600082015250565b6000611aca600e83611147565b9150611ad582611a94565b602082019050919050565b60006020820190508181036000830152611af981611abd565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b36601f83611147565b9150611b4182611b00565b602082019050919050565b60006020820190508181036000830152611b6581611b29565b905091905056fea2646970667358221220749440250a458860284ae8dea69c8dff3172741ae604cb6baf8dd621fe78cb4164736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806346951954116100a257806395d89b411161007157806395d89b41146102bc578063a457c2d7146102da578063a8d07c161461030a578063a9059cbb14610314578063dd62ed3e146103445761010b565b8063469519541461023457806352d1902d1461025057806370a082311461026e5780638da5cb5b1461029e5761010b565b806318160ddd116100de57806318160ddd1461019857806323b872dd146101b6578063313ce567146101e657806339509351146102045761010b565b806306fdde0314610110578063095ea7b31461012e57806313af40351461015e578063158ef93e1461017a575b600080fd5b610118610374565b60405161012591906111cc565b60405180910390f35b61014860048036038101906101439190611287565b610406565b60405161015591906112e2565b60405180910390f35b610178600480360381019061017391906112fd565b610429565b005b6101826104fd565b60405161018f91906112e2565b60405180910390f35b6101a0610510565b6040516101ad9190611339565b60405180910390f35b6101d060048036038101906101cb9190611354565b61051a565b6040516101dd91906112e2565b60405180910390f35b6101ee610549565b6040516101fb91906113c3565b60405180910390f35b61021e60048036038101906102199190611287565b610552565b60405161022b91906112e2565b60405180910390f35b61024e600480360381019061024991906112fd565b610589565b005b61025861067b565b60405161026591906113f7565b60405180910390f35b610288600480360381019061028391906112fd565b6106a6565b6040516102959190611339565b60405180910390f35b6102a66106ee565b6040516102b39190611421565b60405180910390f35b6102c4610714565b6040516102d191906111cc565b60405180910390f35b6102f460048036038101906102ef9190611287565b6107a6565b60405161030191906112e2565b60405180910390f35b61031261081d565b005b61032e60048036038101906103299190611287565b610845565b60405161033b91906112e2565b60405180910390f35b61035e6004803603810190610359919061143c565b610868565b60405161036b9190611339565b60405180910390f35b606060038054610383906114ab565b80601f01602080910402602001604051908101604052809291908181526020018280546103af906114ab565b80156103fc5780601f106103d1576101008083540402835291602001916103fc565b820191906000526020600020905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b6000806104116108ef565b905061041e8185856108f7565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09061154e565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560149054906101000a900460ff1681565b6000600254905090565b6000806105256108ef565b9050610532858285610ac0565b61053d858585610b4c565b60019150509392505050565b60006012905090565b60008061055d6108ef565b905061057e81858561056f8589610868565b610579919061159d565b6108f7565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106109061154e565b60405180910390fd5b60011515600560149054906101000a900460ff1615151461066f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066690611643565b60405180910390fd5b61067881610dc2565b50565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610723906114ab565b80601f016020809104026020016040519081016040528092919081815260200182805461074f906114ab565b801561079c5780601f106107715761010080835404028352916020019161079c565b820191906000526020600020905b81548152906001019060200180831161077f57829003601f168201915b5050505050905090565b6000806107b16108ef565b905060006107bf8286610868565b905083811015610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb906116d5565b60405180910390fd5b61081182868684036108f7565b60019250505092915050565b610825610ebb565b61082d610ed8565b610843336b033b2e3c9fd0803ce8000000610f76565b565b6000806108506108ef565b905061085d818585610b4c565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90611767565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc906117f9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ab39190611339565b60405180910390a3505050565b6000610acc8484610868565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b465781811015610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90611865565b60405180910390fd5b610b4584848484036108f7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906118f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190611989565b60405180910390fd5b610c358383836110cc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290611a1b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610da99190611339565b60405180910390a3610dbc848484611132565b50505050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611a67565b7fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90611ae0565b60405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b6001600560146101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3357600080fd5b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90611b4c565b60405180910390fd5b610ff1600083836110cc565b8060026000828254611003919061159d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110b49190611339565b60405180910390a36110c860008383611132565b5050565b60011515600560149054906101000a900460ff16151514611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990611643565b60405180910390fd5b61112d838383611137565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561117657808201518184015260208101905061115b565b60008484015250505050565b6000601f19601f8301169050919050565b600061119e8261113c565b6111a88185611147565b93506111b8818560208601611158565b6111c181611182565b840191505092915050565b600060208201905081810360008301526111e68184611193565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061121e826111f3565b9050919050565b61122e81611213565b811461123957600080fd5b50565b60008135905061124b81611225565b92915050565b6000819050919050565b61126481611251565b811461126f57600080fd5b50565b6000813590506112818161125b565b92915050565b6000806040838503121561129e5761129d6111ee565b5b60006112ac8582860161123c565b92505060206112bd85828601611272565b9150509250929050565b60008115159050919050565b6112dc816112c7565b82525050565b60006020820190506112f760008301846112d3565b92915050565b600060208284031215611313576113126111ee565b5b60006113218482850161123c565b91505092915050565b61133381611251565b82525050565b600060208201905061134e600083018461132a565b92915050565b60008060006060848603121561136d5761136c6111ee565b5b600061137b8682870161123c565b935050602061138c8682870161123c565b925050604061139d86828701611272565b9150509250925092565b600060ff82169050919050565b6113bd816113a7565b82525050565b60006020820190506113d860008301846113b4565b92915050565b6000819050919050565b6113f1816113de565b82525050565b600060208201905061140c60008301846113e8565b92915050565b61141b81611213565b82525050565b60006020820190506114366000830184611412565b92915050565b60008060408385031215611453576114526111ee565b5b60006114618582860161123c565b92505060206114728582860161123c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114c357607f821691505b6020821081036114d6576114d561147c565b5b50919050565b7f4f6e6c79206f776e657220697320616c6c6f77656420746f20706572666f726d60008201527f207468697320616374696f6e0000000000000000000000000000000000000000602082015250565b6000611538602c83611147565b9150611543826114dc565b604082019050919050565b600060208201905081810360008301526115678161152b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115a882611251565b91506115b383611251565b92508282019050808211156115cb576115ca61156e565b5b92915050565b7f546865206c696272617279206973206c6f636b65642e204e6f2064697265637460008201527f202763616c6c2720697320616c6c6f7765640000000000000000000000000000602082015250565b600061162d603283611147565b9150611638826115d1565b604082019050919050565b6000602082019050818103600083015261165c81611620565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006116bf602583611147565b91506116ca82611663565b604082019050919050565b600060208201905081810360008301526116ee816116b2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611751602483611147565b915061175c826116f5565b604082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006117e3602283611147565b91506117ee82611787565b604082019050919050565b60006020820190508181036000830152611812816117d6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061184f601d83611147565b915061185a82611819565b602082019050919050565b6000602082019050818103600083015261187e81611842565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006118e1602583611147565b91506118ec82611885565b604082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611973602383611147565b915061197e82611917565b604082019050919050565b600060208201905081810360008301526119a281611966565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a05602683611147565b9150611a10826119a9565b604082019050919050565b60006020820190508181036000830152611a34816119f8565b9050919050565b611a44816113de565b8114611a4f57600080fd5b50565b600081519050611a6181611a3b565b92915050565b600060208284031215611a7d57611a7c6111ee565b5b6000611a8b84828501611a52565b91505092915050565b7f4e6f7420636f6d70617469626c65000000000000000000000000000000000000600082015250565b6000611aca600e83611147565b9150611ad582611a94565b602082019050919050565b60006020820190508181036000830152611af981611abd565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611b36601f83611147565b9150611b4182611b00565b602082019050919050565b60006020820190508181036000830152611b6581611b29565b905091905056fea2646970667358221220749440250a458860284ae8dea69c8dff3172741ae604cb6baf8dd621fe78cb4164736f6c63430008120033
Deployed Bytecode Sourcemap
20118:556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8844:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11195:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1929:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;120:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9964:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11976:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9806:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12680:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20382:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1335:160;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10135:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1687:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9063:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13421:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20229:145;;;:::i;:::-;;10468:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10724:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8844:100;8898:13;8931:5;8924:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8844:100;:::o;11195:201::-;11278:4;11295:13;11311:12;:10;:12::i;:::-;11295:28;;11334:32;11343:5;11350:7;11359:6;11334:8;:32::i;:::-;11384:4;11377:11;;;11195:201;;;;:::o;1929:84::-;2089:5;;;;;;;;;;;2075:19;;:10;:19;;;2053:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;1999:6:::1;1991:5;;:14;;;;;;;;;;;;;;;;;;1929:84:::0;:::o;120:31::-;;;;;;;;;;;;;:::o;9964:108::-;10025:7;10052:12;;10045:19;;9964:108;:::o;11976:295::-;12107:4;12124:15;12142:12;:10;:12::i;:::-;12124:30;;12165:38;12181:4;12187:7;12196:6;12165:15;:38::i;:::-;12214:27;12224:4;12230:2;12234:6;12214:9;:27::i;:::-;12259:4;12252:11;;;11976:295;;;;;:::o;9806:93::-;9864:5;9889:2;9882:9;;9806:93;:::o;12680:238::-;12768:4;12785:13;12801:12;:10;:12::i;:::-;12785:28;;12824:64;12833:5;12840:7;12877:10;12849:25;12859:5;12866:7;12849:9;:25::i;:::-;:38;;;;:::i;:::-;12824:8;:64::i;:::-;12906:4;12899:11;;;12680:238;;;;:::o;20382:114::-;2089:5;;;;;;;;;;;2075:19;;:10;:19;;;2053:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;479:4:::1;464:19;;:11;;;;;;;;;;;:19;;;442:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;20462:26:::2;20480:7;20462:17;:26::i;:::-;20382:114:::0;:::o;1335:160::-;1381:7;1421:66;1401:86;;;;1335:160;:::o;10135:127::-;10209:7;10236:9;:18;10246:7;10236:18;;;;;;;;;;;;;;;;10229:25;;10135:127;;;:::o;1687:33::-;;;;;;;;;;;;;:::o;9063:104::-;9119:13;9152:7;9145:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9063:104;:::o;13421:436::-;13514:4;13531:13;13547:12;:10;:12::i;:::-;13531:28;;13570:24;13597:25;13607:5;13614:7;13597:9;:25::i;:::-;13570:52;;13661:15;13641:16;:35;;13633:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13754:60;13763:5;13770:7;13798:15;13779:16;:34;13754:8;:60::i;:::-;13845:4;13838:11;;;;13421:436;;;;:::o;20229:145::-;20279:12;:10;:12::i;:::-;20302:18;:16;:18::i;:::-;20331:35;20337:10;20349:16;20331:5;:35::i;:::-;20229:145::o;10468:193::-;10547:4;10564:13;10580:12;:10;:12::i;:::-;10564:28;;10603;10613:5;10620:2;10624:6;10603:9;:28::i;:::-;10649:4;10642:11;;;10468:193;;;;:::o;10724:151::-;10813:7;10840:11;:18;10852:5;10840:18;;;;;;;;;;;;;;;:27;10859:7;10840:27;;;;;;;;;;;;;;;;10833:34;;10724:151;;;;:::o;2872:98::-;2925:7;2952:10;2945:17;;2872:98;:::o;17448:380::-;17601:1;17584:19;;:5;:19;;;17576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17682:1;17663:21;;:7;:21;;;17655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17766:6;17736:11;:18;17748:5;17736:18;;;;;;;;;;;;;;;:27;17755:7;17736:27;;;;;;;;;;;;;;;:36;;;;17804:7;17788:32;;17797:5;17788:32;;;17813:6;17788:32;;;;;;:::i;:::-;;;;;;;;17448:380;;;:::o;18119:453::-;18254:24;18281:25;18291:5;18298:7;18281:9;:25::i;:::-;18254:52;;18341:17;18321:16;:37;18317:248;;18403:6;18383:16;:26;;18375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18487:51;18496:5;18503:7;18531:6;18512:16;:25;18487:8;:51::i;:::-;18317:248;18243:329;18119:453;;;:::o;14327:840::-;14474:1;14458:18;;:4;:18;;;14450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14551:1;14537:16;;:2;:16;;;14529:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14606:38;14627:4;14633:2;14637:6;14606:20;:38::i;:::-;14657:19;14679:9;:15;14689:4;14679:15;;;;;;;;;;;;;;;;14657:37;;14728:6;14713:11;:21;;14705:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14845:6;14831:11;:20;14813:9;:15;14823:4;14813:15;;;;;;;;;;;;;;;:38;;;;15048:6;15031:9;:13;15041:2;15031:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15098:2;15083:26;;15092:4;15083:26;;;15102:6;15083:26;;;;;;:::i;:::-;;;;;;;;15122:37;15142:4;15148:2;15152:6;15122:19;:37::i;:::-;14439:728;14327:840;;;:::o;824:503::-;1034:10;1024:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;939:66;913:107;;:148;891:212;;;;;;;;;;;;:::i;:::-;;;;;;;;;1284:10;1199:66;1174:135;824:503;:::o;330:68::-;386:4;372:11;;:18;;;;;;;;;;;;;;;;;;330:68::o;1729:192::-;1881:1;1864:19;;:5;;;;;;;;;;;:19;;;1856:28;;;;;;1903:10;1895:5;;:18;;;;;;;;;;;;;;;;;;1729:192::o;15454:548::-;15557:1;15538:21;;:7;:21;;;15530:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15608:49;15637:1;15641:7;15650:6;15608:20;:49::i;:::-;15686:6;15670:12;;:22;;;;;;;:::i;:::-;;;;;;;;15863:6;15841:9;:18;15851:7;15841:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;15917:7;15896:37;;15913:1;15896:37;;;15926:6;15896:37;;;;;;:::i;:::-;;;;;;;;15946:48;15974:1;15978:7;15987:6;15946:19;:48::i;:::-;15454:548;;:::o;20504:167::-;479:4;464:19;;:11;;;;;;;;;;;:19;;;442:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;20619:44:::1;20646:4;20652:2;20656:6;20619:26;:44::i;:::-;20504:167:::0;;;:::o;19901:124::-;;;;:::o;19172:125::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:77::-;5225:7;5254:5;5243:16;;5188:77;;;:::o;5271:118::-;5358:24;5376:5;5358:24;:::i;:::-;5353:3;5346:37;5271:118;;:::o;5395:222::-;5488:4;5526:2;5515:9;5511:18;5503:26;;5539:71;5607:1;5596:9;5592:17;5583:6;5539:71;:::i;:::-;5395:222;;;;:::o;5623:118::-;5710:24;5728:5;5710:24;:::i;:::-;5705:3;5698:37;5623:118;;:::o;5747:222::-;5840:4;5878:2;5867:9;5863:18;5855:26;;5891:71;5959:1;5948:9;5944:17;5935:6;5891:71;:::i;:::-;5747:222;;;;:::o;5975:474::-;6043:6;6051;6100:2;6088:9;6079:7;6075:23;6071:32;6068:119;;;6106:79;;:::i;:::-;6068:119;6226:1;6251:53;6296:7;6287:6;6276:9;6272:22;6251:53;:::i;:::-;6241:63;;6197:117;6353:2;6379:53;6424:7;6415:6;6404:9;6400:22;6379:53;:::i;:::-;6369:63;;6324:118;5975:474;;;;;:::o;6455:180::-;6503:77;6500:1;6493:88;6600:4;6597:1;6590:15;6624:4;6621:1;6614:15;6641:320;6685:6;6722:1;6716:4;6712:12;6702:22;;6769:1;6763:4;6759:12;6790:18;6780:81;;6846:4;6838:6;6834:17;6824:27;;6780:81;6908:2;6900:6;6897:14;6877:18;6874:38;6871:84;;6927:18;;:::i;:::-;6871:84;6692:269;6641:320;;;:::o;6967:231::-;7107:34;7103:1;7095:6;7091:14;7084:58;7176:14;7171:2;7163:6;7159:15;7152:39;6967:231;:::o;7204:366::-;7346:3;7367:67;7431:2;7426:3;7367:67;:::i;:::-;7360:74;;7443:93;7532:3;7443:93;:::i;:::-;7561:2;7556:3;7552:12;7545:19;;7204:366;;;:::o;7576:419::-;7742:4;7780:2;7769:9;7765:18;7757:26;;7829:9;7823:4;7819:20;7815:1;7804:9;7800:17;7793:47;7857:131;7983:4;7857:131;:::i;:::-;7849:139;;7576:419;;;:::o;8001:180::-;8049:77;8046:1;8039:88;8146:4;8143:1;8136:15;8170:4;8167:1;8160:15;8187:191;8227:3;8246:20;8264:1;8246:20;:::i;:::-;8241:25;;8280:20;8298:1;8280:20;:::i;:::-;8275:25;;8323:1;8320;8316:9;8309:16;;8344:3;8341:1;8338:10;8335:36;;;8351:18;;:::i;:::-;8335:36;8187:191;;;;:::o;8384:237::-;8524:34;8520:1;8512:6;8508:14;8501:58;8593:20;8588:2;8580:6;8576:15;8569:45;8384:237;:::o;8627:366::-;8769:3;8790:67;8854:2;8849:3;8790:67;:::i;:::-;8783:74;;8866:93;8955:3;8866:93;:::i;:::-;8984:2;8979:3;8975:12;8968:19;;8627:366;;;:::o;8999:419::-;9165:4;9203:2;9192:9;9188:18;9180:26;;9252:9;9246:4;9242:20;9238:1;9227:9;9223:17;9216:47;9280:131;9406:4;9280:131;:::i;:::-;9272:139;;8999:419;;;:::o;9424:224::-;9564:34;9560:1;9552:6;9548:14;9541:58;9633:7;9628:2;9620:6;9616:15;9609:32;9424:224;:::o;9654:366::-;9796:3;9817:67;9881:2;9876:3;9817:67;:::i;:::-;9810:74;;9893:93;9982:3;9893:93;:::i;:::-;10011:2;10006:3;10002:12;9995:19;;9654:366;;;:::o;10026:419::-;10192:4;10230:2;10219:9;10215:18;10207:26;;10279:9;10273:4;10269:20;10265:1;10254:9;10250:17;10243:47;10307:131;10433:4;10307:131;:::i;:::-;10299:139;;10026:419;;;:::o;10451:223::-;10591:34;10587:1;10579:6;10575:14;10568:58;10660:6;10655:2;10647:6;10643:15;10636:31;10451:223;:::o;10680:366::-;10822:3;10843:67;10907:2;10902:3;10843:67;:::i;:::-;10836:74;;10919:93;11008:3;10919:93;:::i;:::-;11037:2;11032:3;11028:12;11021:19;;10680:366;;;:::o;11052:419::-;11218:4;11256:2;11245:9;11241:18;11233:26;;11305:9;11299:4;11295:20;11291:1;11280:9;11276:17;11269:47;11333:131;11459:4;11333:131;:::i;:::-;11325:139;;11052:419;;;:::o;11477:221::-;11617:34;11613:1;11605:6;11601:14;11594:58;11686:4;11681:2;11673:6;11669:15;11662:29;11477:221;:::o;11704:366::-;11846:3;11867:67;11931:2;11926:3;11867:67;:::i;:::-;11860:74;;11943:93;12032:3;11943:93;:::i;:::-;12061:2;12056:3;12052:12;12045:19;;11704:366;;;:::o;12076:419::-;12242:4;12280:2;12269:9;12265:18;12257:26;;12329:9;12323:4;12319:20;12315:1;12304:9;12300:17;12293:47;12357:131;12483:4;12357:131;:::i;:::-;12349:139;;12076:419;;;:::o;12501:179::-;12641:31;12637:1;12629:6;12625:14;12618:55;12501:179;:::o;12686:366::-;12828:3;12849:67;12913:2;12908:3;12849:67;:::i;:::-;12842:74;;12925:93;13014:3;12925:93;:::i;:::-;13043:2;13038:3;13034:12;13027:19;;12686:366;;;:::o;13058:419::-;13224:4;13262:2;13251:9;13247:18;13239:26;;13311:9;13305:4;13301:20;13297:1;13286:9;13282:17;13275:47;13339:131;13465:4;13339:131;:::i;:::-;13331:139;;13058:419;;;:::o;13483:224::-;13623:34;13619:1;13611:6;13607:14;13600:58;13692:7;13687:2;13679:6;13675:15;13668:32;13483:224;:::o;13713:366::-;13855:3;13876:67;13940:2;13935:3;13876:67;:::i;:::-;13869:74;;13952:93;14041:3;13952:93;:::i;:::-;14070:2;14065:3;14061:12;14054:19;;13713:366;;;:::o;14085:419::-;14251:4;14289:2;14278:9;14274:18;14266:26;;14338:9;14332:4;14328:20;14324:1;14313:9;14309:17;14302:47;14366:131;14492:4;14366:131;:::i;:::-;14358:139;;14085:419;;;:::o;14510:222::-;14650:34;14646:1;14638:6;14634:14;14627:58;14719:5;14714:2;14706:6;14702:15;14695:30;14510:222;:::o;14738:366::-;14880:3;14901:67;14965:2;14960:3;14901:67;:::i;:::-;14894:74;;14977:93;15066:3;14977:93;:::i;:::-;15095:2;15090:3;15086:12;15079:19;;14738:366;;;:::o;15110:419::-;15276:4;15314:2;15303:9;15299:18;15291:26;;15363:9;15357:4;15353:20;15349:1;15338:9;15334:17;15327:47;15391:131;15517:4;15391:131;:::i;:::-;15383:139;;15110:419;;;:::o;15535:225::-;15675:34;15671:1;15663:6;15659:14;15652:58;15744:8;15739:2;15731:6;15727:15;15720:33;15535:225;:::o;15766:366::-;15908:3;15929:67;15993:2;15988:3;15929:67;:::i;:::-;15922:74;;16005:93;16094:3;16005:93;:::i;:::-;16123:2;16118:3;16114:12;16107:19;;15766:366;;;:::o;16138:419::-;16304:4;16342:2;16331:9;16327:18;16319:26;;16391:9;16385:4;16381:20;16377:1;16366:9;16362:17;16355:47;16419:131;16545:4;16419:131;:::i;:::-;16411:139;;16138:419;;;:::o;16563:122::-;16636:24;16654:5;16636:24;:::i;:::-;16629:5;16626:35;16616:63;;16675:1;16672;16665:12;16616:63;16563:122;:::o;16691:143::-;16748:5;16779:6;16773:13;16764:22;;16795:33;16822:5;16795:33;:::i;:::-;16691:143;;;;:::o;16840:351::-;16910:6;16959:2;16947:9;16938:7;16934:23;16930:32;16927:119;;;16965:79;;:::i;:::-;16927:119;17085:1;17110:64;17166:7;17157:6;17146:9;17142:22;17110:64;:::i;:::-;17100:74;;17056:128;16840:351;;;;:::o;17197:164::-;17337:16;17333:1;17325:6;17321:14;17314:40;17197:164;:::o;17367:366::-;17509:3;17530:67;17594:2;17589:3;17530:67;:::i;:::-;17523:74;;17606:93;17695:3;17606:93;:::i;:::-;17724:2;17719:3;17715:12;17708:19;;17367:366;;;:::o;17739:419::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17739:419;;;:::o;18164:181::-;18304:33;18300:1;18292:6;18288:14;18281:57;18164:181;:::o;18351:366::-;18493:3;18514:67;18578:2;18573:3;18514:67;:::i;:::-;18507:74;;18590:93;18679:3;18590:93;:::i;:::-;18708:2;18703:3;18699:12;18692:19;;18351:366;;;:::o;18723:419::-;18889:4;18927:2;18916:9;18912:18;18904:26;;18976:9;18970:4;18966:20;18962:1;18951:9;18947:17;18940:47;19004:131;19130:4;19004:131;:::i;:::-;18996:139;;18723:419;;;:::o
Swarm Source
ipfs://749440250a458860284ae8dea69c8dff3172741ae604cb6baf8dd621fe78cb41
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.