Contract Overview
[ Download CSV Export ]
Contract Name:
ShowtimeMT
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-08-26 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; // File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol /** * @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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155.sol /** * @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 be 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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155MetadataURI.sol /** * @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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol /** * _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. 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. 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: node_modules\@openzeppelin\contracts\utils\Context.sol /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: node_modules\@openzeppelin\contracts\introspection\ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: node_modules\@openzeppelin\contracts\math\SafeMath.sol /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: node_modules\@openzeppelin\contracts\utils\Address.sol /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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 functionCall(target, data, "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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(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) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(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) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin\contracts\token\ERC1155\ERC1155.sol /** * * @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 SafeMath for uint256; 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; /* * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4 * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6 * * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^ * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26 */ bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26; /* * bytes4(keccak256('uri(uint256)')) == 0x0e89341c */ bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c; /** * @dev See {_setURI}. */ constructor (string memory uri_) public { _setURI(uri_); // register the supported interfaces to conform to ERC1155 via ERC165 _registerInterface(_INTERFACE_ID_ERC1155); // register the supported interfaces to conform to ERC1155MetadataURI via ERC165 _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI); } /** * @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) external 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: balance query for the zero address"); 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 { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer"); _balances[id][to] = _balances[id][to].add(amount); emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, 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(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); 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]; _balances[id][from] = _balances[id][from].sub( amount, "ERC1155: insufficient balance for transfer" ); _balances[id][to] = _balances[id][to].add(amount); } emit TransferBatch(operator, from, to, ids, amounts); _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 `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] = _balances[id][account].add(amount); emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 (uint i = 0; i < ids.length; i++) { _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]); } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); _balances[id][account] = _balances[id][account].sub( amount, "ERC1155: burn amount exceeds balance" ); emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][account] = _balances[ids[i]][account].sub( amounts[i], "ERC1155: burn amount exceeds balance" ); } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @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 `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 _beforeTokenTransfer( 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(to).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(to).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: @openzeppelin\contracts\utils\Counters.sol /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } // File: @openzeppelin\contracts\token\ERC1155\ERC1155Burnable.sol /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn(address account, uint256 id, uint256 value) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin\contracts\access\Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts\utils\AccessProtected.sol abstract contract AccessProtected is Context, Ownable { mapping(address => bool) private _admins; // user address => admin? mapping mapping(address => bool) private _minters; // user address => minter? mapping bool public publicMinting; event UserAccessSet(address _user, string _access, bool _enabled); /** * @notice Set Admin Access * * @param admin - Address of Minter * @param enabled - Enable/Disable Admin Access */ function setAdmin(address admin, bool enabled) external onlyOwner { require(admin != address(0), "Invalid Admin Address"); _admins[admin] = enabled; emit UserAccessSet(admin, "ADMIN", enabled); } /** * @notice Set Minter Access * * @param minter - Address of Minter * @param enabled - Enable/Disable Admin Access */ function setMinter(address minter, bool enabled) public onlyAdmin { require(minter != address(0), "Invalid Minter Address"); _minters[minter] = enabled; emit UserAccessSet(minter, "MINTER", enabled); } /** * @notice Set Minter Access * * @param minters - Address of Minters * @param enabled - Enable/Disable Admin Access */ function setMinters(address[] calldata minters, bool enabled) external onlyAdmin { for (uint256 i = 0; i < minters.length; i++) { address minter = minters[i]; setMinter(minter, enabled); } } /** * @notice Enable/Disable public Minting * * @param enabled - Enable/Disable */ function setPublicMinting(bool enabled) external onlyAdmin { publicMinting = enabled; emit UserAccessSet(address(0), "MINTER", enabled); } /** * @notice Check Admin Access * * @param admin - Address of Admin * @return whether minter has access */ function isAdmin(address admin) public view returns (bool) { return _admins[admin]; } /** * @notice Check Minter Access * * @param minter - Address of minter * @return whether minter has access */ function isMinter(address minter) public view returns (bool) { return _minters[minter]; } /** * Throws if called by any account other than the Admin/Owner. */ modifier onlyAdmin() { require( _admins[_msgSender()] || _msgSender() == owner(), "AccessProtected: caller is not admin" ); _; } /** * Throws if called by any account other than the Minter/Admin/Owner. */ modifier onlyMinter() { require( publicMinting || _minters[_msgSender()] || _admins[_msgSender()] || _msgSender() == owner(), "AccessProtected: caller is not minter" ); _; } } // File: contracts\utils\BaseRelayRecipient.sol /** * A base contract to be inherited by any contract that want to receive relayed transactions * A subclass must use "_msgSender()" instead of "msg.sender" */ abstract contract BaseRelayRecipient { /* * Forwarder singleton we accept calls from */ address public trustedForwarder; /* * require a function to be called through GSN only */ modifier trustedForwarderOnly() { require(msg.sender == address(trustedForwarder), "Function can only be called through the trusted Forwarder"); _; } function isTrustedForwarder(address forwarder) public view returns(bool) { return forwarder == trustedForwarder; } /** * return the sender of this call. * if the call came through our trusted forwarder, return the original sender. * otherwise, return `msg.sender`. * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal virtual view returns (address payable ret) { if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96,calldataload(sub(calldatasize(),20))) } } else { return msg.sender; } } } // File: contracts\IERC2981.sol /// /// @dev Interface for the NFT Royalty Standard /// interface IERC2981 { /// ERC165 bytes to add to interface array - set in parent contract /// implementing this standard /// /// bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; /// _registerInterface(_INTERFACE_ID_ERC2981); /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _salePrice - the sale price of the NFT asset specified by _tokenId /// @return receiver - address of who should be sent the royalty payment /// @return royaltyAmount - the royalty payment amount for _salePrice function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: contracts\ERC2981Royalties.sol contract ERC2981Royalties is IERC2981 { using SafeMath for uint256; struct Royalty { address recipient; uint256 value; // as a % unit, from 0 - 10000 (2 extra 0s) for eg 25% is 2500 } mapping(uint256 => Royalty) internal _royalties; // tokenId => royalty function _setTokenRoyalty( uint256 id, address recipient, uint256 value ) internal { require(value <= 10000, "ERC2981Royalties: value too high"); _royalties[id] = Royalty(recipient, value); } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) { Royalty memory royalty = _royalties[_tokenId]; return (royalty.recipient, (_salePrice.mul(royalty.value)).div(10000)); } } // File: contracts\ShowtimeMT.sol contract ShowtimeMT is ERC1155Burnable, ERC2981Royalties, AccessProtected, BaseRelayRecipient { using Counters for Counters.Counter; Counters.Counter private _tokenIds; string public baseURI = "https://gateway.pinata.cloud/ipfs/"; mapping(uint256 => string) private _hashes; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; constructor() public ERC1155("") { _registerInterface(_INTERFACE_ID_ERC2981); } /** * Mint + Issue Token * * @param recipient - Token will be issued to recipient * @param amount - amount of tokens to mint * @param hash - IPFS hash * @param data - additional data * @param royaltyRecipient - royalty receiver address * @param royaltyPercent - percentage of royalty */ function issueToken( address recipient, uint256 amount, string memory hash, bytes memory data, address royaltyRecipient, uint256 royaltyPercent ) public onlyMinter returns (uint256) { _tokenIds.increment(); uint256 newTokenId = _tokenIds.current(); _hashes[newTokenId] = hash; _mint(recipient, newTokenId, amount, data); if (royaltyPercent > 0) { _setTokenRoyalty(newTokenId, royaltyRecipient, royaltyPercent); } return newTokenId; } /** * Mint + Issue Token Batch * * @param recipient - Token will be issued to recipient * @param amounts - amounts of each token to mint * @param hashes - IPFS hashes * @param data - additional data * @param royaltyRecipients - royalty receiver addresses * @param royaltyPercents - percentages of royalty */ function issueTokenBatch( address recipient, uint256[] memory amounts, string[] memory hashes, bytes memory data, address[] memory royaltyRecipients, uint256[] memory royaltyPercents ) public onlyMinter returns (uint256[] memory) { require( amounts.length == hashes.length && royaltyRecipients.length == royaltyPercents.length && amounts.length == royaltyRecipients.length, "array length mismatch" ); uint256[] memory ids = new uint256[](amounts.length); for (uint256 i = 0; i < amounts.length; i++) { _tokenIds.increment(); uint256 newTokenId = _tokenIds.current(); _hashes[newTokenId] = hashes[i]; ids[i] = newTokenId; if (royaltyPercents[i] > 0) { _setTokenRoyalty( newTokenId, royaltyRecipients[i], royaltyPercents[i] ); } } _mintBatch(recipient, ids, amounts, data); return ids; } /** * Set Base URI * * @param _baseURI - Base URI */ function setBaseURI(string calldata _baseURI) external onlyOwner { baseURI = _baseURI; } /** * Get Token URI * * @param tokenId - Token ID */ function uri(uint256 tokenId) external view override returns (string memory) { return string(abi.encodePacked(baseURI, _hashes[tokenId])); } /** * Set Trusted Forwarder * * @param _trustedForwarder - Trusted Forwarder address */ function setTrustedForwarder(address _trustedForwarder) external onlyAdmin { trustedForwarder = _trustedForwarder; } /** * returns the message sender */ function _msgSender() internal view override(Context, BaseRelayRecipient) returns (address payable) { return BaseRelayRecipient._msgSender(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"string","name":"_access","type":"string"},{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"}],"name":"UserAccessSet","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"minter","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"hash","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"royaltyRecipient","type":"address"},{"internalType":"uint256","name":"royaltyPercent","type":"uint256"}],"name":"issueToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"string[]","name":"hashes","type":"string[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address[]","name":"royaltyRecipients","type":"address[]"},{"internalType":"uint256[]","name":"royaltyPercents","type":"uint256[]"}],"name":"issueTokenBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMinting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","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":"admin","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAdmin","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":"address","name":"minter","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"minters","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPublicMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trustedForwarder","type":"address"}],"name":"setTrustedForwarder","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040526022608081815290620032eb60a03980516200002991600a91602090910190620001dd565b503480156200003757600080fd5b50604080516020810190915260008152620000596301ffc9a760e01b620000fb565b620000648162000156565b62000076636cdb3d1360e11b620000fb565b620000886303a24d0760e21b620000fb565b506000620000956200016f565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000f563152a902d60e11b620000fb565b620002b0565b6001600160e01b03198082161415620001315760405162461bcd60e51b8152600401620001289062000279565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200016b906003906020840190620001dd565b5050565b6000620001866200018c60201b620014bd1760201c565b90505b90565b600060183610801590620001a65750620001a633620001c4565b15620001bc575060131936013560601c62000189565b503362000189565b60085461010090046001600160a01b0390811691161490565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022057805160ff191683800117855562000250565b8280016001018555821562000250579182015b828111156200025057825182559160200191906001019062000233565b506200025e92915062000262565b5090565b5b808211156200025e576000815560010162000263565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b61302b80620002c06000396000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c80636b20c454116100f9578063c830723811610097578063e985e9c511610071578063e985e9c5146103b3578063f242432a146103c6578063f2fde38b146103d9578063f5298aca146103ec576101c3565b8063c83072381461037a578063cf456ae71461038d578063da742228146103a0576101c3565b80637da0a877116100d35780637da0a877146103375780638da5cb5b1461034c578063a22cb46514610354578063aa271e1a14610367576101c3565b80636b20c454146103145780636c0360eb14610327578063715018a61461032f576101c3565b80634b0bddd21161016657806355135f901161014057806355135f90146102c857806355f804b3146102db578063572b6c05146102ee57806366250b4314610301576101c3565b80634b0bddd21461028d5780634e1273f4146102a057806353ac010a146102c0576101c3565b806324d7806c116101a257806324d7806c14610231578063254a4737146102445780632a55205a146102595780632eb2c2d61461027a576101c3565b8062fdd58e146101c857806301ffc9a7146101f15780630e89341c14610211575b600080fd5b6101db6101d6366004612341565b6103ff565b6040516101e89190612e65565b60405180910390f35b6102046101ff366004612532565b61045b565b6040516101e891906128ac565b61022461021f3660046125d6565b61047a565b6040516101e891906128b7565b61020461023f36600461205d565b6104b4565b610257610252366004612516565b6104d2565b005b61026c6102673660046125ee565b61058d565b6040516101e8929190612852565b6102576102883660046120ac565b6105f3565b61025761029b366004612306565b61080d565b6102b36102ae3660046124b6565b6108d4565b6040516101e8919061286b565b6102046109a0565b6102b36102d63660046121b9565b6109a9565b6102576102e936600461256a565b610bbf565b6102046102fc36600461205d565b610c0f565b6101db61030f36600461236b565b610c28565b610257610322366004612294565b610d2f565b610224610d84565b610257610e12565b61033f610e9b565b6040516101e8919061273a565b61033f610eaf565b610257610362366004612306565b610ebf565b61020461037536600461205d565b610f8d565b610257610388366004612437565b610fab565b61025761039b366004612306565b611063565b6102576103ae36600461205d565b61114e565b6102046103c1366004612078565b6111e5565b6102576103d4366004612155565b611213565b6102576103e736600461205d565b6113a7565b6102576103fa366004612404565b611468565b60006001600160a01b0383166104305760405162461bcd60e51b815260040161042790612966565b60405180910390fd5b5060008181526001602090815260408083206001600160a01b03861684529091529020545b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b6000818152600b6020908152604091829020915160609261049e92600a920161271d565b6040516020818303038152906040529050919050565b6001600160a01b031660009081526006602052604090205460ff1690565b600660006104de6114ef565b6001600160a01b0316815260208101919091526040016000205460ff16806105255750610509610eaf565b6001600160a01b031661051a6114ef565b6001600160a01b0316145b6105415760405162461bcd60e51b815260040161042790612e21565b6008805460ff19168215151790556040517f5c147e1dbc8d82d17119387a31999e5d3b6fcaa2518f29142f180a954ea818849061058290600090849061274e565b60405180910390a150565b600080610598611d9a565b50600084815260046020908152604091829020825180840190935280546001600160a01b0316808452600190910154918301829052906105e790612710906105e19088906114fe565b9061153f565b92509250509250929050565b81518351146106145760405162461bcd60e51b815260040161042790612d98565b6001600160a01b03841661063a5760405162461bcd60e51b815260040161042790612b42565b6106426114ef565b6001600160a01b0316856001600160a01b031614806106685750610668856103c16114ef565b6106845760405162461bcd60e51b815260040161042790612b87565b600061068e6114ef565b905061069e818787878787610805565b60005b845181101561079f5760008582815181106106b857fe5b6020026020010151905060008583815181106106d057fe5b6020026020010151905061073d816040518060600160405280602a8152602001612fcc602a91396001600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546115719092919063ffffffff16565b60008381526001602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610774908261159d565b60009283526001602081815260408086206001600160a01b038d1687529091529093205550016106a1565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107ef92919061287e565b60405180910390a46108058187878787876115c2565b505050505050565b6108156114ef565b6001600160a01b0316610826610eaf565b6001600160a01b03161461084c5760405162461bcd60e51b815260040161042790612ca2565b6001600160a01b0382166108725760405162461bcd60e51b815260040161042790612cd7565b6001600160a01b03821660009081526006602052604090819020805460ff1916831515179055517f5c147e1dbc8d82d17119387a31999e5d3b6fcaa2518f29142f180a954ea81884906108c8908490849061281a565b60405180910390a15050565b606081518351146108f75760405162461bcd60e51b815260040161042790612d4f565b606083516001600160401b038111801561091057600080fd5b5060405190808252806020026020018201604052801561093a578160200160208202803683370190505b50905060005b84518110156109985761097985828151811061095857fe5b602002602001015185838151811061096c57fe5b60200260200101516103ff565b82828151811061098557fe5b6020908102919091010152600101610940565b509392505050565b60085460ff1681565b60085460609060ff16806109e25750600760006109c46114ef565b6001600160a01b0316815260208101919091526040016000205460ff165b80610a125750600660006109f46114ef565b6001600160a01b0316815260208101919091526040016000205460ff165b80610a3c5750610a20610eaf565b6001600160a01b0316610a316114ef565b6001600160a01b0316145b610a585760405162461bcd60e51b815260040161042790612c1c565b84518651148015610a6a575081518351145b8015610a77575082518651145b610a935760405162461bcd60e51b815260040161042790612b13565b606086516001600160401b0381118015610aac57600080fd5b50604051908082528060200260200182016040528015610ad6578160200160208202803683370190505b50905060005b8751811015610ba757610aef60096116d9565b6000610afb60096116e2565b9050878281518110610b0957fe5b6020026020010151600b60008381526020019081526020016000209080519060200190610b37929190611db1565b5080838381518110610b4557fe5b6020026020010181815250506000858381518110610b5f57fe5b60200260200101511115610b9e57610b9e81878481518110610b7d57fe5b6020026020010151878581518110610b9157fe5b60200260200101516116e6565b50600101610adc565b50610bb488828988611750565b979650505050505050565b610bc76114ef565b6001600160a01b0316610bd8610eaf565b6001600160a01b031614610bfe5760405162461bcd60e51b815260040161042790612ca2565b610c0a600a8383611e2f565b505050565b60085461010090046001600160a01b0390811691161490565b60085460009060ff1680610c61575060076000610c436114ef565b6001600160a01b0316815260208101919091526040016000205460ff165b80610c91575060066000610c736114ef565b6001600160a01b0316815260208101919091526040016000205460ff165b80610cbb5750610c9f610eaf565b6001600160a01b0316610cb06114ef565b6001600160a01b0316145b610cd75760405162461bcd60e51b815260040161042790612c1c565b610ce160096116d9565b6000610ced60096116e2565b6000818152600b602090815260409091208851929350610d11929091890190611db1565b50610d1e888289886118e5565b8215610bb457610bb48185856116e6565b610d376114ef565b6001600160a01b0316836001600160a01b03161480610d5d5750610d5d836103c16114ef565b610d795760405162461bcd60e51b815260040161042790612a2e565b610c0a8383836119c9565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610e0a5780601f10610ddf57610100808354040283529160200191610e0a565b820191906000526020600020905b815481529060010190602001808311610ded57829003601f168201915b505050505081565b610e1a6114ef565b6001600160a01b0316610e2b610eaf565b6001600160a01b031614610e515760405162461bcd60e51b815260040161042790612ca2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60085461010090046001600160a01b031681565b6005546001600160a01b03165b90565b816001600160a01b0316610ed16114ef565b6001600160a01b03161415610ef85760405162461bcd60e51b815260040161042790612d06565b8060026000610f056114ef565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610f496114ef565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f8191906128ac565b60405180910390a35050565b6001600160a01b031660009081526007602052604090205460ff1690565b60066000610fb76114ef565b6001600160a01b0316815260208101919091526040016000205460ff1680610ffe5750610fe2610eaf565b6001600160a01b0316610ff36114ef565b6001600160a01b0316145b61101a5760405162461bcd60e51b815260040161042790612e21565b60005b8281101561105d57600084848381811061103357fe5b9050602002016020810190611048919061205d565b90506110548184611063565b5060010161101d565b50505050565b6006600061106f6114ef565b6001600160a01b0316815260208101919091526040016000205460ff16806110b6575061109a610eaf565b6001600160a01b03166110ab6114ef565b6001600160a01b0316145b6110d25760405162461bcd60e51b815260040161042790612e21565b6001600160a01b0382166110f85760405162461bcd60e51b815260040161042790612a77565b6001600160a01b03821660009081526007602052604090819020805460ff1916831515179055517f5c147e1dbc8d82d17119387a31999e5d3b6fcaa2518f29142f180a954ea81884906108c8908490849061274e565b6006600061115a6114ef565b6001600160a01b0316815260208101919091526040016000205460ff16806111a15750611185610eaf565b6001600160a01b03166111966114ef565b6001600160a01b0316145b6111bd5760405162461bcd60e51b815260040161042790612e21565b600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6001600160a01b0384166112395760405162461bcd60e51b815260040161042790612b42565b6112416114ef565b6001600160a01b0316856001600160a01b031614806112675750611267856103c16114ef565b6112835760405162461bcd60e51b815260040161042790612a2e565b600061128d6114ef565b90506112ad81878761129e88611b77565b6112a788611b77565b87610805565b6112f4836040518060600160405280602a8152602001612fcc602a913960008781526001602090815260408083206001600160a01b038d1684529091529020549190611571565b60008581526001602090815260408083206001600160a01b038b8116855292528083209390935587168152205461132b908461159d565b60008581526001602090815260408083206001600160a01b03808b168086529190935292819020939093559151909188811691908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906113919089908990612e6e565b60405180910390a4610805818787878787611bbb565b6113af6114ef565b6001600160a01b03166113c0610eaf565b6001600160a01b0316146113e65760405162461bcd60e51b815260040161042790612ca2565b6001600160a01b03811661140c5760405162461bcd60e51b8152600401610427906129b1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6114706114ef565b6001600160a01b0316836001600160a01b031614806114965750611496836103c16114ef565b6114b25760405162461bcd60e51b815260040161042790612a2e565b610c0a838383611c8c565b6000601836108015906114d457506114d433610c0f565b156114e8575060131936013560601c610ebc565b5033610ebc565b60006114f96114bd565b905090565b60008261150d57506000610455565b8282028284828161151a57fe5b04146115385760405162461bcd60e51b815260040161042790612c61565b9392505050565b60008082116115605760405162461bcd60e51b815260040161042790612aa7565b81838161156957fe5b049392505050565b600081848411156115955760405162461bcd60e51b815260040161042791906128b7565b505050900390565b6000828201838110156115385760405162461bcd60e51b8152600401610427906129f7565b6115d4846001600160a01b0316611d94565b156108055760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061160d9089908990889088908890600401612782565b602060405180830381600087803b15801561162757600080fd5b505af1925050508015611657575060408051601f3d908101601f191682019092526116549181019061254e565b60015b6116a057611663612ec7565b8061166e5750611688565b8060405162461bcd60e51b815260040161042791906128b7565b60405162461bcd60e51b8152600401610427906128ca565b6001600160e01b0319811663bc197c8160e01b146116d05760405162461bcd60e51b81526004016104279061291e565b50505050505050565b80546001019055565b5490565b6127108111156117085760405162461bcd60e51b815260040161042790612ade565b6040805180820182526001600160a01b03938416815260208082019384526000958652600490529320925183546001600160a01b031916921691909117825551600190910155565b6001600160a01b0384166117765760405162461bcd60e51b815260040161042790612de0565b81518351146117975760405162461bcd60e51b815260040161042790612d98565b60006117a16114ef565b90506117b281600087878787610805565b60005b84518110156118765761182d600160008784815181106117d157fe5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000205485838151811061181757fe5b602002602001015161159d90919063ffffffff16565b6001600087848151811061183d57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038b1682529092529020556001016117b5565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516118c792919061287e565b60405180910390a46118de816000878787876115c2565b5050505050565b6001600160a01b03841661190b5760405162461bcd60e51b815260040161042790612de0565b60006119156114ef565b90506119278160008761129e88611b77565b60008481526001602090815260408083206001600160a01b0389168452909152902054611954908461159d565b60008581526001602090815260408083206001600160a01b03808b16808652919093528184209490945551908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906119b29089908990612e6e565b60405180910390a46118de81600087878787611bbb565b6001600160a01b0383166119ef5760405162461bcd60e51b815260040161042790612bd9565b8051825114611a105760405162461bcd60e51b815260040161042790612d98565b6000611a1a6114ef565b9050611a3a81856000868660405180602001604052806000815250610805565b60005b8351811015611b1857611acf838281518110611a5557fe5b6020026020010151604051806060016040528060248152602001612fa86024913960016000888681518110611a8657fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546115719092919063ffffffff16565b60016000868481518110611adf57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101611a3d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b6992919061287e565b60405180910390a450505050565b604080516001808252818301909252606091829190602080830190803683370190505090508281600081518110611baa57fe5b602090810291909101015292915050565b611bcd846001600160a01b0316611d94565b156108055760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c0690899089908890889088906004016127e0565b602060405180830381600087803b158015611c2057600080fd5b505af1925050508015611c50575060408051601f3d908101601f19168201909252611c4d9181019061254e565b60015b611c5c57611663612ec7565b6001600160e01b0319811663f23a6e6160e01b146116d05760405162461bcd60e51b81526004016104279061291e565b6001600160a01b038316611cb25760405162461bcd60e51b815260040161042790612bd9565b6000611cbc6114ef565b9050611cec81856000611cce87611b77565b611cd787611b77565b60405180602001604052806000815250610805565b611d3382604051806060016040528060248152602001612fa86024913960008681526001602090815260408083206001600160a01b038b1684529091529020549190611571565b60008481526001602090815260408083206001600160a01b03808a16808652919093528184209490945551919291908416907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611b699088908890612e6e565b3b151590565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611df257805160ff1916838001178555611e1f565b82800160010185558215611e1f579182015b82811115611e1f578251825591602001919060010190611e04565b50611e2b929150611e9d565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611e705782800160ff19823516178555611e1f565b82800160010185558215611e1f579182015b82811115611e1f578235825591602001919060010190611e82565b5b80821115611e2b5760008155600101611e9e565b80356001600160a01b038116811461045557600080fd5b600082601f830112611ed9578081fd5b8135611eec611ee782612ea2565b612e7c565b818152915060208083019084810181840286018201871015611f0d57600080fd5b60005b84811015611f3457611f228883611eb2565b84529282019290820190600101611f10565b505050505092915050565b600082601f830112611f4f578081fd5b8135611f5d611ee782612ea2565b818152915060208083019084810160005b84811015611f3457611f85888484358a0101611ff5565b84529282019290820190600101611f6e565b600082601f830112611fa7578081fd5b8135611fb5611ee782612ea2565b818152915060208083019084810181840286018201871015611fd657600080fd5b60005b84811015611f3457813584529282019290820190600101611fd9565b600082601f830112612005578081fd5b81356001600160401b0381111561201a578182fd5b61202d601f8201601f1916602001612e7c565b915080825283602082850101111561204457600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561206e578081fd5b6115388383611eb2565b6000806040838503121561208a578081fd5b6120948484611eb2565b91506120a38460208501611eb2565b90509250929050565b600080600080600060a086880312156120c3578081fd5b85356120ce81612f6b565b945060208601356120de81612f6b565b935060408601356001600160401b03808211156120f9578283fd5b61210589838a01611f97565b9450606088013591508082111561211a578283fd5b61212689838a01611f97565b9350608088013591508082111561213b578283fd5b5061214888828901611ff5565b9150509295509295909350565b600080600080600060a0868803121561216c578081fd5b6121768787611eb2565b94506121858760208801611eb2565b9350604086013592506060860135915060808601356001600160401b038111156121ad578182fd5b61214888828901611ff5565b60008060008060008060c087890312156121d1578081fd5b6121db8888611eb2565b955060208701356001600160401b03808211156121f6578283fd5b6122028a838b01611f97565b96506040890135915080821115612217578283fd5b6122238a838b01611f3f565b95506060890135915080821115612238578283fd5b6122448a838b01611ff5565b94506080890135915080821115612259578283fd5b6122658a838b01611ec9565b935060a089013591508082111561227a578283fd5b5061228789828a01611f97565b9150509295509295509295565b6000806000606084860312156122a8578283fd5b83356122b381612f6b565b925060208401356001600160401b03808211156122ce578384fd5b6122da87838801611f97565b935060408601359150808211156122ef578283fd5b506122fc86828701611f97565b9150509250925092565b60008060408385031215612318578182fd5b6123228484611eb2565b915060208301358015158114612336578182fd5b809150509250929050565b60008060408385031215612353578182fd5b61235d8484611eb2565b946020939093013593505050565b60008060008060008060c08789031215612383578384fd5b863561238e81612f6b565b95506020870135945060408701356001600160401b03808211156123b0578586fd5b6123bc8a838b01611ff5565b955060608901359150808211156123d1578384fd5b506123de89828a01611ff5565b93505060808701356123ef81612f6b565b8092505060a087013590509295509295509295565b600080600060608486031215612418578081fd5b6124228585611eb2565b95602085013595506040909401359392505050565b60008060006040848603121561244b578081fd5b83356001600160401b0380821115612461578283fd5b818601915086601f830112612474578283fd5b813581811115612482578384fd5b8760208083028501011115612495578384fd5b602092830195509350508401356124ab81612f83565b809150509250925092565b600080604083850312156124c8578182fd5b82356001600160401b03808211156124de578384fd5b6124ea86838701611ec9565b935060208501359150808211156124ff578283fd5b5061250c85828601611f97565b9150509250929050565b600060208284031215612527578081fd5b813561153881612f83565b600060208284031215612543578081fd5b813561153881612f91565b60006020828403121561255f578081fd5b815161153881612f91565b6000806020838503121561257c578182fd5b82356001600160401b0380821115612592578384fd5b818501915085601f8301126125a5578384fd5b8135818111156125b3578485fd5b8660208285010111156125c4578485fd5b60209290920196919550909350505050565b6000602082840312156125e7578081fd5b5035919050565b60008060408385031215612600578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561263e57815187529582019590820190600101612622565b509495945050505050565b60008151808452815b8181101561266e57602081850181015186830182015201612652565b8181111561267f5782602083870101525b50601f01601f19169290920160200192915050565b600081546001808216600081146126b257600181146126c9576126fb565b60ff198316865260028304607f16860193506126fb565b600283048560005260208060002060005b838110156126f35781548a8201529085019082016126da565b505050860193505b50505092915050565b600681526526a4a72a22a960d11b602082015260400190565b600061273261272c8386612694565b84612694565b949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152606060208201819052600090612771908301612704565b905082151560408301529392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906127ae9083018661260f565b82810360608401526127c0818661260f565b905082810360808401526127d48185612649565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090610bb490830184612649565b6001600160a01b039290921682526060602083018190526005908301526420a226a4a760d91b60808301521515604082015260a00190565b6001600160a01b03929092168252602082015260400190565b600060208252611538602083018461260f565b600060408252612891604083018561260f565b82810360208401526128a3818561260f565b95945050505050565b901515815260200190565b6000602082526115386020830184612649565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b602080825260169082015275496e76616c6964204d696e746572204164647265737360501b604082015260600190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b6020808252818101527f45524332393831526f79616c746965733a2076616c756520746f6f2068696768604082015260600190565b6020808252601590820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f41636365737350726f7465637465643a2063616c6c6572206973206e6f74206d60408201526434b73a32b960d91b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260159082015274496e76616c69642041646d696e204164647265737360581b604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526024908201527f41636365737350726f7465637465643a2063616c6c6572206973206e6f7420616040820152633236b4b760e11b606082015260800190565b90815260200190565b918252602082015260400190565b6040518181016001600160401b0381118282101715612e9a57600080fd5b604052919050565b60006001600160401b03821115612eb7578081fd5b5060209081020190565b60e01c90565b600060443d1015612ed757610ebc565b600481823e6308c379a0612eeb8251612ec1565b14612ef557610ebc565b6040513d600319016004823e80513d6001600160401b038160248401118184111715612f245750505050610ebc565b82840192508251915080821115612f3e5750505050610ebc565b503d83016020828401011115612f5657505050610ebc565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114612f8057600080fd5b50565b8015158114612f8057600080fd5b6001600160e01b031981168114612f8057600080fdfe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572a2646970667358221220bdd0a62992389756e23b234db62180128b99f081ea9b3d692eea221b29fd04fe64736f6c634300060c003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f
Deployed ByteCode Sourcemap
51846:3926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28927:231;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9872:150;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;55060:195::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47260:99::-;;;;;;:::i;:::-;;:::i;46948:161::-;;;;;;:::i;:::-;;:::i;:::-;;51482:318;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;31570:1220::-;;;;;;:::i;:::-;;:::i;45778:227::-;;;;;;:::i;:::-;;:::i;29324:549::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45517:25::-;;;:::i;53631:1147::-;;;;;;:::i;:::-;;:::i;54868:102::-;;;;;;:::i;:::-;;:::i;48910:128::-;;;;;;:::i;:::-;;:::i;52683:573::-;;;;;;:::i;:::-;;:::i;42629:319::-;;;;;;:::i;:::-;;:::i;52051:60::-;;;:::i;44686:148::-;;;:::i;48616:31::-;;;:::i;:::-;;;;;;;:::i;44035:87::-;;;:::i;29946:311::-;;;;;;:::i;:::-;;:::i;47513:103::-;;;;;;:::i;:::-;;:::i;46566:262::-;;;;;;:::i;:::-;;:::i;46168:233::-;;;;;;:::i;:::-;;:::i;55380:130::-;;;;;;:::i;:::-;;:::i;30329:168::-;;;;;;:::i;:::-;;:::i;30569:924::-;;;;;;:::i;:::-;;:::i;44989:244::-;;;;;;:::i;:::-;;:::i;42334:287::-;;;;;;:::i;:::-;;:::i;28927:231::-;29013:7;-1:-1:-1;;;;;29041:21:0;;29033:77;;;;-1:-1:-1;;;29033:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;29128:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;29128:22:0;;;;;;;;;;28927:231;;;;;:::o;9872:150::-;-1:-1:-1;;;;;;9981:33:0;9957:4;9981:33;;;;;;;;;;;;;;9872:150::o;55060:195::-;55229:16;;;;:7;:16;;;;;;;;;55203:43;;55158:13;;55203:43;;55220:7;;55203:43;;:::i;:::-;;;;;;;;;;;;;55189:58;;55060:195;;;:::o;47260:99::-;-1:-1:-1;;;;;47337:14:0;47313:4;47337:14;;;:7;:14;;;;;;;;;47260:99::o;46948:161::-;47764:7;:21;47772:12;:10;:12::i;:::-;-1:-1:-1;;;;;47764:21:0;;;;;;;;;;;;-1:-1:-1;47764:21:0;;;;;:48;;;47805:7;:5;:7::i;:::-;-1:-1:-1;;;;;47789:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47789:23:0;;47764:48;47742:134;;;;-1:-1:-1;;;47742:134:0;;;;;;;:::i;:::-;47018:13:::1;:23:::0;;-1:-1:-1;;47018:23:0::1;::::0;::::1;;;::::0;;47057:44:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;47018:23:0;;47057:44:::1;:::i;:::-;;;;;;;;46948:161:::0;:::o;51482:318::-;51609:16;51627:21;51666:22;;:::i;:::-;-1:-1:-1;51691:20:0;;;;:10;:20;;;;;;;;;51666:45;;;;;;;;;;-1:-1:-1;;;;;51666:45:0;;;;;;;;;;;;;;;;51749:42;;51785:5;;51750:29;;:10;;:14;:29::i;:::-;51749:35;;:42::i;:::-;51722:70;;;;;51482:318;;;;;:::o;31570:1220::-;31835:7;:14;31821:3;:10;:28;31813:81;;;;-1:-1:-1;;;31813:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31913:16:0;;31905:66;;;;-1:-1:-1;;;31905:66:0;;;;;;;:::i;:::-;32012:12;:10;:12::i;:::-;-1:-1:-1;;;;;32004:20:0;:4;-1:-1:-1;;;;;32004:20:0;;:60;;;;32028:36;32045:4;32051:12;:10;:12::i;32028:36::-;31982:160;;;;-1:-1:-1;;;31982:160:0;;;;;;;:::i;:::-;32155:16;32174:12;:10;:12::i;:::-;32155:31;;32199:60;32220:8;32230:4;32236:2;32240:3;32245:7;32254:4;32199:20;:60::i;:::-;32277:9;32272:358;32296:3;:10;32292:1;:14;32272:358;;;32328:10;32341:3;32345:1;32341:6;;;;;;;;;;;;;;32328:19;;32362:14;32379:7;32387:1;32379:10;;;;;;;;;;;;;;32362:27;;32428:126;32470:6;32428:126;;;;;;;;;;;;;;;;;:9;:13;32438:2;32428:13;;;;;;;;;;;:19;32442:4;-1:-1:-1;;;;;32428:19:0;-1:-1:-1;;;;;32428:19:0;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;32406:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32406:19:0;;;;;;;;;;:148;;;;32589:17;;;;;;:29;;32611:6;32589:21;:29::i;:::-;32569:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32569:17:0;;;;;;;;;;:49;-1:-1:-1;32308:3:0;32272:358;;;;32677:2;-1:-1:-1;;;;;32647:47:0;32671:4;-1:-1:-1;;;;;32647:47:0;32661:8;-1:-1:-1;;;;;32647:47:0;;32681:3;32686:7;32647:47;;;;;;;:::i;:::-;;;;;;;;32707:75;32743:8;32753:4;32759:2;32763:3;32768:7;32777:4;32707:35;:75::i;:::-;31570:1220;;;;;;:::o;45778:227::-;44266:12;:10;:12::i;:::-;-1:-1:-1;;;;;44255:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44255:23:0;;44247:68;;;;-1:-1:-1;;;44247:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45863:19:0;::::1;45855:53;;;;-1:-1:-1::0;;;45855:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45919:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;;:24;;-1:-1:-1;;45919:24:0::1;::::0;::::1;;;::::0;;45959:38;::::1;::::0;::::1;::::0;45919:14;;:24;;45959:38:::1;:::i;:::-;;;;;;;;45778:227:::0;;:::o;29324:549::-;29505:16;29566:3;:10;29547:8;:15;:29;29539:83;;;;-1:-1:-1;;;29539:83:0;;;;;;;:::i;:::-;29635:30;29682:8;:15;-1:-1:-1;;;;;29668:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29668:30:0;;29635:63;;29716:9;29711:122;29735:8;:15;29731:1;:19;29711:122;;;29791:30;29801:8;29810:1;29801:11;;;;;;;;;;;;;;29814:3;29818:1;29814:6;;;;;;;;;;;;;;29791:9;:30::i;:::-;29772:13;29786:1;29772:16;;;;;;;;;;;;;;;;;:49;29752:3;;29711:122;;;-1:-1:-1;29852:13:0;29324:549;-1:-1:-1;;;29324:549:0:o;45517:25::-;;;;;;:::o;53631:1147::-;48052:13;;53902:16;;48052:13;;;:56;;;48086:8;:22;48095:12;:10;:12::i;:::-;-1:-1:-1;;;;;48086:22:0;;;;;;;;;;;;-1:-1:-1;48086:22:0;;;;48052:56;:98;;;;48129:7;:21;48137:12;:10;:12::i;:::-;-1:-1:-1;;;;;48129:21:0;;;;;;;;;;;;-1:-1:-1;48129:21:0;;;;48052:98;:142;;;;48187:7;:5;:7::i;:::-;-1:-1:-1;;;;;48171:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;48171:23:0;;48052:142;48030:229;;;;-1:-1:-1;;;48030:229:0;;;;;;;:::i;:::-;53971:6:::1;:13;53953:7;:14;:31;:102;;;;;54033:15;:22;54005:17;:24;:50;53953:102;:165;;;;;54094:17;:24;54076:7;:14;:42;53953:165;53931:236;;;;-1:-1:-1::0;;;53931:236:0::1;;;;;;;:::i;:::-;54178:20;54215:7;:14;-1:-1:-1::0;;;;;54201:29:0::1;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;54201:29:0::1;;54178:52;;54246:9;54241:457;54265:7;:14;54261:1;:18;54241:457;;;54301:21;:9;:19;:21::i;:::-;54337:18;54358:19;:9;:17;:19::i;:::-;54337:40;;54414:6;54421:1;54414:9;;;;;;;;;;;;;;54392:7;:19;54400:10;54392:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;54447:10;54438:3;54442:1;54438:6;;;;;;;;;;;;;:19;;;::::0;::::1;54497:1;54476:15;54492:1;54476:18;;;;;;;;;;;;;;:22;54472:215;;;54519:152;54558:10;54591:17;54609:1;54591:20;;;;;;;;;;;;;;54634:15;54650:1;54634:18;;;;;;;;;;;;;;54519:16;:152::i;:::-;-1:-1:-1::0;54281:3:0::1;;54241:457;;;;54708:41;54719:9;54730:3;54735:7;54744:4;54708:10;:41::i;:::-;54767:3:::0;53631:1147;-1:-1:-1;;;;;;;53631:1147:0:o;54868:102::-;44266:12;:10;:12::i;:::-;-1:-1:-1;;;;;44255:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44255:23:0;;44247:68;;;;-1:-1:-1;;;44247:68:0;;;;;;;:::i;:::-;54944:18:::1;:7;54954:8:::0;;54944:18:::1;:::i;:::-;;54868:102:::0;;:::o;48910:128::-;49014:16;;;;;-1:-1:-1;;;;;49014:16:0;;;49001:29;;;;48910:128::o;52683:573::-;48052:13;;52915:7;;48052:13;;;:56;;;48086:8;:22;48095:12;:10;:12::i;:::-;-1:-1:-1;;;;;48086:22:0;;;;;;;;;;;;-1:-1:-1;48086:22:0;;;;48052:56;:98;;;;48129:7;:21;48137:12;:10;:12::i;:::-;-1:-1:-1;;;;;48129:21:0;;;;;;;;;;;;-1:-1:-1;48129:21:0;;;;48052:98;:142;;;;48187:7;:5;:7::i;:::-;-1:-1:-1;;;;;48171:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;48171:23:0;;48052:142;48030:229;;;;-1:-1:-1;;;48030:229:0;;;;;;;:::i;:::-;52935:21:::1;:9;:19;:21::i;:::-;52967:18;52988:19;:9;:17;:19::i;:::-;53018;::::0;;;:7:::1;:19;::::0;;;;;;;:26;;52967:40;;-1:-1:-1;53018:26:0::1;::::0;:19;;:26;::::1;::::0;::::1;:::i;:::-;;53055:42;53061:9;53072:10;53084:6;53092:4;53055:5;:42::i;:::-;53112:18:::0;;53108:113:::1;;53147:62;53164:10;53176:16;53194:14;53147:16;:62::i;42629:319::-:0;42771:12;:10;:12::i;:::-;-1:-1:-1;;;;;42760:23:0;:7;-1:-1:-1;;;;;42760:23:0;;:66;;;;42787:39;42804:7;42813:12;:10;:12::i;42787:39::-;42738:157;;;;-1:-1:-1;;;42738:157:0;;;;;;;:::i;:::-;42908:32;42919:7;42928:3;42933:6;42908:10;:32::i;52051:60::-;;;;;;;;;;;;;;;-1:-1:-1;;52051:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44686:148::-;44266:12;:10;:12::i;:::-;-1:-1:-1;;;;;44255:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44255:23:0;;44247:68;;;;-1:-1:-1;;;44247:68:0;;;;;;;:::i;:::-;44777:6:::1;::::0;44756:40:::1;::::0;44793:1:::1;::::0;-1:-1:-1;;;;;44777:6:0::1;::::0;44756:40:::1;::::0;44793:1;;44756:40:::1;44807:6;:19:::0;;-1:-1:-1;;;;;;44807:19:0::1;::::0;;44686:148::o;48616:31::-;;;;;;-1:-1:-1;;;;;48616:31:0;;:::o;44035:87::-;44108:6;;-1:-1:-1;;;;;44108:6:0;44035:87;;:::o;29946:311::-;30065:8;-1:-1:-1;;;;;30049:24:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;30049:24:0;;;30041:78;;;;-1:-1:-1;;;30041:78:0;;;;;;;:::i;:::-;30177:8;30132:18;:32;30151:12;:10;:12::i;:::-;-1:-1:-1;;;;;30132:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;30132:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;30132:53:0;;;;;;;;;;;30216:12;:10;:12::i;:::-;-1:-1:-1;;;;;30201:48:0;;30240:8;30201:48;;;;;;:::i;:::-;;;;;;;;29946:311;;:::o;47513:103::-;-1:-1:-1;;;;;47592:16:0;47568:4;47592:16;;;:8;:16;;;;;;;;;47513:103::o;46566:262::-;47764:7;:21;47772:12;:10;:12::i;:::-;-1:-1:-1;;;;;47764:21:0;;;;;;;;;;;;-1:-1:-1;47764:21:0;;;;;:48;;;47805:7;:5;:7::i;:::-;-1:-1:-1;;;;;47789:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47789:23:0;;47764:48;47742:134;;;;-1:-1:-1;;;47742:134:0;;;;;;;:::i;:::-;46686:9:::1;46681:140;46701:18:::0;;::::1;46681:140;;;46741:14;46758:7;;46766:1;46758:10;;;;;;;;;;;;;;;;;;;;:::i;:::-;46741:27;;46783:26;46793:6;46801:7;46783:9;:26::i;:::-;-1:-1:-1::0;46721:3:0::1;;46681:140;;;;46566:262:::0;;;:::o;46168:233::-;47764:7;:21;47772:12;:10;:12::i;:::-;-1:-1:-1;;;;;47764:21:0;;;;;;;;;;;;-1:-1:-1;47764:21:0;;;;;:48;;;47805:7;:5;:7::i;:::-;-1:-1:-1;;;;;47789:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47789:23:0;;47764:48;47742:134;;;;-1:-1:-1;;;47742:134:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46253:20:0;::::1;46245:55;;;;-1:-1:-1::0;;;46245:55:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46311:16:0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;;:26;;-1:-1:-1;;46311:26:0::1;::::0;::::1;;;::::0;;46353:40;::::1;::::0;::::1;::::0;46311:16;;:26;;46353:40:::1;:::i;55380:130::-:0;47764:7;:21;47772:12;:10;:12::i;:::-;-1:-1:-1;;;;;47764:21:0;;;;;;;;;;;;-1:-1:-1;47764:21:0;;;;;:48;;;47805:7;:5;:7::i;:::-;-1:-1:-1;;;;;47789:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47789:23:0;;47764:48;47742:134;;;;-1:-1:-1;;;47742:134:0;;;;;;;:::i;:::-;55466:16:::1;:36:::0;;-1:-1:-1;;;;;55466:36:0;;::::1;;;-1:-1:-1::0;;;;;;55466:36:0;;::::1;::::0;;;::::1;::::0;;55380:130::o;30329:168::-;-1:-1:-1;;;;;30452:27:0;;;30428:4;30452:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;30329:168::o;30569:924::-;-1:-1:-1;;;;;30795:16:0;;30787:66;;;;-1:-1:-1;;;30787:66:0;;;;;;;:::i;:::-;30894:12;:10;:12::i;:::-;-1:-1:-1;;;;;30886:20:0;:4;-1:-1:-1;;;;;30886:20:0;;:60;;;;30910:36;30927:4;30933:12;:10;:12::i;30910:36::-;30864:151;;;;-1:-1:-1;;;30864:151:0;;;;;;;:::i;:::-;31028:16;31047:12;:10;:12::i;:::-;31028:31;;31072:96;31093:8;31103:4;31109:2;31113:21;31131:2;31113:17;:21::i;:::-;31136:25;31154:6;31136:17;:25::i;:::-;31163:4;31072:20;:96::i;:::-;31203:77;31227:6;31203:77;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31203:19:0;;;;;;;;;;;:77;:23;:77::i;:::-;31181:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31181:19:0;;;;;;;;;;:99;;;;31311:17;;;;;;:29;;31333:6;31311:21;:29::i;:::-;31291:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;31291:17:0;;;;;;;;;;;;;;:49;;;;31358:46;;31291:17;;31358:46;;;;;;;;;;;;31301:2;;31397:6;;31358:46;:::i;:::-;;;;;;;;31417:68;31448:8;31458:4;31464:2;31468;31472:6;31480:4;31417:30;:68::i;44989:244::-;44266:12;:10;:12::i;:::-;-1:-1:-1;;;;;44255:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44255:23:0;;44247:68;;;;-1:-1:-1;;;44247:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45078:22:0;::::1;45070:73;;;;-1:-1:-1::0;;;45070:73:0::1;;;;;;;:::i;:::-;45180:6;::::0;45159:38:::1;::::0;-1:-1:-1;;;;;45159:38:0;;::::1;::::0;45180:6:::1;::::0;45159:38:::1;::::0;45180:6:::1;::::0;45159:38:::1;45208:6;:17:::0;;-1:-1:-1;;;;;;45208:17:0::1;-1:-1:-1::0;;;;;45208:17:0;;;::::1;::::0;;;::::1;::::0;;44989:244::o;42334:287::-;42451:12;:10;:12::i;:::-;-1:-1:-1;;;;;42440:23:0;:7;-1:-1:-1;;;;;42440:23:0;;:66;;;;42467:39;42484:7;42493:12;:10;:12::i;42467:39::-;42418:157;;;;-1:-1:-1;;;42418:157:0;;;;;;;:::i;:::-;42588:25;42594:7;42603:2;42607:5;42588;:25::i;49298:558::-;49351:19;49406:2;49387:8;:21;;;;:55;;;49412:30;49431:10;49412:18;:30::i;:::-;49383:466;;;-1:-1:-1;;;49753:14:0;49749:22;49736:36;49733:2;49729:44;49703:85;;;-1:-1:-1;49827:10:0;49820:17;;55571:198;55690:15;55730:31;:29;:31::i;:::-;55723:38;;55571:198;:::o;14295:220::-;14353:7;14377:6;14373:20;;-1:-1:-1;14392:1:0;14385:8;;14373:20;14416:5;;;14420:1;14416;:5;:1;14440:5;;;;;:10;14432:56;;;;-1:-1:-1;;;14432:56:0;;;;;;;:::i;:::-;14506:1;14295:220;-1:-1:-1;;;14295:220:0:o;14993:153::-;15051:7;15083:1;15079;:5;15071:44;;;;-1:-1:-1;;;15071:44:0;;;;;;;:::i;:::-;15137:1;15133;:5;;;;;;;14993:153;-1:-1:-1;;;14993:153:0:o;16243:166::-;16329:7;16365:12;16357:6;;;;16349:29;;;;-1:-1:-1;;;16349:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;16396:5:0;;;16243:166::o;13416:179::-;13474:7;13506:5;;;13530:6;;;;13522:46;;;;-1:-1:-1;;;13522:46:0;;;;;;;:::i;39490:799::-;39744:15;:2;-1:-1:-1;;;;;39744:13:0;;:15::i;:::-;39740:542;;;39780:79;;-1:-1:-1;;;39780:79:0;;-1:-1:-1;;;;;39780:43:0;;;;;:79;;39824:8;;39834:4;;39840:3;;39845:7;;39854:4;;39780:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39780:79:0;;;;;;;;-1:-1:-1;;39780:79:0;;;;;;;;;;;;:::i;:::-;;;39776:495;;;;:::i;:::-;;;;;;;;40144:6;40137:14;;-1:-1:-1;;;40137:14:0;;;;;;;;:::i;39776:495::-;40193:62;;-1:-1:-1;;;40193:62:0;;;;;;;:::i;39776:495::-;-1:-1:-1;;;;;;39909:64:0;;-1:-1:-1;;;39909:64:0;39905:163;;39998:50;;-1:-1:-1;;;39998:50:0;;;;;;;:::i;39905:163::-;39860:223;39490:799;;;;;;:::o;41718:181::-;41872:19;;41890:1;41872:19;;;41718:181::o;41596:114::-;41688:14;;41596:114::o;51228:246::-;51371:5;51362;:14;;51354:59;;;;-1:-1:-1;;;51354:59:0;;;;;;;:::i;:::-;51441:25;;;;;;;;-1:-1:-1;;;;;51441:25:0;;;;;;;;;;;;-1:-1:-1;51424:14:0;;;:10;:14;;;;:42;;;;-1:-1:-1;;;;;;51424:42:0;;;;;;;;;;-1:-1:-1;51424:42:0;;;;51228:246::o;35062:715::-;-1:-1:-1;;;;;35197:16:0;;35189:62;;;;-1:-1:-1;;;35189:62:0;;;;;;;:::i;:::-;35284:7;:14;35270:3;:10;:28;35262:81;;;;-1:-1:-1;;;35262:81:0;;;;;;;:::i;:::-;35356:16;35375:12;:10;:12::i;:::-;35356:31;;35400:66;35421:8;35439:1;35443:2;35447:3;35452:7;35461:4;35400:20;:66::i;:::-;35484:6;35479:126;35500:3;:10;35496:1;:14;35479:126;;;35556:37;35571:9;:17;35581:3;35585:1;35581:6;;;;;;;;;;;;;;35571:17;;;;;;;;;;;:21;35589:2;-1:-1:-1;;;;;35571:21:0;-1:-1:-1;;;;;35571:21:0;;;;;;;;;;;;;35556:7;35564:1;35556:10;;;;;;;;;;;;;;:14;;:37;;;;:::i;:::-;35532:9;:17;35542:3;35546:1;35542:6;;;;;;;;;;;;;;;;;;;35532:17;;;;;;;;;;;;;-1:-1:-1;35532:17:0;;;-1:-1:-1;;;;;35532:21:0;;;;;;;;;:61;35512:3;;35479:126;;;;35658:2;-1:-1:-1;;;;;35622:53:0;35654:1;-1:-1:-1;;;;;35622:53:0;35636:8;-1:-1:-1;;;;;35622:53:0;;35662:3;35667:7;35622:53;;;;;;;:::i;:::-;;;;;;;;35688:81;35724:8;35742:1;35746:2;35750:3;35755:7;35764:4;35688:35;:81::i;:::-;35062:715;;;;;:::o;34123:583::-;-1:-1:-1;;;;;34238:21:0;;34230:67;;;;-1:-1:-1;;;34230:67:0;;;;;;;:::i;:::-;34310:16;34329:12;:10;:12::i;:::-;34310:31;;34354:107;34375:8;34393:1;34397:7;34406:21;34424:2;34406:17;:21::i;34354:107::-;34499:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;34499:22:0;;;;;;;;;;:34;;34526:6;34499:26;:34::i;:::-;34474:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;34474:22:0;;;;;;;;;;;;;:59;;;;34549:57;;;;;;;;;34484:2;;34599:6;;34549:57;:::i;:::-;;;;;;;;34619:79;34650:8;34668:1;34672:7;34681:2;34685:6;34693:4;34619:30;:79::i;36790:721::-;-1:-1:-1;;;;;36911:21:0;;36903:69;;;;-1:-1:-1;;;36903:69:0;;;;;;;:::i;:::-;37005:7;:14;36991:3;:10;:28;36983:81;;;;-1:-1:-1;;;36983:81:0;;;;;;;:::i;:::-;37077:16;37096:12;:10;:12::i;:::-;37077:31;;37121:69;37142:8;37152:7;37169:1;37173:3;37178:7;37121:69;;;;;;;;;;;;:20;:69::i;:::-;37208:6;37203:225;37224:3;:10;37220:1;:14;37203:225;;;37285:131;37334:7;37342:1;37334:10;;;;;;;;;;;;;;37285:131;;;;;;;;;;;;;;;;;:9;:17;37295:3;37299:1;37295:6;;;;;;;;;;;;;;37285:17;;;;;;;;;;;:26;37303:7;-1:-1:-1;;;;;37285:26:0;-1:-1:-1;;;;;37285:26:0;;;;;;;;;;;;;:30;;:131;;;;;:::i;:::-;37256:9;:17;37266:3;37270:1;37266:6;;;;;;;;;;;;;;;;;;;37256:17;;;;;;;;;;;;;-1:-1:-1;37256:17:0;;;-1:-1:-1;;;;;37256:26:0;;;;;;;;;:160;37236:3;;37203:225;;;;37486:1;-1:-1:-1;;;;;37445:58:0;37469:7;-1:-1:-1;;;;;37445:58:0;37459:8;-1:-1:-1;;;;;37445:58:0;;37490:3;37495:7;37445:58;;;;;;;:::i;:::-;;;;;;;;36790:721;;;;:::o;40297:198::-;40417:16;;;40431:1;40417:16;;;;;;;;;40363;;;;40417;;;;;;;;;;;;-1:-1:-1;40417:16:0;40392:41;;40455:7;40444:5;40450:1;40444:8;;;;;;;;;;;;;;;;;:18;40482:5;40297:198;-1:-1:-1;;40297:198:0:o;38720:762::-;38949:15;:2;-1:-1:-1;;;;;38949:13:0;;:15::i;:::-;38945:530;;;38985:72;;-1:-1:-1;;;38985:72:0;;-1:-1:-1;;;;;38985:38:0;;;;;:72;;39024:8;;39034:4;;39040:2;;39044:6;;39052:4;;38985:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38985:72:0;;;;;;;;-1:-1:-1;;38985:72:0;;;;;;;;;;;;:::i;:::-;;;38981:483;;;;:::i;:::-;-1:-1:-1;;;;;;39107:59:0;;-1:-1:-1;;;39107:59:0;39103:158;;39191:50;;-1:-1:-1;;;39191:50:0;;;;;;;:::i;36036:551::-;-1:-1:-1;;;;;36132:21:0;;36124:69;;;;-1:-1:-1;;;36124:69:0;;;;;;;:::i;:::-;36206:16;36225:12;:10;:12::i;:::-;36206:31;;36250:105;36271:8;36281:7;36298:1;36302:21;36320:2;36302:17;:21::i;:::-;36325:25;36343:6;36325:17;:25::i;:::-;36250:105;;;;;;;;;;;;:20;:105::i;:::-;36393:111;36434:6;36393:111;;;;;;;;;;;;;;;;;:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;36393:22:0;;;;;;;;;;;:111;:26;:111::i;:::-;36368:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;36368:22:0;;;;;;;;;;;;;:136;;;;36522:57;36368:13;;:22;36522:57;;;;;;;;36378:2;;36572:6;;36522:57;:::i;18839:422::-;19206:20;19245:8;;;18839:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130;72:20;;-1:-1;;;;;46519:54;;48498:35;;48488:2;;48547:1;;48537:12;538:707;;655:3;648:4;640:6;636:17;632:27;622:2;;-1:-1;;663:12;622:2;710:6;697:20;732:80;747:64;804:6;747:64;:::i;:::-;732:80;:::i;:::-;840:21;;;723:89;-1:-1;884:4;897:14;;;;872:17;;;986;;;977:27;;;;974:36;-1:-1;971:2;;;1023:1;;1013:12;971:2;1048:1;1033:206;1058:6;1055:1;1052:13;1033:206;;;1138:37;1171:3;1159:10;1138:37;:::i;:::-;1126:50;;1190:14;;;;1218;;;;1080:1;1073:9;1033:206;;;1037:14;;;;;615:630;;;;:::o;1270:708::-;;1397:3;1390:4;1382:6;1378:17;1374:27;1364:2;;-1:-1;;1405:12;1364:2;1452:6;1439:20;1474:90;1489:74;1556:6;1489:74;:::i;1474:90::-;1592:21;;;1465:99;-1:-1;1636:4;1649:14;;;;1624:17;;;1744:1;1729:243;1754:6;1751:1;1748:13;1729:243;;;1861:47;1904:3;1636:4;1837:3;1824:17;1628:6;1812:30;;1861:47;:::i;:::-;1849:60;;1923:14;;;;1951;;;;1776:1;1769:9;1729:243;;2004:707;;2121:3;2114:4;2106:6;2102:17;2098:27;2088:2;;-1:-1;;2129:12;2088:2;2176:6;2163:20;2198:80;2213:64;2270:6;2213:64;:::i;2198:80::-;2306:21;;;2189:89;-1:-1;2350:4;2363:14;;;;2338:17;;;2452;;;2443:27;;;;2440:36;-1:-1;2437:2;;;2489:1;;2479:12;2437:2;2514:1;2499:206;2524:6;2521:1;2518:13;2499:206;;;4451:20;;2592:50;;2656:14;;;;2684;;;;2546:1;2539:9;2499:206;;3125:440;;3226:3;3219:4;3211:6;3207:17;3203:27;3193:2;;-1:-1;;3234:12;3193:2;3281:6;3268:20;-1:-1;;;;;44071:6;44068:30;44065:2;;;-1:-1;;44101:12;44065:2;3303:64;44174:9;44155:17;;-1:-1;;44151:33;44242:4;44232:15;3303:64;:::i;:::-;3294:73;;3387:6;3380:5;3373:21;3491:3;44242:4;3482:6;3415;3473:16;;3470:25;3467:2;;;3508:1;;3498:12;3467:2;47125:6;44242:4;3415:6;3411:17;44242:4;3449:5;3445:16;47102:30;47181:1;47163:16;;;44242:4;47163:16;47156:27;3449:5;3186:379;-1:-1;;3186:379::o;4521:241::-;;4625:2;4613:9;4604:7;4600:23;4596:32;4593:2;;;-1:-1;;4631:12;4593:2;4693:53;4738:7;4714:22;4693:53;:::i;4769:366::-;;;4890:2;4878:9;4869:7;4865:23;4861:32;4858:2;;;-1:-1;;4896:12;4858:2;4958:53;5003:7;4979:22;4958:53;:::i;:::-;4948:63;;5066:53;5111:7;5048:2;5091:9;5087:22;5066:53;:::i;:::-;5056:63;;4852:283;;;;;:::o;5142:1119::-;;;;;;5373:3;5361:9;5352:7;5348:23;5344:33;5341:2;;;-1:-1;;5380:12;5341:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5432:63;-1:-1;5532:2;5571:22;;72:20;97:33;72:20;97:33;:::i;:::-;5540:63;-1:-1;5668:2;5653:18;;5640:32;-1:-1;;;;;5681:30;;;5678:2;;;-1:-1;;5714:12;5678:2;5744:78;5814:7;5805:6;5794:9;5790:22;5744:78;:::i;:::-;5734:88;;5887:2;5876:9;5872:18;5859:32;5845:46;;5692:18;5903:6;5900:30;5897:2;;;-1:-1;;5933:12;5897:2;5963:78;6033:7;6024:6;6013:9;6009:22;5963:78;:::i;:::-;5953:88;;6106:3;6095:9;6091:19;6078:33;6064:47;;5692:18;6123:6;6120:30;6117:2;;;-1:-1;;6153:12;6117:2;;6183:62;6237:7;6228:6;6217:9;6213:22;6183:62;:::i;:::-;6173:72;;;5335:926;;;;;;;;:::o;6268:847::-;;;;;;6449:3;6437:9;6428:7;6424:23;6420:33;6417:2;;;-1:-1;;6456:12;6417:2;6518:53;6563:7;6539:22;6518:53;:::i;:::-;6508:63;;6626:53;6671:7;6608:2;6651:9;6647:22;6626:53;:::i;:::-;6616:63;;6716:2;6759:9;6755:22;4451:20;6724:63;;6824:2;6867:9;6863:22;4451:20;6832:63;;6960:3;6949:9;6945:19;6932:33;-1:-1;;;;;6977:6;6974:30;6971:2;;;-1:-1;;7007:12;6971:2;7037:62;7091:7;7082:6;7071:9;7067:22;7037:62;:::i;7122:1537::-;;;;;;;7430:3;7418:9;7409:7;7405:23;7401:33;7398:2;;;-1:-1;;7437:12;7398:2;7499:53;7544:7;7520:22;7499:53;:::i;:::-;7489:63;;7617:2;7606:9;7602:18;7589:32;-1:-1;;;;;7641:18;7633:6;7630:30;7627:2;;;-1:-1;;7663:12;7627:2;7693:78;7763:7;7754:6;7743:9;7739:22;7693:78;:::i;:::-;7683:88;;7836:2;7825:9;7821:18;7808:32;7794:46;;7641:18;7852:6;7849:30;7846:2;;;-1:-1;;7882:12;7846:2;7912:88;7992:7;7983:6;7972:9;7968:22;7912:88;:::i;:::-;7902:98;;8065:2;8054:9;8050:18;8037:32;8023:46;;7641:18;8081:6;8078:30;8075:2;;;-1:-1;;8111:12;8075:2;8141:62;8195:7;8186:6;8175:9;8171:22;8141:62;:::i;:::-;8131:72;;8268:3;8257:9;8253:19;8240:33;8226:47;;7641:18;8285:6;8282:30;8279:2;;;-1:-1;;8315:12;8279:2;8345:78;8415:7;8406:6;8395:9;8391:22;8345:78;:::i;:::-;8335:88;;8488:3;8477:9;8473:19;8460:33;8446:47;;7641:18;8505:6;8502:30;8499:2;;;-1:-1;;8535:12;8499:2;;8565:78;8635:7;8626:6;8615:9;8611:22;8565:78;:::i;:::-;8555:88;;;7392:1267;;;;;;;;:::o;8666:763::-;;;;8854:2;8842:9;8833:7;8829:23;8825:32;8822:2;;;-1:-1;;8860:12;8822:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8912:63;-1:-1;9040:2;9025:18;;9012:32;-1:-1;;;;;9053:30;;;9050:2;;;-1:-1;;9086:12;9050:2;9116:78;9186:7;9177:6;9166:9;9162:22;9116:78;:::i;:::-;9106:88;;9259:2;9248:9;9244:18;9231:32;9217:46;;9064:18;9275:6;9272:30;9269:2;;;-1:-1;;9305:12;9269:2;;9335:78;9405:7;9396:6;9385:9;9381:22;9335:78;:::i;:::-;9325:88;;;8816:613;;;;;:::o;9436:360::-;;;9554:2;9542:9;9533:7;9529:23;9525:32;9522:2;;;-1:-1;;9560:12;9522:2;9622:53;9667:7;9643:22;9622:53;:::i;:::-;9612:63;;9712:2;9752:9;9748:22;2783:20;48644:5;46280:13;46273:21;48622:5;48619:32;48609:2;;-1:-1;;48655:12;48609:2;9720:60;;;;9516:280;;;;;:::o;9803:366::-;;;9924:2;9912:9;9903:7;9899:23;9895:32;9892:2;;;-1:-1;;9930:12;9892:2;9992:53;10037:7;10013:22;9992:53;:::i;:::-;9982:63;10082:2;10121:22;;;;4451:20;;-1:-1;;;9886:283::o;10176:1079::-;;;;;;;10384:3;10372:9;10363:7;10359:23;10355:33;10352:2;;;-1:-1;;10391:12;10352:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;10443:63;-1:-1;10543:2;10582:22;;4451:20;;-1:-1;10679:2;10664:18;;10651:32;-1:-1;;;;;10692:30;;;10689:2;;;-1:-1;;10725:12;10689:2;10755:63;10810:7;10801:6;10790:9;10786:22;10755:63;:::i;:::-;10745:73;;10883:2;10872:9;10868:18;10855:32;10841:46;;10703:18;10899:6;10896:30;10893:2;;;-1:-1;;10929:12;10893:2;;10959:62;11013:7;11004:6;10993:9;10989:22;10959:62;:::i;:::-;10949:72;;;11058:3;11102:9;11098:22;72:20;97:33;124:5;97:33;:::i;:::-;11067:63;;;;11167:3;11211:9;11207:22;4451:20;11176:63;;10346:909;;;;;;;;:::o;11262:491::-;;;;11400:2;11388:9;11379:7;11375:23;11371:32;11368:2;;;-1:-1;;11406:12;11368:2;11468:53;11513:7;11489:22;11468:53;:::i;:::-;11458:63;11558:2;11597:22;;4451:20;;-1:-1;11666:2;11705:22;;;4451:20;;11362:391;-1:-1;;;11362:391::o;11760:516::-;;;;11913:2;11901:9;11892:7;11888:23;11884:32;11881:2;;;-1:-1;;11919:12;11881:2;11977:17;11964:31;-1:-1;;;;;12015:18;12007:6;12004:30;12001:2;;;-1:-1;;12037:12;12001:2;12138:6;12127:9;12123:22;;;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;341:6;328:20;12015:18;360:6;357:30;354:2;;;-1:-1;;390:12;354:2;485:3;434:4;;469:6;465:17;426:6;451:32;;448:41;445:2;;;-1:-1;;492:12;445:2;434:4;422:17;;;;-1:-1;12057:98;-1:-1;;12228:22;;2783:20;2808:30;2783:20;2808:30;:::i;:::-;12200:60;;;;11875:401;;;;;:::o;12283:638::-;;;12454:2;12442:9;12433:7;12429:23;12425:32;12422:2;;;-1:-1;;12460:12;12422:2;12518:17;12505:31;-1:-1;;;;;12556:18;12548:6;12545:30;12542:2;;;-1:-1;;12578:12;12542:2;12608:78;12678:7;12669:6;12658:9;12654:22;12608:78;:::i;:::-;12598:88;;12751:2;12740:9;12736:18;12723:32;12709:46;;12556:18;12767:6;12764:30;12761:2;;;-1:-1;;12797:12;12761:2;;12827:78;12897:7;12888:6;12877:9;12873:22;12827:78;:::i;:::-;12817:88;;;12416:505;;;;;:::o;12928:235::-;;13029:2;13017:9;13008:7;13004:23;13000:32;12997:2;;;-1:-1;;13035:12;12997:2;2796:6;2783:20;2808:30;2832:5;2808:30;:::i;13170:239::-;;13273:2;13261:9;13252:7;13248:23;13244:32;13241:2;;;-1:-1;;13279:12;13241:2;2929:6;2916:20;2941:32;2967:5;2941:32;:::i;13416:261::-;;13530:2;13518:9;13509:7;13505:23;13501:32;13498:2;;;-1:-1;;13536:12;13498:2;3068:6;3062:13;3080:32;3106:5;3080:32;:::i;13684:367::-;;;13808:2;13796:9;13787:7;13783:23;13779:32;13776:2;;;-1:-1;;13814:12;13776:2;13872:17;13859:31;-1:-1;;;;;13910:18;13902:6;13899:30;13896:2;;;-1:-1;;13932:12;13896:2;14018:6;14007:9;14003:22;;;3703:3;3696:4;3688:6;3684:17;3680:27;3670:2;;-1:-1;;3711:12;3670:2;3754:6;3741:20;13910:18;3773:6;3770:30;3767:2;;;-1:-1;;3803:12;3767:2;3898:3;13808:2;3878:17;3839:6;3864:32;;3861:41;3858:2;;;-1:-1;;3905:12;3858:2;13808;3835:17;;;;;13952:83;;-1:-1;13770:281;;-1:-1;;;;13770:281::o;14058:241::-;;14162:2;14150:9;14141:7;14137:23;14133:32;14130:2;;;-1:-1;;14168:12;14130:2;-1:-1;4451:20;;14124:175;-1:-1;14124:175::o;14306:366::-;;;14427:2;14415:9;14406:7;14402:23;14398:32;14395:2;;;-1:-1;;14433:12;14395:2;-1:-1;;4451:20;;;14585:2;14624:22;;;4451:20;;-1:-1;14389:283::o;15161:690::-;;15354:5;45019:12;45563:6;45558:3;45551:19;45600:4;;45595:3;45591:14;15366:93;;45600:4;15530:5;44708:14;-1:-1;15569:260;15594:6;15591:1;15588:13;15569:260;;;15655:13;;26410:37;;14833:14;;;;45406;;;;15616:1;15609:9;15569:260;;;-1:-1;15835:10;;15285:566;-1:-1;;;;;15285:566::o;15970:343::-;;16112:5;45019:12;45563:6;45558:3;45551:19;-1:-1;47270:101;47284:6;47281:1;47278:13;47270:101;;;45600:4;47351:11;;;;;47345:18;47332:11;;;;;47325:39;47299:10;47270:101;;;47386:6;47383:1;47380:13;47377:2;;;-1:-1;45600:4;47442:6;45595:3;47433:16;;47426:27;47377:2;-1:-1;44174:9;47542:14;-1:-1;;47538:28;16269:39;;;;45600:4;16269:39;;16060:253;-1:-1;;16060:253::o;16699:884::-;;16836:5;16830:12;16870:1;;16859:9;16855:17;16883:1;16878:268;;;;17157:1;17152:425;;;;16848:729;;16878:268;-1:-1;;17083:25;;17071:38;;16952:1;16937:17;;16956:4;16933:28;17123:16;;;-1:-1;16878:268;;17152:425;17221:1;17210:9;17206:17;44856:3;-1:-1;44846:14;44888:4;;-1:-1;44875:18;-1:-1;17410:130;17424:6;17421:1;17418:13;17410:130;;;17483:14;;17470:11;;;17463:35;17517:15;;;;17439:12;;17410:130;;;-1:-1;;;17554:16;;;-1:-1;16848:729;;;;16806:777;;;;:::o;25654:305::-;25878:1;45551:19;;-1:-1;;;45600:4;45591:14;;25893:29;25941:12;;;25800:159::o;26579:424::-;;26886:92;26776;26864:3;26855:6;26776:92;:::i;:::-;26965:6;26886:92;:::i;:::-;26988:10;26757:246;-1:-1;;;;26757:246::o;27010:222::-;-1:-1;;;;;46519:54;;;;15081:37;;27137:2;27122:18;;27108:124::o;27239:642::-;-1:-1;;;;;46519:54;;14940:58;;27497:2;27623;27608:18;;27601:48;;;27239:642;;27663:131;;27482:18;;27663:131;:::i;:::-;27655:139;;15951:5;46280:13;46273:21;27867:2;27856:9;27852:18;15924:34;27468:413;;;;;:::o;27888:1048::-;-1:-1;;;;;46519:54;;;15081:37;;46519:54;;28410:2;28395:18;;15081:37;46530:42;28447:2;28432:18;;28425:48;;;27888:1048;;28487:108;;28230:19;;28581:6;28487:108;:::i;:::-;28643:9;28637:4;28633:20;28628:2;28617:9;28613:18;28606:48;28668:108;28771:4;28762:6;28668:108;:::i;:::-;28660:116;;28825:9;28819:4;28815:20;28809:3;28798:9;28794:19;28787:49;28850:76;28921:4;28912:6;28850:76;:::i;:::-;28842:84;28216:720;-1:-1;;;;;;;;28216:720::o;28943:752::-;-1:-1;;;;;46519:54;;;15081:37;;46519:54;;29365:2;29350:18;;15081:37;29448:2;29433:18;;26410:37;;;29531:2;29516:18;;26410:37;;;46530:42;29568:3;29553:19;;29546:49;;;28943:752;;29609:76;;29185:19;;29671:6;29609:76;:::i;29702:626::-;-1:-1;;;;;46519:54;;;;15081:37;;29952:2;30070;30055:18;;30048:48;;;24026:1;29937:18;;;45551:19;-1:-1;;;45591:14;;;24041:28;46280:13;46273:21;30314:2;30299:18;;15924:34;46530:42;24088:12;;29923:405::o;30968:333::-;-1:-1;;;;;46519:54;;;;15081:37;;31287:2;31272:18;;26410:37;31123:2;31108:18;;31094:207::o;31308:370::-;;31485:2;31506:17;31499:47;31560:108;31485:2;31474:9;31470:18;31654:6;31560:108;:::i;31685:629::-;;31940:2;31961:17;31954:47;32015:108;31940:2;31929:9;31925:18;32109:6;32015:108;:::i;:::-;32171:9;32165:4;32161:20;32156:2;32145:9;32141:18;32134:48;32196:108;32299:4;32290:6;32196:108;:::i;:::-;32188:116;31911:403;-1:-1;;;;;31911:403::o;32321:210::-;46280:13;;46273:21;15924:34;;32442:2;32427:18;;32413:118::o;32538:310::-;;32685:2;32706:17;32699:47;32760:78;32685:2;32674:9;32670:18;32824:6;32760:78;:::i;32855:416::-;33055:2;33069:47;;;17816:2;33040:18;;;45551:19;17852:34;45591:14;;;17832:55;-1:-1;;;17907:12;;;17900:44;17963:12;;;33026:245::o;33278:416::-;33478:2;33492:47;;;18214:2;33463:18;;;45551:19;18250:34;45591:14;;;18230:55;-1:-1;;;18305:12;;;18298:32;18349:12;;;33449:245::o;33701:416::-;33901:2;33915:47;;;18600:2;33886:18;;;45551:19;18636:34;45591:14;;;18616:55;-1:-1;;;18691:12;;;18684:35;18738:12;;;33872:245::o;34124:416::-;34324:2;34338:47;;;18989:2;34309:18;;;45551:19;19025:34;45591:14;;;19005:55;-1:-1;;;19080:12;;;19073:30;19122:12;;;34295:245::o;34547:416::-;34747:2;34761:47;;;19373:2;34732:18;;;45551:19;19409:29;45591:14;;;19389:50;19458:12;;;34718:245::o;34970:416::-;35170:2;35184:47;;;19709:2;35155:18;;;45551:19;19745:34;45591:14;;;19725:55;-1:-1;;;19800:12;;;19793:33;19845:12;;;35141:245::o;35393:416::-;35593:2;35607:47;;;20096:2;35578:18;;;45551:19;-1:-1;;;45591:14;;;20112:45;20176:12;;;35564:245::o;35816:416::-;36016:2;36030:47;;;20427:2;36001:18;;;45551:19;20463:28;45591:14;;;20443:49;20511:12;;;35987:245::o;36239:416::-;36439:2;36453:47;;;36424:18;;;45551:19;20798:34;45591:14;;;20778:55;20852:12;;;36410:245::o;36662:416::-;36862:2;36876:47;;;21103:2;36847:18;;;45551:19;-1:-1;;;45591:14;;;21119:44;21182:12;;;36833:245::o;37085:416::-;37285:2;37299:47;;;21433:2;37270:18;;;45551:19;21469:34;45591:14;;;21449:55;-1:-1;;;21524:12;;;21517:29;21565:12;;;37256:245::o;37508:416::-;37708:2;37722:47;;;21816:2;37693:18;;;45551:19;21852:34;45591:14;;;21832:55;-1:-1;;;21907:12;;;21900:42;21961:12;;;37679:245::o;37931:416::-;38131:2;38145:47;;;22212:2;38116:18;;;45551:19;22248:34;45591:14;;;22228:55;-1:-1;;;22303:12;;;22296:27;22342:12;;;38102:245::o;38354:416::-;38554:2;38568:47;;;22593:2;38539:18;;;45551:19;22629:34;45591:14;;;22609:55;-1:-1;;;22684:12;;;22677:29;22725:12;;;38525:245::o;38777:416::-;38977:2;38991:47;;;22976:2;38962:18;;;45551:19;23012:34;45591:14;;;22992:55;-1:-1;;;23067:12;;;23060:25;23104:12;;;38948:245::o;39200:416::-;39400:2;39414:47;;;39385:18;;;45551:19;23391:34;45591:14;;;23371:55;23445:12;;;39371:245::o;39623:416::-;39823:2;39837:47;;;23696:2;39808:18;;;45551:19;-1:-1;;;45591:14;;;23712:44;23775:12;;;39794:245::o;40046:416::-;40246:2;40260:47;;;24339:2;40231:18;;;45551:19;24375:34;45591:14;;;24355:55;-1:-1;;;24430:12;;;24423:33;24475:12;;;40217:245::o;40469:416::-;40669:2;40683:47;;;24726:2;40654:18;;;45551:19;24762:34;45591:14;;;24742:55;-1:-1;;;24817:12;;;24810:33;24862:12;;;40640:245::o;40892:416::-;41092:2;41106:47;;;25113:2;41077:18;;;45551:19;25149:34;45591:14;;;25129:55;-1:-1;;;25204:12;;;25197:32;25248:12;;;41063:245::o;41315:416::-;41515:2;41529:47;;;25499:2;41500:18;;;45551:19;25535:34;45591:14;;;25515:55;-1:-1;;;25590:12;;;25583:25;25627:12;;;41486:245::o;41738:416::-;41938:2;41952:47;;;26192:2;41923:18;;;45551:19;26228:34;45591:14;;;26208:55;-1:-1;;;26283:12;;;26276:28;26323:12;;;41909:245::o;42161:222::-;26410:37;;;42288:2;42273:18;;42259:124::o;42390:333::-;26410:37;;;42709:2;42694:18;;26410:37;42545:2;42530:18;;42516:207::o;42730:256::-;42792:2;42786:9;42818:17;;;-1:-1;;;;;42878:34;;42914:22;;;42875:62;42872:2;;;42950:1;;42940:12;42872:2;42792;42959:22;42770:216;;-1:-1;42770:216::o;42993:304::-;;-1:-1;;;;;43144:6;43141:30;43138:2;;;-1:-1;;43174:12;43138:2;-1:-1;43219:4;43207:17;;;43272:15;;43075:222::o;47579:106::-;47664:3;47660:15;;47632:53::o;47693:739::-;;47766:4;47748:16;47745:26;47742:2;;;47774:5;;47742:2;47808:1;-1:-1;;47787:23;47883:10;47826:34;-1:-1;47851:8;47826:34;:::i;:::-;47875:19;47865:2;;47898:5;;47865:2;47929;47923:9;47965:16;-1:-1;;47961:24;47808:1;47923:9;47937:49;48012:4;48006:11;48093:16;-1:-1;;;;;48093:16;48086:4;48078:6;48074:17;48071:39;48045:18;48037:6;48034:30;48025:91;48022:2;;;48124:5;;;;;;48022:2;48162:6;48156:4;48152:17;48141:28;;48194:3;48188:10;48174:24;;48045:18;48209:6;48206:30;48203:2;;;48239:5;;;;;;48203:2;;48316:16;48310:4;48306:27;48276:4;48283:6;48271:3;48263:27;;48298:36;48295:2;;;48337:5;;;;;48295:2;44174:9;47542:14;-1:-1;;47538:28;48361:50;;48276:4;48361:50;47929:2;48350:62;48369:3;-1:-1;;47736:696;:::o;48439:117::-;-1:-1;;;;;46519:54;;48498:35;;48488:2;;48547:1;;48537:12;48488:2;48482:74;:::o;48563:111::-;48644:5;46280:13;46273:21;48622:5;48619:32;48609:2;;48665:1;;48655:12;48681:115;-1:-1;;;;;;46367:78;;48739:34;;48729:2;;48787:1;;48777:12
Swarm Source
ipfs://bdd0a62992389756e23b234db62180128b99f081ea9b3d692eea221b29fd04fe
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.