Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xbfb40c1d6638896a8c501d92e77ae604b6f353f6869b69de7ce986067f90553a | Safe Transfer Fr... | 39255915 | 106 days 21 hrs ago | 0xd5a22c663033ee11ec2c09b807fad4f2ce2d82eb | IN | 0x8373b66a2f6cc08e56e00965b2e2429d9d722d13 | 0 MATIC | 0.022937227198 | |
0x051954af513c4b9671244eb16721d5729f481b7de7522335f50ac1d5572b4742 | Multi Call | 38564878 | 124 days 18 hrs ago | 0x80b5eed573230b2e7b0763c5596321bdc13f73f1 | IN | 0x8373b66a2f6cc08e56e00965b2e2429d9d722d13 | 0 MATIC | 0.640449507137 | |
0x5f5019c817f8a7866d86eced1593eb4f2364b0c0bd1c4bcba7016839c8e43765 | Mint Custom | 38545469 | 125 days 6 hrs ago | 0x80b5eed573230b2e7b0763c5596321bdc13f73f1 | IN | 0x8373b66a2f6cc08e56e00965b2e2429d9d722d13 | 0 MATIC | 0.006812705621 | |
0x7bd2f8e5a74984a87c8787570e3db83517ec83c0bce671f2841504eb6489c1d9 | 0x60806040 | 38545376 | 125 days 6 hrs ago | 0x80b5eed573230b2e7b0763c5596321bdc13f73f1 | IN | Contract Creation | 0 MATIC | 0.200820585804 |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x10EA576D5607b7B593Fb4C6616Aa88f052a5292A
Contract Name:
ProjectToken
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-10 */ pragma solidity ^0.8.0; abstract contract Ownable { address private _owner; /** @dev emitted when ownership is transfered */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** @dev creates a contract instance and sets deployer as its _owner. */ constructor() { _transferOwnership(msg.sender); } /** @dev returns address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** @dev checks if caller of the function is _owner. */ modifier onlyOwner() { require(owner() == msg.sender, "You are not the owner"); _; } /** @dev transfers the ownership to 0x00 address. @notice after renouncing contract ownership functions with onlyOwner modifier will not be accessible. @notice can be called only be _owner */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** @dev transfers ownership to newOwner. @notice can not be transfered to 0x00 addres. @notice can be called only be _owner */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "zero address can not be owner"); _transferOwnership(newOwner); } /** @dev internal function to transfer ownership. @notice can only be called internally and only by _owner. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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 * ==== * * [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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return 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: @openzeppelin/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: @openzeppelin/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: @openzeppelin/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: @openzeppelin/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: @openzeppelin/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: @openzeppelin/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, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ 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, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ 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); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ 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: 1155/projectToken.sol pragma solidity ^0.8.9; contract ProjectToken is ERC1155, Ownable { string public name; string public symbol; string private _uri; mapping(uint256 => string) private _customURIs; constructor( string memory initialBaseURI, string memory _name, string memory _symbol ) ERC1155(initialBaseURI) { name = _name; symbol = _symbol; setBaseURI(initialBaseURI); } // Minting function mint( uint256 id, uint256 amount, address destination ) public onlyOwner { _mint(destination, id, amount, ""); } function mintCustom( uint256 id, uint256 amount, address destination, string memory tokenURI ) public onlyOwner { setCustomURI(id, tokenURI); _mint(destination, id, amount, ""); } //AirDrop function MultiCall(address[] memory recipients, uint256 id, uint256 amount) public onlyOwner { for (uint i = 0; i < recipients.length; i ++) { _mint(recipients[i], id, amount, ""); } } // Metadata function uri(uint256 id) public view virtual override returns (string memory) { string memory customURI = _customURIs[id]; if (keccak256(bytes(customURI)) != keccak256(bytes(""))) { return customURI; } return _uri; } function setCustomURI(uint256 id, string memory tokenURI) public onlyOwner { _customURIs[id] = tokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _uri = baseURI; } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override(ERC1155) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"initialBaseURI","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":"recipients","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MultiCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mintCustom","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":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"setCustomURI","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":"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
60806040523480156200001157600080fd5b5060405162003b5d38038062003b5d83398181016040528101906200003791906200049c565b826200004981620000a760201b60201c565b506200005b33620000c360201b60201c565b8160049080519060200190620000739291906200024f565b5080600590805190602001906200008c9291906200024f565b506200009e836200018960201b60201c565b5050506200063d565b8060029080519060200190620000bf9291906200024f565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16620001b06200022560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200020090620005b6565b60405180910390fd5b8060069080519060200190620002219291906200024f565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200025d9062000607565b90600052602060002090601f016020900481019282620002815760008555620002cd565b82601f106200029c57805160ff1916838001178555620002cd565b82800160010185558215620002cd579182015b82811115620002cc578251825591602001919060010190620002af565b5b509050620002dc9190620002e0565b5090565b5b80821115620002fb576000816000905550600101620002e1565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000368826200031d565b810181811067ffffffffffffffff821117156200038a57620003896200032e565b5b80604052505050565b60006200039f620002ff565b9050620003ad82826200035d565b919050565b600067ffffffffffffffff821115620003d057620003cf6200032e565b5b620003db826200031d565b9050602081019050919050565b60005b8381101562000408578082015181840152602081019050620003eb565b8381111562000418576000848401525b50505050565b6000620004356200042f84620003b2565b62000393565b90508281526020810184848401111562000454576200045362000318565b5b62000461848285620003e8565b509392505050565b600082601f83011262000481576200048062000313565b5b8151620004938482602086016200041e565b91505092915050565b600080600060608486031215620004b857620004b762000309565b5b600084015167ffffffffffffffff811115620004d957620004d86200030e565b5b620004e78682870162000469565b935050602084015167ffffffffffffffff8111156200050b576200050a6200030e565b5b620005198682870162000469565b925050604084015167ffffffffffffffff8111156200053d576200053c6200030e565b5b6200054b8682870162000469565b9150509250925092565b600082825260208201905092915050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b60006200059e60158362000555565b9150620005ab8262000566565b602082019050919050565b60006020820190508181036000830152620005d1816200058f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200062057607f821691505b60208210811415620006375762000636620005d8565b5b50919050565b613510806200064d6000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063e7d3fe6b11610071578063e7d3fe6b146102ca578063e985e9c5146102e6578063f242432a14610316578063f2aa3d4314610332578063f2fde38b1461034e57610115565b80638da5cb5b1461025657806395d89b4114610274578063a22cb46514610292578063bd99784d146102ae57610115565b80632eb2c2d6116100e95780632eb2c2d6146101c85780633adf80b4146101e45780634e1273f41461020057806355f804b314610230578063715018a61461024c57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806306fdde031461017a5780630e89341c14610198575b600080fd5b610134600480360381019061012f9190611f59565b61036a565b6040516101419190611fa8565b60405180910390f35b610164600480360381019061015f919061201b565b610433565b6040516101719190612063565b60405180910390f35b610182610515565b60405161018f9190612117565b60405180910390f35b6101b260048036038101906101ad9190612139565b6105a3565b6040516101bf9190612117565b60405180910390f35b6101e260048036038101906101dd9190612363565b610706565b005b6101fe60048036038101906101f991906124d3565b6107a7565b005b61021a600480360381019061021591906125f2565b610848565b6040516102279190612728565b60405180910390f35b61024a6004803603810190610245919061274a565b610961565b005b6102546109f0565b005b61025e610a71565b60405161026b91906127a2565b60405180910390f35b61027c610a9b565b6040516102899190612117565b60405180910390f35b6102ac60048036038101906102a791906127e9565b610b29565b005b6102c860048036038101906102c39190612829565b610b3f565b005b6102e460048036038101906102df9190612898565b610c0e565b005b61030060048036038101906102fb91906128eb565b610ca3565b60405161030d9190612063565b60405180910390f35b610330600480360381019061032b919061292b565b610d37565b005b61034c600480360381019061034791906129c2565b610dd8565b005b61036860048036038101906103639190612a45565b610e78565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d290612ae4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104fe57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050e575061050d82610f69565b5b9050919050565b6004805461052290612b33565b80601f016020809104026020016040519081016040528092919081815260200182805461054e90612b33565b801561059b5780601f106105705761010080835404028352916020019161059b565b820191906000526020600020905b81548152906001019060200180831161057e57829003601f168201915b505050505081565b606060006007600084815260200190815260200160002080546105c590612b33565b80601f01602080910402602001604051908101604052809291908181526020018280546105f190612b33565b801561063e5780601f106106135761010080835404028352916020019161063e565b820191906000526020600020905b81548152906001019060200180831161062157829003601f168201915b5050505050905060405180602001604052806000815250805190602001208180519060200120146106725780915050610701565b6006805461067f90612b33565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab90612b33565b80156106f85780601f106106cd576101008083540402835291602001916106f8565b820191906000526020600020905b8154815290600101906020018083116106db57829003601f168201915b50505050509150505b919050565b61070e610fd3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061075457506107538561074e610fd3565b610ca3565b5b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a90612bd7565b60405180910390fd5b6107a08585858585610fdb565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff166107c6610a71565b73ffffffffffffffffffffffffffffffffffffffff161461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390612c43565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190610843929190611e0e565b505050565b6060815183511461088e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088590612cd5565b60405180910390fd5b6000835167ffffffffffffffff8111156108ab576108aa61216b565b5b6040519080825280602002602001820160405280156108d95781602001602082028036833780820191505090505b50905060005b8451811015610956576109268582815181106108fe576108fd612cf5565b5b602002602001015185838151811061091957610918612cf5565b5b602002602001015161036a565b82828151811061093957610938612cf5565b5b6020026020010181815250508061094f90612d53565b90506108df565b508091505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16610980610a71565b73ffffffffffffffffffffffffffffffffffffffff16146109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90612c43565b60405180910390fd5b80600690805190602001906109ec929190611e0e565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610a0f610a71565b73ffffffffffffffffffffffffffffffffffffffff1614610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90612c43565b60405180910390fd5b610a6f60006112fd565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610aa890612b33565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad490612b33565b8015610b215780601f10610af657610100808354040283529160200191610b21565b820191906000526020600020905b815481529060010190602001808311610b0457829003601f168201915b505050505081565b610b3b610b34610fd3565b83836113c3565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610b5e610a71565b73ffffffffffffffffffffffffffffffffffffffff1614610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90612c43565b60405180910390fd5b60005b8351811015610c0857610bf5848281518110610bd657610bd5612cf5565b5b6020026020010151848460405180602001604052806000815250611530565b8080610c0090612d53565b915050610bb7565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16610c2d610a71565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90612c43565b60405180910390fd5b610c9e81848460405180602001604052806000815250611530565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d3f610fd3565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d855750610d8485610d7f610fd3565b610ca3565b5b610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90612bd7565b60405180910390fd5b610dd185858585856116e1565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16610df7610a71565b73ffffffffffffffffffffffffffffffffffffffff1614610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490612c43565b60405180910390fd5b610e5784826107a7565b610e7282858560405180602001604052806000815250611530565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16610e97610a71565b73ffffffffffffffffffffffffffffffffffffffff1614610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490612c43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612de8565b60405180910390fd5b610f66816112fd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690612e7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690612f0c565b60405180910390fd5b6000611099610fd3565b90506110a981878787878761197d565b60005b845181101561125a5760008582815181106110ca576110c9612cf5565b5b6020026020010151905060008583815181106110e9576110e8612cf5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190612f9e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461123f9190612fbe565b925050819055505050508061125390612d53565b90506110ac565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112d1929190613014565b60405180910390a46112e7818787878787611993565b6112f581878787878761199b565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906130bd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115239190612063565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115979061314f565b60405180910390fd5b60006115aa610fd3565b905060006115b785611b82565b905060006115c485611b82565b90506115d58360008985858961197d565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116349190612fbe565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516116b292919061316f565b60405180910390a46116c983600089858589611993565b6116d883600089898989611bfc565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890612f0c565b60405180910390fd5b600061175b610fd3565b9050600061176885611b82565b9050600061177585611b82565b905061178583898985858961197d565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390612f9e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d19190612fbe565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161194e92919061316f565b60405180910390a4611964848a8a86868a611993565b611972848a8a8a8a8a611bfc565b505050505050505050565b61198b868686868686611de3565b505050505050565b505050505050565b6119ba8473ffffffffffffffffffffffffffffffffffffffff16611deb565b15611b7a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a009594939291906131ed565b602060405180830381600087803b158015611a1a57600080fd5b505af1925050508015611a4b57506040513d601f19601f82011682018060405250810190611a48919061326a565b60015b611af157611a576132a4565b806308c379a01415611ab45750611a6c6132c6565b80611a775750611ab6565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab9190612117565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae8906133ce565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613460565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611ba157611ba061216b565b5b604051908082528060200260200182016040528015611bcf5781602001602082028036833780820191505090505b5090508281600081518110611be757611be6612cf5565b5b60200260200101818152505080915050919050565b611c1b8473ffffffffffffffffffffffffffffffffffffffff16611deb565b15611ddb578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611c61959493929190613480565b602060405180830381600087803b158015611c7b57600080fd5b505af1925050508015611cac57506040513d601f19601f82011682018060405250810190611ca9919061326a565b60015b611d5257611cb86132a4565b806308c379a01415611d155750611ccd6132c6565b80611cd85750611d17565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c9190612117565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d49906133ce565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613460565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611e1a90612b33565b90600052602060002090601f016020900481019282611e3c5760008555611e83565b82601f10611e5557805160ff1916838001178555611e83565b82800160010185558215611e83579182015b82811115611e82578251825591602001919060010190611e67565b5b509050611e909190611e94565b5090565b5b80821115611ead576000816000905550600101611e95565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ef082611ec5565b9050919050565b611f0081611ee5565b8114611f0b57600080fd5b50565b600081359050611f1d81611ef7565b92915050565b6000819050919050565b611f3681611f23565b8114611f4157600080fd5b50565b600081359050611f5381611f2d565b92915050565b60008060408385031215611f7057611f6f611ebb565b5b6000611f7e85828601611f0e565b9250506020611f8f85828601611f44565b9150509250929050565b611fa281611f23565b82525050565b6000602082019050611fbd6000830184611f99565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ff881611fc3565b811461200357600080fd5b50565b60008135905061201581611fef565b92915050565b60006020828403121561203157612030611ebb565b5b600061203f84828501612006565b91505092915050565b60008115159050919050565b61205d81612048565b82525050565b60006020820190506120786000830184612054565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120b857808201518184015260208101905061209d565b838111156120c7576000848401525b50505050565b6000601f19601f8301169050919050565b60006120e98261207e565b6120f38185612089565b935061210381856020860161209a565b61210c816120cd565b840191505092915050565b6000602082019050818103600083015261213181846120de565b905092915050565b60006020828403121561214f5761214e611ebb565b5b600061215d84828501611f44565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121a3826120cd565b810181811067ffffffffffffffff821117156121c2576121c161216b565b5b80604052505050565b60006121d5611eb1565b90506121e1828261219a565b919050565b600067ffffffffffffffff8211156122015761220061216b565b5b602082029050602081019050919050565b600080fd5b600061222a612225846121e6565b6121cb565b9050808382526020820190506020840283018581111561224d5761224c612212565b5b835b8181101561227657806122628882611f44565b84526020840193505060208101905061224f565b5050509392505050565b600082601f83011261229557612294612166565b5b81356122a5848260208601612217565b91505092915050565b600080fd5b600067ffffffffffffffff8211156122ce576122cd61216b565b5b6122d7826120cd565b9050602081019050919050565b82818337600083830152505050565b6000612306612301846122b3565b6121cb565b905082815260208101848484011115612322576123216122ae565b5b61232d8482856122e4565b509392505050565b600082601f83011261234a57612349612166565b5b813561235a8482602086016122f3565b91505092915050565b600080600080600060a0868803121561237f5761237e611ebb565b5b600061238d88828901611f0e565b955050602061239e88828901611f0e565b945050604086013567ffffffffffffffff8111156123bf576123be611ec0565b5b6123cb88828901612280565b935050606086013567ffffffffffffffff8111156123ec576123eb611ec0565b5b6123f888828901612280565b925050608086013567ffffffffffffffff81111561241957612418611ec0565b5b61242588828901612335565b9150509295509295909350565b600067ffffffffffffffff82111561244d5761244c61216b565b5b612456826120cd565b9050602081019050919050565b600061247661247184612432565b6121cb565b905082815260208101848484011115612492576124916122ae565b5b61249d8482856122e4565b509392505050565b600082601f8301126124ba576124b9612166565b5b81356124ca848260208601612463565b91505092915050565b600080604083850312156124ea576124e9611ebb565b5b60006124f885828601611f44565b925050602083013567ffffffffffffffff81111561251957612518611ec0565b5b612525858286016124a5565b9150509250929050565b600067ffffffffffffffff82111561254a5761254961216b565b5b602082029050602081019050919050565b600061256e6125698461252f565b6121cb565b9050808382526020820190506020840283018581111561259157612590612212565b5b835b818110156125ba57806125a68882611f0e565b845260208401935050602081019050612593565b5050509392505050565b600082601f8301126125d9576125d8612166565b5b81356125e984826020860161255b565b91505092915050565b6000806040838503121561260957612608611ebb565b5b600083013567ffffffffffffffff81111561262757612626611ec0565b5b612633858286016125c4565b925050602083013567ffffffffffffffff81111561265457612653611ec0565b5b61266085828601612280565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61269f81611f23565b82525050565b60006126b18383612696565b60208301905092915050565b6000602082019050919050565b60006126d58261266a565b6126df8185612675565b93506126ea83612686565b8060005b8381101561271b57815161270288826126a5565b975061270d836126bd565b9250506001810190506126ee565b5085935050505092915050565b6000602082019050818103600083015261274281846126ca565b905092915050565b6000602082840312156127605761275f611ebb565b5b600082013567ffffffffffffffff81111561277e5761277d611ec0565b5b61278a848285016124a5565b91505092915050565b61279c81611ee5565b82525050565b60006020820190506127b76000830184612793565b92915050565b6127c681612048565b81146127d157600080fd5b50565b6000813590506127e3816127bd565b92915050565b60008060408385031215612800576127ff611ebb565b5b600061280e85828601611f0e565b925050602061281f858286016127d4565b9150509250929050565b60008060006060848603121561284257612841611ebb565b5b600084013567ffffffffffffffff8111156128605761285f611ec0565b5b61286c868287016125c4565b935050602061287d86828701611f44565b925050604061288e86828701611f44565b9150509250925092565b6000806000606084860312156128b1576128b0611ebb565b5b60006128bf86828701611f44565b93505060206128d086828701611f44565b92505060406128e186828701611f0e565b9150509250925092565b6000806040838503121561290257612901611ebb565b5b600061291085828601611f0e565b925050602061292185828601611f0e565b9150509250929050565b600080600080600060a0868803121561294757612946611ebb565b5b600061295588828901611f0e565b955050602061296688828901611f0e565b945050604061297788828901611f44565b935050606061298888828901611f44565b925050608086013567ffffffffffffffff8111156129a9576129a8611ec0565b5b6129b588828901612335565b9150509295509295909350565b600080600080608085870312156129dc576129db611ebb565b5b60006129ea87828801611f44565b94505060206129fb87828801611f44565b9350506040612a0c87828801611f0e565b925050606085013567ffffffffffffffff811115612a2d57612a2c611ec0565b5b612a39878288016124a5565b91505092959194509250565b600060208284031215612a5b57612a5a611ebb565b5b6000612a6984828501611f0e565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612ace602a83612089565b9150612ad982612a72565b604082019050919050565b60006020820190508181036000830152612afd81612ac1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b4b57607f821691505b60208210811415612b5f57612b5e612b04565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612bc1602e83612089565b9150612bcc82612b65565b604082019050919050565b60006020820190508181036000830152612bf081612bb4565b9050919050565b7f596f7520617265206e6f7420746865206f776e65720000000000000000000000600082015250565b6000612c2d601583612089565b9150612c3882612bf7565b602082019050919050565b60006020820190508181036000830152612c5c81612c20565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612cbf602983612089565b9150612cca82612c63565b604082019050919050565b60006020820190508181036000830152612cee81612cb2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5e82611f23565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d9157612d90612d24565b5b600182019050919050565b7f7a65726f20616464726573732063616e206e6f74206265206f776e6572000000600082015250565b6000612dd2601d83612089565b9150612ddd82612d9c565b602082019050919050565b60006020820190508181036000830152612e0181612dc5565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612e64602883612089565b9150612e6f82612e08565b604082019050919050565b60006020820190508181036000830152612e9381612e57565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ef6602583612089565b9150612f0182612e9a565b604082019050919050565b60006020820190508181036000830152612f2581612ee9565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612f88602a83612089565b9150612f9382612f2c565b604082019050919050565b60006020820190508181036000830152612fb781612f7b565b9050919050565b6000612fc982611f23565b9150612fd483611f23565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561300957613008612d24565b5b828201905092915050565b6000604082019050818103600083015261302e81856126ca565b9050818103602083015261304281846126ca565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006130a7602983612089565b91506130b28261304b565b604082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613139602183612089565b9150613144826130dd565b604082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b60006040820190506131846000830185611f99565b6131916020830184611f99565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006131bf82613198565b6131c981856131a3565b93506131d981856020860161209a565b6131e2816120cd565b840191505092915050565b600060a0820190506132026000830188612793565b61320f6020830187612793565b818103604083015261322181866126ca565b9050818103606083015261323581856126ca565b9050818103608083015261324981846131b4565b90509695505050505050565b60008151905061326481611fef565b92915050565b6000602082840312156132805761327f611ebb565b5b600061328e84828501613255565b91505092915050565b60008160e01c9050919050565b600060033d11156132c35760046000803e6132c0600051613297565b90505b90565b600060443d10156132d657613359565b6132de611eb1565b60043d036004823e80513d602482011167ffffffffffffffff82111715613306575050613359565b808201805167ffffffffffffffff8111156133245750505050613359565b80602083010160043d038501811115613341575050505050613359565b6133508260200185018661219a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006133b8603483612089565b91506133c38261335c565b604082019050919050565b600060208201905081810360008301526133e7816133ab565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061344a602883612089565b9150613455826133ee565b604082019050919050565b600060208201905081810360008301526134798161343d565b9050919050565b600060a0820190506134956000830188612793565b6134a26020830187612793565b6134af6040830186611f99565b6134bc6060830185611f99565b81810360808301526134ce81846131b4565b9050969550505050505056fea26469706673582212201ffd628b4494ccee8e502783262edf7c441d3aae09672364958139ad93912d7464736f6c634300080900330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045345454400000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
39203:1851:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23611:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22634:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39252:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40264:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25554:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40520:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24007:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40640:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;999:103;;;:::i;:::-;;487:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39275:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24604:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40015:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39625:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24831:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25071:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39778:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1276:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23611:230;23697:7;23744:1;23725:21;;:7;:21;;;;23717:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23811:9;:13;23821:2;23811:13;;;;;;;;;;;:22;23825:7;23811:22;;;;;;;;;;;;;;;;23804:29;;23611:230;;;;:::o;22634:310::-;22736:4;22788:26;22773:41;;;:11;:41;;;;:110;;;;22846:37;22831:52;;;:11;:52;;;;22773:110;:163;;;;22900:36;22924:11;22900:23;:36::i;:::-;22773:163;22753:183;;22634:310;;;:::o;39252:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40264:250::-;40327:13;40349:23;40375:11;:15;40387:2;40375:15;;;;;;;;;;;40349:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40444:9;;;;;;;;;;;;40434:20;;;;;;40419:9;40403:27;;;;;;:51;40399:90;;40472:9;40465:16;;;;;40399:90;40504:4;40497:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40264:250;;;;:::o;25554:438::-;25795:12;:10;:12::i;:::-;25787:20;;:4;:20;;;:60;;;;25811:36;25828:4;25834:12;:10;:12::i;:::-;25811:16;:36::i;:::-;25787:60;25765:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;25932:52;25955:4;25961:2;25965:3;25970:7;25979:4;25932:22;:52::i;:::-;25554:438;;;;;:::o;40520:114::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40620:8:::1;40602:11;:15;40614:2;40602:15;;;;;;;;;;;:26;;;;;;;;;;;;:::i;:::-;;40520:114:::0;;:::o;24007:524::-;24163:16;24224:3;:10;24205:8;:15;:29;24197:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24293:30;24340:8;:15;24326:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24293:63;;24374:9;24369:122;24393:8;:15;24389:1;:19;24369:122;;;24449:30;24459:8;24468:1;24459:11;;;;;;;;:::i;:::-;;;;;;;;24472:3;24476:1;24472:6;;;;;;;;:::i;:::-;;;;;;;;24449:9;:30::i;:::-;24430:13;24444:1;24430:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24410:3;;;;:::i;:::-;;;24369:122;;;;24510:13;24503:20;;;24007:524;;;;:::o;40640:87::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40714:7:::1;40707:4;:14;;;;;;;;;;;;:::i;:::-;;40640:87:::0;:::o;999:103::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1064:30:::1;1091:1;1064:18;:30::i;:::-;999:103::o:0;487:87::-;533:7;560:6;;;;;;;;;;;553:13;;487:87;:::o;39275:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24604:155::-;24699:52;24718:12;:10;:12::i;:::-;24732:8;24742;24699:18;:52::i;:::-;24604:155;;:::o;40015:222::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40122:6:::1;40117:113;40138:10;:17;40134:1;:21;40117:113;;;40176:36;40182:10;40193:1;40182:13;;;;;;;;:::i;:::-;;;;;;;;40197:2;40201:6;40176:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;40157:4;;;;;:::i;:::-;;;;40117:113;;;;40015:222:::0;;;:::o;39625:147::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39732:34:::1;39738:11;39751:2;39755:6;39732:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;39625:147:::0;;;:::o;24831:168::-;24930:4;24954:18;:27;24973:7;24954:27;;;;;;;;;;;;;;;:37;24982:8;24954:37;;;;;;;;;;;;;;;;;;;;;;;;;24947:44;;24831:168;;;;:::o;25071:406::-;25287:12;:10;:12::i;:::-;25279:20;;:4;:20;;;:60;;;;25303:36;25320:4;25326:12;:10;:12::i;:::-;25303:16;:36::i;:::-;25279:60;25257:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;25424:45;25442:4;25448:2;25452;25456:6;25464:4;25424:17;:45::i;:::-;25071:406;;;;;:::o;39778:215::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39920:26:::1;39933:2;39937:8;39920:12;:26::i;:::-;39953:34;39959:11;39972:2;39976:6;39953:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;39778:215:::0;;;;:::o;1276:192::-;709:10;698:21;;:7;:5;:7::i;:::-;:21;;;690:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1385:1:::1;1365:22;;:8;:22;;;;1357:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1432:28;1451:8;1432:18;:28::i;:::-;1276:192:::0;:::o;13915:157::-;14000:4;14039:25;14024:40;;;:11;:40;;;;14017:47;;13915:157;;;:::o;2491:98::-;2544:7;2571:10;2564:17;;2491:98;:::o;27788:1146::-;28015:7;:14;28001:3;:10;:28;27993:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28107:1;28093:16;;:2;:16;;;;28085:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28164:16;28183:12;:10;:12::i;:::-;28164:31;;28208:60;28229:8;28239:4;28245:2;28249:3;28254:7;28263:4;28208:20;:60::i;:::-;28286:9;28281:421;28305:3;:10;28301:1;:14;28281:421;;;28337:10;28350:3;28354:1;28350:6;;;;;;;;:::i;:::-;;;;;;;;28337:19;;28371:14;28388:7;28396:1;28388:10;;;;;;;;:::i;:::-;;;;;;;;28371:27;;28415:19;28437:9;:13;28447:2;28437:13;;;;;;;;;;;:19;28451:4;28437:19;;;;;;;;;;;;;;;;28415:41;;28494:6;28479:11;:21;;28471:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28627:6;28613:11;:20;28591:9;:13;28601:2;28591:13;;;;;;;;;;;:19;28605:4;28591:19;;;;;;;;;;;;;;;:42;;;;28684:6;28663:9;:13;28673:2;28663:13;;;;;;;;;;;:17;28677:2;28663:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28322:380;;;28317:3;;;;:::i;:::-;;;28281:421;;;;28749:2;28719:47;;28743:4;28719:47;;28733:8;28719:47;;;28753:3;28758:7;28719:47;;;;;;;:::i;:::-;;;;;;;;28779:59;28799:8;28809:4;28815:2;28819:3;28824:7;28833:4;28779:19;:59::i;:::-;28851:75;28887:8;28897:4;28903:2;28907:3;28912:7;28921:4;28851:35;:75::i;:::-;27982:952;27788:1146;;;;;:::o;1616:191::-;1690:16;1709:6;;;;;;;;;;;1690:25;;1735:8;1726:6;;:17;;;;;;;;;;;;;;;;;;1790:8;1759:40;;1780:8;1759:40;;;;;;;;;;;;1679:128;1616:191;:::o;34665:331::-;34820:8;34811:17;;:5;:17;;;;34803:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34923:8;34885:18;:25;34904:5;34885:25;;;;;;;;;;;;;;;:35;34911:8;34885:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34969:8;34947:41;;34962:5;34947:41;;;34979:8;34947:41;;;;;;:::i;:::-;;;;;;;;34665:331;;;:::o;30252:729::-;30419:1;30405:16;;:2;:16;;;;30397:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30472:16;30491:12;:10;:12::i;:::-;30472:31;;30514:20;30537:21;30555:2;30537:17;:21::i;:::-;30514:44;;30569:24;30596:25;30614:6;30596:17;:25::i;:::-;30569:52;;30634:66;30655:8;30673:1;30677:2;30681:3;30686:7;30695:4;30634:20;:66::i;:::-;30734:6;30713:9;:13;30723:2;30713:13;;;;;;;;;;;:17;30727:2;30713:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30793:2;30756:52;;30789:1;30756:52;;30771:8;30756:52;;;30797:2;30801:6;30756:52;;;;;;;:::i;:::-;;;;;;;;30821:65;30841:8;30859:1;30863:2;30867:3;30872:7;30881:4;30821:19;:65::i;:::-;30899:74;30930:8;30948:1;30952:2;30956;30960:6;30968:4;30899:30;:74::i;:::-;30386:595;;;30252:729;;;;:::o;26456:974::-;26658:1;26644:16;;:2;:16;;;;26636:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:16;26734:12;:10;:12::i;:::-;26715:31;;26757:20;26780:21;26798:2;26780:17;:21::i;:::-;26757:44;;26812:24;26839:25;26857:6;26839:17;:25::i;:::-;26812:52;;26877:60;26898:8;26908:4;26914:2;26918:3;26923:7;26932:4;26877:20;:60::i;:::-;26950:19;26972:9;:13;26982:2;26972:13;;;;;;;;;;;:19;26986:4;26972:19;;;;;;;;;;;;;;;;26950:41;;27025:6;27010:11;:21;;27002:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27150:6;27136:11;:20;27114:9;:13;27124:2;27114:13;;;;;;;;;;;:19;27128:4;27114:19;;;;;;;;;;;;;;;:42;;;;27199:6;27178:9;:13;27188:2;27178:13;;;;;;;;;;;:17;27192:2;27178:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27254:2;27223:46;;27248:4;27223:46;;27238:8;27223:46;;;27258:2;27262:6;27223:46;;;;;;;:::i;:::-;;;;;;;;27282:59;27302:8;27312:4;27318:2;27322:3;27327:7;27336:4;27282:19;:59::i;:::-;27354:68;27385:8;27395:4;27401:2;27405;27409:6;27417:4;27354:30;:68::i;:::-;26625:805;;;;26456:974;;;;;:::o;40740:290::-;40958:66;40985:8;40995:4;41001:2;41005:3;41010:7;41019:4;40958:26;:66::i;:::-;40740:290;;;;;;:::o;37130:220::-;;;;;;;:::o;38110:813::-;38350:15;:2;:13;;;:15::i;:::-;38346:570;;;38403:2;38386:43;;;38430:8;38440:4;38446:3;38451:7;38460:4;38386:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38382:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38778:6;38771:14;;;;;;;;;;;:::i;:::-;;;;;;;;38382:523;;;38827:62;;;;;;;;;;:::i;:::-;;;;;;;;38382:523;38559:48;;;38547:60;;;:8;:60;;;;38543:159;;38632:50;;;;;;;;;;:::i;:::-;;;;;;;;38543:159;38466:251;38346:570;38110:813;;;;;;:::o;38931:198::-;38997:16;39026:22;39065:1;39051:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39026:41;;39089:7;39078:5;39084:1;39078:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39116:5;39109:12;;;38931:198;;;:::o;37358:744::-;37573:15;:2;:13;;;:15::i;:::-;37569:526;;;37626:2;37609:38;;;37648:8;37658:4;37664:2;37668:6;37676:4;37609:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37605:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37957:6;37950:14;;;;;;;;;;;:::i;:::-;;;;;;;;37605:479;;;38006:62;;;;;;;;;;:::i;:::-;;;;;;;;37605:479;37743:43;;;37731:55;;;:8;:55;;;;37727:154;;37811:50;;;;;;;;;;:::i;:::-;;;;;;;;37727:154;37682:214;37569:526;37358:744;;;;;;:::o;35954:221::-;;;;;;;:::o;3938:326::-;3998:4;4255:1;4233:7;:19;;;:23;4226:30;;3938:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:308::-;10181:4;10271:18;10263:6;10260:30;10257:56;;;10293:18;;:::i;:::-;10257:56;10331:29;10353:6;10331:29;:::i;:::-;10323:37;;10415:4;10409;10405:15;10397:23;;10119:308;;;:::o;10433:412::-;10511:5;10536:66;10552:49;10594:6;10552:49;:::i;:::-;10536:66;:::i;:::-;10527:75;;10625:6;10618:5;10611:21;10663:4;10656:5;10652:16;10701:3;10692:6;10687:3;10683:16;10680:25;10677:112;;;10708:79;;:::i;:::-;10677:112;10798:41;10832:6;10827:3;10822;10798:41;:::i;:::-;10517:328;10433:412;;;;;:::o;10865:340::-;10921:5;10970:3;10963:4;10955:6;10951:17;10947:27;10937:122;;10978:79;;:::i;:::-;10937:122;11095:6;11082:20;11120:79;11195:3;11187:6;11180:4;11172:6;11168:17;11120:79;:::i;:::-;11111:88;;10927:278;10865:340;;;;:::o;11211:654::-;11289:6;11297;11346:2;11334:9;11325:7;11321:23;11317:32;11314:119;;;11352:79;;:::i;:::-;11314:119;11472:1;11497:53;11542:7;11533:6;11522:9;11518:22;11497:53;:::i;:::-;11487:63;;11443:117;11627:2;11616:9;11612:18;11599:32;11658:18;11650:6;11647:30;11644:117;;;11680:79;;:::i;:::-;11644:117;11785:63;11840:7;11831:6;11820:9;11816:22;11785:63;:::i;:::-;11775:73;;11570:288;11211:654;;;;;:::o;11871:311::-;11948:4;12038:18;12030:6;12027:30;12024:56;;;12060:18;;:::i;:::-;12024:56;12110:4;12102:6;12098:17;12090:25;;12170:4;12164;12160:15;12152:23;;11871:311;;;:::o;12205:710::-;12301:5;12326:81;12342:64;12399:6;12342:64;:::i;:::-;12326:81;:::i;:::-;12317:90;;12427:5;12456:6;12449:5;12442:21;12490:4;12483:5;12479:16;12472:23;;12543:4;12535:6;12531:17;12523:6;12519:30;12572:3;12564:6;12561:15;12558:122;;;12591:79;;:::i;:::-;12558:122;12706:6;12689:220;12723:6;12718:3;12715:15;12689:220;;;12798:3;12827:37;12860:3;12848:10;12827:37;:::i;:::-;12822:3;12815:50;12894:4;12889:3;12885:14;12878:21;;12765:144;12749:4;12744:3;12740:14;12733:21;;12689:220;;;12693:21;12307:608;;12205:710;;;;;:::o;12938:370::-;13009:5;13058:3;13051:4;13043:6;13039:17;13035:27;13025:122;;13066:79;;:::i;:::-;13025:122;13183:6;13170:20;13208:94;13298:3;13290:6;13283:4;13275:6;13271:17;13208:94;:::i;:::-;13199:103;;13015:293;12938:370;;;;:::o;13314:894::-;13432:6;13440;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13643:1;13632:9;13628:17;13615:31;13673:18;13665:6;13662:30;13659:117;;;13695:79;;:::i;:::-;13659:117;13800:78;13870:7;13861:6;13850:9;13846:22;13800:78;:::i;:::-;13790:88;;13586:302;13955:2;13944:9;13940:18;13927:32;13986:18;13978:6;13975:30;13972:117;;;14008:79;;:::i;:::-;13972:117;14113:78;14183:7;14174:6;14163:9;14159:22;14113:78;:::i;:::-;14103:88;;13898:303;13314:894;;;;;:::o;14214:114::-;14281:6;14315:5;14309:12;14299:22;;14214:114;;;:::o;14334:184::-;14433:11;14467:6;14462:3;14455:19;14507:4;14502:3;14498:14;14483:29;;14334:184;;;;:::o;14524:132::-;14591:4;14614:3;14606:11;;14644:4;14639:3;14635:14;14627:22;;14524:132;;;:::o;14662:108::-;14739:24;14757:5;14739:24;:::i;:::-;14734:3;14727:37;14662:108;;:::o;14776:179::-;14845:10;14866:46;14908:3;14900:6;14866:46;:::i;:::-;14944:4;14939:3;14935:14;14921:28;;14776:179;;;;:::o;14961:113::-;15031:4;15063;15058:3;15054:14;15046:22;;14961:113;;;:::o;15110:732::-;15229:3;15258:54;15306:5;15258:54;:::i;:::-;15328:86;15407:6;15402:3;15328:86;:::i;:::-;15321:93;;15438:56;15488:5;15438:56;:::i;:::-;15517:7;15548:1;15533:284;15558:6;15555:1;15552:13;15533:284;;;15634:6;15628:13;15661:63;15720:3;15705:13;15661:63;:::i;:::-;15654:70;;15747:60;15800:6;15747:60;:::i;:::-;15737:70;;15593:224;15580:1;15577;15573:9;15568:14;;15533:284;;;15537:14;15833:3;15826:10;;15234:608;;;15110:732;;;;:::o;15848:373::-;15991:4;16029:2;16018:9;16014:18;16006:26;;16078:9;16072:4;16068:20;16064:1;16053:9;16049:17;16042:47;16106:108;16209:4;16200:6;16106:108;:::i;:::-;16098:116;;15848:373;;;;:::o;16227:509::-;16296:6;16345:2;16333:9;16324:7;16320:23;16316:32;16313:119;;;16351:79;;:::i;:::-;16313:119;16499:1;16488:9;16484:17;16471:31;16529:18;16521:6;16518:30;16515:117;;;16551:79;;:::i;:::-;16515:117;16656:63;16711:7;16702:6;16691:9;16687:22;16656:63;:::i;:::-;16646:73;;16442:287;16227:509;;;;:::o;16742:118::-;16829:24;16847:5;16829:24;:::i;:::-;16824:3;16817:37;16742:118;;:::o;16866:222::-;16959:4;16997:2;16986:9;16982:18;16974:26;;17010:71;17078:1;17067:9;17063:17;17054:6;17010:71;:::i;:::-;16866:222;;;;:::o;17094:116::-;17164:21;17179:5;17164:21;:::i;:::-;17157:5;17154:32;17144:60;;17200:1;17197;17190:12;17144:60;17094:116;:::o;17216:133::-;17259:5;17297:6;17284:20;17275:29;;17313:30;17337:5;17313:30;:::i;:::-;17216:133;;;;:::o;17355:468::-;17420:6;17428;17477:2;17465:9;17456:7;17452:23;17448:32;17445:119;;;17483:79;;:::i;:::-;17445:119;17603:1;17628:53;17673:7;17664:6;17653:9;17649:22;17628:53;:::i;:::-;17618:63;;17574:117;17730:2;17756:50;17798:7;17789:6;17778:9;17774:22;17756:50;:::i;:::-;17746:60;;17701:115;17355:468;;;;;:::o;17829:829::-;17931:6;17939;17947;17996:2;17984:9;17975:7;17971:23;17967:32;17964:119;;;18002:79;;:::i;:::-;17964:119;18150:1;18139:9;18135:17;18122:31;18180:18;18172:6;18169:30;18166:117;;;18202:79;;:::i;:::-;18166:117;18307:78;18377:7;18368:6;18357:9;18353:22;18307:78;:::i;:::-;18297:88;;18093:302;18434:2;18460:53;18505:7;18496:6;18485:9;18481:22;18460:53;:::i;:::-;18450:63;;18405:118;18562:2;18588:53;18633:7;18624:6;18613:9;18609:22;18588:53;:::i;:::-;18578:63;;18533:118;17829:829;;;;;:::o;18664:619::-;18741:6;18749;18757;18806:2;18794:9;18785:7;18781:23;18777:32;18774:119;;;18812:79;;:::i;:::-;18774:119;18932:1;18957:53;19002:7;18993:6;18982:9;18978:22;18957:53;:::i;:::-;18947:63;;18903:117;19059:2;19085:53;19130:7;19121:6;19110:9;19106:22;19085:53;:::i;:::-;19075:63;;19030:118;19187:2;19213:53;19258:7;19249:6;19238:9;19234:22;19213:53;:::i;:::-;19203:63;;19158:118;18664:619;;;;;:::o;19289:474::-;19357:6;19365;19414:2;19402:9;19393:7;19389:23;19385:32;19382:119;;;19420:79;;:::i;:::-;19382:119;19540:1;19565:53;19610:7;19601:6;19590:9;19586:22;19565:53;:::i;:::-;19555:63;;19511:117;19667:2;19693:53;19738:7;19729:6;19718:9;19714:22;19693:53;:::i;:::-;19683:63;;19638:118;19289:474;;;;;:::o;19769:1089::-;19873:6;19881;19889;19897;19905;19954:3;19942:9;19933:7;19929:23;19925:33;19922:120;;;19961:79;;:::i;:::-;19922:120;20081:1;20106:53;20151:7;20142:6;20131:9;20127:22;20106:53;:::i;:::-;20096:63;;20052:117;20208:2;20234:53;20279:7;20270:6;20259:9;20255:22;20234:53;:::i;:::-;20224:63;;20179:118;20336:2;20362:53;20407:7;20398:6;20387:9;20383:22;20362:53;:::i;:::-;20352:63;;20307:118;20464:2;20490:53;20535:7;20526:6;20515:9;20511:22;20490:53;:::i;:::-;20480:63;;20435:118;20620:3;20609:9;20605:19;20592:33;20652:18;20644:6;20641:30;20638:117;;;20674:79;;:::i;:::-;20638:117;20779:62;20833:7;20824:6;20813:9;20809:22;20779:62;:::i;:::-;20769:72;;20563:288;19769:1089;;;;;;;;:::o;20864:945::-;20960:6;20968;20976;20984;21033:3;21021:9;21012:7;21008:23;21004:33;21001:120;;;21040:79;;:::i;:::-;21001:120;21160:1;21185:53;21230:7;21221:6;21210:9;21206:22;21185:53;:::i;:::-;21175:63;;21131:117;21287:2;21313:53;21358:7;21349:6;21338:9;21334:22;21313:53;:::i;:::-;21303:63;;21258:118;21415:2;21441:53;21486:7;21477:6;21466:9;21462:22;21441:53;:::i;:::-;21431:63;;21386:118;21571:2;21560:9;21556:18;21543:32;21602:18;21594:6;21591:30;21588:117;;;21624:79;;:::i;:::-;21588:117;21729:63;21784:7;21775:6;21764:9;21760:22;21729:63;:::i;:::-;21719:73;;21514:288;20864:945;;;;;;;:::o;21815:329::-;21874:6;21923:2;21911:9;21902:7;21898:23;21894:32;21891:119;;;21929:79;;:::i;:::-;21891:119;22049:1;22074:53;22119:7;22110:6;22099:9;22095:22;22074:53;:::i;:::-;22064:63;;22020:117;21815:329;;;;:::o;22150:229::-;22290:34;22286:1;22278:6;22274:14;22267:58;22359:12;22354:2;22346:6;22342:15;22335:37;22150:229;:::o;22385:366::-;22527:3;22548:67;22612:2;22607:3;22548:67;:::i;:::-;22541:74;;22624:93;22713:3;22624:93;:::i;:::-;22742:2;22737:3;22733:12;22726:19;;22385:366;;;:::o;22757:419::-;22923:4;22961:2;22950:9;22946:18;22938:26;;23010:9;23004:4;23000:20;22996:1;22985:9;22981:17;22974:47;23038:131;23164:4;23038:131;:::i;:::-;23030:139;;22757:419;;;:::o;23182:180::-;23230:77;23227:1;23220:88;23327:4;23324:1;23317:15;23351:4;23348:1;23341:15;23368:320;23412:6;23449:1;23443:4;23439:12;23429:22;;23496:1;23490:4;23486:12;23517:18;23507:81;;23573:4;23565:6;23561:17;23551:27;;23507:81;23635:2;23627:6;23624:14;23604:18;23601:38;23598:84;;;23654:18;;:::i;:::-;23598:84;23419:269;23368:320;;;:::o;23694:233::-;23834:34;23830:1;23822:6;23818:14;23811:58;23903:16;23898:2;23890:6;23886:15;23879:41;23694:233;:::o;23933:366::-;24075:3;24096:67;24160:2;24155:3;24096:67;:::i;:::-;24089:74;;24172:93;24261:3;24172:93;:::i;:::-;24290:2;24285:3;24281:12;24274:19;;23933:366;;;:::o;24305:419::-;24471:4;24509:2;24498:9;24494:18;24486:26;;24558:9;24552:4;24548:20;24544:1;24533:9;24529:17;24522:47;24586:131;24712:4;24586:131;:::i;:::-;24578:139;;24305:419;;;:::o;24730:171::-;24870:23;24866:1;24858:6;24854:14;24847:47;24730:171;:::o;24907:366::-;25049:3;25070:67;25134:2;25129:3;25070:67;:::i;:::-;25063:74;;25146:93;25235:3;25146:93;:::i;:::-;25264:2;25259:3;25255:12;25248:19;;24907:366;;;:::o;25279:419::-;25445:4;25483:2;25472:9;25468:18;25460:26;;25532:9;25526:4;25522:20;25518:1;25507:9;25503:17;25496:47;25560:131;25686:4;25560:131;:::i;:::-;25552:139;;25279:419;;;:::o;25704:228::-;25844:34;25840:1;25832:6;25828:14;25821:58;25913:11;25908:2;25900:6;25896:15;25889:36;25704:228;:::o;25938:366::-;26080:3;26101:67;26165:2;26160:3;26101:67;:::i;:::-;26094:74;;26177:93;26266:3;26177:93;:::i;:::-;26295:2;26290:3;26286:12;26279:19;;25938:366;;;:::o;26310:419::-;26476:4;26514:2;26503:9;26499:18;26491:26;;26563:9;26557:4;26553:20;26549:1;26538:9;26534:17;26527:47;26591:131;26717:4;26591:131;:::i;:::-;26583:139;;26310:419;;;:::o;26735:180::-;26783:77;26780:1;26773:88;26880:4;26877:1;26870:15;26904:4;26901:1;26894:15;26921:180;26969:77;26966:1;26959:88;27066:4;27063:1;27056:15;27090:4;27087:1;27080:15;27107:233;27146:3;27169:24;27187:5;27169:24;:::i;:::-;27160:33;;27215:66;27208:5;27205:77;27202:103;;;27285:18;;:::i;:::-;27202:103;27332:1;27325:5;27321:13;27314:20;;27107:233;;;:::o;27346:179::-;27486:31;27482:1;27474:6;27470:14;27463:55;27346:179;:::o;27531:366::-;27673:3;27694:67;27758:2;27753:3;27694:67;:::i;:::-;27687:74;;27770:93;27859:3;27770:93;:::i;:::-;27888:2;27883:3;27879:12;27872:19;;27531:366;;;:::o;27903:419::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;27903:419;;;:::o;28328:227::-;28468:34;28464:1;28456:6;28452:14;28445:58;28537:10;28532:2;28524:6;28520:15;28513:35;28328:227;:::o;28561:366::-;28703:3;28724:67;28788:2;28783:3;28724:67;:::i;:::-;28717:74;;28800:93;28889:3;28800:93;:::i;:::-;28918:2;28913:3;28909:12;28902:19;;28561:366;;;:::o;28933:419::-;29099:4;29137:2;29126:9;29122:18;29114:26;;29186:9;29180:4;29176:20;29172:1;29161:9;29157:17;29150:47;29214:131;29340:4;29214:131;:::i;:::-;29206:139;;28933:419;;;:::o;29358:224::-;29498:34;29494:1;29486:6;29482:14;29475:58;29567:7;29562:2;29554:6;29550:15;29543:32;29358:224;:::o;29588:366::-;29730:3;29751:67;29815:2;29810:3;29751:67;:::i;:::-;29744:74;;29827:93;29916:3;29827:93;:::i;:::-;29945:2;29940:3;29936:12;29929:19;;29588:366;;;:::o;29960:419::-;30126:4;30164:2;30153:9;30149:18;30141:26;;30213:9;30207:4;30203:20;30199:1;30188:9;30184:17;30177:47;30241:131;30367:4;30241:131;:::i;:::-;30233:139;;29960:419;;;:::o;30385:229::-;30525:34;30521:1;30513:6;30509:14;30502:58;30594:12;30589:2;30581:6;30577:15;30570:37;30385:229;:::o;30620:366::-;30762:3;30783:67;30847:2;30842:3;30783:67;:::i;:::-;30776:74;;30859:93;30948:3;30859:93;:::i;:::-;30977:2;30972:3;30968:12;30961:19;;30620:366;;;:::o;30992:419::-;31158:4;31196:2;31185:9;31181:18;31173:26;;31245:9;31239:4;31235:20;31231:1;31220:9;31216:17;31209:47;31273:131;31399:4;31273:131;:::i;:::-;31265:139;;30992:419;;;:::o;31417:305::-;31457:3;31476:20;31494:1;31476:20;:::i;:::-;31471:25;;31510:20;31528:1;31510:20;:::i;:::-;31505:25;;31664:1;31596:66;31592:74;31589:1;31586:81;31583:107;;;31670:18;;:::i;:::-;31583:107;31714:1;31711;31707:9;31700:16;;31417:305;;;;:::o;31728:634::-;31949:4;31987:2;31976:9;31972:18;31964:26;;32036:9;32030:4;32026:20;32022:1;32011:9;32007:17;32000:47;32064:108;32167:4;32158:6;32064:108;:::i;:::-;32056:116;;32219:9;32213:4;32209:20;32204:2;32193:9;32189:18;32182:48;32247:108;32350:4;32341:6;32247:108;:::i;:::-;32239:116;;31728:634;;;;;:::o;32368:228::-;32508:34;32504:1;32496:6;32492:14;32485:58;32577:11;32572:2;32564:6;32560:15;32553:36;32368:228;:::o;32602:366::-;32744:3;32765:67;32829:2;32824:3;32765:67;:::i;:::-;32758:74;;32841:93;32930:3;32841:93;:::i;:::-;32959:2;32954:3;32950:12;32943:19;;32602:366;;;:::o;32974:419::-;33140:4;33178:2;33167:9;33163:18;33155:26;;33227:9;33221:4;33217:20;33213:1;33202:9;33198:17;33191:47;33255:131;33381:4;33255:131;:::i;:::-;33247:139;;32974:419;;;:::o;33399:220::-;33539:34;33535:1;33527:6;33523:14;33516:58;33608:3;33603:2;33595:6;33591:15;33584:28;33399:220;:::o;33625:366::-;33767:3;33788:67;33852:2;33847:3;33788:67;:::i;:::-;33781:74;;33864:93;33953:3;33864:93;:::i;:::-;33982:2;33977:3;33973:12;33966:19;;33625:366;;;:::o;33997:419::-;34163:4;34201:2;34190:9;34186:18;34178:26;;34250:9;34244:4;34240:20;34236:1;34225:9;34221:17;34214:47;34278:131;34404:4;34278:131;:::i;:::-;34270:139;;33997:419;;;:::o;34422:332::-;34543:4;34581:2;34570:9;34566:18;34558:26;;34594:71;34662:1;34651:9;34647:17;34638:6;34594:71;:::i;:::-;34675:72;34743:2;34732:9;34728:18;34719:6;34675:72;:::i;:::-;34422:332;;;;;:::o;34760:98::-;34811:6;34845:5;34839:12;34829:22;;34760:98;;;:::o;34864:168::-;34947:11;34981:6;34976:3;34969:19;35021:4;35016:3;35012:14;34997:29;;34864:168;;;;:::o;35038:360::-;35124:3;35152:38;35184:5;35152:38;:::i;:::-;35206:70;35269:6;35264:3;35206:70;:::i;:::-;35199:77;;35285:52;35330:6;35325:3;35318:4;35311:5;35307:16;35285:52;:::i;:::-;35362:29;35384:6;35362:29;:::i;:::-;35357:3;35353:39;35346:46;;35128:270;35038:360;;;;:::o;35404:1053::-;35727:4;35765:3;35754:9;35750:19;35742:27;;35779:71;35847:1;35836:9;35832:17;35823:6;35779:71;:::i;:::-;35860:72;35928:2;35917:9;35913:18;35904:6;35860:72;:::i;:::-;35979:9;35973:4;35969:20;35964:2;35953:9;35949:18;35942:48;36007:108;36110:4;36101:6;36007:108;:::i;:::-;35999:116;;36162:9;36156:4;36152:20;36147:2;36136:9;36132:18;36125:48;36190:108;36293:4;36284:6;36190:108;:::i;:::-;36182:116;;36346:9;36340:4;36336:20;36330:3;36319:9;36315:19;36308:49;36374:76;36445:4;36436:6;36374:76;:::i;:::-;36366:84;;35404:1053;;;;;;;;:::o;36463:141::-;36519:5;36550:6;36544:13;36535:22;;36566:32;36592:5;36566:32;:::i;:::-;36463:141;;;;:::o;36610:349::-;36679:6;36728:2;36716:9;36707:7;36703:23;36699:32;36696:119;;;36734:79;;:::i;:::-;36696:119;36854:1;36879:63;36934:7;36925:6;36914:9;36910:22;36879:63;:::i;:::-;36869:73;;36825:127;36610:349;;;;:::o;36965:106::-;37009:8;37058:5;37053:3;37049:15;37028:36;;36965:106;;;:::o;37077:183::-;37112:3;37150:1;37132:16;37129:23;37126:128;;;37188:1;37185;37182;37167:23;37210:34;37241:1;37235:8;37210:34;:::i;:::-;37203:41;;37126:128;37077:183;:::o;37266:711::-;37305:3;37343:4;37325:16;37322:26;37319:39;;;37351:5;;37319:39;37380:20;;:::i;:::-;37455:1;37437:16;37433:24;37430:1;37424:4;37409:49;37488:4;37482:11;37587:16;37580:4;37572:6;37568:17;37565:39;37532:18;37524:6;37521:30;37505:113;37502:146;;;37633:5;;;;37502:146;37679:6;37673:4;37669:17;37715:3;37709:10;37742:18;37734:6;37731:30;37728:43;;;37764:5;;;;;;37728:43;37812:6;37805:4;37800:3;37796:14;37792:27;37871:1;37853:16;37849:24;37843:4;37839:35;37834:3;37831:44;37828:57;;;37878:5;;;;;;;37828:57;37895;37943:6;37937:4;37933:17;37925:6;37921:30;37915:4;37895:57;:::i;:::-;37968:3;37961:10;;37309:668;;;;;37266:711;;:::o;37983:239::-;38123:34;38119:1;38111:6;38107:14;38100:58;38192:22;38187:2;38179:6;38175:15;38168:47;37983:239;:::o;38228:366::-;38370:3;38391:67;38455:2;38450:3;38391:67;:::i;:::-;38384:74;;38467:93;38556:3;38467:93;:::i;:::-;38585:2;38580:3;38576:12;38569:19;;38228:366;;;:::o;38600:419::-;38766:4;38804:2;38793:9;38789:18;38781:26;;38853:9;38847:4;38843:20;38839:1;38828:9;38824:17;38817:47;38881:131;39007:4;38881:131;:::i;:::-;38873:139;;38600:419;;;:::o;39025:227::-;39165:34;39161:1;39153:6;39149:14;39142:58;39234:10;39229:2;39221:6;39217:15;39210:35;39025:227;:::o;39258:366::-;39400:3;39421:67;39485:2;39480:3;39421:67;:::i;:::-;39414:74;;39497:93;39586:3;39497:93;:::i;:::-;39615:2;39610:3;39606:12;39599:19;;39258:366;;;:::o;39630:419::-;39796:4;39834:2;39823:9;39819:18;39811:26;;39883:9;39877:4;39873:20;39869:1;39858:9;39854:17;39847:47;39911:131;40037:4;39911:131;:::i;:::-;39903:139;;39630:419;;;:::o;40055:751::-;40278:4;40316:3;40305:9;40301:19;40293:27;;40330:71;40398:1;40387:9;40383:17;40374:6;40330:71;:::i;:::-;40411:72;40479:2;40468:9;40464:18;40455:6;40411:72;:::i;:::-;40493;40561:2;40550:9;40546:18;40537:6;40493:72;:::i;:::-;40575;40643:2;40632:9;40628:18;40619:6;40575:72;:::i;:::-;40695:9;40689:4;40685:20;40679:3;40668:9;40664:19;40657:49;40723:76;40794:4;40785:6;40723:76;:::i;:::-;40715:84;;40055:751;;;;;;;;:::o
Swarm Source
ipfs://1ffd628b4494ccee8e502783262edf7c441d3aae09672364958139ad93912d74
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.