Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 119 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set URI | 19065972 | 279 days ago | IN | 0 ETH | 0.00127108 | ||||
Set URI | 19065945 | 279 days ago | IN | 0 ETH | 0.00122872 | ||||
Mint | 19065791 | 279 days ago | IN | 0 ETH | 0.00056196 | ||||
Mint | 19065781 | 279 days ago | IN | 0 ETH | 0.0005501 | ||||
Set URI | 19061459 | 280 days ago | IN | 0 ETH | 0.00184849 | ||||
Mint | 18937561 | 297 days ago | IN | 0 ETH | 0.00078422 | ||||
Set URI | 18886477 | 304 days ago | IN | 0 ETH | 0.00244112 | ||||
Mint | 18877002 | 306 days ago | IN | 0 ETH | 0.00122509 | ||||
Set URI | 18844745 | 310 days ago | IN | 0 ETH | 0.00278881 | ||||
Set URI | 18844717 | 310 days ago | IN | 0 ETH | 0.00271233 | ||||
Set URI | 18841370 | 311 days ago | IN | 0 ETH | 0.00383325 | ||||
Mint | 18841358 | 311 days ago | IN | 0 ETH | 0.00157996 | ||||
Mint | 18841329 | 311 days ago | IN | 0 ETH | 0.00138378 | ||||
Mint | 18841323 | 311 days ago | IN | 0 ETH | 0.00142663 | ||||
Set URI | 18768103 | 321 days ago | IN | 0 ETH | 0.00280839 | ||||
Mint | 18768099 | 321 days ago | IN | 0 ETH | 0.00113584 | ||||
Set URI | 18740624 | 325 days ago | IN | 0 ETH | 0.00403138 | ||||
Mint | 18740566 | 325 days ago | IN | 0 ETH | 0.00187246 | ||||
Set URI | 18670171 | 335 days ago | IN | 0 ETH | 0.00317923 | ||||
Mint | 18670169 | 335 days ago | IN | 0 ETH | 0.00136753 | ||||
Set URI | 18591485 | 346 days ago | IN | 0 ETH | 0.00311876 | ||||
Mint | 18591482 | 346 days ago | IN | 0 ETH | 0.00116162 | ||||
Set URI | 18576603 | 348 days ago | IN | 0 ETH | 0.00275127 | ||||
Mint | 18576564 | 348 days ago | IN | 0 ETH | 0.0012579 | ||||
Set URI | 18518048 | 356 days ago | IN | 0 ETH | 0.0026092 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Donnut
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-18 */ // SPDX-License-Identifier: MIT /** ,------. ,--. | .-. \ ,---. ,--,--, ,--,--, ,--.,--.,-' '-. | | \ :| .-. || \| \| || |'-. .-' | '--' /' '-' '| || || || |' '' ' | | `-------' `---' `--''--'`--''--' `----' `--' */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn(address from, uint256 id, uint256 amount) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/Donnut.sol /** ,------. ,--. | .-. \ ,---. ,--,--, ,--,--, ,--.,--.,-' '-. | | \ :| .-. || \| \| || |'-. .-' | '--' /' '-' '| || || || |' '' ' | | `-------' `---' `--''--'`--''--' `----' `--' */ pragma solidity ^0.8.0; contract Donnut is ERC1155, Ownable { string public name; string public symbol; mapping(uint => string) public tokenURI; constructor() ERC1155("") { name = "DONNUT"; symbol = "DNNT"; } function mint(address _to, uint _id, uint _amount) external onlyOwner { _mint(_to, _id, _amount, ""); } function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner { _mintBatch(_to, _ids, _amounts, ""); } function burn(uint _id, uint _amount) external { _burn(msg.sender, _id, _amount); } function burnBatch(uint[] memory _ids, uint[] memory _amounts) external { _burnBatch(msg.sender, _ids, _amounts); } function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner { _burnBatch(_from, _burnIds, _burnAmounts); _mintBatch(_from, _mintIds, _mintAmounts, ""); } function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000e860201b60201c565b506200005462000048620000fd60201b60201c565b6200010560201b60201c565b6040518060400160405280600681526020017f444f4e4e55540000000000000000000000000000000000000000000000000000815250600490816200009a919062000445565b506040518060400160405280600481526020017f444e4e540000000000000000000000000000000000000000000000000000000081525060059081620000e1919062000445565b506200052c565b8060029081620000f9919062000445565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200024d57607f821691505b60208210810362000263576200026262000205565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200028e565b620002d986836200028e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000326620003206200031a84620002f1565b620002fb565b620002f1565b9050919050565b6000819050919050565b620003428362000305565b6200035a62000351826200032d565b8484546200029b565b825550505050565b600090565b6200037162000362565b6200037e81848462000337565b505050565b5b81811015620003a6576200039a60008262000367565b60018101905062000384565b5050565b601f821115620003f557620003bf8162000269565b620003ca846200027e565b81016020851015620003da578190505b620003f2620003e9856200027e565b83018262000383565b50505b505050565b600082821c905092915050565b60006200041a60001984600802620003fa565b1980831691505092915050565b600062000435838362000407565b9150826002028217905092915050565b6200045082620001cb565b67ffffffffffffffff8111156200046c576200046b620001d6565b5b62000478825462000234565b62000485828285620003aa565b600060209050601f831160018114620004bd5760008415620004a8578287015190505b620004b4858262000427565b86555062000524565b601f198416620004cd8662000269565b60005b82811015620004f757848901518255600182019150602085019450602081019050620004d0565b8683101562000517578489015162000513601f89168262000407565b8355505b6001600288020188555050505b505050505050565b613db5806200053c6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a60048036038101906101459190612376565b6103cc565b60405161015791906123c5565b60405180910390f35b61017a60048036038101906101759190612438565b610494565b6040516101879190612480565b60405180910390f35b610198610576565b6040516101a5919061252b565b60405180910390f35b6101c860048036038101906101c3919061254d565b610604565b6040516101d5919061252b565b60405180910390f35b6101f860048036038101906101f3919061257a565b6106a9565b005b610214600480360381019061020f91906127ca565b6106d1565b005b610230600480360381019061022b919061295c565b610772565b60405161023d9190612a92565b60405180910390f35b610260600480360381019061025b9190612ab4565b61088b565b005b61026a6108c0565b005b61028660048036038101906102819190612b9f565b6108d4565b005b6102a2600480360381019061029d9190612cb8565b6108e3565b005b6102ac610948565b6040516102b99190612d23565b60405180910390f35b6102ca610972565b6040516102d7919061252b565b60405180910390f35b6102fa60048036038101906102f59190612d6a565b610a00565b005b61031660048036038101906103119190612daa565b610a16565b005b610332600480360381019061032d919061254d565b610a25565b60405161033f919061252b565b60405180910390f35b610362600480360381019061035d9190612dea565b610ac5565b005b61037e60048036038101906103799190612e75565b610aed565b60405161038b9190612480565b60405180910390f35b6103ae60048036038101906103a99190612eb5565b610b81565b005b6103ca60048036038101906103c59190612f4c565b610c22565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043390612feb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056f575061056e82610ca5565b5b9050919050565b600480546105839061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546105af9061303a565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106249061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546106509061303a565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6106b1610d0f565b6106cc83838360405180602001604052806000815250610d8d565b505050565b6106d9610f3d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061071f575061071e85610719610f3d565b610aed565b5b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906130dd565b60405180910390fd5b61076b8585858585610f45565b5050505050565b606081518351146107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af9061316f565b60405180910390fd5b6000835167ffffffffffffffff8111156107d5576107d46125d2565b5b6040519080825280602002602001820160405280156108035781602001602082028036833780820191505090505b50905060005b8451811015610880576108508582815181106108285761082761318f565b5b60200260200101518583815181106108435761084261318f565b5b60200260200101516103cc565b8282815181106108635761086261318f565b5b60200260200101818152505080610879906131ed565b9050610809565b508091505092915050565b610893610d0f565b61089e858585611266565b6108b985838360405180602001604052806000815250611534565b5050505050565b6108c8610d0f565b6108d26000611760565b565b6108df338383611266565b5050565b6108eb610d0f565b8060066000848152602001908152602001600020908161090b91906133e1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161093c919061252b565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005805461097f9061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546109ab9061303a565b80156109f85780601f106109cd576101008083540402835291602001916109f8565b820191906000526020600020905b8154815290600101906020018083116109db57829003601f168201915b505050505081565b610a12610a0b610f3d565b8383611826565b5050565b610a21338383611992565b5050565b60066020528060005260406000206000915090508054610a449061303a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a709061303a565b8015610abd5780601f10610a9257610100808354040283529160200191610abd565b820191906000526020600020905b815481529060010190602001808311610aa057829003601f168201915b505050505081565b610acd610d0f565b610ae883838360405180602001604052806000815250611534565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b89610f3d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bcf5750610bce85610bc9610f3d565b610aed565b5b610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c05906130dd565b60405180910390fd5b610c1b8585858585611bd8565b5050505050565b610c2a610d0f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613525565b60405180910390fd5b610ca281611760565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d17610f3d565b73ffffffffffffffffffffffffffffffffffffffff16610d35610948565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290613591565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613623565b60405180910390fd5b6000610e06610f3d565b90506000610e1385611e73565b90506000610e2085611e73565b9050610e3183600089858589611eed565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e909190613643565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f0e929190613677565b60405180910390a4610f2583600089858589611ef5565b610f3483600089898989611efd565b50505050505050565b600033905090565b8151835114610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613712565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906137a4565b60405180910390fd5b6000611002610f3d565b9050611012818787878787611eed565b60005b84518110156111c35760008582815181106110335761103261318f565b5b6020026020010151905060008583815181106110525761105161318f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613836565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a89190613643565b92505081905550505050806111bc906131ed565b9050611015565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123a929190613856565b60405180910390a4611250818787878787611ef5565b61125e8187878787876120d4565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc906138ff565b60405180910390fd5b8051825114611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613712565b60405180910390fd5b6000611323610f3d565b905061134381856000868660405180602001604052806000815250611eed565b60005b83518110156114905760008482815181106113645761136361318f565b5b6020026020010151905060008483815181106113835761138261318f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613991565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611488906131ed565b915050611346565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611508929190613856565b60405180910390a461152e81856000868660405180602001604052806000815250611ef5565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613623565b60405180910390fd5b81518351146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613712565b60405180910390fd5b60006115f1610f3d565b905061160281600087878787611eed565b60005b84518110156116bb578381815181106116215761162061318f565b5b602002602001015160008087848151811061163f5761163e61318f565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a19190613643565b9250508190555080806116b3906131ed565b915050611605565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611733929190613856565b60405180910390a461174a81600087878787611ef5565b611759816000878787876120d4565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613a23565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119859190612480565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906138ff565b60405180910390fd5b6000611a0b610f3d565b90506000611a1884611e73565b90506000611a2584611e73565b9050611a4583876000858560405180602001604052806000815250611eed565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613991565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ba9929190613677565b60405180910390a4611bcf84886000868660405180602001604052806000815250611ef5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e906137a4565b60405180910390fd5b6000611c51610f3d565b90506000611c5e85611e73565b90506000611c6b85611e73565b9050611c7b838989858589611eed565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613836565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc79190613643565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e44929190613677565b60405180910390a4611e5a848a8a86868a611ef5565b611e68848a8a8a8a8a611efd565b505050505050505050565b60606000600167ffffffffffffffff811115611e9257611e916125d2565b5b604051908082528060200260200182016040528015611ec05781602001602082028036833780820191505090505b5090508281600081518110611ed857611ed761318f565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611f1c8473ffffffffffffffffffffffffffffffffffffffff166122ab565b156120cc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611f62959493929190613a98565b6020604051808303816000875af1925050508015611f9e57506040513d601f19601f82011682018060405250810190611f9b9190613b07565b60015b61204357611faa613b41565b806308c379a0036120065750611fbe613b63565b80611fc95750612008565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd919061252b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613c65565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613cf7565b60405180910390fd5b505b505050505050565b6120f38473ffffffffffffffffffffffffffffffffffffffff166122ab565b156122a3578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612139959493929190613d17565b6020604051808303816000875af192505050801561217557506040513d601f19601f820116820180604052508101906121729190613b07565b60015b61221a57612181613b41565b806308c379a0036121dd5750612195613b63565b806121a057506121df565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d4919061252b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190613c65565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613cf7565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061230d826122e2565b9050919050565b61231d81612302565b811461232857600080fd5b50565b60008135905061233a81612314565b92915050565b6000819050919050565b61235381612340565b811461235e57600080fd5b50565b6000813590506123708161234a565b92915050565b6000806040838503121561238d5761238c6122d8565b5b600061239b8582860161232b565b92505060206123ac85828601612361565b9150509250929050565b6123bf81612340565b82525050565b60006020820190506123da60008301846123b6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612415816123e0565b811461242057600080fd5b50565b6000813590506124328161240c565b92915050565b60006020828403121561244e5761244d6122d8565b5b600061245c84828501612423565b91505092915050565b60008115159050919050565b61247a81612465565b82525050565b60006020820190506124956000830184612471565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124d55780820151818401526020810190506124ba565b60008484015250505050565b6000601f19601f8301169050919050565b60006124fd8261249b565b61250781856124a6565b93506125178185602086016124b7565b612520816124e1565b840191505092915050565b6000602082019050818103600083015261254581846124f2565b905092915050565b600060208284031215612563576125626122d8565b5b600061257184828501612361565b91505092915050565b600080600060608486031215612593576125926122d8565b5b60006125a18682870161232b565b93505060206125b286828701612361565b92505060406125c386828701612361565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61260a826124e1565b810181811067ffffffffffffffff82111715612629576126286125d2565b5b80604052505050565b600061263c6122ce565b90506126488282612601565b919050565b600067ffffffffffffffff821115612668576126676125d2565b5b602082029050602081019050919050565b600080fd5b600061269161268c8461264d565b612632565b905080838252602082019050602084028301858111156126b4576126b3612679565b5b835b818110156126dd57806126c98882612361565b8452602084019350506020810190506126b6565b5050509392505050565b600082601f8301126126fc576126fb6125cd565b5b813561270c84826020860161267e565b91505092915050565b600080fd5b600067ffffffffffffffff821115612735576127346125d2565b5b61273e826124e1565b9050602081019050919050565b82818337600083830152505050565b600061276d6127688461271a565b612632565b90508281526020810184848401111561278957612788612715565b5b61279484828561274b565b509392505050565b600082601f8301126127b1576127b06125cd565b5b81356127c184826020860161275a565b91505092915050565b600080600080600060a086880312156127e6576127e56122d8565b5b60006127f48882890161232b565b95505060206128058882890161232b565b945050604086013567ffffffffffffffff811115612826576128256122dd565b5b612832888289016126e7565b935050606086013567ffffffffffffffff811115612853576128526122dd565b5b61285f888289016126e7565b925050608086013567ffffffffffffffff8111156128805761287f6122dd565b5b61288c8882890161279c565b9150509295509295909350565b600067ffffffffffffffff8211156128b4576128b36125d2565b5b602082029050602081019050919050565b60006128d86128d384612899565b612632565b905080838252602082019050602084028301858111156128fb576128fa612679565b5b835b818110156129245780612910888261232b565b8452602084019350506020810190506128fd565b5050509392505050565b600082601f830112612943576129426125cd565b5b81356129538482602086016128c5565b91505092915050565b60008060408385031215612973576129726122d8565b5b600083013567ffffffffffffffff811115612991576129906122dd565b5b61299d8582860161292e565b925050602083013567ffffffffffffffff8111156129be576129bd6122dd565b5b6129ca858286016126e7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a0981612340565b82525050565b6000612a1b8383612a00565b60208301905092915050565b6000602082019050919050565b6000612a3f826129d4565b612a4981856129df565b9350612a54836129f0565b8060005b83811015612a85578151612a6c8882612a0f565b9750612a7783612a27565b925050600181019050612a58565b5085935050505092915050565b60006020820190508181036000830152612aac8184612a34565b905092915050565b600080600080600060a08688031215612ad057612acf6122d8565b5b6000612ade8882890161232b565b955050602086013567ffffffffffffffff811115612aff57612afe6122dd565b5b612b0b888289016126e7565b945050604086013567ffffffffffffffff811115612b2c57612b2b6122dd565b5b612b38888289016126e7565b935050606086013567ffffffffffffffff811115612b5957612b586122dd565b5b612b65888289016126e7565b925050608086013567ffffffffffffffff811115612b8657612b856122dd565b5b612b92888289016126e7565b9150509295509295909350565b60008060408385031215612bb657612bb56122d8565b5b600083013567ffffffffffffffff811115612bd457612bd36122dd565b5b612be0858286016126e7565b925050602083013567ffffffffffffffff811115612c0157612c006122dd565b5b612c0d858286016126e7565b9150509250929050565b600067ffffffffffffffff821115612c3257612c316125d2565b5b612c3b826124e1565b9050602081019050919050565b6000612c5b612c5684612c17565b612632565b905082815260208101848484011115612c7757612c76612715565b5b612c8284828561274b565b509392505050565b600082601f830112612c9f57612c9e6125cd565b5b8135612caf848260208601612c48565b91505092915050565b60008060408385031215612ccf57612cce6122d8565b5b6000612cdd85828601612361565b925050602083013567ffffffffffffffff811115612cfe57612cfd6122dd565b5b612d0a85828601612c8a565b9150509250929050565b612d1d81612302565b82525050565b6000602082019050612d386000830184612d14565b92915050565b612d4781612465565b8114612d5257600080fd5b50565b600081359050612d6481612d3e565b92915050565b60008060408385031215612d8157612d806122d8565b5b6000612d8f8582860161232b565b9250506020612da085828601612d55565b9150509250929050565b60008060408385031215612dc157612dc06122d8565b5b6000612dcf85828601612361565b9250506020612de085828601612361565b9150509250929050565b600080600060608486031215612e0357612e026122d8565b5b6000612e118682870161232b565b935050602084013567ffffffffffffffff811115612e3257612e316122dd565b5b612e3e868287016126e7565b925050604084013567ffffffffffffffff811115612e5f57612e5e6122dd565b5b612e6b868287016126e7565b9150509250925092565b60008060408385031215612e8c57612e8b6122d8565b5b6000612e9a8582860161232b565b9250506020612eab8582860161232b565b9150509250929050565b600080600080600060a08688031215612ed157612ed06122d8565b5b6000612edf8882890161232b565b9550506020612ef08882890161232b565b9450506040612f0188828901612361565b9350506060612f1288828901612361565b925050608086013567ffffffffffffffff811115612f3357612f326122dd565b5b612f3f8882890161279c565b9150509295509295909350565b600060208284031215612f6257612f616122d8565b5b6000612f708482850161232b565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612fd5602a836124a6565b9150612fe082612f79565b604082019050919050565b6000602082019050818103600083015261300481612fc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061305257607f821691505b6020821081036130655761306461300b565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b60006130c7602e836124a6565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006131596029836124a6565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131f882612340565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361322a576132296131be565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261325a565b6132a1868361325a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006132de6132d96132d484612340565b6132b9565b612340565b9050919050565b6000819050919050565b6132f8836132c3565b61330c613304826132e5565b848454613267565b825550505050565b600090565b613321613314565b61332c8184846132ef565b505050565b5b8181101561335057613345600082613319565b600181019050613332565b5050565b601f8211156133955761336681613235565b61336f8461324a565b8101602085101561337e578190505b61339261338a8561324a565b830182613331565b50505b505050565b600082821c905092915050565b60006133b86000198460080261339a565b1980831691505092915050565b60006133d183836133a7565b9150826002028217905092915050565b6133ea8261249b565b67ffffffffffffffff811115613403576134026125d2565b5b61340d825461303a565b613418828285613354565b600060209050601f83116001811461344b5760008415613439578287015190505b61344385826133c5565b8655506134ab565b601f19841661345986613235565b60005b828110156134815784890151825560018201915060208501945060208101905061345c565b8683101561349e578489015161349a601f8916826133a7565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061350f6026836124a6565b915061351a826134b3565b604082019050919050565b6000602082019050818103600083015261353e81613502565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061357b6020836124a6565b915061358682613545565b602082019050919050565b600060208201905081810360008301526135aa8161356e565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061360d6021836124a6565b9150613618826135b1565b604082019050919050565b6000602082019050818103600083015261363c81613600565b9050919050565b600061364e82612340565b915061365983612340565b9250828201905080821115613671576136706131be565b5b92915050565b600060408201905061368c60008301856123b6565b61369960208301846123b6565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006136fc6028836124a6565b9150613707826136a0565b604082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061378e6025836124a6565b915061379982613732565b604082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613820602a836124a6565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b600060408201905081810360008301526138708185612a34565b905081810360208301526138848184612a34565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138e96023836124a6565b91506138f48261388d565b604082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061397b6024836124a6565b91506139868261391f565b604082019050919050565b600060208201905081810360008301526139aa8161396e565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613a0d6029836124a6565b9150613a18826139b1565b604082019050919050565b60006020820190508181036000830152613a3c81613a00565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613a6a82613a43565b613a748185613a4e565b9350613a848185602086016124b7565b613a8d816124e1565b840191505092915050565b600060a082019050613aad6000830188612d14565b613aba6020830187612d14565b613ac760408301866123b6565b613ad460608301856123b6565b8181036080830152613ae68184613a5f565b90509695505050505050565b600081519050613b018161240c565b92915050565b600060208284031215613b1d57613b1c6122d8565b5b6000613b2b84828501613af2565b91505092915050565b60008160e01c9050919050565b600060033d1115613b605760046000803e613b5d600051613b34565b90505b90565b600060443d10613bf057613b756122ce565b60043d036004823e80513d602482011167ffffffffffffffff82111715613b9d575050613bf0565b808201805167ffffffffffffffff811115613bbb5750505050613bf0565b80602083010160043d038501811115613bd8575050505050613bf0565b613be782602001850186612601565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613c4f6034836124a6565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613ce16028836124a6565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b600060a082019050613d2c6000830188612d14565b613d396020830187612d14565b8181036040830152613d4b8186612a34565b90508181036060830152613d5f8185612a34565b90508181036080830152613d738184613a5f565b9050969550505050505056fea264697066735822122000ffb53fc12b65750a174db1018f08cd2f3bcee6110a6622cc0f540a63e0a26764736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a60048036038101906101459190612376565b6103cc565b60405161015791906123c5565b60405180910390f35b61017a60048036038101906101759190612438565b610494565b6040516101879190612480565b60405180910390f35b610198610576565b6040516101a5919061252b565b60405180910390f35b6101c860048036038101906101c3919061254d565b610604565b6040516101d5919061252b565b60405180910390f35b6101f860048036038101906101f3919061257a565b6106a9565b005b610214600480360381019061020f91906127ca565b6106d1565b005b610230600480360381019061022b919061295c565b610772565b60405161023d9190612a92565b60405180910390f35b610260600480360381019061025b9190612ab4565b61088b565b005b61026a6108c0565b005b61028660048036038101906102819190612b9f565b6108d4565b005b6102a2600480360381019061029d9190612cb8565b6108e3565b005b6102ac610948565b6040516102b99190612d23565b60405180910390f35b6102ca610972565b6040516102d7919061252b565b60405180910390f35b6102fa60048036038101906102f59190612d6a565b610a00565b005b61031660048036038101906103119190612daa565b610a16565b005b610332600480360381019061032d919061254d565b610a25565b60405161033f919061252b565b60405180910390f35b610362600480360381019061035d9190612dea565b610ac5565b005b61037e60048036038101906103799190612e75565b610aed565b60405161038b9190612480565b60405180910390f35b6103ae60048036038101906103a99190612eb5565b610b81565b005b6103ca60048036038101906103c59190612f4c565b610c22565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043390612feb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061056f575061056e82610ca5565b5b9050919050565b600480546105839061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546105af9061303a565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106249061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546106509061303a565b801561069d5780601f106106725761010080835404028352916020019161069d565b820191906000526020600020905b81548152906001019060200180831161068057829003601f168201915b50505050509050919050565b6106b1610d0f565b6106cc83838360405180602001604052806000815250610d8d565b505050565b6106d9610f3d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061071f575061071e85610719610f3d565b610aed565b5b61075e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610755906130dd565b60405180910390fd5b61076b8585858585610f45565b5050505050565b606081518351146107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af9061316f565b60405180910390fd5b6000835167ffffffffffffffff8111156107d5576107d46125d2565b5b6040519080825280602002602001820160405280156108035781602001602082028036833780820191505090505b50905060005b8451811015610880576108508582815181106108285761082761318f565b5b60200260200101518583815181106108435761084261318f565b5b60200260200101516103cc565b8282815181106108635761086261318f565b5b60200260200101818152505080610879906131ed565b9050610809565b508091505092915050565b610893610d0f565b61089e858585611266565b6108b985838360405180602001604052806000815250611534565b5050505050565b6108c8610d0f565b6108d26000611760565b565b6108df338383611266565b5050565b6108eb610d0f565b8060066000848152602001908152602001600020908161090b91906133e1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161093c919061252b565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005805461097f9061303a565b80601f01602080910402602001604051908101604052809291908181526020018280546109ab9061303a565b80156109f85780601f106109cd576101008083540402835291602001916109f8565b820191906000526020600020905b8154815290600101906020018083116109db57829003601f168201915b505050505081565b610a12610a0b610f3d565b8383611826565b5050565b610a21338383611992565b5050565b60066020528060005260406000206000915090508054610a449061303a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a709061303a565b8015610abd5780601f10610a9257610100808354040283529160200191610abd565b820191906000526020600020905b815481529060010190602001808311610aa057829003601f168201915b505050505081565b610acd610d0f565b610ae883838360405180602001604052806000815250611534565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b89610f3d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bcf5750610bce85610bc9610f3d565b610aed565b5b610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c05906130dd565b60405180910390fd5b610c1b8585858585611bd8565b5050505050565b610c2a610d0f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613525565b60405180910390fd5b610ca281611760565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d17610f3d565b73ffffffffffffffffffffffffffffffffffffffff16610d35610948565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290613591565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613623565b60405180910390fd5b6000610e06610f3d565b90506000610e1385611e73565b90506000610e2085611e73565b9050610e3183600089858589611eed565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e909190613643565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f0e929190613677565b60405180910390a4610f2583600089858589611ef5565b610f3483600089898989611efd565b50505050505050565b600033905090565b8151835114610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613712565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906137a4565b60405180910390fd5b6000611002610f3d565b9050611012818787878787611eed565b60005b84518110156111c35760008582815181106110335761103261318f565b5b6020026020010151905060008583815181106110525761105161318f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613836565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a89190613643565b92505081905550505050806111bc906131ed565b9050611015565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123a929190613856565b60405180910390a4611250818787878787611ef5565b61125e8187878787876120d4565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc906138ff565b60405180910390fd5b8051825114611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613712565b60405180910390fd5b6000611323610f3d565b905061134381856000868660405180602001604052806000815250611eed565b60005b83518110156114905760008482815181106113645761136361318f565b5b6020026020010151905060008483815181106113835761138261318f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613991565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611488906131ed565b915050611346565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611508929190613856565b60405180910390a461152e81856000868660405180602001604052806000815250611ef5565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613623565b60405180910390fd5b81518351146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613712565b60405180910390fd5b60006115f1610f3d565b905061160281600087878787611eed565b60005b84518110156116bb578381815181106116215761162061318f565b5b602002602001015160008087848151811061163f5761163e61318f565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a19190613643565b9250508190555080806116b3906131ed565b915050611605565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611733929190613856565b60405180910390a461174a81600087878787611ef5565b611759816000878787876120d4565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613a23565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119859190612480565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906138ff565b60405180910390fd5b6000611a0b610f3d565b90506000611a1884611e73565b90506000611a2584611e73565b9050611a4583876000858560405180602001604052806000815250611eed565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613991565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ba9929190613677565b60405180910390a4611bcf84886000868660405180602001604052806000815250611ef5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e906137a4565b60405180910390fd5b6000611c51610f3d565b90506000611c5e85611e73565b90506000611c6b85611e73565b9050611c7b838989858589611eed565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613836565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dc79190613643565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e44929190613677565b60405180910390a4611e5a848a8a86868a611ef5565b611e68848a8a8a8a8a611efd565b505050505050505050565b60606000600167ffffffffffffffff811115611e9257611e916125d2565b5b604051908082528060200260200182016040528015611ec05781602001602082028036833780820191505090505b5090508281600081518110611ed857611ed761318f565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611f1c8473ffffffffffffffffffffffffffffffffffffffff166122ab565b156120cc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611f62959493929190613a98565b6020604051808303816000875af1925050508015611f9e57506040513d601f19601f82011682018060405250810190611f9b9190613b07565b60015b61204357611faa613b41565b806308c379a0036120065750611fbe613b63565b80611fc95750612008565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd919061252b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613c65565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190613cf7565b60405180910390fd5b505b505050505050565b6120f38473ffffffffffffffffffffffffffffffffffffffff166122ab565b156122a3578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612139959493929190613d17565b6020604051808303816000875af192505050801561217557506040513d601f19601f820116820180604052508101906121729190613b07565b60015b61221a57612181613b41565b806308c379a0036121dd5750612195613b63565b806121a057506121df565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d4919061252b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190613c65565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613cf7565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061230d826122e2565b9050919050565b61231d81612302565b811461232857600080fd5b50565b60008135905061233a81612314565b92915050565b6000819050919050565b61235381612340565b811461235e57600080fd5b50565b6000813590506123708161234a565b92915050565b6000806040838503121561238d5761238c6122d8565b5b600061239b8582860161232b565b92505060206123ac85828601612361565b9150509250929050565b6123bf81612340565b82525050565b60006020820190506123da60008301846123b6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612415816123e0565b811461242057600080fd5b50565b6000813590506124328161240c565b92915050565b60006020828403121561244e5761244d6122d8565b5b600061245c84828501612423565b91505092915050565b60008115159050919050565b61247a81612465565b82525050565b60006020820190506124956000830184612471565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124d55780820151818401526020810190506124ba565b60008484015250505050565b6000601f19601f8301169050919050565b60006124fd8261249b565b61250781856124a6565b93506125178185602086016124b7565b612520816124e1565b840191505092915050565b6000602082019050818103600083015261254581846124f2565b905092915050565b600060208284031215612563576125626122d8565b5b600061257184828501612361565b91505092915050565b600080600060608486031215612593576125926122d8565b5b60006125a18682870161232b565b93505060206125b286828701612361565b92505060406125c386828701612361565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61260a826124e1565b810181811067ffffffffffffffff82111715612629576126286125d2565b5b80604052505050565b600061263c6122ce565b90506126488282612601565b919050565b600067ffffffffffffffff821115612668576126676125d2565b5b602082029050602081019050919050565b600080fd5b600061269161268c8461264d565b612632565b905080838252602082019050602084028301858111156126b4576126b3612679565b5b835b818110156126dd57806126c98882612361565b8452602084019350506020810190506126b6565b5050509392505050565b600082601f8301126126fc576126fb6125cd565b5b813561270c84826020860161267e565b91505092915050565b600080fd5b600067ffffffffffffffff821115612735576127346125d2565b5b61273e826124e1565b9050602081019050919050565b82818337600083830152505050565b600061276d6127688461271a565b612632565b90508281526020810184848401111561278957612788612715565b5b61279484828561274b565b509392505050565b600082601f8301126127b1576127b06125cd565b5b81356127c184826020860161275a565b91505092915050565b600080600080600060a086880312156127e6576127e56122d8565b5b60006127f48882890161232b565b95505060206128058882890161232b565b945050604086013567ffffffffffffffff811115612826576128256122dd565b5b612832888289016126e7565b935050606086013567ffffffffffffffff811115612853576128526122dd565b5b61285f888289016126e7565b925050608086013567ffffffffffffffff8111156128805761287f6122dd565b5b61288c8882890161279c565b9150509295509295909350565b600067ffffffffffffffff8211156128b4576128b36125d2565b5b602082029050602081019050919050565b60006128d86128d384612899565b612632565b905080838252602082019050602084028301858111156128fb576128fa612679565b5b835b818110156129245780612910888261232b565b8452602084019350506020810190506128fd565b5050509392505050565b600082601f830112612943576129426125cd565b5b81356129538482602086016128c5565b91505092915050565b60008060408385031215612973576129726122d8565b5b600083013567ffffffffffffffff811115612991576129906122dd565b5b61299d8582860161292e565b925050602083013567ffffffffffffffff8111156129be576129bd6122dd565b5b6129ca858286016126e7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a0981612340565b82525050565b6000612a1b8383612a00565b60208301905092915050565b6000602082019050919050565b6000612a3f826129d4565b612a4981856129df565b9350612a54836129f0565b8060005b83811015612a85578151612a6c8882612a0f565b9750612a7783612a27565b925050600181019050612a58565b5085935050505092915050565b60006020820190508181036000830152612aac8184612a34565b905092915050565b600080600080600060a08688031215612ad057612acf6122d8565b5b6000612ade8882890161232b565b955050602086013567ffffffffffffffff811115612aff57612afe6122dd565b5b612b0b888289016126e7565b945050604086013567ffffffffffffffff811115612b2c57612b2b6122dd565b5b612b38888289016126e7565b935050606086013567ffffffffffffffff811115612b5957612b586122dd565b5b612b65888289016126e7565b925050608086013567ffffffffffffffff811115612b8657612b856122dd565b5b612b92888289016126e7565b9150509295509295909350565b60008060408385031215612bb657612bb56122d8565b5b600083013567ffffffffffffffff811115612bd457612bd36122dd565b5b612be0858286016126e7565b925050602083013567ffffffffffffffff811115612c0157612c006122dd565b5b612c0d858286016126e7565b9150509250929050565b600067ffffffffffffffff821115612c3257612c316125d2565b5b612c3b826124e1565b9050602081019050919050565b6000612c5b612c5684612c17565b612632565b905082815260208101848484011115612c7757612c76612715565b5b612c8284828561274b565b509392505050565b600082601f830112612c9f57612c9e6125cd565b5b8135612caf848260208601612c48565b91505092915050565b60008060408385031215612ccf57612cce6122d8565b5b6000612cdd85828601612361565b925050602083013567ffffffffffffffff811115612cfe57612cfd6122dd565b5b612d0a85828601612c8a565b9150509250929050565b612d1d81612302565b82525050565b6000602082019050612d386000830184612d14565b92915050565b612d4781612465565b8114612d5257600080fd5b50565b600081359050612d6481612d3e565b92915050565b60008060408385031215612d8157612d806122d8565b5b6000612d8f8582860161232b565b9250506020612da085828601612d55565b9150509250929050565b60008060408385031215612dc157612dc06122d8565b5b6000612dcf85828601612361565b9250506020612de085828601612361565b9150509250929050565b600080600060608486031215612e0357612e026122d8565b5b6000612e118682870161232b565b935050602084013567ffffffffffffffff811115612e3257612e316122dd565b5b612e3e868287016126e7565b925050604084013567ffffffffffffffff811115612e5f57612e5e6122dd565b5b612e6b868287016126e7565b9150509250925092565b60008060408385031215612e8c57612e8b6122d8565b5b6000612e9a8582860161232b565b9250506020612eab8582860161232b565b9150509250929050565b600080600080600060a08688031215612ed157612ed06122d8565b5b6000612edf8882890161232b565b9550506020612ef08882890161232b565b9450506040612f0188828901612361565b9350506060612f1288828901612361565b925050608086013567ffffffffffffffff811115612f3357612f326122dd565b5b612f3f8882890161279c565b9150509295509295909350565b600060208284031215612f6257612f616122d8565b5b6000612f708482850161232b565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612fd5602a836124a6565b9150612fe082612f79565b604082019050919050565b6000602082019050818103600083015261300481612fc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061305257607f821691505b6020821081036130655761306461300b565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b60006130c7602e836124a6565b91506130d28261306b565b604082019050919050565b600060208201905081810360008301526130f6816130ba565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006131596029836124a6565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131f882612340565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361322a576132296131be565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261325a565b6132a1868361325a565b95508019841693508086168417925050509392505050565b6000819050919050565b60006132de6132d96132d484612340565b6132b9565b612340565b9050919050565b6000819050919050565b6132f8836132c3565b61330c613304826132e5565b848454613267565b825550505050565b600090565b613321613314565b61332c8184846132ef565b505050565b5b8181101561335057613345600082613319565b600181019050613332565b5050565b601f8211156133955761336681613235565b61336f8461324a565b8101602085101561337e578190505b61339261338a8561324a565b830182613331565b50505b505050565b600082821c905092915050565b60006133b86000198460080261339a565b1980831691505092915050565b60006133d183836133a7565b9150826002028217905092915050565b6133ea8261249b565b67ffffffffffffffff811115613403576134026125d2565b5b61340d825461303a565b613418828285613354565b600060209050601f83116001811461344b5760008415613439578287015190505b61344385826133c5565b8655506134ab565b601f19841661345986613235565b60005b828110156134815784890151825560018201915060208501945060208101905061345c565b8683101561349e578489015161349a601f8916826133a7565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061350f6026836124a6565b915061351a826134b3565b604082019050919050565b6000602082019050818103600083015261353e81613502565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061357b6020836124a6565b915061358682613545565b602082019050919050565b600060208201905081810360008301526135aa8161356e565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061360d6021836124a6565b9150613618826135b1565b604082019050919050565b6000602082019050818103600083015261363c81613600565b9050919050565b600061364e82612340565b915061365983612340565b9250828201905080821115613671576136706131be565b5b92915050565b600060408201905061368c60008301856123b6565b61369960208301846123b6565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006136fc6028836124a6565b9150613707826136a0565b604082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061378e6025836124a6565b915061379982613732565b604082019050919050565b600060208201905081810360008301526137bd81613781565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613820602a836124a6565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b600060408201905081810360008301526138708185612a34565b905081810360208301526138848184612a34565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138e96023836124a6565b91506138f48261388d565b604082019050919050565b60006020820190508181036000830152613918816138dc565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061397b6024836124a6565b91506139868261391f565b604082019050919050565b600060208201905081810360008301526139aa8161396e565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613a0d6029836124a6565b9150613a18826139b1565b604082019050919050565b60006020820190508181036000830152613a3c81613a00565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613a6a82613a43565b613a748185613a4e565b9350613a848185602086016124b7565b613a8d816124e1565b840191505092915050565b600060a082019050613aad6000830188612d14565b613aba6020830187612d14565b613ac760408301866123b6565b613ad460608301856123b6565b8181036080830152613ae68184613a5f565b90509695505050505050565b600081519050613b018161240c565b92915050565b600060208284031215613b1d57613b1c6122d8565b5b6000613b2b84828501613af2565b91505092915050565b60008160e01c9050919050565b600060033d1115613b605760046000803e613b5d600051613b34565b90505b90565b600060443d10613bf057613b756122ce565b60043d036004823e80513d602482011167ffffffffffffffff82111715613b9d575050613bf0565b808201805167ffffffffffffffff811115613bbb5750505050613bf0565b80602083010160043d038501811115613bd8575050505050613bf0565b613be782602001850186612601565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613c4f6034836124a6565b9150613c5a82613bf3565b604082019050919050565b60006020820190508181036000830152613c7e81613c42565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613ce16028836124a6565b9150613cec82613c85565b604082019050919050565b60006020820190508181036000830152613d1081613cd4565b9050919050565b600060a082019050613d2c6000830188612d14565b613d396020830187612d14565b8181036040830152613d4b8186612a34565b90508181036060830152613d5f8185612a34565b90508181036080830152613d738184613a5f565b9050969550505050505056fea264697066735822122000ffb53fc12b65750a174db1018f08cd2f3bcee6110a6622cc0f540a63e0a26764736f6c63430008120033
Deployed Bytecode Sourcemap
38324:1224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24915:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23938:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38371:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39442:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38549:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26833:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25311:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39041:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2669:103;;;:::i;:::-;;38912:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39312:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2028:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38394:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25883:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38815:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38421:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38666:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26110:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26350:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2927:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24915:230;25001:7;25048:1;25029:21;;:7;:21;;;25021:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25115:9;:13;25125:2;25115:13;;;;;;;;;;;:22;25129:7;25115:22;;;;;;;;;;;;;;;;25108:29;;24915:230;;;;:::o;23938:310::-;24040:4;24092:26;24077:41;;;:11;:41;;;;:110;;;;24150:37;24135:52;;;:11;:52;;;;24077:110;:163;;;;24204:36;24228:11;24204:23;:36::i;:::-;24077:163;24057:183;;23938:310;;;:::o;38371:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39442:101::-;39495:13;39524:8;:13;39533:3;39524:13;;;;;;;;;;;39517:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39442:101;;;:::o;38549:111::-;1914:13;:11;:13::i;:::-;38626:28:::1;38632:3;38637;38642:7;38626:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;38549:111:::0;;;:::o;26833:438::-;27074:12;:10;:12::i;:::-;27066:20;;:4;:20;;;:60;;;;27090:36;27107:4;27113:12;:10;:12::i;:::-;27090:16;:36::i;:::-;27066:60;27044:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27211:52;27234:4;27240:2;27244:3;27249:7;27258:4;27211:22;:52::i;:::-;26833:438;;;;;:::o;25311:499::-;25447:16;25503:3;:10;25484:8;:15;:29;25476:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25572:30;25619:8;:15;25605:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25572:63;;25653:9;25648:122;25672:8;:15;25668:1;:19;25648:122;;;25728:30;25738:8;25747:1;25738:11;;;;;;;;:::i;:::-;;;;;;;;25751:3;25755:1;25751:6;;;;;;;;:::i;:::-;;;;;;;;25728:9;:30::i;:::-;25709:13;25723:1;25709:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25689:3;;;;:::i;:::-;;;25648:122;;;;25789:13;25782:20;;;25311:499;;;;:::o;39041:265::-;1914:13;:11;:13::i;:::-;39207:41:::1;39218:5;39225:8;39235:12;39207:10;:41::i;:::-;39255:45;39266:5;39273:8;39283:12;39255:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;39041:265:::0;;;;;:::o;2669:103::-;1914:13;:11;:13::i;:::-;2734:30:::1;2761:1;2734:18;:30::i;:::-;2669:103::o:0;38912:123::-;38991:38;39002:10;39014:4;39020:8;38991:10;:38::i;:::-;38912:123;;:::o;39312:124::-;1914:13;:11;:13::i;:::-;39400:4:::1;39384:8;:13;39393:3;39384:13;;;;;;;;;;;:20;;;;;;:::i;:::-;;39426:3;39416:14;39420:4;39416:14;;;;;;:::i;:::-;;;;;;;;39312:124:::0;;:::o;2028:87::-;2074:7;2101:6;;;;;;;;;;;2094:13;;2028:87;:::o;38394:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25883:155::-;25978:52;25997:12;:10;:12::i;:::-;26011:8;26021;25978:18;:52::i;:::-;25883:155;;:::o;38815:91::-;38869:31;38875:10;38887:3;38892:7;38869:5;:31::i;:::-;38815:91;;:::o;38421:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38666:143::-;1914:13;:11;:13::i;:::-;38768:35:::1;38779:3;38784:4;38790:8;38768:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;38666:143:::0;;;:::o;26110:168::-;26209:4;26233:18;:27;26252:7;26233:27;;;;;;;;;;;;;;;:37;26261:8;26233:37;;;;;;;;;;;;;;;;;;;;;;;;;26226:44;;26110:168;;;;:::o;26350:406::-;26566:12;:10;:12::i;:::-;26558:20;;:4;:20;;;:60;;;;26582:36;26599:4;26605:12;:10;:12::i;:::-;26582:16;:36::i;:::-;26558:60;26536:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26703:45;26721:4;26727:2;26731;26735:6;26743:4;26703:17;:45::i;:::-;26350:406;;;;;:::o;2927:201::-;1914:13;:11;:13::i;:::-;3036:1:::1;3016:22;;:8;:22;;::::0;3008:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3092:28;3111:8;3092:18;:28::i;:::-;2927:201:::0;:::o;15061:157::-;15146:4;15185:25;15170:40;;;:11;:40;;;;15163:47;;15061:157;;;:::o;2193:132::-;2268:12;:10;:12::i;:::-;2257:23;;:7;:5;:7::i;:::-;:23;;;2249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2193:132::o;31531:686::-;31655:1;31641:16;;:2;:16;;;31633:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31708:16;31727:12;:10;:12::i;:::-;31708:31;;31750:20;31773:21;31791:2;31773:17;:21::i;:::-;31750:44;;31805:24;31832:25;31850:6;31832:17;:25::i;:::-;31805:52;;31870:66;31891:8;31909:1;31913:2;31917:3;31922:7;31931:4;31870:20;:66::i;:::-;31970:6;31949:9;:13;31959:2;31949:13;;;;;;;;;;;:17;31963:2;31949:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32029:2;31992:52;;32025:1;31992:52;;32007:8;31992:52;;;32033:2;32037:6;31992:52;;;;;;;:::i;:::-;;;;;;;;32057:65;32077:8;32095:1;32099:2;32103:3;32108:7;32117:4;32057:19;:65::i;:::-;32135:74;32166:8;32184:1;32188:2;32192;32196:6;32204:4;32135:30;:74::i;:::-;31622:595;;;31531:686;;;;:::o;526:98::-;579:7;606:10;599:17;;526:98;:::o;29067:1146::-;29294:7;:14;29280:3;:10;:28;29272:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29386:1;29372:16;;:2;:16;;;29364:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29443:16;29462:12;:10;:12::i;:::-;29443:31;;29487:60;29508:8;29518:4;29524:2;29528:3;29533:7;29542:4;29487:20;:60::i;:::-;29565:9;29560:421;29584:3;:10;29580:1;:14;29560:421;;;29616:10;29629:3;29633:1;29629:6;;;;;;;;:::i;:::-;;;;;;;;29616:19;;29650:14;29667:7;29675:1;29667:10;;;;;;;;:::i;:::-;;;;;;;;29650:27;;29694:19;29716:9;:13;29726:2;29716:13;;;;;;;;;;;:19;29730:4;29716:19;;;;;;;;;;;;;;;;29694:41;;29773:6;29758:11;:21;;29750:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29906:6;29892:11;:20;29870:9;:13;29880:2;29870:13;;;;;;;;;;;:19;29884:4;29870:19;;;;;;;;;;;;;;;:42;;;;29963:6;29942:9;:13;29952:2;29942:13;;;;;;;;;;;:17;29956:2;29942:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29601:380;;;29596:3;;;;:::i;:::-;;;29560:421;;;;30028:2;29998:47;;30022:4;29998:47;;30012:8;29998:47;;;30032:3;30037:7;29998:47;;;;;;;:::i;:::-;;;;;;;;30058:59;30078:8;30088:4;30094:2;30098:3;30103:7;30112:4;30058:19;:59::i;:::-;30130:75;30166:8;30176:4;30182:2;30186:3;30191:7;30200:4;30130:35;:75::i;:::-;29261:952;29067:1146;;;;;:::o;34513:935::-;34647:1;34631:18;;:4;:18;;;34623:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34722:7;:14;34708:3;:10;:28;34700:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34794:16;34813:12;:10;:12::i;:::-;34794:31;;34838:66;34859:8;34869:4;34883:1;34887:3;34892:7;34838:66;;;;;;;;;;;;:20;:66::i;:::-;34922:9;34917:373;34941:3;:10;34937:1;:14;34917:373;;;34973:10;34986:3;34990:1;34986:6;;;;;;;;:::i;:::-;;;;;;;;34973:19;;35007:14;35024:7;35032:1;35024:10;;;;;;;;:::i;:::-;;;;;;;;35007:27;;35051:19;35073:9;:13;35083:2;35073:13;;;;;;;;;;;:19;35087:4;35073:19;;;;;;;;;;;;;;;;35051:41;;35130:6;35115:11;:21;;35107:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:6;35243:11;:20;35221:9;:13;35231:2;35221:13;;;;;;;;;;;:19;35235:4;35221:19;;;;;;;;;;;;;;;:42;;;;34958:332;;;34953:3;;;;;:::i;:::-;;;;34917:373;;;;35345:1;35307:55;;35331:4;35307:55;;35321:8;35307:55;;;35349:3;35354:7;35307:55;;;;;;;:::i;:::-;;;;;;;;35375:65;35395:8;35405:4;35419:1;35423:3;35428:7;35375:65;;;;;;;;;;;;:19;:65::i;:::-;34612:836;34513:935;;;:::o;32620:813::-;32812:1;32798:16;;:2;:16;;;32790:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32885:7;:14;32871:3;:10;:28;32863:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32957:16;32976:12;:10;:12::i;:::-;32957:31;;33001:66;33022:8;33040:1;33044:2;33048:3;33053:7;33062:4;33001:20;:66::i;:::-;33085:9;33080:103;33104:3;:10;33100:1;:14;33080:103;;;33161:7;33169:1;33161:10;;;;;;;;:::i;:::-;;;;;;;;33136:9;:17;33146:3;33150:1;33146:6;;;;;;;;:::i;:::-;;;;;;;;33136:17;;;;;;;;;;;:21;33154:2;33136:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33116:3;;;;;:::i;:::-;;;;33080:103;;;;33236:2;33200:53;;33232:1;33200:53;;33214:8;33200:53;;;33240:3;33245:7;33200:53;;;;;;;:::i;:::-;;;;;;;;33266:65;33286:8;33304:1;33308:2;33312:3;33317:7;33326:4;33266:19;:65::i;:::-;33344:81;33380:8;33398:1;33402:2;33406:3;33411:7;33420:4;33344:35;:81::i;:::-;32779:654;32620:813;;;;:::o;3288:191::-;3362:16;3381:6;;;;;;;;;;;3362:25;;3407:8;3398:6;;:17;;;;;;;;;;;;;;;;;;3462:8;3431:40;;3452:8;3431:40;;;;;;;;;;;;3351:128;3288:191;:::o;35456:297::-;35577:8;35568:17;;:5;:17;;;35560:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35680:8;35642:18;:25;35661:5;35642:25;;;;;;;;;;;;;;;:35;35668:8;35642:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35726:8;35704:41;;35719:5;35704:41;;;35736:8;35704:41;;;;;;:::i;:::-;;;;;;;;35456:297;;;:::o;33731:774::-;33840:1;33824:18;;:4;:18;;;33816:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33895:16;33914:12;:10;:12::i;:::-;33895:31;;33937:20;33960:21;33978:2;33960:17;:21::i;:::-;33937:44;;33992:24;34019:25;34037:6;34019:17;:25::i;:::-;33992:52;;34057:66;34078:8;34088:4;34102:1;34106:3;34111:7;34057:66;;;;;;;;;;;;:20;:66::i;:::-;34136:19;34158:9;:13;34168:2;34158:13;;;;;;;;;;;:19;34172:4;34158:19;;;;;;;;;;;;;;;;34136:41;;34211:6;34196:11;:21;;34188:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34330:6;34316:11;:20;34294:9;:13;34304:2;34294:13;;;;;;;;;;;:19;34308:4;34294:19;;;;;;;;;;;;;;;:42;;;;34404:1;34365:54;;34390:4;34365:54;;34380:8;34365:54;;;34408:2;34412:6;34365:54;;;;;;;:::i;:::-;;;;;;;;34432:65;34452:8;34462:4;34476:1;34480:3;34485:7;34432:65;;;;;;;;;;;;:19;:65::i;:::-;33805:700;;;;33731:774;;;:::o;27735:974::-;27937:1;27923:16;;:2;:16;;;27915:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27994:16;28013:12;:10;:12::i;:::-;27994:31;;28036:20;28059:21;28077:2;28059:17;:21::i;:::-;28036:44;;28091:24;28118:25;28136:6;28118:17;:25::i;:::-;28091:52;;28156:60;28177:8;28187:4;28193:2;28197:3;28202:7;28211:4;28156:20;:60::i;:::-;28229:19;28251:9;:13;28261:2;28251:13;;;;;;;;;;;:19;28265:4;28251:19;;;;;;;;;;;;;;;;28229:41;;28304:6;28289:11;:21;;28281:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28429:6;28415:11;:20;28393:9;:13;28403:2;28393:13;;;;;;;;;;;:19;28407:4;28393:19;;;;;;;;;;;;;;;:42;;;;28478:6;28457:9;:13;28467:2;28457:13;;;;;;;;;;;:17;28471:2;28457:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28533:2;28502:46;;28527:4;28502:46;;28517:8;28502:46;;;28537:2;28541:6;28502:46;;;;;;;:::i;:::-;;;;;;;;28561:59;28581:8;28591:4;28597:2;28601:3;28606:7;28615:4;28561:19;:59::i;:::-;28633:68;28664:8;28674:4;28680:2;28684;28688:6;28696:4;28633:30;:68::i;:::-;27904:805;;;;27735:974;;;;;:::o;37791:198::-;37857:16;37886:22;37925:1;37911:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37886:41;;37949:7;37938:5;37944:1;37938:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37976:5;37969:12;;;37791:198;;;:::o;35761:221::-;;;;;;;:::o;35990:220::-;;;;;;;:::o;36218:744::-;36433:15;:2;:13;;;:15::i;:::-;36429:526;;;36486:2;36469:38;;;36508:8;36518:4;36524:2;36528:6;36536:4;36469:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36465:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36817:6;36810:14;;;;;;;;;;;:::i;:::-;;;;;;;;36465:479;;;36866:62;;;;;;;;;;:::i;:::-;;;;;;;;36465:479;36603:43;;;36591:55;;;:8;:55;;;;36587:154;;36671:50;;;;;;;;;;:::i;:::-;;;;;;;;36587:154;36542:214;36429:526;36218:744;;;;;;:::o;36970:813::-;37210:15;:2;:13;;;:15::i;:::-;37206:570;;;37263:2;37246:43;;;37290:8;37300:4;37306:3;37311:7;37320:4;37246:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37242:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37638:6;37631:14;;;;;;;;;;;:::i;:::-;;;;;;;;37242:523;;;37687:62;;;;;;;;;;:::i;:::-;;;;;;;;37242:523;37419:48;;;37407:60;;;:8;:60;;;;37403:159;;37492:50;;;;;;;;;;:::i;:::-;;;;;;;;37403:159;37326:251;37206:570;36970:813;;;;;;:::o;5013:326::-;5073:4;5330:1;5308:7;:19;;;:23;5301:30;;5013:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:117::-;5624:1;5621;5614:12;5638:180;5686:77;5683:1;5676:88;5783:4;5780:1;5773:15;5807:4;5804:1;5797:15;5824:281;5907:27;5929:4;5907:27;:::i;:::-;5899:6;5895:40;6037:6;6025:10;6022:22;6001:18;5989:10;5986:34;5983:62;5980:88;;;6048:18;;:::i;:::-;5980:88;6088:10;6084:2;6077:22;5867:238;5824:281;;:::o;6111:129::-;6145:6;6172:20;;:::i;:::-;6162:30;;6201:33;6229:4;6221:6;6201:33;:::i;:::-;6111:129;;;:::o;6246:311::-;6323:4;6413:18;6405:6;6402:30;6399:56;;;6435:18;;:::i;:::-;6399:56;6485:4;6477:6;6473:17;6465:25;;6545:4;6539;6535:15;6527:23;;6246:311;;;:::o;6563:117::-;6672:1;6669;6662:12;6703:710;6799:5;6824:81;6840:64;6897:6;6840:64;:::i;:::-;6824:81;:::i;:::-;6815:90;;6925:5;6954:6;6947:5;6940:21;6988:4;6981:5;6977:16;6970:23;;7041:4;7033:6;7029:17;7021:6;7017:30;7070:3;7062:6;7059:15;7056:122;;;7089:79;;:::i;:::-;7056:122;7204:6;7187:220;7221:6;7216:3;7213:15;7187:220;;;7296:3;7325:37;7358:3;7346:10;7325:37;:::i;:::-;7320:3;7313:50;7392:4;7387:3;7383:14;7376:21;;7263:144;7247:4;7242:3;7238:14;7231:21;;7187:220;;;7191:21;6805:608;;6703:710;;;;;:::o;7436:370::-;7507:5;7556:3;7549:4;7541:6;7537:17;7533:27;7523:122;;7564:79;;:::i;:::-;7523:122;7681:6;7668:20;7706:94;7796:3;7788:6;7781:4;7773:6;7769:17;7706:94;:::i;:::-;7697:103;;7513:293;7436:370;;;;:::o;7812:117::-;7921:1;7918;7911:12;7935:307;7996:4;8086:18;8078:6;8075:30;8072:56;;;8108:18;;:::i;:::-;8072:56;8146:29;8168:6;8146:29;:::i;:::-;8138:37;;8230:4;8224;8220:15;8212:23;;7935:307;;;:::o;8248:146::-;8345:6;8340:3;8335;8322:30;8386:1;8377:6;8372:3;8368:16;8361:27;8248:146;;;:::o;8400:423::-;8477:5;8502:65;8518:48;8559:6;8518:48;:::i;:::-;8502:65;:::i;:::-;8493:74;;8590:6;8583:5;8576:21;8628:4;8621:5;8617:16;8666:3;8657:6;8652:3;8648:16;8645:25;8642:112;;;8673:79;;:::i;:::-;8642:112;8763:54;8810:6;8805:3;8800;8763:54;:::i;:::-;8483:340;8400:423;;;;;:::o;8842:338::-;8897:5;8946:3;8939:4;8931:6;8927:17;8923:27;8913:122;;8954:79;;:::i;:::-;8913:122;9071:6;9058:20;9096:78;9170:3;9162:6;9155:4;9147:6;9143:17;9096:78;:::i;:::-;9087:87;;8903:277;8842:338;;;;:::o;9186:1509::-;9340:6;9348;9356;9364;9372;9421:3;9409:9;9400:7;9396:23;9392:33;9389:120;;;9428:79;;:::i;:::-;9389:120;9548:1;9573:53;9618:7;9609:6;9598:9;9594:22;9573:53;:::i;:::-;9563:63;;9519:117;9675:2;9701:53;9746:7;9737:6;9726:9;9722:22;9701:53;:::i;:::-;9691:63;;9646:118;9831:2;9820:9;9816:18;9803:32;9862:18;9854:6;9851:30;9848:117;;;9884:79;;:::i;:::-;9848:117;9989:78;10059:7;10050:6;10039:9;10035:22;9989:78;:::i;:::-;9979:88;;9774:303;10144:2;10133:9;10129:18;10116:32;10175:18;10167:6;10164:30;10161:117;;;10197:79;;:::i;:::-;10161:117;10302:78;10372:7;10363:6;10352:9;10348:22;10302:78;:::i;:::-;10292:88;;10087:303;10457:3;10446:9;10442:19;10429:33;10489:18;10481:6;10478:30;10475:117;;;10511:79;;:::i;:::-;10475:117;10616:62;10670:7;10661:6;10650:9;10646:22;10616:62;:::i;:::-;10606:72;;10400:288;9186:1509;;;;;;;;:::o;10701:311::-;10778:4;10868:18;10860:6;10857:30;10854:56;;;10890:18;;:::i;:::-;10854:56;10940:4;10932:6;10928:17;10920:25;;11000:4;10994;10990:15;10982:23;;10701:311;;;:::o;11035:710::-;11131:5;11156:81;11172:64;11229:6;11172:64;:::i;:::-;11156:81;:::i;:::-;11147:90;;11257:5;11286:6;11279:5;11272:21;11320:4;11313:5;11309:16;11302:23;;11373:4;11365:6;11361:17;11353:6;11349:30;11402:3;11394:6;11391:15;11388:122;;;11421:79;;:::i;:::-;11388:122;11536:6;11519:220;11553:6;11548:3;11545:15;11519:220;;;11628:3;11657:37;11690:3;11678:10;11657:37;:::i;:::-;11652:3;11645:50;11724:4;11719:3;11715:14;11708:21;;11595:144;11579:4;11574:3;11570:14;11563:21;;11519:220;;;11523:21;11137:608;;11035:710;;;;;:::o;11768:370::-;11839:5;11888:3;11881:4;11873:6;11869:17;11865:27;11855:122;;11896:79;;:::i;:::-;11855:122;12013:6;12000:20;12038:94;12128:3;12120:6;12113:4;12105:6;12101:17;12038:94;:::i;:::-;12029:103;;11845:293;11768:370;;;;:::o;12144:894::-;12262:6;12270;12319:2;12307:9;12298:7;12294:23;12290:32;12287:119;;;12325:79;;:::i;:::-;12287:119;12473:1;12462:9;12458:17;12445:31;12503:18;12495:6;12492:30;12489:117;;;12525:79;;:::i;:::-;12489:117;12630:78;12700:7;12691:6;12680:9;12676:22;12630:78;:::i;:::-;12620:88;;12416:302;12785:2;12774:9;12770:18;12757:32;12816:18;12808:6;12805:30;12802:117;;;12838:79;;:::i;:::-;12802:117;12943:78;13013:7;13004:6;12993:9;12989:22;12943:78;:::i;:::-;12933:88;;12728:303;12144:894;;;;;:::o;13044:114::-;13111:6;13145:5;13139:12;13129:22;;13044:114;;;:::o;13164:184::-;13263:11;13297:6;13292:3;13285:19;13337:4;13332:3;13328:14;13313:29;;13164:184;;;;:::o;13354:132::-;13421:4;13444:3;13436:11;;13474:4;13469:3;13465:14;13457:22;;13354:132;;;:::o;13492:108::-;13569:24;13587:5;13569:24;:::i;:::-;13564:3;13557:37;13492:108;;:::o;13606:179::-;13675:10;13696:46;13738:3;13730:6;13696:46;:::i;:::-;13774:4;13769:3;13765:14;13751:28;;13606:179;;;;:::o;13791:113::-;13861:4;13893;13888:3;13884:14;13876:22;;13791:113;;;:::o;13940:732::-;14059:3;14088:54;14136:5;14088:54;:::i;:::-;14158:86;14237:6;14232:3;14158:86;:::i;:::-;14151:93;;14268:56;14318:5;14268:56;:::i;:::-;14347:7;14378:1;14363:284;14388:6;14385:1;14382:13;14363:284;;;14464:6;14458:13;14491:63;14550:3;14535:13;14491:63;:::i;:::-;14484:70;;14577:60;14630:6;14577:60;:::i;:::-;14567:70;;14423:224;14410:1;14407;14403:9;14398:14;;14363:284;;;14367:14;14663:3;14656:10;;14064:608;;;13940:732;;;;:::o;14678:373::-;14821:4;14859:2;14848:9;14844:18;14836:26;;14908:9;14902:4;14898:20;14894:1;14883:9;14879:17;14872:47;14936:108;15039:4;15030:6;14936:108;:::i;:::-;14928:116;;14678:373;;;;:::o;15057:1751::-;15252:6;15260;15268;15276;15284;15333:3;15321:9;15312:7;15308:23;15304:33;15301:120;;;15340:79;;:::i;:::-;15301:120;15460:1;15485:53;15530:7;15521:6;15510:9;15506:22;15485:53;:::i;:::-;15475:63;;15431:117;15615:2;15604:9;15600:18;15587:32;15646:18;15638:6;15635:30;15632:117;;;15668:79;;:::i;:::-;15632:117;15773:78;15843:7;15834:6;15823:9;15819:22;15773:78;:::i;:::-;15763:88;;15558:303;15928:2;15917:9;15913:18;15900:32;15959:18;15951:6;15948:30;15945:117;;;15981:79;;:::i;:::-;15945:117;16086:78;16156:7;16147:6;16136:9;16132:22;16086:78;:::i;:::-;16076:88;;15871:303;16241:2;16230:9;16226:18;16213:32;16272:18;16264:6;16261:30;16258:117;;;16294:79;;:::i;:::-;16258:117;16399:78;16469:7;16460:6;16449:9;16445:22;16399:78;:::i;:::-;16389:88;;16184:303;16554:3;16543:9;16539:19;16526:33;16586:18;16578:6;16575:30;16572:117;;;16608:79;;:::i;:::-;16572:117;16713:78;16783:7;16774:6;16763:9;16759:22;16713:78;:::i;:::-;16703:88;;16497:304;15057:1751;;;;;;;;:::o;16814:894::-;16932:6;16940;16989:2;16977:9;16968:7;16964:23;16960:32;16957:119;;;16995:79;;:::i;:::-;16957:119;17143:1;17132:9;17128:17;17115:31;17173:18;17165:6;17162:30;17159:117;;;17195:79;;:::i;:::-;17159:117;17300:78;17370:7;17361:6;17350:9;17346:22;17300:78;:::i;:::-;17290:88;;17086:302;17455:2;17444:9;17440:18;17427:32;17486:18;17478:6;17475:30;17472:117;;;17508:79;;:::i;:::-;17472:117;17613:78;17683:7;17674:6;17663:9;17659:22;17613:78;:::i;:::-;17603:88;;17398:303;16814:894;;;;;:::o;17714:308::-;17776:4;17866:18;17858:6;17855:30;17852:56;;;17888:18;;:::i;:::-;17852:56;17926:29;17948:6;17926:29;:::i;:::-;17918:37;;18010:4;18004;18000:15;17992:23;;17714:308;;;:::o;18028:425::-;18106:5;18131:66;18147:49;18189:6;18147:49;:::i;:::-;18131:66;:::i;:::-;18122:75;;18220:6;18213:5;18206:21;18258:4;18251:5;18247:16;18296:3;18287:6;18282:3;18278:16;18275:25;18272:112;;;18303:79;;:::i;:::-;18272:112;18393:54;18440:6;18435:3;18430;18393:54;:::i;:::-;18112:341;18028:425;;;;;:::o;18473:340::-;18529:5;18578:3;18571:4;18563:6;18559:17;18555:27;18545:122;;18586:79;;:::i;:::-;18545:122;18703:6;18690:20;18728:79;18803:3;18795:6;18788:4;18780:6;18776:17;18728:79;:::i;:::-;18719:88;;18535:278;18473:340;;;;:::o;18819:654::-;18897:6;18905;18954:2;18942:9;18933:7;18929:23;18925:32;18922:119;;;18960:79;;:::i;:::-;18922:119;19080:1;19105:53;19150:7;19141:6;19130:9;19126:22;19105:53;:::i;:::-;19095:63;;19051:117;19235:2;19224:9;19220:18;19207:32;19266:18;19258:6;19255:30;19252:117;;;19288:79;;:::i;:::-;19252:117;19393:63;19448:7;19439:6;19428:9;19424:22;19393:63;:::i;:::-;19383:73;;19178:288;18819:654;;;;;:::o;19479:118::-;19566:24;19584:5;19566:24;:::i;:::-;19561:3;19554:37;19479:118;;:::o;19603:222::-;19696:4;19734:2;19723:9;19719:18;19711:26;;19747:71;19815:1;19804:9;19800:17;19791:6;19747:71;:::i;:::-;19603:222;;;;:::o;19831:116::-;19901:21;19916:5;19901:21;:::i;:::-;19894:5;19891:32;19881:60;;19937:1;19934;19927:12;19881:60;19831:116;:::o;19953:133::-;19996:5;20034:6;20021:20;20012:29;;20050:30;20074:5;20050:30;:::i;:::-;19953:133;;;;:::o;20092:468::-;20157:6;20165;20214:2;20202:9;20193:7;20189:23;20185:32;20182:119;;;20220:79;;:::i;:::-;20182:119;20340:1;20365:53;20410:7;20401:6;20390:9;20386:22;20365:53;:::i;:::-;20355:63;;20311:117;20467:2;20493:50;20535:7;20526:6;20515:9;20511:22;20493:50;:::i;:::-;20483:60;;20438:115;20092:468;;;;;:::o;20566:474::-;20634:6;20642;20691:2;20679:9;20670:7;20666:23;20662:32;20659:119;;;20697:79;;:::i;:::-;20659:119;20817:1;20842:53;20887:7;20878:6;20867:9;20863:22;20842:53;:::i;:::-;20832:63;;20788:117;20944:2;20970:53;21015:7;21006:6;20995:9;20991:22;20970:53;:::i;:::-;20960:63;;20915:118;20566:474;;;;;:::o;21046:1039::-;21173:6;21181;21189;21238:2;21226:9;21217:7;21213:23;21209:32;21206:119;;;21244:79;;:::i;:::-;21206:119;21364:1;21389:53;21434:7;21425:6;21414:9;21410:22;21389:53;:::i;:::-;21379:63;;21335:117;21519:2;21508:9;21504:18;21491:32;21550:18;21542:6;21539:30;21536:117;;;21572:79;;:::i;:::-;21536:117;21677:78;21747:7;21738:6;21727:9;21723:22;21677:78;:::i;:::-;21667:88;;21462:303;21832:2;21821:9;21817:18;21804:32;21863:18;21855:6;21852:30;21849:117;;;21885:79;;:::i;:::-;21849:117;21990:78;22060:7;22051:6;22040:9;22036:22;21990:78;:::i;:::-;21980:88;;21775:303;21046:1039;;;;;:::o;22091:474::-;22159:6;22167;22216:2;22204:9;22195:7;22191:23;22187:32;22184:119;;;22222:79;;:::i;:::-;22184:119;22342:1;22367:53;22412:7;22403:6;22392:9;22388:22;22367:53;:::i;:::-;22357:63;;22313:117;22469:2;22495:53;22540:7;22531:6;22520:9;22516:22;22495:53;:::i;:::-;22485:63;;22440:118;22091:474;;;;;:::o;22571:1089::-;22675:6;22683;22691;22699;22707;22756:3;22744:9;22735:7;22731:23;22727:33;22724:120;;;22763:79;;:::i;:::-;22724:120;22883:1;22908:53;22953:7;22944:6;22933:9;22929:22;22908:53;:::i;:::-;22898:63;;22854:117;23010:2;23036:53;23081:7;23072:6;23061:9;23057:22;23036:53;:::i;:::-;23026:63;;22981:118;23138:2;23164:53;23209:7;23200:6;23189:9;23185:22;23164:53;:::i;:::-;23154:63;;23109:118;23266:2;23292:53;23337:7;23328:6;23317:9;23313:22;23292:53;:::i;:::-;23282:63;;23237:118;23422:3;23411:9;23407:19;23394:33;23454:18;23446:6;23443:30;23440:117;;;23476:79;;:::i;:::-;23440:117;23581:62;23635:7;23626:6;23615:9;23611:22;23581:62;:::i;:::-;23571:72;;23365:288;22571:1089;;;;;;;;:::o;23666:329::-;23725:6;23774:2;23762:9;23753:7;23749:23;23745:32;23742:119;;;23780:79;;:::i;:::-;23742:119;23900:1;23925:53;23970:7;23961:6;23950:9;23946:22;23925:53;:::i;:::-;23915:63;;23871:117;23666:329;;;;:::o;24001:229::-;24141:34;24137:1;24129:6;24125:14;24118:58;24210:12;24205:2;24197:6;24193:15;24186:37;24001:229;:::o;24236:366::-;24378:3;24399:67;24463:2;24458:3;24399:67;:::i;:::-;24392:74;;24475:93;24564:3;24475:93;:::i;:::-;24593:2;24588:3;24584:12;24577:19;;24236:366;;;:::o;24608:419::-;24774:4;24812:2;24801:9;24797:18;24789:26;;24861:9;24855:4;24851:20;24847:1;24836:9;24832:17;24825:47;24889:131;25015:4;24889:131;:::i;:::-;24881:139;;24608:419;;;:::o;25033:180::-;25081:77;25078:1;25071:88;25178:4;25175:1;25168:15;25202:4;25199:1;25192:15;25219:320;25263:6;25300:1;25294:4;25290:12;25280:22;;25347:1;25341:4;25337:12;25368:18;25358:81;;25424:4;25416:6;25412:17;25402:27;;25358:81;25486:2;25478:6;25475:14;25455:18;25452:38;25449:84;;25505:18;;:::i;:::-;25449:84;25270:269;25219:320;;;:::o;25545:233::-;25685:34;25681:1;25673:6;25669:14;25662:58;25754:16;25749:2;25741:6;25737:15;25730:41;25545:233;:::o;25784:366::-;25926:3;25947:67;26011:2;26006:3;25947:67;:::i;:::-;25940:74;;26023:93;26112:3;26023:93;:::i;:::-;26141:2;26136:3;26132:12;26125:19;;25784:366;;;:::o;26156:419::-;26322:4;26360:2;26349:9;26345:18;26337:26;;26409:9;26403:4;26399:20;26395:1;26384:9;26380:17;26373:47;26437:131;26563:4;26437:131;:::i;:::-;26429:139;;26156:419;;;:::o;26581:228::-;26721:34;26717:1;26709:6;26705:14;26698:58;26790:11;26785:2;26777:6;26773:15;26766:36;26581:228;:::o;26815:366::-;26957:3;26978:67;27042:2;27037:3;26978:67;:::i;:::-;26971:74;;27054:93;27143:3;27054:93;:::i;:::-;27172:2;27167:3;27163:12;27156:19;;26815:366;;;:::o;27187:419::-;27353:4;27391:2;27380:9;27376:18;27368:26;;27440:9;27434:4;27430:20;27426:1;27415:9;27411:17;27404:47;27468:131;27594:4;27468:131;:::i;:::-;27460:139;;27187:419;;;:::o;27612:180::-;27660:77;27657:1;27650:88;27757:4;27754:1;27747:15;27781:4;27778:1;27771:15;27798:180;27846:77;27843:1;27836:88;27943:4;27940:1;27933:15;27967:4;27964:1;27957:15;27984:233;28023:3;28046:24;28064:5;28046:24;:::i;:::-;28037:33;;28092:66;28085:5;28082:77;28079:103;;28162:18;;:::i;:::-;28079:103;28209:1;28202:5;28198:13;28191:20;;27984:233;;;:::o;28223:141::-;28272:4;28295:3;28287:11;;28318:3;28315:1;28308:14;28352:4;28349:1;28339:18;28331:26;;28223:141;;;:::o;28370:93::-;28407:6;28454:2;28449;28442:5;28438:14;28434:23;28424:33;;28370:93;;;:::o;28469:107::-;28513:8;28563:5;28557:4;28553:16;28532:37;;28469:107;;;;:::o;28582:393::-;28651:6;28701:1;28689:10;28685:18;28724:97;28754:66;28743:9;28724:97;:::i;:::-;28842:39;28872:8;28861:9;28842:39;:::i;:::-;28830:51;;28914:4;28910:9;28903:5;28899:21;28890:30;;28963:4;28953:8;28949:19;28942:5;28939:30;28929:40;;28658:317;;28582:393;;;;;:::o;28981:60::-;29009:3;29030:5;29023:12;;28981:60;;;:::o;29047:142::-;29097:9;29130:53;29148:34;29157:24;29175:5;29157:24;:::i;:::-;29148:34;:::i;:::-;29130:53;:::i;:::-;29117:66;;29047:142;;;:::o;29195:75::-;29238:3;29259:5;29252:12;;29195:75;;;:::o;29276:269::-;29386:39;29417:7;29386:39;:::i;:::-;29447:91;29496:41;29520:16;29496:41;:::i;:::-;29488:6;29481:4;29475:11;29447:91;:::i;:::-;29441:4;29434:105;29352:193;29276:269;;;:::o;29551:73::-;29596:3;29551:73;:::o;29630:189::-;29707:32;;:::i;:::-;29748:65;29806:6;29798;29792:4;29748:65;:::i;:::-;29683:136;29630:189;;:::o;29825:186::-;29885:120;29902:3;29895:5;29892:14;29885:120;;;29956:39;29993:1;29986:5;29956:39;:::i;:::-;29929:1;29922:5;29918:13;29909:22;;29885:120;;;29825:186;;:::o;30017:543::-;30118:2;30113:3;30110:11;30107:446;;;30152:38;30184:5;30152:38;:::i;:::-;30236:29;30254:10;30236:29;:::i;:::-;30226:8;30222:44;30419:2;30407:10;30404:18;30401:49;;;30440:8;30425:23;;30401:49;30463:80;30519:22;30537:3;30519:22;:::i;:::-;30509:8;30505:37;30492:11;30463:80;:::i;:::-;30122:431;;30107:446;30017:543;;;:::o;30566:117::-;30620:8;30670:5;30664:4;30660:16;30639:37;;30566:117;;;;:::o;30689:169::-;30733:6;30766:51;30814:1;30810:6;30802:5;30799:1;30795:13;30766:51;:::i;:::-;30762:56;30847:4;30841;30837:15;30827:25;;30740:118;30689:169;;;;:::o;30863:295::-;30939:4;31085:29;31110:3;31104:4;31085:29;:::i;:::-;31077:37;;31147:3;31144:1;31140:11;31134:4;31131:21;31123:29;;30863:295;;;;:::o;31163:1395::-;31280:37;31313:3;31280:37;:::i;:::-;31382:18;31374:6;31371:30;31368:56;;;31404:18;;:::i;:::-;31368:56;31448:38;31480:4;31474:11;31448:38;:::i;:::-;31533:67;31593:6;31585;31579:4;31533:67;:::i;:::-;31627:1;31651:4;31638:17;;31683:2;31675:6;31672:14;31700:1;31695:618;;;;32357:1;32374:6;32371:77;;;32423:9;32418:3;32414:19;32408:26;32399:35;;32371:77;32474:67;32534:6;32527:5;32474:67;:::i;:::-;32468:4;32461:81;32330:222;31665:887;;31695:618;31747:4;31743:9;31735:6;31731:22;31781:37;31813:4;31781:37;:::i;:::-;31840:1;31854:208;31868:7;31865:1;31862:14;31854:208;;;31947:9;31942:3;31938:19;31932:26;31924:6;31917:42;31998:1;31990:6;31986:14;31976:24;;32045:2;32034:9;32030:18;32017:31;;31891:4;31888:1;31884:12;31879:17;;31854:208;;;32090:6;32081:7;32078:19;32075:179;;;32148:9;32143:3;32139:19;32133:26;32191:48;32233:4;32225:6;32221:17;32210:9;32191:48;:::i;:::-;32183:6;32176:64;32098:156;32075:179;32300:1;32296;32288:6;32284:14;32280:22;32274:4;32267:36;31702:611;;;31665:887;;31255:1303;;;31163:1395;;:::o;32564:225::-;32704:34;32700:1;32692:6;32688:14;32681:58;32773:8;32768:2;32760:6;32756:15;32749:33;32564:225;:::o;32795:366::-;32937:3;32958:67;33022:2;33017:3;32958:67;:::i;:::-;32951:74;;33034:93;33123:3;33034:93;:::i;:::-;33152:2;33147:3;33143:12;33136:19;;32795:366;;;:::o;33167:419::-;33333:4;33371:2;33360:9;33356:18;33348:26;;33420:9;33414:4;33410:20;33406:1;33395:9;33391:17;33384:47;33448:131;33574:4;33448:131;:::i;:::-;33440:139;;33167:419;;;:::o;33592:182::-;33732:34;33728:1;33720:6;33716:14;33709:58;33592:182;:::o;33780:366::-;33922:3;33943:67;34007:2;34002:3;33943:67;:::i;:::-;33936:74;;34019:93;34108:3;34019:93;:::i;:::-;34137:2;34132:3;34128:12;34121:19;;33780:366;;;:::o;34152:419::-;34318:4;34356:2;34345:9;34341:18;34333:26;;34405:9;34399:4;34395:20;34391:1;34380:9;34376:17;34369:47;34433:131;34559:4;34433:131;:::i;:::-;34425:139;;34152:419;;;:::o;34577:220::-;34717:34;34713:1;34705:6;34701:14;34694:58;34786:3;34781:2;34773:6;34769:15;34762:28;34577:220;:::o;34803:366::-;34945:3;34966:67;35030:2;35025:3;34966:67;:::i;:::-;34959:74;;35042:93;35131:3;35042:93;:::i;:::-;35160:2;35155:3;35151:12;35144:19;;34803:366;;;:::o;35175:419::-;35341:4;35379:2;35368:9;35364:18;35356:26;;35428:9;35422:4;35418:20;35414:1;35403:9;35399:17;35392:47;35456:131;35582:4;35456:131;:::i;:::-;35448:139;;35175:419;;;:::o;35600:191::-;35640:3;35659:20;35677:1;35659:20;:::i;:::-;35654:25;;35693:20;35711:1;35693:20;:::i;:::-;35688:25;;35736:1;35733;35729:9;35722:16;;35757:3;35754:1;35751:10;35748:36;;;35764:18;;:::i;:::-;35748:36;35600:191;;;;:::o;35797:332::-;35918:4;35956:2;35945:9;35941:18;35933:26;;35969:71;36037:1;36026:9;36022:17;36013:6;35969:71;:::i;:::-;36050:72;36118:2;36107:9;36103:18;36094:6;36050:72;:::i;:::-;35797:332;;;;;:::o;36135:227::-;36275:34;36271:1;36263:6;36259:14;36252:58;36344:10;36339:2;36331:6;36327:15;36320:35;36135:227;:::o;36368:366::-;36510:3;36531:67;36595:2;36590:3;36531:67;:::i;:::-;36524:74;;36607:93;36696:3;36607:93;:::i;:::-;36725:2;36720:3;36716:12;36709:19;;36368:366;;;:::o;36740:419::-;36906:4;36944:2;36933:9;36929:18;36921:26;;36993:9;36987:4;36983:20;36979:1;36968:9;36964:17;36957:47;37021:131;37147:4;37021:131;:::i;:::-;37013:139;;36740:419;;;:::o;37165:224::-;37305:34;37301:1;37293:6;37289:14;37282:58;37374:7;37369:2;37361:6;37357:15;37350:32;37165:224;:::o;37395:366::-;37537:3;37558:67;37622:2;37617:3;37558:67;:::i;:::-;37551:74;;37634:93;37723:3;37634:93;:::i;:::-;37752:2;37747:3;37743:12;37736:19;;37395:366;;;:::o;37767:419::-;37933:4;37971:2;37960:9;37956:18;37948:26;;38020:9;38014:4;38010:20;38006:1;37995:9;37991:17;37984:47;38048:131;38174:4;38048:131;:::i;:::-;38040:139;;37767:419;;;:::o;38192:229::-;38332:34;38328:1;38320:6;38316:14;38309:58;38401:12;38396:2;38388:6;38384:15;38377:37;38192:229;:::o;38427:366::-;38569:3;38590:67;38654:2;38649:3;38590:67;:::i;:::-;38583:74;;38666:93;38755:3;38666:93;:::i;:::-;38784:2;38779:3;38775:12;38768:19;;38427:366;;;:::o;38799:419::-;38965:4;39003:2;38992:9;38988:18;38980:26;;39052:9;39046:4;39042:20;39038:1;39027:9;39023:17;39016:47;39080:131;39206:4;39080:131;:::i;:::-;39072:139;;38799:419;;;:::o;39224:634::-;39445:4;39483:2;39472:9;39468:18;39460:26;;39532:9;39526:4;39522:20;39518:1;39507:9;39503:17;39496:47;39560:108;39663:4;39654:6;39560:108;:::i;:::-;39552:116;;39715:9;39709:4;39705:20;39700:2;39689:9;39685:18;39678:48;39743:108;39846:4;39837:6;39743:108;:::i;:::-;39735:116;;39224:634;;;;;:::o;39864:222::-;40004:34;40000:1;39992:6;39988:14;39981:58;40073:5;40068:2;40060:6;40056:15;40049:30;39864:222;:::o;40092:366::-;40234:3;40255:67;40319:2;40314:3;40255:67;:::i;:::-;40248:74;;40331:93;40420:3;40331:93;:::i;:::-;40449:2;40444:3;40440:12;40433:19;;40092:366;;;:::o;40464:419::-;40630:4;40668:2;40657:9;40653:18;40645:26;;40717:9;40711:4;40707:20;40703:1;40692:9;40688:17;40681:47;40745:131;40871:4;40745:131;:::i;:::-;40737:139;;40464:419;;;:::o;40889:223::-;41029:34;41025:1;41017:6;41013:14;41006:58;41098:6;41093:2;41085:6;41081:15;41074:31;40889:223;:::o;41118:366::-;41260:3;41281:67;41345:2;41340:3;41281:67;:::i;:::-;41274:74;;41357:93;41446:3;41357:93;:::i;:::-;41475:2;41470:3;41466:12;41459:19;;41118:366;;;:::o;41490:419::-;41656:4;41694:2;41683:9;41679:18;41671:26;;41743:9;41737:4;41733:20;41729:1;41718:9;41714:17;41707:47;41771:131;41897:4;41771:131;:::i;:::-;41763:139;;41490:419;;;:::o;41915:228::-;42055:34;42051:1;42043:6;42039:14;42032:58;42124:11;42119:2;42111:6;42107:15;42100:36;41915:228;:::o;42149:366::-;42291:3;42312:67;42376:2;42371:3;42312:67;:::i;:::-;42305:74;;42388:93;42477:3;42388:93;:::i;:::-;42506:2;42501:3;42497:12;42490:19;;42149:366;;;:::o;42521:419::-;42687:4;42725:2;42714:9;42710:18;42702:26;;42774:9;42768:4;42764:20;42760:1;42749:9;42745:17;42738:47;42802:131;42928:4;42802:131;:::i;:::-;42794:139;;42521:419;;;:::o;42946:98::-;42997:6;43031:5;43025:12;43015:22;;42946:98;;;:::o;43050:168::-;43133:11;43167:6;43162:3;43155:19;43207:4;43202:3;43198:14;43183:29;;43050:168;;;;:::o;43224:373::-;43310:3;43338:38;43370:5;43338:38;:::i;:::-;43392:70;43455:6;43450:3;43392:70;:::i;:::-;43385:77;;43471:65;43529:6;43524:3;43517:4;43510:5;43506:16;43471:65;:::i;:::-;43561:29;43583:6;43561:29;:::i;:::-;43556:3;43552:39;43545:46;;43314:283;43224:373;;;;:::o;43603:751::-;43826:4;43864:3;43853:9;43849:19;43841:27;;43878:71;43946:1;43935:9;43931:17;43922:6;43878:71;:::i;:::-;43959:72;44027:2;44016:9;44012:18;44003:6;43959:72;:::i;:::-;44041;44109:2;44098:9;44094:18;44085:6;44041:72;:::i;:::-;44123;44191:2;44180:9;44176:18;44167:6;44123:72;:::i;:::-;44243:9;44237:4;44233:20;44227:3;44216:9;44212:19;44205:49;44271:76;44342:4;44333:6;44271:76;:::i;:::-;44263:84;;43603:751;;;;;;;;:::o;44360:141::-;44416:5;44447:6;44441:13;44432:22;;44463:32;44489:5;44463:32;:::i;:::-;44360:141;;;;:::o;44507:349::-;44576:6;44625:2;44613:9;44604:7;44600:23;44596:32;44593:119;;;44631:79;;:::i;:::-;44593:119;44751:1;44776:63;44831:7;44822:6;44811:9;44807:22;44776:63;:::i;:::-;44766:73;;44722:127;44507:349;;;;:::o;44862:106::-;44906:8;44955:5;44950:3;44946:15;44925:36;;44862:106;;;:::o;44974:183::-;45009:3;45047:1;45029:16;45026:23;45023:128;;;45085:1;45082;45079;45064:23;45107:34;45138:1;45132:8;45107:34;:::i;:::-;45100:41;;45023:128;44974:183;:::o;45163:711::-;45202:3;45240:4;45222:16;45219:26;45248:5;45216:39;45277:20;;:::i;:::-;45352:1;45334:16;45330:24;45327:1;45321:4;45306:49;45385:4;45379:11;45484:16;45477:4;45469:6;45465:17;45462:39;45429:18;45421:6;45418:30;45402:113;45399:146;;;45530:5;;;;45399:146;45576:6;45570:4;45566:17;45612:3;45606:10;45639:18;45631:6;45628:30;45625:43;;;45661:5;;;;;;45625:43;45709:6;45702:4;45697:3;45693:14;45689:27;45768:1;45750:16;45746:24;45740:4;45736:35;45731:3;45728:44;45725:57;;;45775:5;;;;;;;45725:57;45792;45840:6;45834:4;45830:17;45822:6;45818:30;45812:4;45792:57;:::i;:::-;45865:3;45858:10;;45206:668;;;;;45163:711;;:::o;45880:239::-;46020:34;46016:1;46008:6;46004:14;45997:58;46089:22;46084:2;46076:6;46072:15;46065:47;45880:239;:::o;46125:366::-;46267:3;46288:67;46352:2;46347:3;46288:67;:::i;:::-;46281:74;;46364:93;46453:3;46364:93;:::i;:::-;46482:2;46477:3;46473:12;46466:19;;46125:366;;;:::o;46497:419::-;46663:4;46701:2;46690:9;46686:18;46678:26;;46750:9;46744:4;46740:20;46736:1;46725:9;46721:17;46714:47;46778:131;46904:4;46778:131;:::i;:::-;46770:139;;46497:419;;;:::o;46922:227::-;47062:34;47058:1;47050:6;47046:14;47039:58;47131:10;47126:2;47118:6;47114:15;47107:35;46922:227;:::o;47155:366::-;47297:3;47318:67;47382:2;47377:3;47318:67;:::i;:::-;47311:74;;47394:93;47483:3;47394:93;:::i;:::-;47512:2;47507:3;47503:12;47496:19;;47155:366;;;:::o;47527:419::-;47693:4;47731:2;47720:9;47716:18;47708:26;;47780:9;47774:4;47770:20;47766:1;47755:9;47751:17;47744:47;47808:131;47934:4;47808:131;:::i;:::-;47800:139;;47527:419;;;:::o;47952:1053::-;48275:4;48313:3;48302:9;48298:19;48290:27;;48327:71;48395:1;48384:9;48380:17;48371:6;48327:71;:::i;:::-;48408:72;48476:2;48465:9;48461:18;48452:6;48408:72;:::i;:::-;48527:9;48521:4;48517:20;48512:2;48501:9;48497:18;48490:48;48555:108;48658:4;48649:6;48555:108;:::i;:::-;48547:116;;48710:9;48704:4;48700:20;48695:2;48684:9;48680:18;48673:48;48738:108;48841:4;48832:6;48738:108;:::i;:::-;48730:116;;48894:9;48888:4;48884:20;48878:3;48867:9;48863:19;48856:49;48922:76;48993:4;48984:6;48922:76;:::i;:::-;48914:84;;47952:1053;;;;;;;;:::o
Swarm Source
ipfs://00ffb53fc12b65750a174db1018f08cd2f3bcee6110a6622cc0f540a63e0a267
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.