Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
49 FLAV
Holders
38
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 FLAVLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NaturalFlavors
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* /$$$$$$ /$$$$$$$$ /$$$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$$ /$$$$$$$ /$$__ $$|__ $$__/| $$_____/| $$ | $$|_ $$_/| $$_____/| $$__ $$ | $$ \__/ | $$ | $$ | $$ | $$ | $$ | $$ | $$ \ $$ | $$$$$$ | $$ | $$$$$ | $$ / $$/ | $$ | $$$$$ | $$$$$$$/ \____ $$ | $$ | $$__/ \ $$ $$/ | $$ | $$__/ | $$____/ /$$ \ $$ | $$ | $$ \ $$$/ | $$ | $$ | $$ | $$$$$$/ | $$ | $$$$$$$$ \ $/ /$$$$$$| $$$$$$$$| $$ \______/ |__/ |________/ \_/ |______/|________/|__/ */ import "./Dependencies.sol"; pragma solidity ^0.8.2; contract NaturalFlavors is ERC721, ERC721Burnable, Ownable { using Strings for uint256; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; uint private _tokenIdCounter; string public baseDefaultUrl; string public baseDefaultUrlExtension; string public license; address public mintingAddress; address public royaltyBenificiary; uint public royaltyBasisPoints; mapping(uint256 => string) public tokenIdToMetadata; event ProjectEvent(address indexed poster, string indexed eventType, string content); event TokenEvent(address indexed poster, uint256 indexed tokenId, string indexed eventType, string content); constructor( string memory _baseDefaultUrl ) ERC721('NaturalFlavors', 'FLAV') { baseDefaultUrl = _baseDefaultUrl; baseDefaultUrlExtension = '.json'; license = 'CC BY-NC 4.0'; royaltyBasisPoints = 750; _tokenIdCounter = 0; mintingAddress = msg.sender; royaltyBenificiary = msg.sender; } function totalSupply() public view virtual returns (uint256) { return _tokenIdCounter - 1; } function mint(address to) public { require(mintingAddress == _msgSender(), 'Caller is not the minting address'); _mint(to, _tokenIdCounter); _tokenIdCounter++; } function batchMint(address[] memory addresses) public { require(mintingAddress == _msgSender(), 'Caller is not the minting address'); for (uint i = 0; i < addresses.length; i++) { _mint(addresses[i], _tokenIdCounter); _tokenIdCounter++; } } function setMintingAddress(address minter) public onlyOwner { mintingAddress = minter; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); bytes memory stringBytes = bytes(tokenIdToMetadata[tokenId]); if (stringBytes.length == 0) { string memory tokenString = tokenId.toString(); return string(abi.encodePacked(baseDefaultUrl, tokenString, baseDefaultUrlExtension)); } string memory json = Base64.encode(stringBytes); return string(abi.encodePacked('data:application/json;base64,', json)); } function updateBaseUrl(string memory _baseDefaultUrl, string memory _baseUrlExtension) public onlyOwner { baseDefaultUrl = _baseDefaultUrl; baseDefaultUrlExtension = _baseUrlExtension; } function updateTokenMetadata( uint256 tokenId, string memory tokenMetadata ) public onlyOwner { tokenIdToMetadata[tokenId] = tokenMetadata; } function updateLicense( string memory _license ) public onlyOwner { license = _license; } function emitProjectEvent(string memory _eventType, string memory _content) public onlyOwner { emit ProjectEvent(_msgSender(), _eventType, _content); } function emitTokenEvent(uint256 tokenId, string memory _eventType, string memory _content) public { require( owner() == _msgSender() || ERC721.ownerOf(tokenId) == _msgSender(), 'Only project or token owner can emit token event' ); emit TokenEvent(_msgSender(), tokenId, _eventType, _content); } function updatRoyaltyInfo( address _royaltyBenificiary, uint256 _royaltyBasisPoints ) public onlyOwner { royaltyBenificiary = _royaltyBenificiary; royaltyBasisPoints = _royaltyBasisPoints; } function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address, uint256) { return (royaltyBenificiary, _salePrice * royaltyBasisPoints / 10000); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return interfaceId == _INTERFACE_ID_ERC2981 || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @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; assembly { size := extcodesize(account) } return size > 0; } // Don't need any of this // /** // * @dev Replacement for Solidity's `transfer`: sends `amount` wei to // * `recipient`, forwarding all available gas and reverting on errors. // * // * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost // * of certain opcodes, possibly making contracts go over the 2300 gas limit // * imposed by `transfer`, making them unable to receive funds via // * `transfer`. {sendValue} removes this limitation. // * // * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. // * // * IMPORTANT: because control is transferred to `recipient`, care must be // * taken to not create reentrancy vulnerabilities. Consider using // * {ReentrancyGuard} or the // * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. // */ // function sendValue(address payable recipient, uint256 amount) internal { // require(address(this).balance >= amount, "Address: insufficient balance"); // (bool success, ) = recipient.call{value: amount}(""); // require(success, "Address: unable to send value, recipient may have reverted"); // } // /** // * @dev Performs a Solidity function call using a low level `call`. A // * plain `call` is an unsafe replacement for a function call: use this // * function instead. // * // * If `target` reverts with a revert reason, it is bubbled up by this // * function (like regular Solidity function calls). // * // * Returns the raw returned data. To convert to the expected return value, // * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. // * // * Requirements: // * // * - `target` must be a contract. // * - calling `target` with `data` must not revert. // * // * _Available since v3.1._ // */ // function functionCall(address target, bytes memory data) internal returns (bytes memory) { // return 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"); // (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"); // (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"); // (bool success, bytes memory returndata) = target.delegatecall(data); // return verifyCallResult(success, returndata, errorMessage); // } // /** // * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the // * revert reason using the provided one. // * // * _Available since v4.3._ // */ // function verifyCallResult( // bool success, // bytes memory returndata, // string memory errorMessage // ) internal pure returns (bytes memory) { // if (success) { // return returndata; // } else { // // 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 // assembly { // let returndata_size := mload(returndata) // revert(add(32, returndata), returndata_size) // } // } else { // revert(errorMessage); // } // } // } } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } // Don't need these // /** // * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. // */ // function toHexString(uint256 value) internal pure returns (string memory) { // if (value == 0) { // return "0x00"; // } // uint256 temp = value; // uint256 length = 0; // while (temp != 0) { // length++; // temp >>= 8; // } // return toHexString(value, length); // } // * // * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. // function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { // bytes memory buffer = new bytes(2 * length + 2); // buffer[0] = "0"; // buffer[1] = "x"; // for (uint256 i = 2 * length + 1; i > 1; --i) { // buffer[i] = _HEX_SYMBOLS[value & 0xf]; // value >>= 4; // } // require(value == 0, "Strings: hex length insufficient"); // return string(buffer); // } } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseDefaultUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"poster","type":"address"},{"indexed":true,"internalType":"string","name":"eventType","type":"string"},{"indexed":false,"internalType":"string","name":"content","type":"string"}],"name":"ProjectEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"poster","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"eventType","type":"string"},{"indexed":false,"internalType":"string","name":"content","type":"string"}],"name":"TokenEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDefaultUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDefaultUrlExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_eventType","type":"string"},{"internalType":"string","name":"_content","type":"string"}],"name":"emitProjectEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_eventType","type":"string"},{"internalType":"string","name":"_content","type":"string"}],"name":"emitTokenEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"license","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyBenificiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"setMintingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToMetadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyBenificiary","type":"address"},{"internalType":"uint256","name":"_royaltyBasisPoints","type":"uint256"}],"name":"updatRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseDefaultUrl","type":"string"},{"internalType":"string","name":"_baseUrlExtension","type":"string"}],"name":"updateBaseUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_license","type":"string"}],"name":"updateLicense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenMetadata","type":"string"}],"name":"updateTokenMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620049bf380380620049bf833981810160405281019062000037919062000436565b6040518060400160405280600e81526020017f4e61747572616c466c61766f72730000000000000000000000000000000000008152506040518060400160405280600481526020017f464c4156000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000314565b508060019080519060200190620000d492919062000314565b505050620000f7620000eb6200024660201b60201c565b6200024e60201b60201c565b80600890805190602001906200010f92919062000314565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200015d92919062000314565b506040518060400160405280600c81526020017f43432042592d4e4320342e300000000000000000000000000000000000000000815250600a9080519060200190620001ab92919062000314565b506102ee600d81905550600060078190555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005eb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003229062000510565b90600052602060002090601f01602090048101928262000346576000855562000392565b82601f106200036157805160ff191683800117855562000392565b8280016001018555821562000392579182015b828111156200039157825182559160200191906001019062000374565b5b509050620003a19190620003a5565b5090565b5b80821115620003c0576000816000905550600101620003a6565b5090565b6000620003db620003d584620004a4565b6200047b565b905082815260208101848484011115620003f457600080fd5b62000401848285620004da565b509392505050565b600082601f8301126200041b57600080fd5b81516200042d848260208601620003c4565b91505092915050565b6000602082840312156200044957600080fd5b600082015167ffffffffffffffff8111156200046457600080fd5b620004728482850162000409565b91505092915050565b6000620004876200049a565b905062000495828262000546565b919050565b6000604051905090565b600067ffffffffffffffff821115620004c257620004c1620005ab565b5b620004cd82620005da565b9050602081019050919050565b60005b83811015620004fa578082015181840152602081019050620004dd565b838111156200050a576000848401525b50505050565b600060028204905060018216806200052957607f821691505b6020821081141562000540576200053f6200057c565b5b50919050565b6200055182620005da565b810181811067ffffffffffffffff82111715620005735762000572620005ab565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6143c480620005fb6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80636b87d24c11610125578063c87b56dd116100ad578063e33a68161161007c578063e33a6816146105e9578063e985e9c514610607578063ecf4326b14610637578063f2fde38b14610653578063fd4307c31461066f57610211565b8063c87b56dd14610563578063ccccc63d14610593578063d4434ab0146105b1578063d67b06c1146105cd57610211565b80638da5cb5b116100f45780638da5cb5b146104bf57806395d89b41146104dd578063a22cb465146104fb578063b88d4fde14610517578063bf64db1d1461053357610211565b80636b87d24c1461044b57806370a0823114610469578063715018a61461049957806385eaae73146104a357610211565b80632cb2f52e116101a857806342842e0e1161017757806342842e0e146103ab57806342966c68146103c757806352a6c8c9146103e35780636352211e146103ff5780636a6278421461042f57610211565b80632cb2f52e1461033957806332d434e914610355578063343fe3351461037157806342260b5d1461038d57610211565b80630fe43d5e116101e45780630fe43d5e146102b057806318160ddd146102ce57806323b872dd146102ec5780632a55205a1461030857610211565b806301ffc9a71461021657806306fdde0314610246578063081812fc14610264578063095ea7b314610294575b600080fd5b610230600480360381019061022b9190612f10565b61068d565b60405161023d919061364c565b60405180910390f35b61024e6106ee565b60405161025b9190613667565b60405180910390f35b61027e6004803603810190610279919061300f565b610780565b60405161028b91906135bc565b60405180910390f35b6102ae60048036038101906102a99190612e93565b610805565b005b6102b861091d565b6040516102c59190613667565b60405180910390f35b6102d66109ab565b6040516102e391906138e9565b60405180910390f35b61030660048036038101906103019190612d8d565b6109c1565b005b610322600480360381019061031d919061310b565b610a21565b604051610330929190613623565b60405180910390f35b610353600480360381019061034e9190613038565b610a6d565b005b61036f600480360381019061036a9190612d28565b610b15565b005b61038b60048036038101906103869190612f62565b610bd5565b005b610395610c6b565b6040516103a291906138e9565b60405180910390f35b6103c560048036038101906103c09190612d8d565b610c71565b005b6103e160048036038101906103dc919061300f565b610c91565b005b6103fd60048036038101906103f8919061308c565b610ced565b005b6104196004803603810190610414919061300f565b610e1f565b60405161042691906135bc565b60405180910390f35b61044960048036038101906104449190612d28565b610ed1565b005b610453610f8f565b6040516104609190613667565b60405180910390f35b610483600480360381019061047e9190612d28565b61101d565b60405161049091906138e9565b60405180910390f35b6104a16110d5565b005b6104bd60048036038101906104b89190612e93565b61115d565b005b6104c7611225565b6040516104d491906135bc565b60405180910390f35b6104e561124f565b6040516104f29190613667565b60405180910390f35b61051560048036038101906105109190612e57565b6112e1565b005b610531600480360381019061052c9190612ddc565b611462565b005b61054d6004803603810190610548919061300f565b6114c4565b60405161055a9190613667565b60405180910390f35b61057d6004803603810190610578919061300f565b611564565b60405161058a9190613667565b60405180910390f35b61059b6116cb565b6040516105a89190613667565b60405180910390f35b6105cb60048036038101906105c69190612fa3565b611759565b005b6105e760048036038101906105e29190612ecf565b611844565b005b6105f1611962565b6040516105fe91906135bc565b60405180910390f35b610621600480360381019061061c9190612d51565b611988565b60405161062e919061364c565b60405180910390f35b610651600480360381019061064c9190612fa3565b611a1c565b005b61066d60048036038101906106689190612d28565b611aca565b005b610677611bc2565b60405161068491906135bc565b60405180910390f35b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106e757506106e682611be8565b5b9050919050565b6060600080546106fd90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461072990613bda565b80156107765780601f1061074b57610100808354040283529160200191610776565b820191906000526020600020905b81548152906001019060200180831161075957829003601f168201915b5050505050905090565b600061078b82611cca565b6107ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c1906137e9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061081082610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890613869565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108a0611d36565b73ffffffffffffffffffffffffffffffffffffffff1614806108cf57506108ce816108c9611d36565b611988565b5b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590613769565b60405180910390fd5b6109188383611d3e565b505050565b6009805461092a90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461095690613bda565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b505050505081565b600060016007546109bc9190613af0565b905090565b6109d26109cc611d36565b82611df7565b610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890613889565b60405180910390fd5b610a1c838383611ed5565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710600d5485610a589190613a96565b610a629190613a65565b915091509250929050565b610a75611d36565b73ffffffffffffffffffffffffffffffffffffffff16610a93611225565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613809565b60405180910390fd5b80600e60008481526020019081526020016000209080519060200190610b10929190612ab6565b505050565b610b1d611d36565b73ffffffffffffffffffffffffffffffffffffffff16610b3b611225565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890613809565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bdd611d36565b73ffffffffffffffffffffffffffffffffffffffff16610bfb611225565b73ffffffffffffffffffffffffffffffffffffffff1614610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613809565b60405180910390fd5b80600a9080519060200190610c67929190612ab6565b5050565b600d5481565b610c8c83838360405180602001604052806000815250611462565b505050565b610ca2610c9c611d36565b82611df7565b610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906138c9565b60405180910390fd5b610cea81612131565b50565b610cf5611d36565b73ffffffffffffffffffffffffffffffffffffffff16610d13611225565b73ffffffffffffffffffffffffffffffffffffffff161480610d6f5750610d38611d36565b73ffffffffffffffffffffffffffffffffffffffff16610d5784610e1f565b73ffffffffffffffffffffffffffffffffffffffff16145b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906138a9565b60405180910390fd5b81604051610dbc9190613552565b604051809103902083610dcd611d36565b73ffffffffffffffffffffffffffffffffffffffff167fad000c5a693465b4555f1044ddd1221ef0bfc49e5621ceb705b952ff97e2caac84604051610e129190613667565b60405180910390a4505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906137a9565b60405180910390fd5b80915050919050565b610ed9611d36565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613689565b60405180910390fd5b610f7481600754612242565b60076000815480929190610f8790613c3d565b919050555050565b600a8054610f9c90613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890613bda565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613789565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110dd611d36565b73ffffffffffffffffffffffffffffffffffffffff166110fb611225565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890613809565b60405180910390fd5b61115b6000612410565b565b611165611d36565b73ffffffffffffffffffffffffffffffffffffffff16611183611225565b73ffffffffffffffffffffffffffffffffffffffff16146111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090613809565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d819055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125e90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461128a90613bda565b80156112d75780601f106112ac576101008083540402835291602001916112d7565b820191906000526020600020905b8154815290600101906020018083116112ba57829003601f168201915b5050505050905090565b6112e9611d36565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e90613729565b60405180910390fd5b8060056000611364611d36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611411611d36565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611456919061364c565b60405180910390a35050565b61147361146d611d36565b83611df7565b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613889565b60405180910390fd5b6114be848484846124d6565b50505050565b600e60205280600052604060002060009150905080546114e390613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461150f90613bda565b801561155c5780601f106115315761010080835404028352916020019161155c565b820191906000526020600020905b81548152906001019060200180831161153f57829003601f168201915b505050505081565b606061156f82611cca565b6115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613849565b60405180910390fd5b6000600e600084815260200190815260200160002080546115ce90613bda565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa90613bda565b80156116475780601f1061161c57610100808354040283529160200191611647565b820191906000526020600020905b81548152906001019060200180831161162a57829003601f168201915b5050505050905060008151141561169457600061166384612532565b9050600881600960405160200161167c93929190613569565b604051602081830303815290604052925050506116c6565b600061169f826126df565b9050806040516020016116b2919061359a565b604051602081830303815290604052925050505b919050565b600880546116d890613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461170490613bda565b80156117515780601f1061172657610100808354040283529160200191611751565b820191906000526020600020905b81548152906001019060200180831161173457829003601f168201915b505050505081565b611761611d36565b73ffffffffffffffffffffffffffffffffffffffff1661177f611225565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613809565b60405180910390fd5b816040516117e39190613552565b60405180910390206117f3611d36565b73ffffffffffffffffffffffffffffffffffffffff167f3d366eac52dec4372766dc4b15bba20b935b45d33171465a598eedabb5a5dff8836040516118389190613667565b60405180910390a35050565b61184c611d36565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613689565b60405180910390fd5b60005b815181101561195e57611933828281518110611923577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600754612242565b6007600081548092919061194690613c3d565b9190505550808061195690613c3d565b9150506118de565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a24611d36565b73ffffffffffffffffffffffffffffffffffffffff16611a42611225565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613809565b60405180910390fd5b8160089080519060200190611aae929190612ab6565b508060099080519060200190611ac5929190612ab6565b505050565b611ad2611d36565b73ffffffffffffffffffffffffffffffffffffffff16611af0611225565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90613809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad906136c9565b60405180910390fd5b611bbf81612410565b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cb357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cc35750611cc28261289d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db183610e1f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0282611cca565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613749565b60405180910390fd5b6000611e4c83610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ebb57508373ffffffffffffffffffffffffffffffffffffffff16611ea384610780565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecc5750611ecb8185611988565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ef582610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613829565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613709565b60405180910390fd5b611fc6838383612907565b611fd1600082611d3e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120219190613af0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120789190613a0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061213c82610e1f565b905061214a81600084612907565b612155600083611d3e565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a59190613af0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906137c9565b60405180910390fd5b6122bb81611cca565b156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f2906136e9565b60405180910390fd5b61230760008383612907565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123579190613a0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124e1848484611ed5565b6124ed8484848461290c565b61252c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612523906136a9565b60405180910390fd5b50505050565b6060600082141561257a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126da565b600082905060005b600082146125ac57808061259590613c3d565b915050600a826125a59190613a65565b9150612582565b60008167ffffffffffffffff8111156125ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126205781602001600182028036833780820191505090505b5090505b600085146126d3576001826126399190613af0565b9150600a856126489190613c86565b60306126549190613a0f565b60f81b818381518110612690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126cc9190613a65565b9450612624565b8093505050505b919050565b606060008251905060008114156127085760405180602001604052806000815250915050612898565b600060036002836127199190613a0f565b6127239190613a65565b600461272f9190613a96565b905060006020826127409190613a0f565b67ffffffffffffffff81111561277f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127b15781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161434f604091399050600181016020830160005b868110156128555760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506127dc565b50600386066001811461286f576002811461287f5761288a565b613d3d60f01b600283035261288a565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600061292d8473ffffffffffffffffffffffffffffffffffffffff16612aa3565b15612a96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612956611d36565b8786866040518563ffffffff1660e01b815260040161297894939291906135d7565b602060405180830381600087803b15801561299257600080fd5b505af19250505080156129c357506040513d601f19601f820116820180604052508101906129c09190612f39565b60015b612a46573d80600081146129f3576040519150601f19603f3d011682016040523d82523d6000602084013e6129f8565b606091505b50600081511415612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35906136a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a9b565b600190505b949350505050565b600080823b905060008111915050919050565b828054612ac290613bda565b90600052602060002090601f016020900481019282612ae45760008555612b2b565b82601f10612afd57805160ff1916838001178555612b2b565b82800160010185558215612b2b579182015b82811115612b2a578251825591602001919060010190612b0f565b5b509050612b389190612b3c565b5090565b5b80821115612b55576000816000905550600101612b3d565b5090565b6000612b6c612b6784613929565b613904565b90508083825260208201905082856020860282011115612b8b57600080fd5b60005b85811015612bbb5781612ba18882612c41565b845260208401935060208301925050600181019050612b8e565b5050509392505050565b6000612bd8612bd384613955565b613904565b905082815260208101848484011115612bf057600080fd5b612bfb848285613b98565b509392505050565b6000612c16612c1184613986565b613904565b905082815260208101848484011115612c2e57600080fd5b612c39848285613b98565b509392505050565b600081359050612c50816142f2565b92915050565b600082601f830112612c6757600080fd5b8135612c77848260208601612b59565b91505092915050565b600081359050612c8f81614309565b92915050565b600081359050612ca481614320565b92915050565b600081519050612cb981614320565b92915050565b600082601f830112612cd057600080fd5b8135612ce0848260208601612bc5565b91505092915050565b600082601f830112612cfa57600080fd5b8135612d0a848260208601612c03565b91505092915050565b600081359050612d2281614337565b92915050565b600060208284031215612d3a57600080fd5b6000612d4884828501612c41565b91505092915050565b60008060408385031215612d6457600080fd5b6000612d7285828601612c41565b9250506020612d8385828601612c41565b9150509250929050565b600080600060608486031215612da257600080fd5b6000612db086828701612c41565b9350506020612dc186828701612c41565b9250506040612dd286828701612d13565b9150509250925092565b60008060008060808587031215612df257600080fd5b6000612e0087828801612c41565b9450506020612e1187828801612c41565b9350506040612e2287828801612d13565b925050606085013567ffffffffffffffff811115612e3f57600080fd5b612e4b87828801612cbf565b91505092959194509250565b60008060408385031215612e6a57600080fd5b6000612e7885828601612c41565b9250506020612e8985828601612c80565b9150509250929050565b60008060408385031215612ea657600080fd5b6000612eb485828601612c41565b9250506020612ec585828601612d13565b9150509250929050565b600060208284031215612ee157600080fd5b600082013567ffffffffffffffff811115612efb57600080fd5b612f0784828501612c56565b91505092915050565b600060208284031215612f2257600080fd5b6000612f3084828501612c95565b91505092915050565b600060208284031215612f4b57600080fd5b6000612f5984828501612caa565b91505092915050565b600060208284031215612f7457600080fd5b600082013567ffffffffffffffff811115612f8e57600080fd5b612f9a84828501612ce9565b91505092915050565b60008060408385031215612fb657600080fd5b600083013567ffffffffffffffff811115612fd057600080fd5b612fdc85828601612ce9565b925050602083013567ffffffffffffffff811115612ff957600080fd5b61300585828601612ce9565b9150509250929050565b60006020828403121561302157600080fd5b600061302f84828501612d13565b91505092915050565b6000806040838503121561304b57600080fd5b600061305985828601612d13565b925050602083013567ffffffffffffffff81111561307657600080fd5b61308285828601612ce9565b9150509250929050565b6000806000606084860312156130a157600080fd5b60006130af86828701612d13565b935050602084013567ffffffffffffffff8111156130cc57600080fd5b6130d886828701612ce9565b925050604084013567ffffffffffffffff8111156130f557600080fd5b61310186828701612ce9565b9150509250925092565b6000806040838503121561311e57600080fd5b600061312c85828601612d13565b925050602061313d85828601612d13565b9150509250929050565b61315081613b24565b82525050565b61315f81613b36565b82525050565b6000613170826139cc565b61317a81856139e2565b935061318a818560208601613ba7565b61319381613d73565b840191505092915050565b60006131a9826139d7565b6131b381856139f3565b93506131c3818560208601613ba7565b6131cc81613d73565b840191505092915050565b60006131e2826139d7565b6131ec8185613a04565b93506131fc818560208601613ba7565b80840191505092915050565b6000815461321581613bda565b61321f8186613a04565b9450600182166000811461323a576001811461324b5761327e565b60ff1983168652818601935061327e565b613254856139b7565b60005b8381101561327657815481890152600182019150602081019050613257565b838801955050505b50505092915050565b60006132946021836139f3565b915061329f82613d84565b604082019050919050565b60006132b76032836139f3565b91506132c282613dd3565b604082019050919050565b60006132da6026836139f3565b91506132e582613e22565b604082019050919050565b60006132fd601c836139f3565b915061330882613e71565b602082019050919050565b60006133206024836139f3565b915061332b82613e9a565b604082019050919050565b60006133436019836139f3565b915061334e82613ee9565b602082019050919050565b6000613366602c836139f3565b915061337182613f12565b604082019050919050565b60006133896038836139f3565b915061339482613f61565b604082019050919050565b60006133ac602a836139f3565b91506133b782613fb0565b604082019050919050565b60006133cf6029836139f3565b91506133da82613fff565b604082019050919050565b60006133f26020836139f3565b91506133fd8261404e565b602082019050919050565b6000613415602c836139f3565b915061342082614077565b604082019050919050565b60006134386020836139f3565b9150613443826140c6565b602082019050919050565b600061345b6029836139f3565b9150613466826140ef565b604082019050919050565b600061347e602f836139f3565b91506134898261413e565b604082019050919050565b60006134a16021836139f3565b91506134ac8261418d565b604082019050919050565b60006134c4601d83613a04565b91506134cf826141dc565b601d82019050919050565b60006134e76031836139f3565b91506134f282614205565b604082019050919050565b600061350a6030836139f3565b915061351582614254565b604082019050919050565b600061352d6030836139f3565b9150613538826142a3565b604082019050919050565b61354c81613b8e565b82525050565b600061355e82846131d7565b915081905092915050565b60006135758286613208565b915061358182856131d7565b915061358d8284613208565b9150819050949350505050565b60006135a5826134b7565b91506135b182846131d7565b915081905092915050565b60006020820190506135d16000830184613147565b92915050565b60006080820190506135ec6000830187613147565b6135f96020830186613147565b6136066040830185613543565b81810360608301526136188184613165565b905095945050505050565b60006040820190506136386000830185613147565b6136456020830184613543565b9392505050565b60006020820190506136616000830184613156565b92915050565b60006020820190508181036000830152613681818461319e565b905092915050565b600060208201905081810360008301526136a281613287565b9050919050565b600060208201905081810360008301526136c2816132aa565b9050919050565b600060208201905081810360008301526136e2816132cd565b9050919050565b60006020820190508181036000830152613702816132f0565b9050919050565b6000602082019050818103600083015261372281613313565b9050919050565b6000602082019050818103600083015261374281613336565b9050919050565b6000602082019050818103600083015261376281613359565b9050919050565b600060208201905081810360008301526137828161337c565b9050919050565b600060208201905081810360008301526137a28161339f565b9050919050565b600060208201905081810360008301526137c2816133c2565b9050919050565b600060208201905081810360008301526137e2816133e5565b9050919050565b6000602082019050818103600083015261380281613408565b9050919050565b600060208201905081810360008301526138228161342b565b9050919050565b600060208201905081810360008301526138428161344e565b9050919050565b6000602082019050818103600083015261386281613471565b9050919050565b6000602082019050818103600083015261388281613494565b9050919050565b600060208201905081810360008301526138a2816134da565b9050919050565b600060208201905081810360008301526138c2816134fd565b9050919050565b600060208201905081810360008301526138e281613520565b9050919050565b60006020820190506138fe6000830184613543565b92915050565b600061390e61391f565b905061391a8282613c0c565b919050565b6000604051905090565b600067ffffffffffffffff82111561394457613943613d44565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139705761396f613d44565b5b61397982613d73565b9050602081019050919050565b600067ffffffffffffffff8211156139a1576139a0613d44565b5b6139aa82613d73565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a1a82613b8e565b9150613a2583613b8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5a57613a59613cb7565b5b828201905092915050565b6000613a7082613b8e565b9150613a7b83613b8e565b925082613a8b57613a8a613ce6565b5b828204905092915050565b6000613aa182613b8e565b9150613aac83613b8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ae557613ae4613cb7565b5b828202905092915050565b6000613afb82613b8e565b9150613b0683613b8e565b925082821015613b1957613b18613cb7565b5b828203905092915050565b6000613b2f82613b6e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613bc5578082015181840152602081019050613baa565b83811115613bd4576000848401525b50505050565b60006002820490506001821680613bf257607f821691505b60208210811415613c0657613c05613d15565b5b50919050565b613c1582613d73565b810181811067ffffffffffffffff82111715613c3457613c33613d44565b5b80604052505050565b6000613c4882613b8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c7b57613c7a613cb7565b5b600182019050919050565b6000613c9182613b8e565b9150613c9c83613b8e565b925082613cac57613cab613ce6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f7420746865206d696e74696e672061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4f6e6c792070726f6a656374206f7220746f6b656e206f776e65722063616e2060008201527f656d697420746f6b656e206576656e7400000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6142fb81613b24565b811461430657600080fd5b50565b61431281613b36565b811461431d57600080fd5b50565b61432981613b42565b811461433457600080fd5b50565b61434081613b8e565b811461434b57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122091dd467f20c43cd652e343d83c94f42d1022239141651747c0e9ff30e838d00764736f6c634300080200330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f737465766965702e78797a2f6e61747572616c2d666c61766f72732f6d657461646174612f00000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80636b87d24c11610125578063c87b56dd116100ad578063e33a68161161007c578063e33a6816146105e9578063e985e9c514610607578063ecf4326b14610637578063f2fde38b14610653578063fd4307c31461066f57610211565b8063c87b56dd14610563578063ccccc63d14610593578063d4434ab0146105b1578063d67b06c1146105cd57610211565b80638da5cb5b116100f45780638da5cb5b146104bf57806395d89b41146104dd578063a22cb465146104fb578063b88d4fde14610517578063bf64db1d1461053357610211565b80636b87d24c1461044b57806370a0823114610469578063715018a61461049957806385eaae73146104a357610211565b80632cb2f52e116101a857806342842e0e1161017757806342842e0e146103ab57806342966c68146103c757806352a6c8c9146103e35780636352211e146103ff5780636a6278421461042f57610211565b80632cb2f52e1461033957806332d434e914610355578063343fe3351461037157806342260b5d1461038d57610211565b80630fe43d5e116101e45780630fe43d5e146102b057806318160ddd146102ce57806323b872dd146102ec5780632a55205a1461030857610211565b806301ffc9a71461021657806306fdde0314610246578063081812fc14610264578063095ea7b314610294575b600080fd5b610230600480360381019061022b9190612f10565b61068d565b60405161023d919061364c565b60405180910390f35b61024e6106ee565b60405161025b9190613667565b60405180910390f35b61027e6004803603810190610279919061300f565b610780565b60405161028b91906135bc565b60405180910390f35b6102ae60048036038101906102a99190612e93565b610805565b005b6102b861091d565b6040516102c59190613667565b60405180910390f35b6102d66109ab565b6040516102e391906138e9565b60405180910390f35b61030660048036038101906103019190612d8d565b6109c1565b005b610322600480360381019061031d919061310b565b610a21565b604051610330929190613623565b60405180910390f35b610353600480360381019061034e9190613038565b610a6d565b005b61036f600480360381019061036a9190612d28565b610b15565b005b61038b60048036038101906103869190612f62565b610bd5565b005b610395610c6b565b6040516103a291906138e9565b60405180910390f35b6103c560048036038101906103c09190612d8d565b610c71565b005b6103e160048036038101906103dc919061300f565b610c91565b005b6103fd60048036038101906103f8919061308c565b610ced565b005b6104196004803603810190610414919061300f565b610e1f565b60405161042691906135bc565b60405180910390f35b61044960048036038101906104449190612d28565b610ed1565b005b610453610f8f565b6040516104609190613667565b60405180910390f35b610483600480360381019061047e9190612d28565b61101d565b60405161049091906138e9565b60405180910390f35b6104a16110d5565b005b6104bd60048036038101906104b89190612e93565b61115d565b005b6104c7611225565b6040516104d491906135bc565b60405180910390f35b6104e561124f565b6040516104f29190613667565b60405180910390f35b61051560048036038101906105109190612e57565b6112e1565b005b610531600480360381019061052c9190612ddc565b611462565b005b61054d6004803603810190610548919061300f565b6114c4565b60405161055a9190613667565b60405180910390f35b61057d6004803603810190610578919061300f565b611564565b60405161058a9190613667565b60405180910390f35b61059b6116cb565b6040516105a89190613667565b60405180910390f35b6105cb60048036038101906105c69190612fa3565b611759565b005b6105e760048036038101906105e29190612ecf565b611844565b005b6105f1611962565b6040516105fe91906135bc565b60405180910390f35b610621600480360381019061061c9190612d51565b611988565b60405161062e919061364c565b60405180910390f35b610651600480360381019061064c9190612fa3565b611a1c565b005b61066d60048036038101906106689190612d28565b611aca565b005b610677611bc2565b60405161068491906135bc565b60405180910390f35b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106e757506106e682611be8565b5b9050919050565b6060600080546106fd90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461072990613bda565b80156107765780601f1061074b57610100808354040283529160200191610776565b820191906000526020600020905b81548152906001019060200180831161075957829003601f168201915b5050505050905090565b600061078b82611cca565b6107ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c1906137e9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061081082610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087890613869565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108a0611d36565b73ffffffffffffffffffffffffffffffffffffffff1614806108cf57506108ce816108c9611d36565b611988565b5b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590613769565b60405180910390fd5b6109188383611d3e565b505050565b6009805461092a90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461095690613bda565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b505050505081565b600060016007546109bc9190613af0565b905090565b6109d26109cc611d36565b82611df7565b610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0890613889565b60405180910390fd5b610a1c838383611ed5565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710600d5485610a589190613a96565b610a629190613a65565b915091509250929050565b610a75611d36565b73ffffffffffffffffffffffffffffffffffffffff16610a93611225565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613809565b60405180910390fd5b80600e60008481526020019081526020016000209080519060200190610b10929190612ab6565b505050565b610b1d611d36565b73ffffffffffffffffffffffffffffffffffffffff16610b3b611225565b73ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890613809565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bdd611d36565b73ffffffffffffffffffffffffffffffffffffffff16610bfb611225565b73ffffffffffffffffffffffffffffffffffffffff1614610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613809565b60405180910390fd5b80600a9080519060200190610c67929190612ab6565b5050565b600d5481565b610c8c83838360405180602001604052806000815250611462565b505050565b610ca2610c9c611d36565b82611df7565b610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd8906138c9565b60405180910390fd5b610cea81612131565b50565b610cf5611d36565b73ffffffffffffffffffffffffffffffffffffffff16610d13611225565b73ffffffffffffffffffffffffffffffffffffffff161480610d6f5750610d38611d36565b73ffffffffffffffffffffffffffffffffffffffff16610d5784610e1f565b73ffffffffffffffffffffffffffffffffffffffff16145b610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906138a9565b60405180910390fd5b81604051610dbc9190613552565b604051809103902083610dcd611d36565b73ffffffffffffffffffffffffffffffffffffffff167fad000c5a693465b4555f1044ddd1221ef0bfc49e5621ceb705b952ff97e2caac84604051610e129190613667565b60405180910390a4505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf906137a9565b60405180910390fd5b80915050919050565b610ed9611d36565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5f90613689565b60405180910390fd5b610f7481600754612242565b60076000815480929190610f8790613c3d565b919050555050565b600a8054610f9c90613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890613bda565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590613789565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110dd611d36565b73ffffffffffffffffffffffffffffffffffffffff166110fb611225565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890613809565b60405180910390fd5b61115b6000612410565b565b611165611d36565b73ffffffffffffffffffffffffffffffffffffffff16611183611225565b73ffffffffffffffffffffffffffffffffffffffff16146111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090613809565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d819055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125e90613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461128a90613bda565b80156112d75780601f106112ac576101008083540402835291602001916112d7565b820191906000526020600020905b8154815290600101906020018083116112ba57829003601f168201915b5050505050905090565b6112e9611d36565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e90613729565b60405180910390fd5b8060056000611364611d36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611411611d36565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611456919061364c565b60405180910390a35050565b61147361146d611d36565b83611df7565b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613889565b60405180910390fd5b6114be848484846124d6565b50505050565b600e60205280600052604060002060009150905080546114e390613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461150f90613bda565b801561155c5780601f106115315761010080835404028352916020019161155c565b820191906000526020600020905b81548152906001019060200180831161153f57829003601f168201915b505050505081565b606061156f82611cca565b6115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613849565b60405180910390fd5b6000600e600084815260200190815260200160002080546115ce90613bda565b80601f01602080910402602001604051908101604052809291908181526020018280546115fa90613bda565b80156116475780601f1061161c57610100808354040283529160200191611647565b820191906000526020600020905b81548152906001019060200180831161162a57829003601f168201915b5050505050905060008151141561169457600061166384612532565b9050600881600960405160200161167c93929190613569565b604051602081830303815290604052925050506116c6565b600061169f826126df565b9050806040516020016116b2919061359a565b604051602081830303815290604052925050505b919050565b600880546116d890613bda565b80601f016020809104026020016040519081016040528092919081815260200182805461170490613bda565b80156117515780601f1061172657610100808354040283529160200191611751565b820191906000526020600020905b81548152906001019060200180831161173457829003601f168201915b505050505081565b611761611d36565b73ffffffffffffffffffffffffffffffffffffffff1661177f611225565b73ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613809565b60405180910390fd5b816040516117e39190613552565b60405180910390206117f3611d36565b73ffffffffffffffffffffffffffffffffffffffff167f3d366eac52dec4372766dc4b15bba20b935b45d33171465a598eedabb5a5dff8836040516118389190613667565b60405180910390a35050565b61184c611d36565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613689565b60405180910390fd5b60005b815181101561195e57611933828281518110611923577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600754612242565b6007600081548092919061194690613c3d565b9190505550808061195690613c3d565b9150506118de565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a24611d36565b73ffffffffffffffffffffffffffffffffffffffff16611a42611225565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613809565b60405180910390fd5b8160089080519060200190611aae929190612ab6565b508060099080519060200190611ac5929190612ab6565b505050565b611ad2611d36565b73ffffffffffffffffffffffffffffffffffffffff16611af0611225565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90613809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad906136c9565b60405180910390fd5b611bbf81612410565b50565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cb357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cc35750611cc28261289d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db183610e1f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0282611cca565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3890613749565b60405180910390fd5b6000611e4c83610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ebb57508373ffffffffffffffffffffffffffffffffffffffff16611ea384610780565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecc5750611ecb8185611988565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ef582610e1f565b73ffffffffffffffffffffffffffffffffffffffff1614611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613829565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613709565b60405180910390fd5b611fc6838383612907565b611fd1600082611d3e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120219190613af0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120789190613a0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061213c82610e1f565b905061214a81600084612907565b612155600083611d3e565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a59190613af0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906137c9565b60405180910390fd5b6122bb81611cca565b156122fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f2906136e9565b60405180910390fd5b61230760008383612907565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123579190613a0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124e1848484611ed5565b6124ed8484848461290c565b61252c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612523906136a9565b60405180910390fd5b50505050565b6060600082141561257a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126da565b600082905060005b600082146125ac57808061259590613c3d565b915050600a826125a59190613a65565b9150612582565b60008167ffffffffffffffff8111156125ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126205781602001600182028036833780820191505090505b5090505b600085146126d3576001826126399190613af0565b9150600a856126489190613c86565b60306126549190613a0f565b60f81b818381518110612690577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126cc9190613a65565b9450612624565b8093505050505b919050565b606060008251905060008114156127085760405180602001604052806000815250915050612898565b600060036002836127199190613a0f565b6127239190613a65565b600461272f9190613a96565b905060006020826127409190613a0f565b67ffffffffffffffff81111561277f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127b15781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161434f604091399050600181016020830160005b868110156128555760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506127dc565b50600386066001811461286f576002811461287f5761288a565b613d3d60f01b600283035261288a565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600061292d8473ffffffffffffffffffffffffffffffffffffffff16612aa3565b15612a96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612956611d36565b8786866040518563ffffffff1660e01b815260040161297894939291906135d7565b602060405180830381600087803b15801561299257600080fd5b505af19250505080156129c357506040513d601f19601f820116820180604052508101906129c09190612f39565b60015b612a46573d80600081146129f3576040519150601f19603f3d011682016040523d82523d6000602084013e6129f8565b606091505b50600081511415612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35906136a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a9b565b600190505b949350505050565b600080823b905060008111915050919050565b828054612ac290613bda565b90600052602060002090601f016020900481019282612ae45760008555612b2b565b82601f10612afd57805160ff1916838001178555612b2b565b82800160010185558215612b2b579182015b82811115612b2a578251825591602001919060010190612b0f565b5b509050612b389190612b3c565b5090565b5b80821115612b55576000816000905550600101612b3d565b5090565b6000612b6c612b6784613929565b613904565b90508083825260208201905082856020860282011115612b8b57600080fd5b60005b85811015612bbb5781612ba18882612c41565b845260208401935060208301925050600181019050612b8e565b5050509392505050565b6000612bd8612bd384613955565b613904565b905082815260208101848484011115612bf057600080fd5b612bfb848285613b98565b509392505050565b6000612c16612c1184613986565b613904565b905082815260208101848484011115612c2e57600080fd5b612c39848285613b98565b509392505050565b600081359050612c50816142f2565b92915050565b600082601f830112612c6757600080fd5b8135612c77848260208601612b59565b91505092915050565b600081359050612c8f81614309565b92915050565b600081359050612ca481614320565b92915050565b600081519050612cb981614320565b92915050565b600082601f830112612cd057600080fd5b8135612ce0848260208601612bc5565b91505092915050565b600082601f830112612cfa57600080fd5b8135612d0a848260208601612c03565b91505092915050565b600081359050612d2281614337565b92915050565b600060208284031215612d3a57600080fd5b6000612d4884828501612c41565b91505092915050565b60008060408385031215612d6457600080fd5b6000612d7285828601612c41565b9250506020612d8385828601612c41565b9150509250929050565b600080600060608486031215612da257600080fd5b6000612db086828701612c41565b9350506020612dc186828701612c41565b9250506040612dd286828701612d13565b9150509250925092565b60008060008060808587031215612df257600080fd5b6000612e0087828801612c41565b9450506020612e1187828801612c41565b9350506040612e2287828801612d13565b925050606085013567ffffffffffffffff811115612e3f57600080fd5b612e4b87828801612cbf565b91505092959194509250565b60008060408385031215612e6a57600080fd5b6000612e7885828601612c41565b9250506020612e8985828601612c80565b9150509250929050565b60008060408385031215612ea657600080fd5b6000612eb485828601612c41565b9250506020612ec585828601612d13565b9150509250929050565b600060208284031215612ee157600080fd5b600082013567ffffffffffffffff811115612efb57600080fd5b612f0784828501612c56565b91505092915050565b600060208284031215612f2257600080fd5b6000612f3084828501612c95565b91505092915050565b600060208284031215612f4b57600080fd5b6000612f5984828501612caa565b91505092915050565b600060208284031215612f7457600080fd5b600082013567ffffffffffffffff811115612f8e57600080fd5b612f9a84828501612ce9565b91505092915050565b60008060408385031215612fb657600080fd5b600083013567ffffffffffffffff811115612fd057600080fd5b612fdc85828601612ce9565b925050602083013567ffffffffffffffff811115612ff957600080fd5b61300585828601612ce9565b9150509250929050565b60006020828403121561302157600080fd5b600061302f84828501612d13565b91505092915050565b6000806040838503121561304b57600080fd5b600061305985828601612d13565b925050602083013567ffffffffffffffff81111561307657600080fd5b61308285828601612ce9565b9150509250929050565b6000806000606084860312156130a157600080fd5b60006130af86828701612d13565b935050602084013567ffffffffffffffff8111156130cc57600080fd5b6130d886828701612ce9565b925050604084013567ffffffffffffffff8111156130f557600080fd5b61310186828701612ce9565b9150509250925092565b6000806040838503121561311e57600080fd5b600061312c85828601612d13565b925050602061313d85828601612d13565b9150509250929050565b61315081613b24565b82525050565b61315f81613b36565b82525050565b6000613170826139cc565b61317a81856139e2565b935061318a818560208601613ba7565b61319381613d73565b840191505092915050565b60006131a9826139d7565b6131b381856139f3565b93506131c3818560208601613ba7565b6131cc81613d73565b840191505092915050565b60006131e2826139d7565b6131ec8185613a04565b93506131fc818560208601613ba7565b80840191505092915050565b6000815461321581613bda565b61321f8186613a04565b9450600182166000811461323a576001811461324b5761327e565b60ff1983168652818601935061327e565b613254856139b7565b60005b8381101561327657815481890152600182019150602081019050613257565b838801955050505b50505092915050565b60006132946021836139f3565b915061329f82613d84565b604082019050919050565b60006132b76032836139f3565b91506132c282613dd3565b604082019050919050565b60006132da6026836139f3565b91506132e582613e22565b604082019050919050565b60006132fd601c836139f3565b915061330882613e71565b602082019050919050565b60006133206024836139f3565b915061332b82613e9a565b604082019050919050565b60006133436019836139f3565b915061334e82613ee9565b602082019050919050565b6000613366602c836139f3565b915061337182613f12565b604082019050919050565b60006133896038836139f3565b915061339482613f61565b604082019050919050565b60006133ac602a836139f3565b91506133b782613fb0565b604082019050919050565b60006133cf6029836139f3565b91506133da82613fff565b604082019050919050565b60006133f26020836139f3565b91506133fd8261404e565b602082019050919050565b6000613415602c836139f3565b915061342082614077565b604082019050919050565b60006134386020836139f3565b9150613443826140c6565b602082019050919050565b600061345b6029836139f3565b9150613466826140ef565b604082019050919050565b600061347e602f836139f3565b91506134898261413e565b604082019050919050565b60006134a16021836139f3565b91506134ac8261418d565b604082019050919050565b60006134c4601d83613a04565b91506134cf826141dc565b601d82019050919050565b60006134e76031836139f3565b91506134f282614205565b604082019050919050565b600061350a6030836139f3565b915061351582614254565b604082019050919050565b600061352d6030836139f3565b9150613538826142a3565b604082019050919050565b61354c81613b8e565b82525050565b600061355e82846131d7565b915081905092915050565b60006135758286613208565b915061358182856131d7565b915061358d8284613208565b9150819050949350505050565b60006135a5826134b7565b91506135b182846131d7565b915081905092915050565b60006020820190506135d16000830184613147565b92915050565b60006080820190506135ec6000830187613147565b6135f96020830186613147565b6136066040830185613543565b81810360608301526136188184613165565b905095945050505050565b60006040820190506136386000830185613147565b6136456020830184613543565b9392505050565b60006020820190506136616000830184613156565b92915050565b60006020820190508181036000830152613681818461319e565b905092915050565b600060208201905081810360008301526136a281613287565b9050919050565b600060208201905081810360008301526136c2816132aa565b9050919050565b600060208201905081810360008301526136e2816132cd565b9050919050565b60006020820190508181036000830152613702816132f0565b9050919050565b6000602082019050818103600083015261372281613313565b9050919050565b6000602082019050818103600083015261374281613336565b9050919050565b6000602082019050818103600083015261376281613359565b9050919050565b600060208201905081810360008301526137828161337c565b9050919050565b600060208201905081810360008301526137a28161339f565b9050919050565b600060208201905081810360008301526137c2816133c2565b9050919050565b600060208201905081810360008301526137e2816133e5565b9050919050565b6000602082019050818103600083015261380281613408565b9050919050565b600060208201905081810360008301526138228161342b565b9050919050565b600060208201905081810360008301526138428161344e565b9050919050565b6000602082019050818103600083015261386281613471565b9050919050565b6000602082019050818103600083015261388281613494565b9050919050565b600060208201905081810360008301526138a2816134da565b9050919050565b600060208201905081810360008301526138c2816134fd565b9050919050565b600060208201905081810360008301526138e281613520565b9050919050565b60006020820190506138fe6000830184613543565b92915050565b600061390e61391f565b905061391a8282613c0c565b919050565b6000604051905090565b600067ffffffffffffffff82111561394457613943613d44565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139705761396f613d44565b5b61397982613d73565b9050602081019050919050565b600067ffffffffffffffff8211156139a1576139a0613d44565b5b6139aa82613d73565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a1a82613b8e565b9150613a2583613b8e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a5a57613a59613cb7565b5b828201905092915050565b6000613a7082613b8e565b9150613a7b83613b8e565b925082613a8b57613a8a613ce6565b5b828204905092915050565b6000613aa182613b8e565b9150613aac83613b8e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ae557613ae4613cb7565b5b828202905092915050565b6000613afb82613b8e565b9150613b0683613b8e565b925082821015613b1957613b18613cb7565b5b828203905092915050565b6000613b2f82613b6e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613bc5578082015181840152602081019050613baa565b83811115613bd4576000848401525b50505050565b60006002820490506001821680613bf257607f821691505b60208210811415613c0657613c05613d15565b5b50919050565b613c1582613d73565b810181811067ffffffffffffffff82111715613c3457613c33613d44565b5b80604052505050565b6000613c4882613b8e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c7b57613c7a613cb7565b5b600182019050919050565b6000613c9182613b8e565b9150613c9c83613b8e565b925082613cac57613cab613ce6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f7420746865206d696e74696e672061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4f6e6c792070726f6a656374206f7220746f6b656e206f776e65722063616e2060008201527f656d697420746f6b656e206576656e7400000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6142fb81613b24565b811461430657600080fd5b50565b61431281613b36565b811461431d57600080fd5b50565b61432981613b42565b811461433457600080fd5b50565b61434081613b8e565b811461434b57600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122091dd467f20c43cd652e343d83c94f42d1022239141651747c0e9ff30e838d00764736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f737465766965702e78797a2f6e61747572616c2d666c61766f72732f6d657461646174612f00000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseDefaultUrl (string): https://steviep.xyz/natural-flavors/metadata/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [2] : 68747470733a2f2f737465766965702e78797a2f6e61747572616c2d666c6176
Arg [3] : 6f72732f6d657461646174612f00000000000000000000000000000000000000
Deployed Bytecode Sourcemap
638:3789:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4232:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24847:98:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26358:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25896:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;859:37:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1616:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27222:330:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3994:179:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3029:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2167:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3190:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;997:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27618:179:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36026:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3456:320:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24550:235:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1718:175:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;901:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24288:205:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22128:92;;;:::i;:::-;;3780:210:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21496:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25009:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26642:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27863:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1032:51:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2265:560;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;827:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3295:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1897:266;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;960:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26998:162:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2829:196:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22369:189:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;927:29:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4232:193;4325:4;779:10;4359:21;;4344:36;;;:11;:36;;;;:76;;;;4384:36;4408:11;4384:23;:36::i;:::-;4344:76;4337:83;;4232:193;;;:::o;24847:98:0:-;24901:13;24933:5;24926:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24847:98;:::o;26358:217::-;26434:7;26461:16;26469:7;26461;:16::i;:::-;26453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26544:15;:24;26560:7;26544:24;;;;;;;;;;;;;;;;;;;;;26537:31;;26358:217;;;:::o;25896:401::-;25976:13;25992:23;26007:7;25992:14;:23::i;:::-;25976:39;;26039:5;26033:11;;:2;:11;;;;26025:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26130:5;26114:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26139:37;26156:5;26163:12;:10;:12::i;:::-;26139:16;:37::i;:::-;26114:62;26093:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;26269:21;26278:2;26282:7;26269:8;:21::i;:::-;25896:401;;;:::o;859:37:1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1616:98::-;1668:7;1708:1;1690:15;;:19;;;;:::i;:::-;1683:26;;1616:98;:::o;27222:330:0:-;27411:41;27430:12;:10;:12::i;:::-;27444:7;27411:18;:41::i;:::-;27403:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27517:28;27527:4;27533:2;27537:7;27517:9;:28::i;:::-;27222:330;;;:::o;3994:179:1:-;4076:7;4085;4108:18;;;;;;;;;;;4162:5;4141:18;;4128:10;:31;;;;:::i;:::-;:39;;;;:::i;:::-;4100:68;;;;3994:179;;;;;:::o;3029:157::-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3168:13:1::1;3139:17;:26;3157:7;3139:26;;;;;;;;;;;:42;;;;;;;;;;;;:::i;:::-;;3029:157:::0;;:::o;2167:94::-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2250:6:1::1;2233:14;;:23;;;;;;;;;;;;;;;;;;2167:94:::0;:::o;3190:101::-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3278:8:1::1;3268:7;:18;;;;;;;;;;;;:::i;:::-;;3190:101:::0;:::o;997:30::-;;;;:::o;27618:179:0:-;27751:39;27768:4;27774:2;27778:7;27751:39;;;;;;;;;;;;:16;:39::i;:::-;27618:179;;;:::o;36026:241::-;36142:41;36161:12;:10;:12::i;:::-;36175:7;36142:18;:41::i;:::-;36134:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36246:14;36252:7;36246:5;:14::i;:::-;36026:241;:::o;3456:320:1:-;3586:12;:10;:12::i;:::-;3575:23;;:7;:5;:7::i;:::-;:23;;;:66;;;;3629:12;:10;:12::i;:::-;3602:39;;:23;3617:7;3602:14;:23::i;:::-;:39;;;3575:66;3560:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;3750:10;3716:55;;;;;;:::i;:::-;;;;;;;;3741:7;3727:12;:10;:12::i;:::-;3716:55;;;3762:8;3716:55;;;;;;:::i;:::-;;;;;;;;3456:320;;;:::o;24550:235:0:-;24622:7;24641:13;24657:7;:16;24665:7;24657:16;;;;;;;;;;;;;;;;;;;;;24641:32;;24708:1;24691:19;;:5;:19;;;;24683:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:5;24766:12;;;24550:235;;;:::o;1718:175:1:-;1783:12;:10;:12::i;:::-;1765:30;;:14;;;;;;;;;;;:30;;;1757:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1839:26;1845:2;1849:15;;1839:5;:26::i;:::-;1871:15;;:17;;;;;;;;;:::i;:::-;;;;;;1718:175;:::o;901:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24288:205:0:-;24360:7;24404:1;24387:19;;:5;:19;;;;24379:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24470:9;:16;24480:5;24470:16;;;;;;;;;;;;;;;;24463:23;;24288:205;;;:::o;22128:92::-;21719:12;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22192:21:::1;22210:1;22192:9;:21::i;:::-;22128:92::o:0;3780:210:1:-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3920:19:1::1;3899:18;;:40;;;;;;;;;;;;;;;;;;3966:19;3945:18;:40;;;;3780:210:::0;;:::o;21496:85:0:-;21542:7;21568:6;;;;;;;;;;;21561:13;;21496:85;:::o;25009:102::-;25065:13;25097:7;25090:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25009:102;:::o;26642:290::-;26756:12;:10;:12::i;:::-;26744:24;;:8;:24;;;;26736:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26854:8;26809:18;:32;26828:12;:10;:12::i;:::-;26809:32;;;;;;;;;;;;;;;:42;26842:8;26809:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26906:8;26877:48;;26892:12;:10;:12::i;:::-;26877:48;;;26916:8;26877:48;;;;;;:::i;:::-;;;;;;;;26642:290;;:::o;27863:320::-;28032:41;28051:12;:10;:12::i;:::-;28065:7;28032:18;:41::i;:::-;28024:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28137:39;28151:4;28157:2;28161:7;28170:5;28137:13;:39::i;:::-;27863:320;;;;:::o;1032:51:1:-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2265:560::-;2338:13;2367:16;2375:7;2367;:16::i;:::-;2359:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2442:24;2475:17;:26;2493:7;2475:26;;;;;;;;;;;2442:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2534:1;2512:11;:18;:23;2508:183;;;2545:25;2573:18;:7;:16;:18::i;:::-;2545:46;;2630:14;2646:11;2659:23;2613:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2599:85;;;;;;2508:183;2697:18;2718:26;2732:11;2718:13;:26::i;:::-;2697:47;;2814:4;2764:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;2750:70;;;;2265:560;;;;:::o;827:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3295:157::-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3426:10:1::1;3399:48;;;;;;:::i;:::-;;;;;;;;3412:12;:10;:12::i;:::-;3399:48;;;3438:8;3399:48;;;;;;:::i;:::-;;;;;;;;3295:157:::0;;:::o;1897:266::-;1983:12;:10;:12::i;:::-;1965:30;;:14;;;;;;;;;;;:30;;;1957:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2044:6;2039:120;2060:9;:16;2056:1;:20;2039:120;;;2091:36;2097:9;2107:1;2097:12;;;;;;;;;;;;;;;;;;;;;;2111:15;;2091:5;:36::i;:::-;2135:15;;:17;;;;;;;;;:::i;:::-;;;;;;2078:3;;;;;:::i;:::-;;;;2039:120;;;;1897:266;:::o;960:33::-;;;;;;;;;;;;;:::o;26998:162:0:-;27095:4;27118:18;:25;27137:5;27118:25;;;;;;;;;;;;;;;:35;27144:8;27118:35;;;;;;;;;;;;;;;;;;;;;;;;;27111:42;;26998:162;;;;:::o;2829:196:1:-;21719:12:0;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2956:15:1::1;2939:14;:32;;;;;;;;;;;;:::i;:::-;;3003:17;2977:23;:43;;;;;;;;;;;;:::i;:::-;;2829:196:::0;;:::o;22369:189:0:-;21719:12;:10;:12::i;:::-;21708:23;;:7;:5;:7::i;:::-;:23;;;21700:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22477:1:::1;22457:22;;:8;:22;;;;22449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22532:19;22542:8;22532:9;:19::i;:::-;22369:189:::0;:::o;927:29:1:-;;;;;;;;;;;;;:::o;23929:300:0:-;24031:4;24081:25;24066:40;;;:11;:40;;;;:104;;;;24137:33;24122:48;;;:11;:48;;;;24066:104;:156;;;;24186:36;24210:11;24186:23;:36::i;:::-;24066:156;24047:175;;23929:300;;;:::o;29655:125::-;29720:4;29771:1;29743:30;;:7;:16;29751:7;29743:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29736:37;;29655:125;;;:::o;15641:96::-;15694:7;15720:10;15713:17;;15641:96;:::o;33506:171::-;33607:2;33580:15;:24;33596:7;33580:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33662:7;33658:2;33624:46;;33633:23;33648:7;33633:14;:23::i;:::-;33624:46;;;;;;;;;;;;33506:171;;:::o;29938:344::-;30031:4;30055:16;30063:7;30055;:16::i;:::-;30047:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30130:13;30146:23;30161:7;30146:14;:23::i;:::-;30130:39;;30198:5;30187:16;;:7;:16;;;:51;;;;30231:7;30207:31;;:20;30219:7;30207:11;:20::i;:::-;:31;;;30187:51;:87;;;;30242:32;30259:5;30266:7;30242:16;:32::i;:::-;30187:87;30179:96;;;29938:344;;;;:::o;32835:560::-;32989:4;32962:31;;:23;32977:7;32962:14;:23::i;:::-;:31;;;32954:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33071:1;33057:16;;:2;:16;;;;33049:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33125:39;33146:4;33152:2;33156:7;33125:20;:39::i;:::-;33226:29;33243:1;33247:7;33226:8;:29::i;:::-;33285:1;33266:9;:15;33276:4;33266:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33313:1;33296:9;:13;33306:2;33296:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33343:2;33324:7;:16;33332:7;33324:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33380:7;33376:2;33361:27;;33370:4;33361:27;;;;;;;;;;;;32835:560;;;:::o;32163:348::-;32222:13;32238:23;32253:7;32238:14;:23::i;:::-;32222:39;;32272:48;32293:5;32308:1;32312:7;32272:20;:48::i;:::-;32358:29;32375:1;32379:7;32358:8;:29::i;:::-;32418:1;32398:9;:16;32408:5;32398:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32436:7;:16;32444:7;32436:16;;;;;;;;;;;;32429:23;;;;;;;;;;;32496:7;32492:1;32468:36;;32477:5;32468:36;;;;;;;;;;;;32163:348;;:::o;31574:372::-;31667:1;31653:16;;:2;:16;;;;31645:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31725:16;31733:7;31725;:16::i;:::-;31724:17;31716:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31785:45;31814:1;31818:2;31822:7;31785:20;:45::i;:::-;31858:1;31841:9;:13;31851:2;31841:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31888:2;31869:7;:16;31877:7;31869:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31931:7;31927:2;31906:33;;31923:1;31906:33;;;;;;;;;;;;31574:372;;:::o;22564:169::-;22619:16;22638:6;;;;;;;;;;;22619:25;;22663:8;22654:6;;:17;;;;;;;;;;;;;;;;;;22717:8;22686:40;;22707:8;22686:40;;;;;;;;;;;;22564:169;;:::o;29045:307::-;29196:28;29206:4;29212:2;29216:7;29196:9;:28::i;:::-;29242:48;29265:4;29271:2;29275:7;29284:5;29242:22;:48::i;:::-;29234:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29045:307;;;;:::o;16064:703::-;16120:13;16346:1;16337:5;:10;16333:51;;;16363:10;;;;;;;;;;;;;;;;;;;;;16333:51;16393:12;16408:5;16393:20;;16423:14;16447:75;16462:1;16454:4;:9;16447:75;;16479:8;;;;;:::i;:::-;;;;16509:2;16501:10;;;;;:::i;:::-;;;16447:75;;;16531:19;16563:6;16553:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16531:39;;16580:150;16596:1;16587:5;:10;16580:150;;16623:1;16613:11;;;;;:::i;:::-;;;16689:2;16681:5;:10;;;;:::i;:::-;16668:2;:24;;;;:::i;:::-;16655:39;;16638:6;16645;16638:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16717:2;16708:11;;;;;:::i;:::-;;;16580:150;;;16753:6;16739:21;;;;;16064:703;;;;:::o;18211:1557::-;18269:13;18294:11;18308:4;:11;18294:25;;18340:1;18333:3;:8;18329:23;;;18343:9;;;;;;;;;;;;;;;;;18329:23;18401:18;18439:1;18434;18428:3;:7;;;;:::i;:::-;18427:13;;;;:::i;:::-;18422:1;:19;;;;:::i;:::-;18401:40;;18496:19;18541:2;18528:10;:15;;;;:::i;:::-;18518:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18496:48;;18555:18;18576:5;;;;;;;;;;;;;;;;;18555:26;;18642:1;18635:5;18631:13;18686:2;18678:6;18674:15;18734:1;18703:757;18756:3;18753:1;18750:10;18703:757;;;18808:1;18805;18801:9;18796:14;;18865:8;18860:1;18854:4;18850:12;18844:19;18840:34;18943:4;18935:5;18931:2;18927:14;18923:25;18913:8;18909:40;18903:47;18981:3;18978:1;18974:11;18967:18;;19071:4;19062;19054:5;19050:2;19046:14;19042:25;19032:8;19028:40;19022:47;19018:58;19013:3;19009:68;19002:75;;19108:3;19105:1;19101:11;19094:18;;19197:4;19188;19180:5;19177:1;19173:13;19169:24;19159:8;19155:39;19149:46;19145:57;19140:3;19136:67;19129:74;;19234:3;19231:1;19227:11;19220:18;;19315:4;19306;19299:5;19295:16;19285:8;19281:31;19275:38;19271:49;19266:3;19262:59;19255:66;;19354:3;19349;19345:13;19338:20;;19394:3;19383:9;19376:22;19444:1;19433:9;19429:17;19416:30;;18778:682;;18703:757;;;18707:42;19490:1;19485:3;19481:11;19510:1;19505:82;;;;19605:1;19600:80;;;;19474:206;;19505:82;19565:6;19560:3;19556:16;19552:1;19541:9;19537:17;19530:43;19505:82;;19600:80;19660:4;19655:3;19651:14;19647:1;19636:9;19632:17;19625:41;19474:206;;19709:10;19701:6;19694:26;18601:1129;;19754:6;19740:21;;;;;;18211:1557;;;;:::o;20452:155::-;20537:4;20575:25;20560:40;;;:11;:40;;;;20553:47;;20452:155;;;:::o;35568:122::-;;;;:::o;34230:782::-;34380:4;34400:15;:2;:13;;;:15::i;:::-;34396:610;;;34451:2;34435:36;;;34472:12;:10;:12::i;:::-;34486:4;34492:7;34501:5;34435:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34431:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34695:1;34678:6;:13;:18;34674:266;;;34720:60;;;;;;;;;;:::i;:::-;;;;;;;;34674:266;34892:6;34886:13;34877:6;34873:2;34869:15;34862:38;34431:523;34567:45;;;34557:55;;;:6;:55;;;;34550:62;;;;;34396:610;34991:4;34984:11;;34230:782;;;;;;;:::o;7462:377::-;7522:4;7725:12;7790:7;7778:20;7770:28;;7831:1;7824:4;:8;7817:15;;;7462:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:2:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;653:343::-;;755:65;771:48;812:6;771:48;:::i;:::-;755:65;:::i;:::-;746:74;;843:6;836:5;829:21;881:4;874:5;870:16;919:3;910:6;905:3;901:16;898:25;895:2;;;936:1;933;926:12;895:2;949:41;983:6;978:3;973;949:41;:::i;:::-;736:260;;;;;;:::o;1002:345::-;;1105:66;1121:49;1163:6;1121:49;:::i;:::-;1105:66;:::i;:::-;1096:75;;1194:6;1187:5;1180:21;1232:4;1225:5;1221:16;1270:3;1261:6;1256:3;1252:16;1249:25;1246:2;;;1287:1;1284;1277:12;1246:2;1300:41;1334:6;1329:3;1324;1300:41;:::i;:::-;1086:261;;;;;;:::o;1353:139::-;;1437:6;1424:20;1415:29;;1453:33;1480:5;1453:33;:::i;:::-;1405:87;;;;:::o;1515:303::-;;1635:3;1628:4;1620:6;1616:17;1612:27;1602:2;;1653:1;1650;1643:12;1602:2;1693:6;1680:20;1718:94;1808:3;1800:6;1793:4;1785:6;1781:17;1718:94;:::i;:::-;1709:103;;1592:226;;;;;:::o;1824:133::-;;1905:6;1892:20;1883:29;;1921:30;1945:5;1921:30;:::i;:::-;1873:84;;;;:::o;1963:137::-;;2046:6;2033:20;2024:29;;2062:32;2088:5;2062:32;:::i;:::-;2014:86;;;;:::o;2106:141::-;;2193:6;2187:13;2178:22;;2209:32;2235:5;2209:32;:::i;:::-;2168:79;;;;:::o;2266:271::-;;2370:3;2363:4;2355:6;2351:17;2347:27;2337:2;;2388:1;2385;2378:12;2337:2;2428:6;2415:20;2453:78;2527:3;2519:6;2512:4;2504:6;2500:17;2453:78;:::i;:::-;2444:87;;2327:210;;;;;:::o;2557:273::-;;2662:3;2655:4;2647:6;2643:17;2639:27;2629:2;;2680:1;2677;2670:12;2629:2;2720:6;2707:20;2745:79;2820:3;2812:6;2805:4;2797:6;2793:17;2745:79;:::i;:::-;2736:88;;2619:211;;;;;:::o;2836:139::-;;2920:6;2907:20;2898:29;;2936:33;2963:5;2936:33;:::i;:::-;2888:87;;;;:::o;2981:262::-;;3089:2;3077:9;3068:7;3064:23;3060:32;3057:2;;;3105:1;3102;3095:12;3057:2;3148:1;3173:53;3218:7;3209:6;3198:9;3194:22;3173:53;:::i;:::-;3163:63;;3119:117;3047:196;;;;:::o;3249:407::-;;;3374:2;3362:9;3353:7;3349:23;3345:32;3342:2;;;3390:1;3387;3380:12;3342:2;3433:1;3458:53;3503:7;3494:6;3483:9;3479:22;3458:53;:::i;:::-;3448:63;;3404:117;3560:2;3586:53;3631:7;3622:6;3611:9;3607:22;3586:53;:::i;:::-;3576:63;;3531:118;3332:324;;;;;:::o;3662:552::-;;;;3804:2;3792:9;3783:7;3779:23;3775:32;3772:2;;;3820:1;3817;3810:12;3772:2;3863:1;3888:53;3933:7;3924:6;3913:9;3909:22;3888:53;:::i;:::-;3878:63;;3834:117;3990:2;4016:53;4061:7;4052:6;4041:9;4037:22;4016:53;:::i;:::-;4006:63;;3961:118;4118:2;4144:53;4189:7;4180:6;4169:9;4165:22;4144:53;:::i;:::-;4134:63;;4089:118;3762:452;;;;;:::o;4220:809::-;;;;;4388:3;4376:9;4367:7;4363:23;4359:33;4356:2;;;4405:1;4402;4395:12;4356:2;4448:1;4473:53;4518:7;4509:6;4498:9;4494:22;4473:53;:::i;:::-;4463:63;;4419:117;4575:2;4601:53;4646:7;4637:6;4626:9;4622:22;4601:53;:::i;:::-;4591:63;;4546:118;4703:2;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4674:118;4859:2;4848:9;4844:18;4831:32;4890:18;4882:6;4879:30;4876:2;;;4922:1;4919;4912:12;4876:2;4950:62;5004:7;4995:6;4984:9;4980:22;4950:62;:::i;:::-;4940:72;;4802:220;4346:683;;;;;;;:::o;5035:401::-;;;5157:2;5145:9;5136:7;5132:23;5128:32;5125:2;;;5173:1;5170;5163:12;5125:2;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;5343:2;5369:50;5411:7;5402:6;5391:9;5387:22;5369:50;:::i;:::-;5359:60;;5314:115;5115:321;;;;;:::o;5442:407::-;;;5567:2;5555:9;5546:7;5542:23;5538:32;5535:2;;;5583:1;5580;5573:12;5535:2;5626:1;5651:53;5696:7;5687:6;5676:9;5672:22;5651:53;:::i;:::-;5641:63;;5597:117;5753:2;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5724:118;5525:324;;;;;:::o;5855:405::-;;5988:2;5976:9;5967:7;5963:23;5959:32;5956:2;;;6004:1;6001;5994:12;5956:2;6075:1;6064:9;6060:17;6047:31;6105:18;6097:6;6094:30;6091:2;;;6137:1;6134;6127:12;6091:2;6165:78;6235:7;6226:6;6215:9;6211:22;6165:78;:::i;:::-;6155:88;;6018:235;5946:314;;;;:::o;6266:260::-;;6373:2;6361:9;6352:7;6348:23;6344:32;6341:2;;;6389:1;6386;6379:12;6341:2;6432:1;6457:52;6501:7;6492:6;6481:9;6477:22;6457:52;:::i;:::-;6447:62;;6403:116;6331:195;;;;:::o;6532:282::-;;6650:2;6638:9;6629:7;6625:23;6621:32;6618:2;;;6666:1;6663;6656:12;6618:2;6709:1;6734:63;6789:7;6780:6;6769:9;6765:22;6734:63;:::i;:::-;6724:73;;6680:127;6608:206;;;;:::o;6820:375::-;;6938:2;6926:9;6917:7;6913:23;6909:32;6906:2;;;6954:1;6951;6944:12;6906:2;7025:1;7014:9;7010:17;6997:31;7055:18;7047:6;7044:30;7041:2;;;7087:1;7084;7077:12;7041:2;7115:63;7170:7;7161:6;7150:9;7146:22;7115:63;:::i;:::-;7105:73;;6968:220;6896:299;;;;:::o;7201:633::-;;;7346:2;7334:9;7325:7;7321:23;7317:32;7314:2;;;7362:1;7359;7352:12;7314:2;7433:1;7422:9;7418:17;7405:31;7463:18;7455:6;7452:30;7449:2;;;7495:1;7492;7485:12;7449:2;7523:63;7578:7;7569:6;7558:9;7554:22;7523:63;:::i;:::-;7513:73;;7376:220;7663:2;7652:9;7648:18;7635:32;7694:18;7686:6;7683:30;7680:2;;;7726:1;7723;7716:12;7680:2;7754:63;7809:7;7800:6;7789:9;7785:22;7754:63;:::i;:::-;7744:73;;7606:221;7304:530;;;;;:::o;7840:262::-;;7948:2;7936:9;7927:7;7923:23;7919:32;7916:2;;;7964:1;7961;7954:12;7916:2;8007:1;8032:53;8077:7;8068:6;8057:9;8053:22;8032:53;:::i;:::-;8022:63;;7978:117;7906:196;;;;:::o;8108:520::-;;;8243:2;8231:9;8222:7;8218:23;8214:32;8211:2;;;8259:1;8256;8249:12;8211:2;8302:1;8327:53;8372:7;8363:6;8352:9;8348:22;8327:53;:::i;:::-;8317:63;;8273:117;8457:2;8446:9;8442:18;8429:32;8488:18;8480:6;8477:30;8474:2;;;8520:1;8517;8510:12;8474:2;8548:63;8603:7;8594:6;8583:9;8579:22;8548:63;:::i;:::-;8538:73;;8400:221;8201:427;;;;;:::o;8634:778::-;;;;8796:2;8784:9;8775:7;8771:23;8767:32;8764:2;;;8812:1;8809;8802:12;8764:2;8855:1;8880:53;8925:7;8916:6;8905:9;8901:22;8880:53;:::i;:::-;8870:63;;8826:117;9010:2;8999:9;8995:18;8982:32;9041:18;9033:6;9030:30;9027:2;;;9073:1;9070;9063:12;9027:2;9101:63;9156:7;9147:6;9136:9;9132:22;9101:63;:::i;:::-;9091:73;;8953:221;9241:2;9230:9;9226:18;9213:32;9272:18;9264:6;9261:30;9258:2;;;9304:1;9301;9294:12;9258:2;9332:63;9387:7;9378:6;9367:9;9363:22;9332:63;:::i;:::-;9322:73;;9184:221;8754:658;;;;;:::o;9418:407::-;;;9543:2;9531:9;9522:7;9518:23;9514:32;9511:2;;;9559:1;9556;9549:12;9511:2;9602:1;9627:53;9672:7;9663:6;9652:9;9648:22;9627:53;:::i;:::-;9617:63;;9573:117;9729:2;9755:53;9800:7;9791:6;9780:9;9776:22;9755:53;:::i;:::-;9745:63;;9700:118;9501:324;;;;;:::o;9831:118::-;9918:24;9936:5;9918:24;:::i;:::-;9913:3;9906:37;9896:53;;:::o;9955:109::-;10036:21;10051:5;10036:21;:::i;:::-;10031:3;10024:34;10014:50;;:::o;10070:360::-;;10184:38;10216:5;10184:38;:::i;:::-;10238:70;10301:6;10296:3;10238:70;:::i;:::-;10231:77;;10317:52;10362:6;10357:3;10350:4;10343:5;10339:16;10317:52;:::i;:::-;10394:29;10416:6;10394:29;:::i;:::-;10389:3;10385:39;10378:46;;10160:270;;;;;:::o;10436:364::-;;10552:39;10585:5;10552:39;:::i;:::-;10607:71;10671:6;10666:3;10607:71;:::i;:::-;10600:78;;10687:52;10732:6;10727:3;10720:4;10713:5;10709:16;10687:52;:::i;:::-;10764:29;10786:6;10764:29;:::i;:::-;10759:3;10755:39;10748:46;;10528:272;;;;;:::o;10806:377::-;;10940:39;10973:5;10940:39;:::i;:::-;10995:89;11077:6;11072:3;10995:89;:::i;:::-;10988:96;;11093:52;11138:6;11133:3;11126:4;11119:5;11115:16;11093:52;:::i;:::-;11170:6;11165:3;11161:16;11154:23;;10916:267;;;;;:::o;11213:845::-;;11353:5;11347:12;11382:36;11408:9;11382:36;:::i;:::-;11434:89;11516:6;11511:3;11434:89;:::i;:::-;11427:96;;11554:1;11543:9;11539:17;11570:1;11565:137;;;;11716:1;11711:341;;;;11532:520;;11565:137;11649:4;11645:9;11634;11630:25;11625:3;11618:38;11685:6;11680:3;11676:16;11669:23;;11565:137;;11711:341;11778:38;11810:5;11778:38;:::i;:::-;11838:1;11852:154;11866:6;11863:1;11860:13;11852:154;;;11940:7;11934:14;11930:1;11925:3;11921:11;11914:35;11990:1;11981:7;11977:15;11966:26;;11888:4;11885:1;11881:12;11876:17;;11852:154;;;12035:6;12030:3;12026:16;12019:23;;11718:334;;11532:520;;11320:738;;;;;;:::o;12064:366::-;;12227:67;12291:2;12286:3;12227:67;:::i;:::-;12220:74;;12303:93;12392:3;12303:93;:::i;:::-;12421:2;12416:3;12412:12;12405:19;;12210:220;;;:::o;12436:366::-;;12599:67;12663:2;12658:3;12599:67;:::i;:::-;12592:74;;12675:93;12764:3;12675:93;:::i;:::-;12793:2;12788:3;12784:12;12777:19;;12582:220;;;:::o;12808:366::-;;12971:67;13035:2;13030:3;12971:67;:::i;:::-;12964:74;;13047:93;13136:3;13047:93;:::i;:::-;13165:2;13160:3;13156:12;13149:19;;12954:220;;;:::o;13180:366::-;;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13326:220;;;:::o;13552:366::-;;13715:67;13779:2;13774:3;13715:67;:::i;:::-;13708:74;;13791:93;13880:3;13791:93;:::i;:::-;13909:2;13904:3;13900:12;13893:19;;13698:220;;;:::o;13924:366::-;;14087:67;14151:2;14146:3;14087:67;:::i;:::-;14080:74;;14163:93;14252:3;14163:93;:::i;:::-;14281:2;14276:3;14272:12;14265:19;;14070:220;;;:::o;14296:366::-;;14459:67;14523:2;14518:3;14459:67;:::i;:::-;14452:74;;14535:93;14624:3;14535:93;:::i;:::-;14653:2;14648:3;14644:12;14637:19;;14442:220;;;:::o;14668:366::-;;14831:67;14895:2;14890:3;14831:67;:::i;:::-;14824:74;;14907:93;14996:3;14907:93;:::i;:::-;15025:2;15020:3;15016:12;15009:19;;14814:220;;;:::o;15040:366::-;;15203:67;15267:2;15262:3;15203:67;:::i;:::-;15196:74;;15279:93;15368:3;15279:93;:::i;:::-;15397:2;15392:3;15388:12;15381:19;;15186:220;;;:::o;15412:366::-;;15575:67;15639:2;15634:3;15575:67;:::i;:::-;15568:74;;15651:93;15740:3;15651:93;:::i;:::-;15769:2;15764:3;15760:12;15753:19;;15558:220;;;:::o;15784:366::-;;15947:67;16011:2;16006:3;15947:67;:::i;:::-;15940:74;;16023:93;16112:3;16023:93;:::i;:::-;16141:2;16136:3;16132:12;16125:19;;15930:220;;;:::o;16156:366::-;;16319:67;16383:2;16378:3;16319:67;:::i;:::-;16312:74;;16395:93;16484:3;16395:93;:::i;:::-;16513:2;16508:3;16504:12;16497:19;;16302:220;;;:::o;16528:366::-;;16691:67;16755:2;16750:3;16691:67;:::i;:::-;16684:74;;16767:93;16856:3;16767:93;:::i;:::-;16885:2;16880:3;16876:12;16869:19;;16674:220;;;:::o;16900:366::-;;17063:67;17127:2;17122:3;17063:67;:::i;:::-;17056:74;;17139:93;17228:3;17139:93;:::i;:::-;17257:2;17252:3;17248:12;17241:19;;17046:220;;;:::o;17272:366::-;;17435:67;17499:2;17494:3;17435:67;:::i;:::-;17428:74;;17511:93;17600:3;17511:93;:::i;:::-;17629:2;17624:3;17620:12;17613:19;;17418:220;;;:::o;17644:366::-;;17807:67;17871:2;17866:3;17807:67;:::i;:::-;17800:74;;17883:93;17972:3;17883:93;:::i;:::-;18001:2;17996:3;17992:12;17985:19;;17790:220;;;:::o;18016:402::-;;18197:85;18279:2;18274:3;18197:85;:::i;:::-;18190:92;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18180:238;;;:::o;18424:366::-;;18587:67;18651:2;18646:3;18587:67;:::i;:::-;18580:74;;18663:93;18752:3;18663:93;:::i;:::-;18781:2;18776:3;18772:12;18765:19;;18570:220;;;:::o;18796:366::-;;18959:67;19023:2;19018:3;18959:67;:::i;:::-;18952:74;;19035:93;19124:3;19035:93;:::i;:::-;19153:2;19148:3;19144:12;19137:19;;18942:220;;;:::o;19168:366::-;;19331:67;19395:2;19390:3;19331:67;:::i;:::-;19324:74;;19407:93;19496:3;19407:93;:::i;:::-;19525:2;19520:3;19516:12;19509:19;;19314:220;;;:::o;19540:118::-;19627:24;19645:5;19627:24;:::i;:::-;19622:3;19615:37;19605:53;;:::o;19664:275::-;;19818:95;19909:3;19900:6;19818:95;:::i;:::-;19811:102;;19930:3;19923:10;;19800:139;;;;:::o;19945:583::-;;20189:92;20277:3;20268:6;20189:92;:::i;:::-;20182:99;;20298:95;20389:3;20380:6;20298:95;:::i;:::-;20291:102;;20410:92;20498:3;20489:6;20410:92;:::i;:::-;20403:99;;20519:3;20512:10;;20171:357;;;;;;:::o;20534:541::-;;20789:148;20933:3;20789:148;:::i;:::-;20782:155;;20954:95;21045:3;21036:6;20954:95;:::i;:::-;20947:102;;21066:3;21059:10;;20771:304;;;;:::o;21081:222::-;;21212:2;21201:9;21197:18;21189:26;;21225:71;21293:1;21282:9;21278:17;21269:6;21225:71;:::i;:::-;21179:124;;;;:::o;21309:640::-;;21542:3;21531:9;21527:19;21519:27;;21556:71;21624:1;21613:9;21609:17;21600:6;21556:71;:::i;:::-;21637:72;21705:2;21694:9;21690:18;21681:6;21637:72;:::i;:::-;21719;21787:2;21776:9;21772:18;21763:6;21719:72;:::i;:::-;21838:9;21832:4;21828:20;21823:2;21812:9;21808:18;21801:48;21866:76;21937:4;21928:6;21866:76;:::i;:::-;21858:84;;21509:440;;;;;;;:::o;21955:332::-;;22114:2;22103:9;22099:18;22091:26;;22127:71;22195:1;22184:9;22180:17;22171:6;22127:71;:::i;:::-;22208:72;22276:2;22265:9;22261:18;22252:6;22208:72;:::i;:::-;22081:206;;;;;:::o;22293:210::-;;22418:2;22407:9;22403:18;22395:26;;22431:65;22493:1;22482:9;22478:17;22469:6;22431:65;:::i;:::-;22385:118;;;;:::o;22509:313::-;;22660:2;22649:9;22645:18;22637:26;;22709:9;22703:4;22699:20;22695:1;22684:9;22680:17;22673:47;22737:78;22810:4;22801:6;22737:78;:::i;:::-;22729:86;;22627:195;;;;:::o;22828:419::-;;23032:2;23021:9;23017:18;23009:26;;23081:9;23075:4;23071:20;23067:1;23056:9;23052:17;23045:47;23109:131;23235:4;23109:131;:::i;:::-;23101:139;;22999:248;;;:::o;23253:419::-;;23457:2;23446:9;23442:18;23434:26;;23506:9;23500:4;23496:20;23492:1;23481:9;23477:17;23470:47;23534:131;23660:4;23534:131;:::i;:::-;23526:139;;23424:248;;;:::o;23678:419::-;;23882:2;23871:9;23867:18;23859:26;;23931:9;23925:4;23921:20;23917:1;23906:9;23902:17;23895:47;23959:131;24085:4;23959:131;:::i;:::-;23951:139;;23849:248;;;:::o;24103:419::-;;24307:2;24296:9;24292:18;24284:26;;24356:9;24350:4;24346:20;24342:1;24331:9;24327:17;24320:47;24384:131;24510:4;24384:131;:::i;:::-;24376:139;;24274:248;;;:::o;24528:419::-;;24732:2;24721:9;24717:18;24709:26;;24781:9;24775:4;24771:20;24767:1;24756:9;24752:17;24745:47;24809:131;24935:4;24809:131;:::i;:::-;24801:139;;24699:248;;;:::o;24953:419::-;;25157:2;25146:9;25142:18;25134:26;;25206:9;25200:4;25196:20;25192:1;25181:9;25177:17;25170:47;25234:131;25360:4;25234:131;:::i;:::-;25226:139;;25124:248;;;:::o;25378:419::-;;25582:2;25571:9;25567:18;25559:26;;25631:9;25625:4;25621:20;25617:1;25606:9;25602:17;25595:47;25659:131;25785:4;25659:131;:::i;:::-;25651:139;;25549:248;;;:::o;25803:419::-;;26007:2;25996:9;25992:18;25984:26;;26056:9;26050:4;26046:20;26042:1;26031:9;26027:17;26020:47;26084:131;26210:4;26084:131;:::i;:::-;26076:139;;25974:248;;;:::o;26228:419::-;;26432:2;26421:9;26417:18;26409:26;;26481:9;26475:4;26471:20;26467:1;26456:9;26452:17;26445:47;26509:131;26635:4;26509:131;:::i;:::-;26501:139;;26399:248;;;:::o;26653:419::-;;26857:2;26846:9;26842:18;26834:26;;26906:9;26900:4;26896:20;26892:1;26881:9;26877:17;26870:47;26934:131;27060:4;26934:131;:::i;:::-;26926:139;;26824:248;;;:::o;27078:419::-;;27282:2;27271:9;27267:18;27259:26;;27331:9;27325:4;27321:20;27317:1;27306:9;27302:17;27295:47;27359:131;27485:4;27359:131;:::i;:::-;27351:139;;27249:248;;;:::o;27503:419::-;;27707:2;27696:9;27692:18;27684:26;;27756:9;27750:4;27746:20;27742:1;27731:9;27727:17;27720:47;27784:131;27910:4;27784:131;:::i;:::-;27776:139;;27674:248;;;:::o;27928:419::-;;28132:2;28121:9;28117:18;28109:26;;28181:9;28175:4;28171:20;28167:1;28156:9;28152:17;28145:47;28209:131;28335:4;28209:131;:::i;:::-;28201:139;;28099:248;;;:::o;28353:419::-;;28557:2;28546:9;28542:18;28534:26;;28606:9;28600:4;28596:20;28592:1;28581:9;28577:17;28570:47;28634:131;28760:4;28634:131;:::i;:::-;28626:139;;28524:248;;;:::o;28778:419::-;;28982:2;28971:9;28967:18;28959:26;;29031:9;29025:4;29021:20;29017:1;29006:9;29002:17;28995:47;29059:131;29185:4;29059:131;:::i;:::-;29051:139;;28949:248;;;:::o;29203:419::-;;29407:2;29396:9;29392:18;29384:26;;29456:9;29450:4;29446:20;29442:1;29431:9;29427:17;29420:47;29484:131;29610:4;29484:131;:::i;:::-;29476:139;;29374:248;;;:::o;29628:419::-;;29832:2;29821:9;29817:18;29809:26;;29881:9;29875:4;29871:20;29867:1;29856:9;29852:17;29845:47;29909:131;30035:4;29909:131;:::i;:::-;29901:139;;29799:248;;;:::o;30053:419::-;;30257:2;30246:9;30242:18;30234:26;;30306:9;30300:4;30296:20;30292:1;30281:9;30277:17;30270:47;30334:131;30460:4;30334:131;:::i;:::-;30326:139;;30224:248;;;:::o;30478:419::-;;30682:2;30671:9;30667:18;30659:26;;30731:9;30725:4;30721:20;30717:1;30706:9;30702:17;30695:47;30759:131;30885:4;30759:131;:::i;:::-;30751:139;;30649:248;;;:::o;30903:222::-;;31034:2;31023:9;31019:18;31011:26;;31047:71;31115:1;31104:9;31100:17;31091:6;31047:71;:::i;:::-;31001:124;;;;:::o;31131:129::-;;31192:20;;:::i;:::-;31182:30;;31221:33;31249:4;31241:6;31221:33;:::i;:::-;31172:88;;;:::o;31266:75::-;;31332:2;31326:9;31316:19;;31306:35;:::o;31347:311::-;;31514:18;31506:6;31503:30;31500:2;;;31536:18;;:::i;:::-;31500:2;31586:4;31578:6;31574:17;31566:25;;31646:4;31640;31636:15;31628:23;;31429:229;;;:::o;31664:307::-;;31815:18;31807:6;31804:30;31801:2;;;31837:18;;:::i;:::-;31801:2;31875:29;31897:6;31875:29;:::i;:::-;31867:37;;31959:4;31953;31949:15;31941:23;;31730:241;;;:::o;31977:308::-;;32129:18;32121:6;32118:30;32115:2;;;32151:18;;:::i;:::-;32115:2;32189:29;32211:6;32189:29;:::i;:::-;32181:37;;32273:4;32267;32263:15;32255:23;;32044:241;;;:::o;32291:141::-;;32363:3;32355:11;;32386:3;32383:1;32376:14;32420:4;32417:1;32407:18;32399:26;;32345:87;;;:::o;32438:98::-;;32523:5;32517:12;32507:22;;32496:40;;;:::o;32542:99::-;;32628:5;32622:12;32612:22;;32601:40;;;:::o;32647:168::-;;32764:6;32759:3;32752:19;32804:4;32799:3;32795:14;32780:29;;32742:73;;;;:::o;32821:169::-;;32939:6;32934:3;32927:19;32979:4;32974:3;32970:14;32955:29;;32917:73;;;;:::o;32996:148::-;;33135:3;33120:18;;33110:34;;;;:::o;33150:305::-;;33209:20;33227:1;33209:20;:::i;:::-;33204:25;;33243:20;33261:1;33243:20;:::i;:::-;33238:25;;33397:1;33329:66;33325:74;33322:1;33319:81;33316:2;;;33403:18;;:::i;:::-;33316:2;33447:1;33444;33440:9;33433:16;;33194:261;;;;:::o;33461:185::-;;33518:20;33536:1;33518:20;:::i;:::-;33513:25;;33552:20;33570:1;33552:20;:::i;:::-;33547:25;;33591:1;33581:2;;33596:18;;:::i;:::-;33581:2;33638:1;33635;33631:9;33626:14;;33503:143;;;;:::o;33652:348::-;;33715:20;33733:1;33715:20;:::i;:::-;33710:25;;33749:20;33767:1;33749:20;:::i;:::-;33744:25;;33937:1;33869:66;33865:74;33862:1;33859:81;33854:1;33847:9;33840:17;33836:105;33833:2;;;33944:18;;:::i;:::-;33833:2;33992:1;33989;33985:9;33974:20;;33700:300;;;;:::o;34006:191::-;;34066:20;34084:1;34066:20;:::i;:::-;34061:25;;34100:20;34118:1;34100:20;:::i;:::-;34095:25;;34139:1;34136;34133:8;34130:2;;;34144:18;;:::i;:::-;34130:2;34189:1;34186;34182:9;34174:17;;34051:146;;;;:::o;34203:96::-;;34269:24;34287:5;34269:24;:::i;:::-;34258:35;;34248:51;;;:::o;34305:90::-;;34382:5;34375:13;34368:21;34357:32;;34347:48;;;:::o;34401:149::-;;34477:66;34470:5;34466:78;34455:89;;34445:105;;;:::o;34556:126::-;;34633:42;34626:5;34622:54;34611:65;;34601:81;;;:::o;34688:77::-;;34754:5;34743:16;;34733:32;;;:::o;34771:154::-;34855:6;34850:3;34845;34832:30;34917:1;34908:6;34903:3;34899:16;34892:27;34822:103;;;:::o;34931:307::-;34999:1;35009:113;35023:6;35020:1;35017:13;35009:113;;;35108:1;35103:3;35099:11;35093:18;35089:1;35084:3;35080:11;35073:39;35045:2;35042:1;35038:10;35033:15;;35009:113;;;35140:6;35137:1;35134:13;35131:2;;;35220:1;35211:6;35206:3;35202:16;35195:27;35131:2;34980:258;;;;:::o;35244:320::-;;35325:1;35319:4;35315:12;35305:22;;35372:1;35366:4;35362:12;35393:18;35383:2;;35449:4;35441:6;35437:17;35427:27;;35383:2;35511;35503:6;35500:14;35480:18;35477:38;35474:2;;;35530:18;;:::i;:::-;35474:2;35295:269;;;;:::o;35570:281::-;35653:27;35675:4;35653:27;:::i;:::-;35645:6;35641:40;35783:6;35771:10;35768:22;35747:18;35735:10;35732:34;35729:62;35726:2;;;35794:18;;:::i;:::-;35726:2;35834:10;35830:2;35823:22;35613:238;;;:::o;35857:233::-;;35919:24;35937:5;35919:24;:::i;:::-;35910:33;;35965:66;35958:5;35955:77;35952:2;;;36035:18;;:::i;:::-;35952:2;36082:1;36075:5;36071:13;36064:20;;35900:190;;;:::o;36096:176::-;;36145:20;36163:1;36145:20;:::i;:::-;36140:25;;36179:20;36197:1;36179:20;:::i;:::-;36174:25;;36218:1;36208:2;;36223:18;;:::i;:::-;36208:2;36264:1;36261;36257:9;36252:14;;36130:142;;;;:::o;36278:180::-;36326:77;36323:1;36316:88;36423:4;36420:1;36413:15;36447:4;36444:1;36437:15;36464:180;36512:77;36509:1;36502:88;36609:4;36606:1;36599:15;36633:4;36630:1;36623:15;36650:180;36698:77;36695:1;36688:88;36795:4;36792:1;36785:15;36819:4;36816:1;36809:15;36836:180;36884:77;36881:1;36874:88;36981:4;36978:1;36971:15;37005:4;37002:1;36995:15;37022:102;;37114:2;37110:7;37105:2;37098:5;37094:14;37090:28;37080:38;;37070:54;;;:::o;37130:220::-;37270:34;37266:1;37258:6;37254:14;37247:58;37339:3;37334:2;37326:6;37322:15;37315:28;37236:114;:::o;37356:237::-;37496:34;37492:1;37484:6;37480:14;37473:58;37565:20;37560:2;37552:6;37548:15;37541:45;37462:131;:::o;37599:225::-;37739:34;37735:1;37727:6;37723:14;37716:58;37808:8;37803:2;37795:6;37791:15;37784:33;37705:119;:::o;37830:178::-;37970:30;37966:1;37958:6;37954:14;37947:54;37936:72;:::o;38014:223::-;38154:34;38150:1;38142:6;38138:14;38131:58;38223:6;38218:2;38210:6;38206:15;38199:31;38120:117;:::o;38243:175::-;38383:27;38379:1;38371:6;38367:14;38360:51;38349:69;:::o;38424:231::-;38564:34;38560:1;38552:6;38548:14;38541:58;38633:14;38628:2;38620:6;38616:15;38609:39;38530:125;:::o;38661:243::-;38801:34;38797:1;38789:6;38785:14;38778:58;38870:26;38865:2;38857:6;38853:15;38846:51;38767:137;:::o;38910:229::-;39050:34;39046:1;39038:6;39034:14;39027:58;39119:12;39114:2;39106:6;39102:15;39095:37;39016:123;:::o;39145:228::-;39285:34;39281:1;39273:6;39269:14;39262:58;39354:11;39349:2;39341:6;39337:15;39330:36;39251:122;:::o;39379:182::-;39519:34;39515:1;39507:6;39503:14;39496:58;39485:76;:::o;39567:231::-;39707:34;39703:1;39695:6;39691:14;39684:58;39776:14;39771:2;39763:6;39759:15;39752:39;39673:125;:::o;39804:182::-;39944:34;39940:1;39932:6;39928:14;39921:58;39910:76;:::o;39992:228::-;40132:34;40128:1;40120:6;40116:14;40109:58;40201:11;40196:2;40188:6;40184:15;40177:36;40098:122;:::o;40226:234::-;40366:34;40362:1;40354:6;40350:14;40343:58;40435:17;40430:2;40422:6;40418:15;40411:42;40332:128;:::o;40466:220::-;40606:34;40602:1;40594:6;40590:14;40583:58;40675:3;40670:2;40662:6;40658:15;40651:28;40572:114;:::o;40692:179::-;40832:31;40828:1;40820:6;40816:14;40809:55;40798:73;:::o;40877:236::-;41017:34;41013:1;41005:6;41001:14;40994:58;41086:19;41081:2;41073:6;41069:15;41062:44;40983:130;:::o;41119:235::-;41259:34;41255:1;41247:6;41243:14;41236:58;41328:18;41323:2;41315:6;41311:15;41304:43;41225:129;:::o;41360:235::-;41500:34;41496:1;41488:6;41484:14;41477:58;41569:18;41564:2;41556:6;41552:15;41545:43;41466:129;:::o;41601:122::-;41674:24;41692:5;41674:24;:::i;:::-;41667:5;41664:35;41654:2;;41713:1;41710;41703:12;41654:2;41644:79;:::o;41729:116::-;41799:21;41814:5;41799:21;:::i;:::-;41792:5;41789:32;41779:2;;41835:1;41832;41825:12;41779:2;41769:76;:::o;41851:120::-;41923:23;41940:5;41923:23;:::i;:::-;41916:5;41913:34;41903:2;;41961:1;41958;41951:12;41903:2;41893:78;:::o;41977:122::-;42050:24;42068:5;42050:24;:::i;:::-;42043:5;42040:35;42030:2;;42089:1;42086;42079:12;42030:2;42020:79;:::o
Swarm Source
ipfs://91dd467f20c43cd652e343d83c94f42d1022239141651747c0e9ff30e838d007
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.