ERC-721
Overview
Max Total Supply
1,500 PLRO
Holders
390
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 PLROLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PotluckRealmOrcs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-02-10 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @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); } /** * @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); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return 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); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @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 { _setApprovalForAll(_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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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.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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/ORCS.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract PotluckRealmOrcs is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable, Pausable { modifier onlyDevs { require(msg.sender == primaryDevAddress || msg.sender == secondaryDevAddress || msg.sender == tertiaryDevAddress || msg.sender == quaternaryDevAddress || msg.sender == quinaryDevAddress, "Dev Only: caller is not the developer"); _; } using Counters for Counters.Counter; using SafeMath for uint256; using Strings for uint256; Counters.Counter private _tokenIds; address public primaryDevAddress = 0x3acDC09A3C4Fc659BfDA7CFE8e6B04237d751e18; address public secondaryDevAddress = 0x982D9A2E8D487C698B29E72701068A5Ac207e139; address public tertiaryDevAddress = 0xf60B7751B3227B4a34477aB144358d44f21d6fc0; address public quaternaryDevAddress = 0xA6e950aa70EBaAf99686A5d95aFe8aca8B5E353B; address public quinaryDevAddress = 0xA6F29Ab1Bf8c731Bc99E5CBacDF4F46409BABa49; uint256 public primaryDevFee = 2000; uint256 public secondaryDevFee = 2500; uint256 public tertiaryDevFee = 2000; uint256 public quaternaryDevFee = 1000; uint256 public quinaryDevFee = 2500; string public baseURI; string public baseExtension = ".json"; uint256 public maxSupply = 1500; uint256 public price = 50 ether; uint256 public whitelistPrice = 25 ether; mapping(address => uint256) public devFees; mapping(address => bool) public whitelistedAddress; constructor() ERC721 ("Potluck Realm Orcs", "PLRO") { baseURI = "ipfs://QmcZwYyxYJb7Aq62bM72s7wxvTXSxa2cGupkLiTWeSHbkV/"; _pause(); } function _baseURI() internal view override returns (string memory) { return baseURI; } function splitFees(uint256 sentAmount) internal { uint256 primaryDevFeeAmount = sentAmount.mul(primaryDevFee).div(10000); uint256 secondaryDevFeeAmount = sentAmount.mul(secondaryDevFee).div(10000); uint256 tertiaryDevFeeAmount = sentAmount.mul(tertiaryDevFee).div(10000); uint256 quaternaryDevFeeAmount = sentAmount.mul(quaternaryDevFee).div(10000); uint256 quinaryDevFeeAmount = sentAmount.mul(quinaryDevFee).div(10000); devFees[primaryDevAddress] += primaryDevFeeAmount; devFees[secondaryDevAddress] += secondaryDevFeeAmount; devFees[tertiaryDevAddress] += tertiaryDevFeeAmount; devFees[quaternaryDevAddress] += quaternaryDevFeeAmount; devFees[quinaryDevAddress] += quinaryDevFeeAmount; } function mint(uint256 amount) public payable whenNotPaused { require(msg.value == price * amount , "Invalid amount"); splitFees(msg.value); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); } } function mintWhitelisted(uint8 amount) public payable whenNotPaused { require(whitelistedAddress[msg.sender] == true, "The address can no longer pre-order"); require(msg.value == whitelistPrice * amount, "Invalid amount"); splitFees(msg.value); for (uint8 i = 0; i < amount; i++) { internalMint(msg.sender); } } function whiteList(address[] memory addressList) public onlyOwner { require(addressList.length > 0,"No List"); for(uint256 i = 0;i<addressList.length;i++) whitelistedAddress[addressList[i]] = true; } function removeWhiteList(address[] memory addressList) public onlyOwner { require(addressList.length > 0,"No List"); for(uint256 i = 0;i<addressList.length;i++) whitelistedAddress[addressList[i]] = false; } function orcsOwned(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function reserveForGiveaway(uint256 amount) public onlyOwner { for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); } } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function internalMint(address to) internal { require(totalSupply() < maxSupply, "All Orcs have been minted!"); _safeMint(to, _tokenIds.current()); _tokenIds.increment(); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function withdraw() public onlyDevs { uint256 amount = devFees[msg.sender]; require(amount > 0,"No Fees:("); payable(msg.sender).transfer(amount); devFees[msg.sender] = 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"devFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintWhitelisted","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"orcsOwned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quaternaryDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quaternaryDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quinaryDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quinaryDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveForGiveaway","outputs":[],"stateMutability":"nonpayable","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":[],"name":"secondaryDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondaryDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","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":[],"name":"tertiaryDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tertiaryDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052733acdc09a3c4fc659bfda7cfe8e6b04237d751e18600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073982d9a2e8d487c698b29e72701068a5ac207e139600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f60b7751b3227b4a34477ab144358d44f21d6fc0600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a6e950aa70ebaaf99686a5d95afe8aca8b5e353b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a6f29ab1bf8c731bc99e5cbacdf4f46409baba49601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107d06012556109c46013556107d06014556103e86015556109c46016556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601890805190602001906200021892919062000507565b506105dc6019556802b5e3af16b1880000601a5568015af1d78b58c40000601b553480156200024657600080fd5b506040518060400160405280601281526020017f506f746c75636b205265616c6d204f72637300000000000000000000000000008152506040518060400160405280600481526020017f504c524f000000000000000000000000000000000000000000000000000000008152508160009080519060200190620002cb92919062000507565b508060019080519060200190620002e492919062000507565b50505062000307620002fb6200036a60201b60201c565b6200037260201b60201c565b6000600b60146101000a81548160ff02191690831515021790555060405180606001604052806036815260200162005d0f60369139601790805190602001906200035392919062000507565b50620003646200043860201b60201c565b62000701565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000448620004f060201b60201c565b156200048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000482906200060c565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004d76200036a60201b60201c565b604051620004e69190620005ef565b60405180910390a1565b6000600b60149054906101000a900460ff16905090565b828054620005159062000673565b90600052602060002090601f01602090048101928262000539576000855562000585565b82601f106200055457805160ff191683800117855562000585565b8280016001018555821562000585579182015b828111156200058457825182559160200191906001019062000567565b5b50905062000594919062000598565b5090565b5b80821115620005b357600081600090555060010162000599565b5090565b620005c2816200063f565b82525050565b6000620005d76010836200062e565b9150620005e482620006d8565b602082019050919050565b6000602082019050620006066000830184620005b7565b92915050565b600060208201905081810360008301526200062781620005c8565b9050919050565b600082825260208201905092915050565b60006200064c8262000653565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200068c57607f821691505b60208210811415620006a357620006a2620006a9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6155fe80620007116000396000f3fe6080604052600436106102885760003560e01c806370a082311161015a578063c30796ab116100c1578063e985e9c51161007a578063e985e9c514610980578063f147efeb146109bd578063f2fde38b146109fa578063f38cc11114610a23578063f9918bdd14610a4e578063fc1a1c3614610a8b57610288565b8063c30796ab1461085a578063c668286214610897578063c87b56dd146108c2578063cdaa2a43146108ff578063d51980d01461092a578063d5abeb011461095557610288565b8063a035b1fe11610113578063a035b1fe1461076b578063a0712d6814610796578063a22cb465146107b2578063a64e0015146107db578063a879b63214610806578063b88d4fde1461083157610288565b806370a0823114610681578063715018a6146106be5780638456cb59146106d55780638da5cb5b146106ec57806391c5f4a61461071757806395d89b411461074057610288565b806337648cbb116101fe578063496bc29e116101b7578063496bc29e1461055d5780634f6ccce71461058857806355f804b3146105c55780635c975abb146105ee5780636352211e146106195780636c0360eb1461065657610288565b806337648cbb1461048957806339745791146104b45780633ccfd60b146104dd5780633f4ba83a146104f457806342842e0e1461050b57806347511d8e1461053457610288565b80630cc03f72116102505780630cc03f721461038657806318160ddd146103a257806323b872dd146103cd57806328103770146103f65780632f745c5914610421578063355e81941461045e57610288565b806301ffc9a71461028d57806304dd3bb4146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613eb3565b610ab6565b6040516102c191906145cc565b60405180910390f35b3480156102d657600080fd5b506102df610ac8565b6040516102ec9190614949565b60405180910390f35b34801561030157600080fd5b5061030a610ace565b60405161031791906145e7565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613f56565b610b60565b6040516103549190614543565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613e2a565b610be5565b005b6103a0600480360381019061039b9190613f83565b610cfd565b005b3480156103ae57600080fd5b506103b7610e64565b6040516103c49190614949565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190613d14565b610e71565b005b34801561040257600080fd5b5061040b610ed1565b6040516104189190614543565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613e2a565b610ef7565b6040516104559190614949565b60405180910390f35b34801561046a57600080fd5b50610473610f9c565b6040516104809190614949565b60405180910390f35b34801561049557600080fd5b5061049e610fa2565b6040516104ab9190614543565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190613e6a565b610fc8565b005b3480156104e957600080fd5b506104f261111d565b005b34801561050057600080fd5b50610509611423565b005b34801561051757600080fd5b50610532600480360381019061052d9190613d14565b6114a9565b005b34801561054057600080fd5b5061055b60048036038101906105569190613f56565b6114c9565b005b34801561056957600080fd5b50610572611570565b60405161057f9190614543565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613f56565b611596565b6040516105bc9190614949565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613f0d565b611607565b005b3480156105fa57600080fd5b5061060361169d565b60405161061091906145cc565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613f56565b6116b4565b60405161064d9190614543565b60405180910390f35b34801561066257600080fd5b5061066b611766565b60405161067891906145e7565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613ca7565b6117f4565b6040516106b59190614949565b60405180910390f35b3480156106ca57600080fd5b506106d36118ac565b005b3480156106e157600080fd5b506106ea611934565b005b3480156106f857600080fd5b506107016119ba565b60405161070e9190614543565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613e6a565b6119e4565b005b34801561074c57600080fd5b50610755611b39565b60405161076291906145e7565b60405180910390f35b34801561077757600080fd5b50610780611bcb565b60405161078d9190614949565b60405180910390f35b6107b060048036038101906107ab9190613f56565b611bd1565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613dea565b611c9c565b005b3480156107e757600080fd5b506107f0611cb2565b6040516107fd9190614949565b60405180910390f35b34801561081257600080fd5b5061081b611cb8565b6040516108289190614543565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613d67565b611cde565b005b34801561086657600080fd5b50610881600480360381019061087c9190613ca7565b611d40565b60405161088e91906145cc565b60405180910390f35b3480156108a357600080fd5b506108ac611d60565b6040516108b991906145e7565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613f56565b611dee565b6040516108f691906145e7565b60405180910390f35b34801561090b57600080fd5b50610914611e98565b6040516109219190614949565b60405180910390f35b34801561093657600080fd5b5061093f611e9e565b60405161094c9190614949565b60405180910390f35b34801561096157600080fd5b5061096a611ea4565b6040516109779190614949565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a29190613cd4565b611eaa565b6040516109b491906145cc565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613ca7565b611f3e565b6040516109f19190614949565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190613ca7565b611f56565b005b348015610a2f57600080fd5b50610a3861204e565b604051610a459190614543565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a709190613ca7565b612074565b604051610a8291906145aa565b60405180910390f35b348015610a9757600080fd5b50610aa061217e565b604051610aad9190614949565b60405180910390f35b6000610ac182612184565b9050919050565b60145481565b606060008054610add90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0990614c80565b8015610b565780601f10610b2b57610100808354040283529160200191610b56565b820191906000526020600020905b815481529060010190602001808311610b3957829003601f168201915b5050505050905090565b6000610b6b826121fe565b610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614869565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf0826116b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c58906148c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8061226a565b73ffffffffffffffffffffffffffffffffffffffff161480610caf5750610cae81610ca961226a565b611eaa565b5b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906147c9565b60405180910390fd5b610cf88383612272565b505050565b610d0561169d565b15610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906147a9565b60405180910390fd5b60011515601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90614669565b60405180910390fd5b8060ff16601b54610de99190614b2f565b3414610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614729565b60405180910390fd5b610e333461232b565b60005b8160ff168160ff161015610e6057610e4d3361266c565b8080610e5890614d2c565b915050610e36565b5050565b6000600880549050905090565b610e82610e7c61226a565b826126d7565b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906148e9565b60405180910390fd5b610ecc8383836127b5565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f02836117f4565b8210610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90614689565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60155481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fd061226a565b73ffffffffffffffffffffffffffffffffffffffff16610fee6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614889565b60405180910390fd5b6000815111611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90614649565b60405180910390fd5b60005b8151811015611119576000601d60008484815181106110ad576110ac614e43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061111190614ce3565b91505061108b565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111c65750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061121e5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112765750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ce5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614829565b60405180910390fd5b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90614929565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113da573d6000803e3d6000fd5b506000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b61142b61226a565b73ffffffffffffffffffffffffffffffffffffffff166114496119ba565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614889565b60405180910390fd5b6114a7612a1c565b565b6114c483838360405180602001604052806000815250611cde565b505050565b6114d161226a565b73ffffffffffffffffffffffffffffffffffffffff166114ef6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614889565b60405180910390fd5b60005b8181101561156c576115593361266c565b808061156490614ce3565b915050611548565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a0610e64565b82106115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614909565b60405180910390fd5b600882815481106115f5576115f4614e43565b5b90600052602060002001549050919050565b61160f61226a565b73ffffffffffffffffffffffffffffffffffffffff1661162d6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614889565b60405180910390fd5b8060179080519060200190611699929190613a08565b5050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614809565b60405180910390fd5b80915050919050565b6017805461177390614c80565b80601f016020809104026020016040519081016040528092919081815260200182805461179f90614c80565b80156117ec5780601f106117c1576101008083540402835291602001916117ec565b820191906000526020600020905b8154815290600101906020018083116117cf57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906147e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b461226a565b73ffffffffffffffffffffffffffffffffffffffff166118d26119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614889565b60405180910390fd5b6119326000612abe565b565b61193c61226a565b73ffffffffffffffffffffffffffffffffffffffff1661195a6119ba565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790614889565b60405180910390fd5b6119b8612b84565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ec61226a565b73ffffffffffffffffffffffffffffffffffffffff16611a0a6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790614889565b60405180910390fd5b6000815111611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90614649565b60405180910390fd5b60005b8151811015611b35576001601d6000848481518110611ac957611ac8614e43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2d90614ce3565b915050611aa7565b5050565b606060018054611b4890614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7490614c80565b8015611bc15780601f10611b9657610100808354040283529160200191611bc1565b820191906000526020600020905b815481529060010190602001808311611ba457829003601f168201915b5050505050905090565b601a5481565b611bd961169d565b15611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c10906147a9565b60405180910390fd5b80601a54611c279190614b2f565b3414611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90614729565b60405180910390fd5b611c713461232b565b60005b81811015611c9857611c853361266c565b8080611c9090614ce3565b915050611c74565b5050565b611cae611ca761226a565b8383612c27565b5050565b60135481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cef611ce961226a565b836126d7565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d25906148e9565b60405180910390fd5b611d3a84848484612d94565b50505050565b601d6020528060005260406000206000915054906101000a900460ff1681565b60188054611d6d90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9990614c80565b8015611de65780601f10611dbb57610100808354040283529160200191611de6565b820191906000526020600020905b815481529060010190602001808311611dc957829003601f168201915b505050505081565b6060611df9826121fe565b611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f906148a9565b60405180910390fd5b6000611e42612df0565b90506000815111611e625760405180602001604052806000815250611e90565b80611e6c84612e82565b6018604051602001611e8093929190614512565b6040516020818303038152906040525b915050919050565b60125481565b60165481565b60195481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601c6020528060005260406000206000915090505481565b611f5e61226a565b73ffffffffffffffffffffffffffffffffffffffff16611f7c6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614889565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612039906146c9565b60405180910390fd5b61204b81612abe565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000612081836117f4565b905060008114156120de57600067ffffffffffffffff8111156120a7576120a6614e72565b5b6040519080825280602002602001820160405280156120d55781602001602082028036833780820191505090505b50915050612179565b60008167ffffffffffffffff8111156120fa576120f9614e72565b5b6040519080825280602002602001820160405280156121285781602001602082028036833780820191505090505b50905060005b82811015612172576121408582610ef7565b82828151811061215357612152614e43565b5b602002602001018181525050808061216a90614ce3565b91505061212e565b8193505050505b919050565b601b5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121f757506121f682612fe3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122e5836116b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612356612710612348601254856130c590919063ffffffff16565b6130db90919063ffffffff16565b90506000612383612710612375601354866130c590919063ffffffff16565b6130db90919063ffffffff16565b905060006123b06127106123a2601454876130c590919063ffffffff16565b6130db90919063ffffffff16565b905060006123dd6127106123cf601554886130c590919063ffffffff16565b6130db90919063ffffffff16565b9050600061240a6127106123fc601654896130c590919063ffffffff16565b6130db90919063ffffffff16565b905084601c6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247d9190614aa8565b9250508190555083601c6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f59190614aa8565b9250508190555082601c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256d9190614aa8565b9250508190555081601c6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125e59190614aa8565b9250508190555080601c6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265d9190614aa8565b92505081905550505050505050565b601954612677610e64565b106126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614609565b60405180910390fd5b6126ca816126c5600c6130f1565b6130ff565b6126d4600c61311d565b50565b60006126e2826121fe565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614789565b60405180910390fd5b600061272c836116b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279b57508373ffffffffffffffffffffffffffffffffffffffff1661278384610b60565b73ffffffffffffffffffffffffffffffffffffffff16145b806127ac57506127ab8185611eaa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127d5826116b4565b73ffffffffffffffffffffffffffffffffffffffff161461282b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612822906146e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289290614749565b60405180910390fd5b6128a6838383613133565b6128b1600082612272565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129019190614b89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129589190614aa8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a1783838361318b565b505050565b612a2461169d565b612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614629565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612aa761226a565b604051612ab49190614543565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b8c61169d565b15612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc3906147a9565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c1061226a565b604051612c1d9190614543565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90614769565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d8791906145cc565b60405180910390a3505050565b612d9f8484846127b5565b612dab84848484613190565b612dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de1906146a9565b60405180910390fd5b50505050565b606060178054612dff90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2b90614c80565b8015612e785780601f10612e4d57610100808354040283529160200191612e78565b820191906000526020600020905b815481529060010190602001808311612e5b57829003601f168201915b5050505050905090565b60606000821415612eca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fde565b600082905060005b60008214612efc578080612ee590614ce3565b915050600a82612ef59190614afe565b9150612ed2565b60008167ffffffffffffffff811115612f1857612f17614e72565b5b6040519080825280601f01601f191660200182016040528015612f4a5781602001600182028036833780820191505090505b5090505b60008514612fd757600182612f639190614b89565b9150600a85612f729190614d56565b6030612f7e9190614aa8565b60f81b818381518110612f9457612f93614e43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fd09190614afe565b9450612f4e565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806130be57506130bd82613327565b5b9050919050565b600081836130d39190614b2f565b905092915050565b600081836130e99190614afe565b905092915050565b600081600001549050919050565b613119828260405180602001604052806000815250613391565b5050565b6001816000016000828254019250508190555050565b61313b61169d565b1561317b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613172906147a9565b60405180910390fd5b6131868383836133ec565b505050565b505050565b60006131b18473ffffffffffffffffffffffffffffffffffffffff16613500565b1561331a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131da61226a565b8786866040518563ffffffff1660e01b81526004016131fc949392919061455e565b602060405180830381600087803b15801561321657600080fd5b505af192505050801561324757506040513d601f19601f820116820180604052508101906132449190613ee0565b60015b6132ca573d8060008114613277576040519150601f19603f3d011682016040523d82523d6000602084013e61327c565b606091505b506000815114156132c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b9906146a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061331f565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61339b8383613523565b6133a86000848484613190565b6133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133de906146a9565b60405180910390fd5b505050565b6133f78383836136fd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561343a5761343581613702565b613479565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461347857613477838261374b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bc576134b7816138b8565b6134fb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134fa576134f98282613989565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a90614849565b60405180910390fd5b61359c816121fe565b156135dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d390614709565b60405180910390fd5b6135e860008383613133565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136389190614aa8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136f96000838361318b565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613758846117f4565b6137629190614b89565b9050600060076000848152602001908152602001600020549050818114613847576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138cc9190614b89565b90506000600960008481526020019081526020016000205490506000600883815481106138fc576138fb614e43565b5b90600052602060002001549050806008838154811061391e5761391d614e43565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061396d5761396c614e14565b5b6001900381819060005260206000200160009055905550505050565b6000613994836117f4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613a1490614c80565b90600052602060002090601f016020900481019282613a365760008555613a7d565b82601f10613a4f57805160ff1916838001178555613a7d565b82800160010185558215613a7d579182015b82811115613a7c578251825591602001919060010190613a61565b5b509050613a8a9190613a8e565b5090565b5b80821115613aa7576000816000905550600101613a8f565b5090565b6000613abe613ab984614989565b614964565b90508083825260208201905082856020860282011115613ae157613ae0614ea6565b5b60005b85811015613b115781613af78882613b9f565b845260208401935060208301925050600181019050613ae4565b5050509392505050565b6000613b2e613b29846149b5565b614964565b905082815260208101848484011115613b4a57613b49614eab565b5b613b55848285614c3e565b509392505050565b6000613b70613b6b846149e6565b614964565b905082815260208101848484011115613b8c57613b8b614eab565b5b613b97848285614c3e565b509392505050565b600081359050613bae81615555565b92915050565b600082601f830112613bc957613bc8614ea1565b5b8135613bd9848260208601613aab565b91505092915050565b600081359050613bf18161556c565b92915050565b600081359050613c0681615583565b92915050565b600081519050613c1b81615583565b92915050565b600082601f830112613c3657613c35614ea1565b5b8135613c46848260208601613b1b565b91505092915050565b600082601f830112613c6457613c63614ea1565b5b8135613c74848260208601613b5d565b91505092915050565b600081359050613c8c8161559a565b92915050565b600081359050613ca1816155b1565b92915050565b600060208284031215613cbd57613cbc614eb5565b5b6000613ccb84828501613b9f565b91505092915050565b60008060408385031215613ceb57613cea614eb5565b5b6000613cf985828601613b9f565b9250506020613d0a85828601613b9f565b9150509250929050565b600080600060608486031215613d2d57613d2c614eb5565b5b6000613d3b86828701613b9f565b9350506020613d4c86828701613b9f565b9250506040613d5d86828701613c7d565b9150509250925092565b60008060008060808587031215613d8157613d80614eb5565b5b6000613d8f87828801613b9f565b9450506020613da087828801613b9f565b9350506040613db187828801613c7d565b925050606085013567ffffffffffffffff811115613dd257613dd1614eb0565b5b613dde87828801613c21565b91505092959194509250565b60008060408385031215613e0157613e00614eb5565b5b6000613e0f85828601613b9f565b9250506020613e2085828601613be2565b9150509250929050565b60008060408385031215613e4157613e40614eb5565b5b6000613e4f85828601613b9f565b9250506020613e6085828601613c7d565b9150509250929050565b600060208284031215613e8057613e7f614eb5565b5b600082013567ffffffffffffffff811115613e9e57613e9d614eb0565b5b613eaa84828501613bb4565b91505092915050565b600060208284031215613ec957613ec8614eb5565b5b6000613ed784828501613bf7565b91505092915050565b600060208284031215613ef657613ef5614eb5565b5b6000613f0484828501613c0c565b91505092915050565b600060208284031215613f2357613f22614eb5565b5b600082013567ffffffffffffffff811115613f4157613f40614eb0565b5b613f4d84828501613c4f565b91505092915050565b600060208284031215613f6c57613f6b614eb5565b5b6000613f7a84828501613c7d565b91505092915050565b600060208284031215613f9957613f98614eb5565b5b6000613fa784828501613c92565b91505092915050565b6000613fbc83836144f4565b60208301905092915050565b613fd181614bbd565b82525050565b6000613fe282614a3c565b613fec8185614a6a565b9350613ff783614a17565b8060005b8381101561402857815161400f8882613fb0565b975061401a83614a5d565b925050600181019050613ffb565b5085935050505092915050565b61403e81614bcf565b82525050565b600061404f82614a47565b6140598185614a7b565b9350614069818560208601614c4d565b61407281614eba565b840191505092915050565b600061408882614a52565b6140928185614a8c565b93506140a2818560208601614c4d565b6140ab81614eba565b840191505092915050565b60006140c182614a52565b6140cb8185614a9d565b93506140db818560208601614c4d565b80840191505092915050565b600081546140f481614c80565b6140fe8186614a9d565b94506001821660008114614119576001811461412a5761415d565b60ff1983168652818601935061415d565b61413385614a27565b60005b8381101561415557815481890152600182019150602081019050614136565b838801955050505b50505092915050565b6000614173601a83614a8c565b915061417e82614ecb565b602082019050919050565b6000614196601483614a8c565b91506141a182614ef4565b602082019050919050565b60006141b9600783614a8c565b91506141c482614f1d565b602082019050919050565b60006141dc602383614a8c565b91506141e782614f46565b604082019050919050565b60006141ff602b83614a8c565b915061420a82614f95565b604082019050919050565b6000614222603283614a8c565b915061422d82614fe4565b604082019050919050565b6000614245602683614a8c565b915061425082615033565b604082019050919050565b6000614268602583614a8c565b915061427382615082565b604082019050919050565b600061428b601c83614a8c565b9150614296826150d1565b602082019050919050565b60006142ae600e83614a8c565b91506142b9826150fa565b602082019050919050565b60006142d1602483614a8c565b91506142dc82615123565b604082019050919050565b60006142f4601983614a8c565b91506142ff82615172565b602082019050919050565b6000614317602c83614a8c565b91506143228261519b565b604082019050919050565b600061433a601083614a8c565b9150614345826151ea565b602082019050919050565b600061435d603883614a8c565b915061436882615213565b604082019050919050565b6000614380602a83614a8c565b915061438b82615262565b604082019050919050565b60006143a3602983614a8c565b91506143ae826152b1565b604082019050919050565b60006143c6602583614a8c565b91506143d182615300565b604082019050919050565b60006143e9602083614a8c565b91506143f48261534f565b602082019050919050565b600061440c602c83614a8c565b915061441782615378565b604082019050919050565b600061442f602083614a8c565b915061443a826153c7565b602082019050919050565b6000614452602f83614a8c565b915061445d826153f0565b604082019050919050565b6000614475602183614a8c565b91506144808261543f565b604082019050919050565b6000614498603183614a8c565b91506144a38261548e565b604082019050919050565b60006144bb602c83614a8c565b91506144c6826154dd565b604082019050919050565b60006144de600983614a8c565b91506144e98261552c565b602082019050919050565b6144fd81614c27565b82525050565b61450c81614c27565b82525050565b600061451e82866140b6565b915061452a82856140b6565b915061453682846140e7565b9150819050949350505050565b60006020820190506145586000830184613fc8565b92915050565b60006080820190506145736000830187613fc8565b6145806020830186613fc8565b61458d6040830185614503565b818103606083015261459f8184614044565b905095945050505050565b600060208201905081810360008301526145c48184613fd7565b905092915050565b60006020820190506145e16000830184614035565b92915050565b60006020820190508181036000830152614601818461407d565b905092915050565b6000602082019050818103600083015261462281614166565b9050919050565b6000602082019050818103600083015261464281614189565b9050919050565b60006020820190508181036000830152614662816141ac565b9050919050565b60006020820190508181036000830152614682816141cf565b9050919050565b600060208201905081810360008301526146a2816141f2565b9050919050565b600060208201905081810360008301526146c281614215565b9050919050565b600060208201905081810360008301526146e281614238565b9050919050565b600060208201905081810360008301526147028161425b565b9050919050565b600060208201905081810360008301526147228161427e565b9050919050565b60006020820190508181036000830152614742816142a1565b9050919050565b60006020820190508181036000830152614762816142c4565b9050919050565b60006020820190508181036000830152614782816142e7565b9050919050565b600060208201905081810360008301526147a28161430a565b9050919050565b600060208201905081810360008301526147c28161432d565b9050919050565b600060208201905081810360008301526147e281614350565b9050919050565b6000602082019050818103600083015261480281614373565b9050919050565b6000602082019050818103600083015261482281614396565b9050919050565b60006020820190508181036000830152614842816143b9565b9050919050565b60006020820190508181036000830152614862816143dc565b9050919050565b60006020820190508181036000830152614882816143ff565b9050919050565b600060208201905081810360008301526148a281614422565b9050919050565b600060208201905081810360008301526148c281614445565b9050919050565b600060208201905081810360008301526148e281614468565b9050919050565b600060208201905081810360008301526149028161448b565b9050919050565b60006020820190508181036000830152614922816144ae565b9050919050565b60006020820190508181036000830152614942816144d1565b9050919050565b600060208201905061495e6000830184614503565b92915050565b600061496e61497f565b905061497a8282614cb2565b919050565b6000604051905090565b600067ffffffffffffffff8211156149a4576149a3614e72565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149d0576149cf614e72565b5b6149d982614eba565b9050602081019050919050565b600067ffffffffffffffff821115614a0157614a00614e72565b5b614a0a82614eba565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ab382614c27565b9150614abe83614c27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614af357614af2614d87565b5b828201905092915050565b6000614b0982614c27565b9150614b1483614c27565b925082614b2457614b23614db6565b5b828204905092915050565b6000614b3a82614c27565b9150614b4583614c27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7e57614b7d614d87565b5b828202905092915050565b6000614b9482614c27565b9150614b9f83614c27565b925082821015614bb257614bb1614d87565b5b828203905092915050565b6000614bc882614c07565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614c6b578082015181840152602081019050614c50565b83811115614c7a576000848401525b50505050565b60006002820490506001821680614c9857607f821691505b60208210811415614cac57614cab614de5565b5b50919050565b614cbb82614eba565b810181811067ffffffffffffffff82111715614cda57614cd9614e72565b5b80604052505050565b6000614cee82614c27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d2157614d20614d87565b5b600182019050919050565b6000614d3782614c31565b915060ff821415614d4b57614d4a614d87565b5b600182019050919050565b6000614d6182614c27565b9150614d6c83614c27565b925082614d7c57614d7b614db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416c6c204f7263732068617665206265656e206d696e74656421000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4e6f204c69737400000000000000000000000000000000000000000000000000600082015250565b7f54686520616464726573732063616e206e6f206c6f6e676572207072652d6f7260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f446576204f6e6c793a2063616c6c6572206973206e6f7420746865206465766560008201527f6c6f706572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f20466565733a280000000000000000000000000000000000000000000000600082015250565b61555e81614bbd565b811461556957600080fd5b50565b61557581614bcf565b811461558057600080fd5b50565b61558c81614bdb565b811461559757600080fd5b50565b6155a381614c27565b81146155ae57600080fd5b50565b6155ba81614c31565b81146155c557600080fd5b5056fea2646970667358221220b9594ba3301a5a0e04373ac59cfdb1518540e74c96f7612c5a6f82fd0d5d293164736f6c63430008070033697066733a2f2f516d635a77597978594a623741713632624d37327337777876545853786132634775706b4c695457655348626b562f
Deployed Bytecode
0x6080604052600436106102885760003560e01c806370a082311161015a578063c30796ab116100c1578063e985e9c51161007a578063e985e9c514610980578063f147efeb146109bd578063f2fde38b146109fa578063f38cc11114610a23578063f9918bdd14610a4e578063fc1a1c3614610a8b57610288565b8063c30796ab1461085a578063c668286214610897578063c87b56dd146108c2578063cdaa2a43146108ff578063d51980d01461092a578063d5abeb011461095557610288565b8063a035b1fe11610113578063a035b1fe1461076b578063a0712d6814610796578063a22cb465146107b2578063a64e0015146107db578063a879b63214610806578063b88d4fde1461083157610288565b806370a0823114610681578063715018a6146106be5780638456cb59146106d55780638da5cb5b146106ec57806391c5f4a61461071757806395d89b411461074057610288565b806337648cbb116101fe578063496bc29e116101b7578063496bc29e1461055d5780634f6ccce71461058857806355f804b3146105c55780635c975abb146105ee5780636352211e146106195780636c0360eb1461065657610288565b806337648cbb1461048957806339745791146104b45780633ccfd60b146104dd5780633f4ba83a146104f457806342842e0e1461050b57806347511d8e1461053457610288565b80630cc03f72116102505780630cc03f721461038657806318160ddd146103a257806323b872dd146103cd57806328103770146103f65780632f745c5914610421578063355e81941461045e57610288565b806301ffc9a71461028d57806304dd3bb4146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613eb3565b610ab6565b6040516102c191906145cc565b60405180910390f35b3480156102d657600080fd5b506102df610ac8565b6040516102ec9190614949565b60405180910390f35b34801561030157600080fd5b5061030a610ace565b60405161031791906145e7565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613f56565b610b60565b6040516103549190614543565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613e2a565b610be5565b005b6103a0600480360381019061039b9190613f83565b610cfd565b005b3480156103ae57600080fd5b506103b7610e64565b6040516103c49190614949565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190613d14565b610e71565b005b34801561040257600080fd5b5061040b610ed1565b6040516104189190614543565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613e2a565b610ef7565b6040516104559190614949565b60405180910390f35b34801561046a57600080fd5b50610473610f9c565b6040516104809190614949565b60405180910390f35b34801561049557600080fd5b5061049e610fa2565b6040516104ab9190614543565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190613e6a565b610fc8565b005b3480156104e957600080fd5b506104f261111d565b005b34801561050057600080fd5b50610509611423565b005b34801561051757600080fd5b50610532600480360381019061052d9190613d14565b6114a9565b005b34801561054057600080fd5b5061055b60048036038101906105569190613f56565b6114c9565b005b34801561056957600080fd5b50610572611570565b60405161057f9190614543565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613f56565b611596565b6040516105bc9190614949565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613f0d565b611607565b005b3480156105fa57600080fd5b5061060361169d565b60405161061091906145cc565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613f56565b6116b4565b60405161064d9190614543565b60405180910390f35b34801561066257600080fd5b5061066b611766565b60405161067891906145e7565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613ca7565b6117f4565b6040516106b59190614949565b60405180910390f35b3480156106ca57600080fd5b506106d36118ac565b005b3480156106e157600080fd5b506106ea611934565b005b3480156106f857600080fd5b506107016119ba565b60405161070e9190614543565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613e6a565b6119e4565b005b34801561074c57600080fd5b50610755611b39565b60405161076291906145e7565b60405180910390f35b34801561077757600080fd5b50610780611bcb565b60405161078d9190614949565b60405180910390f35b6107b060048036038101906107ab9190613f56565b611bd1565b005b3480156107be57600080fd5b506107d960048036038101906107d49190613dea565b611c9c565b005b3480156107e757600080fd5b506107f0611cb2565b6040516107fd9190614949565b60405180910390f35b34801561081257600080fd5b5061081b611cb8565b6040516108289190614543565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613d67565b611cde565b005b34801561086657600080fd5b50610881600480360381019061087c9190613ca7565b611d40565b60405161088e91906145cc565b60405180910390f35b3480156108a357600080fd5b506108ac611d60565b6040516108b991906145e7565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613f56565b611dee565b6040516108f691906145e7565b60405180910390f35b34801561090b57600080fd5b50610914611e98565b6040516109219190614949565b60405180910390f35b34801561093657600080fd5b5061093f611e9e565b60405161094c9190614949565b60405180910390f35b34801561096157600080fd5b5061096a611ea4565b6040516109779190614949565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a29190613cd4565b611eaa565b6040516109b491906145cc565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613ca7565b611f3e565b6040516109f19190614949565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190613ca7565b611f56565b005b348015610a2f57600080fd5b50610a3861204e565b604051610a459190614543565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a709190613ca7565b612074565b604051610a8291906145aa565b60405180910390f35b348015610a9757600080fd5b50610aa061217e565b604051610aad9190614949565b60405180910390f35b6000610ac182612184565b9050919050565b60145481565b606060008054610add90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0990614c80565b8015610b565780601f10610b2b57610100808354040283529160200191610b56565b820191906000526020600020905b815481529060010190602001808311610b3957829003601f168201915b5050505050905090565b6000610b6b826121fe565b610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190614869565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf0826116b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c58906148c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8061226a565b73ffffffffffffffffffffffffffffffffffffffff161480610caf5750610cae81610ca961226a565b611eaa565b5b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906147c9565b60405180910390fd5b610cf88383612272565b505050565b610d0561169d565b15610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c906147a9565b60405180910390fd5b60011515601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90614669565b60405180910390fd5b8060ff16601b54610de99190614b2f565b3414610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614729565b60405180910390fd5b610e333461232b565b60005b8160ff168160ff161015610e6057610e4d3361266c565b8080610e5890614d2c565b915050610e36565b5050565b6000600880549050905090565b610e82610e7c61226a565b826126d7565b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb8906148e9565b60405180910390fd5b610ecc8383836127b5565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f02836117f4565b8210610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90614689565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60155481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fd061226a565b73ffffffffffffffffffffffffffffffffffffffff16610fee6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614889565b60405180910390fd5b6000815111611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90614649565b60405180910390fd5b60005b8151811015611119576000601d60008484815181106110ad576110ac614e43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061111190614ce3565b91505061108b565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111c65750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061121e5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112765750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ce5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614829565b60405180910390fd5b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b90614929565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113da573d6000803e3d6000fd5b506000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b61142b61226a565b73ffffffffffffffffffffffffffffffffffffffff166114496119ba565b73ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614889565b60405180910390fd5b6114a7612a1c565b565b6114c483838360405180602001604052806000815250611cde565b505050565b6114d161226a565b73ffffffffffffffffffffffffffffffffffffffff166114ef6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614889565b60405180910390fd5b60005b8181101561156c576115593361266c565b808061156490614ce3565b915050611548565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a0610e64565b82106115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614909565b60405180910390fd5b600882815481106115f5576115f4614e43565b5b90600052602060002001549050919050565b61160f61226a565b73ffffffffffffffffffffffffffffffffffffffff1661162d6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614889565b60405180910390fd5b8060179080519060200190611699929190613a08565b5050565b6000600b60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490614809565b60405180910390fd5b80915050919050565b6017805461177390614c80565b80601f016020809104026020016040519081016040528092919081815260200182805461179f90614c80565b80156117ec5780601f106117c1576101008083540402835291602001916117ec565b820191906000526020600020905b8154815290600101906020018083116117cf57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906147e9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118b461226a565b73ffffffffffffffffffffffffffffffffffffffff166118d26119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614889565b60405180910390fd5b6119326000612abe565b565b61193c61226a565b73ffffffffffffffffffffffffffffffffffffffff1661195a6119ba565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790614889565b60405180910390fd5b6119b8612b84565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119ec61226a565b73ffffffffffffffffffffffffffffffffffffffff16611a0a6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790614889565b60405180910390fd5b6000815111611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90614649565b60405180910390fd5b60005b8151811015611b35576001601d6000848481518110611ac957611ac8614e43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2d90614ce3565b915050611aa7565b5050565b606060018054611b4890614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7490614c80565b8015611bc15780601f10611b9657610100808354040283529160200191611bc1565b820191906000526020600020905b815481529060010190602001808311611ba457829003601f168201915b5050505050905090565b601a5481565b611bd961169d565b15611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c10906147a9565b60405180910390fd5b80601a54611c279190614b2f565b3414611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90614729565b60405180910390fd5b611c713461232b565b60005b81811015611c9857611c853361266c565b8080611c9090614ce3565b915050611c74565b5050565b611cae611ca761226a565b8383612c27565b5050565b60135481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cef611ce961226a565b836126d7565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d25906148e9565b60405180910390fd5b611d3a84848484612d94565b50505050565b601d6020528060005260406000206000915054906101000a900460ff1681565b60188054611d6d90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9990614c80565b8015611de65780601f10611dbb57610100808354040283529160200191611de6565b820191906000526020600020905b815481529060010190602001808311611dc957829003601f168201915b505050505081565b6060611df9826121fe565b611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f906148a9565b60405180910390fd5b6000611e42612df0565b90506000815111611e625760405180602001604052806000815250611e90565b80611e6c84612e82565b6018604051602001611e8093929190614512565b6040516020818303038152906040525b915050919050565b60125481565b60165481565b60195481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601c6020528060005260406000206000915090505481565b611f5e61226a565b73ffffffffffffffffffffffffffffffffffffffff16611f7c6119ba565b73ffffffffffffffffffffffffffffffffffffffff1614611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614889565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612039906146c9565b60405180910390fd5b61204b81612abe565b50565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000612081836117f4565b905060008114156120de57600067ffffffffffffffff8111156120a7576120a6614e72565b5b6040519080825280602002602001820160405280156120d55781602001602082028036833780820191505090505b50915050612179565b60008167ffffffffffffffff8111156120fa576120f9614e72565b5b6040519080825280602002602001820160405280156121285781602001602082028036833780820191505090505b50905060005b82811015612172576121408582610ef7565b82828151811061215357612152614e43565b5b602002602001018181525050808061216a90614ce3565b91505061212e565b8193505050505b919050565b601b5481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121f757506121f682612fe3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122e5836116b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612356612710612348601254856130c590919063ffffffff16565b6130db90919063ffffffff16565b90506000612383612710612375601354866130c590919063ffffffff16565b6130db90919063ffffffff16565b905060006123b06127106123a2601454876130c590919063ffffffff16565b6130db90919063ffffffff16565b905060006123dd6127106123cf601554886130c590919063ffffffff16565b6130db90919063ffffffff16565b9050600061240a6127106123fc601654896130c590919063ffffffff16565b6130db90919063ffffffff16565b905084601c6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247d9190614aa8565b9250508190555083601c6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f59190614aa8565b9250508190555082601c6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256d9190614aa8565b9250508190555081601c6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125e59190614aa8565b9250508190555080601c6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265d9190614aa8565b92505081905550505050505050565b601954612677610e64565b106126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614609565b60405180910390fd5b6126ca816126c5600c6130f1565b6130ff565b6126d4600c61311d565b50565b60006126e2826121fe565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614789565b60405180910390fd5b600061272c836116b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279b57508373ffffffffffffffffffffffffffffffffffffffff1661278384610b60565b73ffffffffffffffffffffffffffffffffffffffff16145b806127ac57506127ab8185611eaa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127d5826116b4565b73ffffffffffffffffffffffffffffffffffffffff161461282b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612822906146e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289290614749565b60405180910390fd5b6128a6838383613133565b6128b1600082612272565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129019190614b89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129589190614aa8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a1783838361318b565b505050565b612a2461169d565b612a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5a90614629565b60405180910390fd5b6000600b60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612aa761226a565b604051612ab49190614543565b60405180910390a1565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b8c61169d565b15612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc3906147a9565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c1061226a565b604051612c1d9190614543565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90614769565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d8791906145cc565b60405180910390a3505050565b612d9f8484846127b5565b612dab84848484613190565b612dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de1906146a9565b60405180910390fd5b50505050565b606060178054612dff90614c80565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2b90614c80565b8015612e785780601f10612e4d57610100808354040283529160200191612e78565b820191906000526020600020905b815481529060010190602001808311612e5b57829003601f168201915b5050505050905090565b60606000821415612eca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fde565b600082905060005b60008214612efc578080612ee590614ce3565b915050600a82612ef59190614afe565b9150612ed2565b60008167ffffffffffffffff811115612f1857612f17614e72565b5b6040519080825280601f01601f191660200182016040528015612f4a5781602001600182028036833780820191505090505b5090505b60008514612fd757600182612f639190614b89565b9150600a85612f729190614d56565b6030612f7e9190614aa8565b60f81b818381518110612f9457612f93614e43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fd09190614afe565b9450612f4e565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806130be57506130bd82613327565b5b9050919050565b600081836130d39190614b2f565b905092915050565b600081836130e99190614afe565b905092915050565b600081600001549050919050565b613119828260405180602001604052806000815250613391565b5050565b6001816000016000828254019250508190555050565b61313b61169d565b1561317b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613172906147a9565b60405180910390fd5b6131868383836133ec565b505050565b505050565b60006131b18473ffffffffffffffffffffffffffffffffffffffff16613500565b1561331a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131da61226a565b8786866040518563ffffffff1660e01b81526004016131fc949392919061455e565b602060405180830381600087803b15801561321657600080fd5b505af192505050801561324757506040513d601f19601f820116820180604052508101906132449190613ee0565b60015b6132ca573d8060008114613277576040519150601f19603f3d011682016040523d82523d6000602084013e61327c565b606091505b506000815114156132c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b9906146a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061331f565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61339b8383613523565b6133a86000848484613190565b6133e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133de906146a9565b60405180910390fd5b505050565b6133f78383836136fd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561343a5761343581613702565b613479565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461347857613477838261374b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bc576134b7816138b8565b6134fb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134fa576134f98282613989565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a90614849565b60405180910390fd5b61359c816121fe565b156135dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d390614709565b60405180910390fd5b6135e860008383613133565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136389190614aa8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136f96000838361318b565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613758846117f4565b6137629190614b89565b9050600060076000848152602001908152602001600020549050818114613847576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138cc9190614b89565b90506000600960008481526020019081526020016000205490506000600883815481106138fc576138fb614e43565b5b90600052602060002001549050806008838154811061391e5761391d614e43565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061396d5761396c614e14565b5b6001900381819060005260206000200160009055905550505050565b6000613994836117f4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613a1490614c80565b90600052602060002090601f016020900481019282613a365760008555613a7d565b82601f10613a4f57805160ff1916838001178555613a7d565b82800160010185558215613a7d579182015b82811115613a7c578251825591602001919060010190613a61565b5b509050613a8a9190613a8e565b5090565b5b80821115613aa7576000816000905550600101613a8f565b5090565b6000613abe613ab984614989565b614964565b90508083825260208201905082856020860282011115613ae157613ae0614ea6565b5b60005b85811015613b115781613af78882613b9f565b845260208401935060208301925050600181019050613ae4565b5050509392505050565b6000613b2e613b29846149b5565b614964565b905082815260208101848484011115613b4a57613b49614eab565b5b613b55848285614c3e565b509392505050565b6000613b70613b6b846149e6565b614964565b905082815260208101848484011115613b8c57613b8b614eab565b5b613b97848285614c3e565b509392505050565b600081359050613bae81615555565b92915050565b600082601f830112613bc957613bc8614ea1565b5b8135613bd9848260208601613aab565b91505092915050565b600081359050613bf18161556c565b92915050565b600081359050613c0681615583565b92915050565b600081519050613c1b81615583565b92915050565b600082601f830112613c3657613c35614ea1565b5b8135613c46848260208601613b1b565b91505092915050565b600082601f830112613c6457613c63614ea1565b5b8135613c74848260208601613b5d565b91505092915050565b600081359050613c8c8161559a565b92915050565b600081359050613ca1816155b1565b92915050565b600060208284031215613cbd57613cbc614eb5565b5b6000613ccb84828501613b9f565b91505092915050565b60008060408385031215613ceb57613cea614eb5565b5b6000613cf985828601613b9f565b9250506020613d0a85828601613b9f565b9150509250929050565b600080600060608486031215613d2d57613d2c614eb5565b5b6000613d3b86828701613b9f565b9350506020613d4c86828701613b9f565b9250506040613d5d86828701613c7d565b9150509250925092565b60008060008060808587031215613d8157613d80614eb5565b5b6000613d8f87828801613b9f565b9450506020613da087828801613b9f565b9350506040613db187828801613c7d565b925050606085013567ffffffffffffffff811115613dd257613dd1614eb0565b5b613dde87828801613c21565b91505092959194509250565b60008060408385031215613e0157613e00614eb5565b5b6000613e0f85828601613b9f565b9250506020613e2085828601613be2565b9150509250929050565b60008060408385031215613e4157613e40614eb5565b5b6000613e4f85828601613b9f565b9250506020613e6085828601613c7d565b9150509250929050565b600060208284031215613e8057613e7f614eb5565b5b600082013567ffffffffffffffff811115613e9e57613e9d614eb0565b5b613eaa84828501613bb4565b91505092915050565b600060208284031215613ec957613ec8614eb5565b5b6000613ed784828501613bf7565b91505092915050565b600060208284031215613ef657613ef5614eb5565b5b6000613f0484828501613c0c565b91505092915050565b600060208284031215613f2357613f22614eb5565b5b600082013567ffffffffffffffff811115613f4157613f40614eb0565b5b613f4d84828501613c4f565b91505092915050565b600060208284031215613f6c57613f6b614eb5565b5b6000613f7a84828501613c7d565b91505092915050565b600060208284031215613f9957613f98614eb5565b5b6000613fa784828501613c92565b91505092915050565b6000613fbc83836144f4565b60208301905092915050565b613fd181614bbd565b82525050565b6000613fe282614a3c565b613fec8185614a6a565b9350613ff783614a17565b8060005b8381101561402857815161400f8882613fb0565b975061401a83614a5d565b925050600181019050613ffb565b5085935050505092915050565b61403e81614bcf565b82525050565b600061404f82614a47565b6140598185614a7b565b9350614069818560208601614c4d565b61407281614eba565b840191505092915050565b600061408882614a52565b6140928185614a8c565b93506140a2818560208601614c4d565b6140ab81614eba565b840191505092915050565b60006140c182614a52565b6140cb8185614a9d565b93506140db818560208601614c4d565b80840191505092915050565b600081546140f481614c80565b6140fe8186614a9d565b94506001821660008114614119576001811461412a5761415d565b60ff1983168652818601935061415d565b61413385614a27565b60005b8381101561415557815481890152600182019150602081019050614136565b838801955050505b50505092915050565b6000614173601a83614a8c565b915061417e82614ecb565b602082019050919050565b6000614196601483614a8c565b91506141a182614ef4565b602082019050919050565b60006141b9600783614a8c565b91506141c482614f1d565b602082019050919050565b60006141dc602383614a8c565b91506141e782614f46565b604082019050919050565b60006141ff602b83614a8c565b915061420a82614f95565b604082019050919050565b6000614222603283614a8c565b915061422d82614fe4565b604082019050919050565b6000614245602683614a8c565b915061425082615033565b604082019050919050565b6000614268602583614a8c565b915061427382615082565b604082019050919050565b600061428b601c83614a8c565b9150614296826150d1565b602082019050919050565b60006142ae600e83614a8c565b91506142b9826150fa565b602082019050919050565b60006142d1602483614a8c565b91506142dc82615123565b604082019050919050565b60006142f4601983614a8c565b91506142ff82615172565b602082019050919050565b6000614317602c83614a8c565b91506143228261519b565b604082019050919050565b600061433a601083614a8c565b9150614345826151ea565b602082019050919050565b600061435d603883614a8c565b915061436882615213565b604082019050919050565b6000614380602a83614a8c565b915061438b82615262565b604082019050919050565b60006143a3602983614a8c565b91506143ae826152b1565b604082019050919050565b60006143c6602583614a8c565b91506143d182615300565b604082019050919050565b60006143e9602083614a8c565b91506143f48261534f565b602082019050919050565b600061440c602c83614a8c565b915061441782615378565b604082019050919050565b600061442f602083614a8c565b915061443a826153c7565b602082019050919050565b6000614452602f83614a8c565b915061445d826153f0565b604082019050919050565b6000614475602183614a8c565b91506144808261543f565b604082019050919050565b6000614498603183614a8c565b91506144a38261548e565b604082019050919050565b60006144bb602c83614a8c565b91506144c6826154dd565b604082019050919050565b60006144de600983614a8c565b91506144e98261552c565b602082019050919050565b6144fd81614c27565b82525050565b61450c81614c27565b82525050565b600061451e82866140b6565b915061452a82856140b6565b915061453682846140e7565b9150819050949350505050565b60006020820190506145586000830184613fc8565b92915050565b60006080820190506145736000830187613fc8565b6145806020830186613fc8565b61458d6040830185614503565b818103606083015261459f8184614044565b905095945050505050565b600060208201905081810360008301526145c48184613fd7565b905092915050565b60006020820190506145e16000830184614035565b92915050565b60006020820190508181036000830152614601818461407d565b905092915050565b6000602082019050818103600083015261462281614166565b9050919050565b6000602082019050818103600083015261464281614189565b9050919050565b60006020820190508181036000830152614662816141ac565b9050919050565b60006020820190508181036000830152614682816141cf565b9050919050565b600060208201905081810360008301526146a2816141f2565b9050919050565b600060208201905081810360008301526146c281614215565b9050919050565b600060208201905081810360008301526146e281614238565b9050919050565b600060208201905081810360008301526147028161425b565b9050919050565b600060208201905081810360008301526147228161427e565b9050919050565b60006020820190508181036000830152614742816142a1565b9050919050565b60006020820190508181036000830152614762816142c4565b9050919050565b60006020820190508181036000830152614782816142e7565b9050919050565b600060208201905081810360008301526147a28161430a565b9050919050565b600060208201905081810360008301526147c28161432d565b9050919050565b600060208201905081810360008301526147e281614350565b9050919050565b6000602082019050818103600083015261480281614373565b9050919050565b6000602082019050818103600083015261482281614396565b9050919050565b60006020820190508181036000830152614842816143b9565b9050919050565b60006020820190508181036000830152614862816143dc565b9050919050565b60006020820190508181036000830152614882816143ff565b9050919050565b600060208201905081810360008301526148a281614422565b9050919050565b600060208201905081810360008301526148c281614445565b9050919050565b600060208201905081810360008301526148e281614468565b9050919050565b600060208201905081810360008301526149028161448b565b9050919050565b60006020820190508181036000830152614922816144ae565b9050919050565b60006020820190508181036000830152614942816144d1565b9050919050565b600060208201905061495e6000830184614503565b92915050565b600061496e61497f565b905061497a8282614cb2565b919050565b6000604051905090565b600067ffffffffffffffff8211156149a4576149a3614e72565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149d0576149cf614e72565b5b6149d982614eba565b9050602081019050919050565b600067ffffffffffffffff821115614a0157614a00614e72565b5b614a0a82614eba565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ab382614c27565b9150614abe83614c27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614af357614af2614d87565b5b828201905092915050565b6000614b0982614c27565b9150614b1483614c27565b925082614b2457614b23614db6565b5b828204905092915050565b6000614b3a82614c27565b9150614b4583614c27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7e57614b7d614d87565b5b828202905092915050565b6000614b9482614c27565b9150614b9f83614c27565b925082821015614bb257614bb1614d87565b5b828203905092915050565b6000614bc882614c07565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614c6b578082015181840152602081019050614c50565b83811115614c7a576000848401525b50505050565b60006002820490506001821680614c9857607f821691505b60208210811415614cac57614cab614de5565b5b50919050565b614cbb82614eba565b810181811067ffffffffffffffff82111715614cda57614cd9614e72565b5b80604052505050565b6000614cee82614c27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d2157614d20614d87565b5b600182019050919050565b6000614d3782614c31565b915060ff821415614d4b57614d4a614d87565b5b600182019050919050565b6000614d6182614c27565b9150614d6c83614c27565b925082614d7c57614d7b614db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416c6c204f7263732068617665206265656e206d696e74656421000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4e6f204c69737400000000000000000000000000000000000000000000000000600082015250565b7f54686520616464726573732063616e206e6f206c6f6e676572207072652d6f7260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f446576204f6e6c793a2063616c6c6572206973206e6f7420746865206465766560008201527f6c6f706572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f20466565733a280000000000000000000000000000000000000000000000600082015250565b61555e81614bbd565b811461556957600080fd5b50565b61557581614bcf565b811461558057600080fd5b50565b61558c81614bdb565b811461559757600080fd5b50565b6155a381614c27565b81146155ae57600080fd5b50565b6155ba81614c31565b81146155c557600080fd5b5056fea2646970667358221220b9594ba3301a5a0e04373ac59cfdb1518540e74c96f7612c5a6f82fd0d5d293164736f6c63430008070033
Deployed Bytecode Sourcemap
58383:5740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63753:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59404:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36944:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38503:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38026:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61086:350;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52769:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39253:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59067:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52437:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59445:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59151:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61677:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63924:196;;;;;;;;;;;;;:::i;:::-;;62426:59;;;;;;;;;;;;;:::i;:::-;;39663:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62489:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59237:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52959:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62648:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12641:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36638:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59530:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36368:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15540:103;;;;;;;;;;;;;:::i;:::-;;62365:55;;;;;;;;;;;;;:::i;:::-;;14889:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61444:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37113:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59636:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60840:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38796:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59362:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58982:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39919:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59768:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59556:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63255:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59322:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59488;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59600:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39022:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59719:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15798:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58899:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61915:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59672:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63753:165;63856:4;63876:36;63900:11;63876:23;:36::i;:::-;63869:43;;63753:165;;;:::o;59404:36::-;;;;:::o;36944:100::-;36998:13;37031:5;37024:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36944:100;:::o;38503:221::-;38579:7;38607:16;38615:7;38607;:16::i;:::-;38599:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38692:15;:24;38708:7;38692:24;;;;;;;;;;;;;;;;;;;;;38685:31;;38503:221;;;:::o;38026:411::-;38107:13;38123:23;38138:7;38123:14;:23::i;:::-;38107:39;;38171:5;38165:11;;:2;:11;;;;38157:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:5;38249:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;38274:37;38291:5;38298:12;:10;:12::i;:::-;38274:16;:37::i;:::-;38249:62;38227:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;38408:21;38417:2;38421:7;38408:8;:21::i;:::-;38096:341;38026:411;;:::o;61086:350::-;12967:8;:6;:8::i;:::-;12966:9;12958:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;61203:4:::1;61169:38;;:18;:30;61188:10;61169:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;61161:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;61292:6;61275:23;;:14;;:23;;;;:::i;:::-;61262:9;:36;61254:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;61326:20;61336:9;61326;:20::i;:::-;61360:7;61355:76;61377:6;61373:10;;:1;:10;;;61355:76;;;61399:24;61412:10;61399:12;:24::i;:::-;61385:3;;;;;:::i;:::-;;;;61355:76;;;;61086:350:::0;:::o;52769:113::-;52830:7;52857:10;:17;;;;52850:24;;52769:113;:::o;39253:339::-;39448:41;39467:12;:10;:12::i;:::-;39481:7;39448:18;:41::i;:::-;39440:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39556:28;39566:4;39572:2;39576:7;39556:9;:28::i;:::-;39253:339;;;:::o;59067:79::-;;;;;;;;;;;;;:::o;52437:256::-;52534:7;52570:23;52587:5;52570:16;:23::i;:::-;52562:5;:31;52554:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;52659:12;:19;52672:5;52659:19;;;;;;;;;;;;;;;:26;52679:5;52659:26;;;;;;;;;;;;52652:33;;52437:256;;;;:::o;59445:38::-;;;;:::o;59151:81::-;;;;;;;;;;;;;:::o;61677:232::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61787:1:::1;61766:11;:18;:22;61758:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;61812:9;61808:93;61828:11;:18;61826:1;:20;61808:93;;;61896:5;61859:18;:34;61878:11;61890:1;61878:14;;;;;;;;:::i;:::-;;;;;;;;61859:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;61847:3;;;;;:::i;:::-;;;;61808:93;;;;61677:232:::0;:::o;63924:196::-;58528:17;;;;;;;;;;;58514:31;;:10;:31;;;:68;;;;58563:19;;;;;;;;;;;58549:33;;:10;:33;;;58514:68;:104;;;;58600:18;;;;;;;;;;;58586:32;;:10;:32;;;58514:104;:142;;;;58636:20;;;;;;;;;;;58622:34;;:10;:34;;;58514:142;:177;;;;58674:17;;;;;;;;;;;58660:31;;:10;:31;;;58514:177;58506:227;;;;;;;;;;;;:::i;:::-;;;;;;;;;63967:14:::1;63984:7;:19;63992:10;63984:19;;;;;;;;;;;;;;;;63967:36;;64027:1;64018:6;:10;64010:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;64056:10;64048:28;;:36;64077:6;64048:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;64113:1;64091:7;:19;64099:10;64091:19;;;;;;;;;;;;;;;:23;;;;63960:160;63924:196::o:0;62426:59::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62469:10:::1;:8;:10::i;:::-;62426:59::o:0;39663:185::-;39801:39;39818:4;39824:2;39828:7;39801:39;;;;;;;;;;;;:16;:39::i;:::-;39663:185;;;:::o;62489:151::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62562:9:::1;62557:78;62581:6;62577:1;:10;62557:78;;;62603:24;62616:10;62603:12;:24::i;:::-;62589:3;;;;;:::i;:::-;;;;62557:78;;;;62489:151:::0;:::o;59237:78::-;;;;;;;;;;;;;:::o;52959:233::-;53034:7;53070:30;:28;:30::i;:::-;53062:5;:38;53054:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;53167:10;53178:5;53167:17;;;;;;;;:::i;:::-;;;;;;;;;;53160:24;;52959:233;;;:::o;62648:96::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62728:10:::1;62718:7;:20;;;;;;;;;;;;:::i;:::-;;62648:96:::0;:::o;12641:86::-;12688:4;12712:7;;;;;;;;;;;12705:14;;12641:86;:::o;36638:239::-;36710:7;36730:13;36746:7;:16;36754:7;36746:16;;;;;;;;;;;;;;;;;;;;;36730:32;;36798:1;36781:19;;:5;:19;;;;36773:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36864:5;36857:12;;;36638:239;;;:::o;59530:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36368:208::-;36440:7;36485:1;36468:19;;:5;:19;;;;36460:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36552:9;:16;36562:5;36552:16;;;;;;;;;;;;;;;;36545:23;;36368:208;;;:::o;15540:103::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15605:30:::1;15632:1;15605:18;:30::i;:::-;15540:103::o:0;62365:55::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62406:8:::1;:6;:8::i;:::-;62365:55::o:0;14889:87::-;14935:7;14962:6;;;;;;;;;;;14955:13;;14889:87;:::o;61444:225::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61548:1:::1;61527:11;:18;:22;61519:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;61573:9;61569:92;61589:11;:18;61587:1;:20;61569:92;;;61657:4;61620:18;:34;61639:11;61651:1;61639:14;;;;;;;;:::i;:::-;;;;;;;;61620:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;61608:3;;;;;:::i;:::-;;;;61569:92;;;;61444:225:::0;:::o;37113:104::-;37169:13;37202:7;37195:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37113:104;:::o;59636:31::-;;;;:::o;60840:240::-;12967:8;:6;:8::i;:::-;12966:9;12958:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;60935:6:::1;60927:5;;:14;;;;:::i;:::-;60914:9;:27;60906:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;60968:20;60978:9;60968;:20::i;:::-;61002:9;60997:78;61021:6;61017:1;:10;60997:78;;;61043:24;61056:10;61043:12;:24::i;:::-;61029:3;;;;;:::i;:::-;;;;60997:78;;;;60840:240:::0;:::o;38796:155::-;38891:52;38910:12;:10;:12::i;:::-;38924:8;38934;38891:18;:52::i;:::-;38796:155;;:::o;59362:37::-;;;;:::o;58982:80::-;;;;;;;;;;;;;:::o;39919:328::-;40094:41;40113:12;:10;:12::i;:::-;40127:7;40094:18;:41::i;:::-;40086:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;40200:39;40214:4;40220:2;40224:7;40233:5;40200:13;:39::i;:::-;39919:328;;;;:::o;59768:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;59556:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;63255:492::-;63382:13;63433:16;63441:7;63433;:16::i;:::-;63413:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;63539:28;63570:10;:8;:10::i;:::-;63539:41;;63629:1;63604:14;63598:28;:32;:141;;;;;;;;;;;;;;;;;63670:14;63686:18;:7;:16;:18::i;:::-;63706:13;63653:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63598:141;63591:148;;;63255:492;;;:::o;59322:35::-;;;;:::o;59488:::-;;;;:::o;59600:31::-;;;;:::o;39022:164::-;39119:4;39143:18;:25;39162:5;39143:25;;;;;;;;;;;;;;;:35;39169:8;39143:35;;;;;;;;;;;;;;;;;;;;;;;;;39136:42;;39022:164;;;;:::o;59719:42::-;;;;;;;;;;;;;;;;;:::o;15798:201::-;15120:12;:10;:12::i;:::-;15109:23;;:7;:5;:7::i;:::-;:23;;;15101:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15907:1:::1;15887:22;;:8;:22;;;;15879:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15963:28;15982:8;15963:18;:28::i;:::-;15798:201:::0;:::o;58899:78::-;;;;;;;;;;;;;:::o;61915:444::-;61973:16;61998:18;62019:17;62029:6;62019:9;:17::i;:::-;61998:38;;62061:1;62047:10;:15;62043:309;;;62094:1;62080:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62073:23;;;;;62043:309;62119:23;62159:10;62145:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62119:51;;62179:13;62203:116;62227:10;62219:5;:18;62203:116;;;62275:34;62295:6;62303:5;62275:19;:34::i;:::-;62259:6;62266:5;62259:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;62239:7;;;;;:::i;:::-;;;;62203:116;;;62336:6;62329:13;;;;;61915:444;;;;:::o;59672:40::-;;;;:::o;52129:224::-;52231:4;52270:35;52255:50;;;:11;:50;;;;:90;;;;52309:36;52333:11;52309:23;:36::i;:::-;52255:90;52248:97;;52129:224;;;:::o;41757:127::-;41822:4;41874:1;41846:30;;:7;:16;41854:7;41846:16;;;;;;;;;;;;;;;;;;;;;:30;;;;41839:37;;41757:127;;;:::o;11295:98::-;11348:7;11375:10;11368:17;;11295:98;:::o;45903:174::-;46005:2;45978:15;:24;45994:7;45978:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46061:7;46057:2;46023:46;;46032:23;46047:7;46032:14;:23::i;:::-;46023:46;;;;;;;;;;;;45903:174;;:::o;60077:756::-;60134:27;60164:40;60198:5;60164:29;60179:13;;60164:10;:14;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;60134:70;;60211:29;60243:42;60279:5;60243:31;60258:15;;60243:10;:14;;:31;;;;:::i;:::-;:35;;:42;;;;:::i;:::-;60211:74;;60292:28;60323:41;60358:5;60323:30;60338:14;;60323:10;:14;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;60292:72;;60371:30;60404:43;60441:5;60404:32;60419:16;;60404:10;:14;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;60371:76;;60454:27;60484:40;60518:5;60484:29;60499:13;;60484:10;:14;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;60454:70;;60572:19;60542:7;:26;60550:17;;;;;;;;;;;60542:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;60630:21;60598:7;:28;60606:19;;;;;;;;;;;60598:28;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;60689:20;60658:7;:27;60666:18;;;;;;;;;;;60658:27;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;60749:22;60716:7;:29;60724:20;;;;;;;;;;;60716:29;;;;;;;;;;;;;;;;:55;;;;;;;:::i;:::-;;;;;;;;60808:19;60778:7;:26;60786:17;;;;;;;;;;;60778:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;60125:708;;;;;60077:756;:::o;62750:189::-;62824:9;;62808:13;:11;:13::i;:::-;:25;62800:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;62871:34;62881:2;62885:19;:9;:17;:19::i;:::-;62871:9;:34::i;:::-;62912:21;:9;:19;:21::i;:::-;62750:189;:::o;42051:348::-;42144:4;42169:16;42177:7;42169;:16::i;:::-;42161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42245:13;42261:23;42276:7;42261:14;:23::i;:::-;42245:39;;42314:5;42303:16;;:7;:16;;;:51;;;;42347:7;42323:31;;:20;42335:7;42323:11;:20::i;:::-;:31;;;42303:51;:87;;;;42358:32;42375:5;42382:7;42358:16;:32::i;:::-;42303:87;42295:96;;;42051:348;;;;:::o;45160:625::-;45319:4;45292:31;;:23;45307:7;45292:14;:23::i;:::-;:31;;;45284:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;45398:1;45384:16;;:2;:16;;;;45376:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45454:39;45475:4;45481:2;45485:7;45454:20;:39::i;:::-;45558:29;45575:1;45579:7;45558:8;:29::i;:::-;45619:1;45600:9;:15;45610:4;45600:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;45648:1;45631:9;:13;45641:2;45631:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;45679:2;45660:7;:16;45668:7;45660:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;45718:7;45714:2;45699:27;;45708:4;45699:27;;;;;;;;;;;;45739:38;45759:4;45765:2;45769:7;45739:19;:38::i;:::-;45160:625;;;:::o;13700:120::-;13244:8;:6;:8::i;:::-;13236:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13769:5:::1;13759:7;;:15;;;;;;;;;;;;;;;;;;13790:22;13799:12;:10;:12::i;:::-;13790:22;;;;;;:::i;:::-;;;;;;;;13700:120::o:0;16159:191::-;16233:16;16252:6;;;;;;;;;;;16233:25;;16278:8;16269:6;;:17;;;;;;;;;;;;;;;;;;16333:8;16302:40;;16323:8;16302:40;;;;;;;;;;;;16222:128;16159:191;:::o;13441:118::-;12967:8;:6;:8::i;:::-;12966:9;12958:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13511:4:::1;13501:7;;:14;;;;;;;;;;;;;;;;;;13531:20;13538:12;:10;:12::i;:::-;13531:20;;;;;;:::i;:::-;;;;;;;;13441:118::o:0;46219:315::-;46374:8;46365:17;;:5;:17;;;;46357:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46461:8;46423:18;:25;46442:5;46423:25;;;;;;;;;;;;;;;:35;46449:8;46423:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;46507:8;46485:41;;46500:5;46485:41;;;46517:8;46485:41;;;;;;:::i;:::-;;;;;;;;46219:315;;;:::o;41129:::-;41286:28;41296:4;41302:2;41306:7;41286:9;:28::i;:::-;41333:48;41356:4;41362:2;41366:7;41375:5;41333:22;:48::i;:::-;41325:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;41129:315;;;;:::o;59977:94::-;60029:13;60058:7;60051:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59977:94;:::o;8857:723::-;8913:13;9143:1;9134:5;:10;9130:53;;;9161:10;;;;;;;;;;;;;;;;;;;;;9130:53;9193:12;9208:5;9193:20;;9224:14;9249:78;9264:1;9256:4;:9;9249:78;;9282:8;;;;;:::i;:::-;;;;9313:2;9305:10;;;;;:::i;:::-;;;9249:78;;;9337:19;9369:6;9359:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9337:39;;9387:154;9403:1;9394:5;:10;9387:154;;9431:1;9421:11;;;;;:::i;:::-;;;9498:2;9490:5;:10;;;;:::i;:::-;9477:2;:24;;;;:::i;:::-;9464:39;;9447:6;9454;9447:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9527:2;9518:11;;;;;:::i;:::-;;;9387:154;;;9565:6;9551:21;;;;;8857:723;;;;:::o;35999:305::-;36101:4;36153:25;36138:40;;;:11;:40;;;;:105;;;;36210:33;36195:48;;;:11;:48;;;;36138:105;:158;;;;36260:36;36284:11;36260:23;:36::i;:::-;36138:158;36118:178;;35999:305;;;:::o;3600:98::-;3658:7;3689:1;3685;:5;;;;:::i;:::-;3678:12;;3600:98;;;;:::o;3999:::-;4057:7;4088:1;4084;:5;;;;:::i;:::-;4077:12;;3999:98;;;;:::o;7899:114::-;7964:7;7991;:14;;;7984:21;;7899:114;;;:::o;42741:110::-;42817:26;42827:2;42831:7;42817:26;;;;;;;;;;;;:9;:26::i;:::-;42741:110;;:::o;8021:127::-;8128:1;8110:7;:14;;;:19;;;;;;;;;;;8021:127;:::o;62945:189::-;12967:8;:6;:8::i;:::-;12966:9;12958:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;63083:45:::1;63110:4;63116:2;63120:7;63083:26;:45::i;:::-;62945:189:::0;;;:::o;48981:125::-;;;;:::o;47099:799::-;47254:4;47275:15;:2;:13;;;:15::i;:::-;47271:620;;;47327:2;47311:36;;;47348:12;:10;:12::i;:::-;47362:4;47368:7;47377:5;47311:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47307:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47570:1;47553:6;:13;:18;47549:272;;;47596:60;;;;;;;;;;:::i;:::-;;;;;;;;47549:272;47771:6;47765:13;47756:6;47752:2;47748:15;47741:38;47307:529;47444:41;;;47434:51;;;:6;:51;;;;47427:58;;;;;47271:620;47875:4;47868:11;;47099:799;;;;;;;:::o;27673:157::-;27758:4;27797:25;27782:40;;;:11;:40;;;;27775:47;;27673:157;;;:::o;43078:321::-;43208:18;43214:2;43218:7;43208:5;:18::i;:::-;43259:54;43290:1;43294:2;43298:7;43307:5;43259:22;:54::i;:::-;43237:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;43078:321;;;:::o;53805:589::-;53949:45;53976:4;53982:2;53986:7;53949:26;:45::i;:::-;54027:1;54011:18;;:4;:18;;;54007:187;;;54046:40;54078:7;54046:31;:40::i;:::-;54007:187;;;54116:2;54108:10;;:4;:10;;;54104:90;;54135:47;54168:4;54174:7;54135:32;:47::i;:::-;54104:90;54007:187;54222:1;54208:16;;:2;:16;;;54204:183;;;54241:45;54278:7;54241:36;:45::i;:::-;54204:183;;;54314:4;54308:10;;:2;:10;;;54304:83;;54335:40;54363:2;54367:7;54335:27;:40::i;:::-;54304:83;54204:183;53805:589;;;:::o;17590:326::-;17650:4;17907:1;17885:7;:19;;;:23;17878:30;;17590:326;;;:::o;43735:439::-;43829:1;43815:16;;:2;:16;;;;43807:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43888:16;43896:7;43888;:16::i;:::-;43887:17;43879:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43950:45;43979:1;43983:2;43987:7;43950:20;:45::i;:::-;44025:1;44008:9;:13;44018:2;44008:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44056:2;44037:7;:16;44045:7;44037:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44101:7;44097:2;44076:33;;44093:1;44076:33;;;;;;;;;;;;44122:44;44150:1;44154:2;44158:7;44122:19;:44::i;:::-;43735:439;;:::o;48470:126::-;;;;:::o;55117:164::-;55221:10;:17;;;;55194:15;:24;55210:7;55194:24;;;;;;;;;;;:44;;;;55249:10;55265:7;55249:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55117:164;:::o;55908:988::-;56174:22;56224:1;56199:22;56216:4;56199:16;:22::i;:::-;:26;;;;:::i;:::-;56174:51;;56236:18;56257:17;:26;56275:7;56257:26;;;;;;;;;;;;56236:47;;56404:14;56390:10;:28;56386:328;;56435:19;56457:12;:18;56470:4;56457:18;;;;;;;;;;;;;;;:34;56476:14;56457:34;;;;;;;;;;;;56435:56;;56541:11;56508:12;:18;56521:4;56508:18;;;;;;;;;;;;;;;:30;56527:10;56508:30;;;;;;;;;;;:44;;;;56658:10;56625:17;:30;56643:11;56625:30;;;;;;;;;;;:43;;;;56420:294;56386:328;56810:17;:26;56828:7;56810:26;;;;;;;;;;;56803:33;;;56854:12;:18;56867:4;56854:18;;;;;;;;;;;;;;;:34;56873:14;56854:34;;;;;;;;;;;56847:41;;;55989:907;;55908:988;;:::o;57191:1079::-;57444:22;57489:1;57469:10;:17;;;;:21;;;;:::i;:::-;57444:46;;57501:18;57522:15;:24;57538:7;57522:24;;;;;;;;;;;;57501:45;;57873:19;57895:10;57906:14;57895:26;;;;;;;;:::i;:::-;;;;;;;;;;57873:48;;57959:11;57934:10;57945;57934:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;58070:10;58039:15;:28;58055:11;58039:28;;;;;;;;;;;:41;;;;58211:15;:24;58227:7;58211:24;;;;;;;;;;;58204:31;;;58246:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;57262:1008;;;57191:1079;:::o;54695:221::-;54780:14;54797:20;54814:2;54797:16;:20::i;:::-;54780:37;;54855:7;54828:12;:16;54841:2;54828:16;;;;;;;;;;;;;;;:24;54845:6;54828:24;;;;;;;;;;;:34;;;;54902:6;54873:17;:26;54891:7;54873:26;;;;;;;;;;;:35;;;;54769:147;54695:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:135::-;3459:5;3497:6;3484:20;3475:29;;3513:31;3538:5;3513:31;:::i;:::-;3415:135;;;;:::o;3556:329::-;3615:6;3664:2;3652:9;3643:7;3639:23;3635:32;3632:119;;;3670:79;;:::i;:::-;3632:119;3790:1;3815:53;3860:7;3851:6;3840:9;3836:22;3815:53;:::i;:::-;3805:63;;3761:117;3556:329;;;;:::o;3891:474::-;3959:6;3967;4016:2;4004:9;3995:7;3991:23;3987:32;3984:119;;;4022:79;;:::i;:::-;3984:119;4142:1;4167:53;4212:7;4203:6;4192:9;4188:22;4167:53;:::i;:::-;4157:63;;4113:117;4269:2;4295:53;4340:7;4331:6;4320:9;4316:22;4295:53;:::i;:::-;4285:63;;4240:118;3891:474;;;;;:::o;4371:619::-;4448:6;4456;4464;4513:2;4501:9;4492:7;4488:23;4484:32;4481:119;;;4519:79;;:::i;:::-;4481:119;4639:1;4664:53;4709:7;4700:6;4689:9;4685:22;4664:53;:::i;:::-;4654:63;;4610:117;4766:2;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4737:118;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4371:619;;;;;:::o;4996:943::-;5091:6;5099;5107;5115;5164:3;5152:9;5143:7;5139:23;5135:33;5132:120;;;5171:79;;:::i;:::-;5132:120;5291:1;5316:53;5361:7;5352:6;5341:9;5337:22;5316:53;:::i;:::-;5306:63;;5262:117;5418:2;5444:53;5489:7;5480:6;5469:9;5465:22;5444:53;:::i;:::-;5434:63;;5389:118;5546:2;5572:53;5617:7;5608:6;5597:9;5593:22;5572:53;:::i;:::-;5562:63;;5517:118;5702:2;5691:9;5687:18;5674:32;5733:18;5725:6;5722:30;5719:117;;;5755:79;;:::i;:::-;5719:117;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5645:287;4996:943;;;;;;;:::o;5945:468::-;6010:6;6018;6067:2;6055:9;6046:7;6042:23;6038:32;6035:119;;;6073:79;;:::i;:::-;6035:119;6193:1;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6164:117;6320:2;6346:50;6388:7;6379:6;6368:9;6364:22;6346:50;:::i;:::-;6336:60;;6291:115;5945:468;;;;;:::o;6419:474::-;6487:6;6495;6544:2;6532:9;6523:7;6519:23;6515:32;6512:119;;;6550:79;;:::i;:::-;6512:119;6670:1;6695:53;6740:7;6731:6;6720:9;6716:22;6695:53;:::i;:::-;6685:63;;6641:117;6797:2;6823:53;6868:7;6859:6;6848:9;6844:22;6823:53;:::i;:::-;6813:63;;6768:118;6419:474;;;;;:::o;6899:539::-;6983:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:119;;;7038:79;;:::i;:::-;7000:119;7186:1;7175:9;7171:17;7158:31;7216:18;7208:6;7205:30;7202:117;;;7238:79;;:::i;:::-;7202:117;7343:78;7413:7;7404:6;7393:9;7389:22;7343:78;:::i;:::-;7333:88;;7129:302;6899:539;;;;:::o;7444:327::-;7502:6;7551:2;7539:9;7530:7;7526:23;7522:32;7519:119;;;7557:79;;:::i;:::-;7519:119;7677:1;7702:52;7746:7;7737:6;7726:9;7722:22;7702:52;:::i;:::-;7692:62;;7648:116;7444:327;;;;:::o;7777:349::-;7846:6;7895:2;7883:9;7874:7;7870:23;7866:32;7863:119;;;7901:79;;:::i;:::-;7863:119;8021:1;8046:63;8101:7;8092:6;8081:9;8077:22;8046:63;:::i;:::-;8036:73;;7992:127;7777:349;;;;:::o;8132:509::-;8201:6;8250:2;8238:9;8229:7;8225:23;8221:32;8218:119;;;8256:79;;:::i;:::-;8218:119;8404:1;8393:9;8389:17;8376:31;8434:18;8426:6;8423:30;8420:117;;;8456:79;;:::i;:::-;8420:117;8561:63;8616:7;8607:6;8596:9;8592:22;8561:63;:::i;:::-;8551:73;;8347:287;8132:509;;;;:::o;8647:329::-;8706:6;8755:2;8743:9;8734:7;8730:23;8726:32;8723:119;;;8761:79;;:::i;:::-;8723:119;8881:1;8906:53;8951:7;8942:6;8931:9;8927:22;8906:53;:::i;:::-;8896:63;;8852:117;8647:329;;;;:::o;8982:325::-;9039:6;9088:2;9076:9;9067:7;9063:23;9059:32;9056:119;;;9094:79;;:::i;:::-;9056:119;9214:1;9239:51;9282:7;9273:6;9262:9;9258:22;9239:51;:::i;:::-;9229:61;;9185:115;8982:325;;;;:::o;9313:179::-;9382:10;9403:46;9445:3;9437:6;9403:46;:::i;:::-;9481:4;9476:3;9472:14;9458:28;;9313:179;;;;:::o;9498:118::-;9585:24;9603:5;9585:24;:::i;:::-;9580:3;9573:37;9498:118;;:::o;9652:732::-;9771:3;9800:54;9848:5;9800:54;:::i;:::-;9870:86;9949:6;9944:3;9870:86;:::i;:::-;9863:93;;9980:56;10030:5;9980:56;:::i;:::-;10059:7;10090:1;10075:284;10100:6;10097:1;10094:13;10075:284;;;10176:6;10170:13;10203:63;10262:3;10247:13;10203:63;:::i;:::-;10196:70;;10289:60;10342:6;10289:60;:::i;:::-;10279:70;;10135:224;10122:1;10119;10115:9;10110:14;;10075:284;;;10079:14;10375:3;10368:10;;9776:608;;;9652:732;;;;:::o;10390:109::-;10471:21;10486:5;10471:21;:::i;:::-;10466:3;10459:34;10390:109;;:::o;10505:360::-;10591:3;10619:38;10651:5;10619:38;:::i;:::-;10673:70;10736:6;10731:3;10673:70;:::i;:::-;10666:77;;10752:52;10797:6;10792:3;10785:4;10778:5;10774:16;10752:52;:::i;:::-;10829:29;10851:6;10829:29;:::i;:::-;10824:3;10820:39;10813:46;;10595:270;10505:360;;;;:::o;10871:364::-;10959:3;10987:39;11020:5;10987:39;:::i;:::-;11042:71;11106:6;11101:3;11042:71;:::i;:::-;11035:78;;11122:52;11167:6;11162:3;11155:4;11148:5;11144:16;11122:52;:::i;:::-;11199:29;11221:6;11199:29;:::i;:::-;11194:3;11190:39;11183:46;;10963:272;10871:364;;;;:::o;11241:377::-;11347:3;11375:39;11408:5;11375:39;:::i;:::-;11430:89;11512:6;11507:3;11430:89;:::i;:::-;11423:96;;11528:52;11573:6;11568:3;11561:4;11554:5;11550:16;11528:52;:::i;:::-;11605:6;11600:3;11596:16;11589:23;;11351:267;11241:377;;;;:::o;11648:845::-;11751:3;11788:5;11782:12;11817:36;11843:9;11817:36;:::i;:::-;11869:89;11951:6;11946:3;11869:89;:::i;:::-;11862:96;;11989:1;11978:9;11974:17;12005:1;12000:137;;;;12151:1;12146:341;;;;11967:520;;12000:137;12084:4;12080:9;12069;12065:25;12060:3;12053:38;12120:6;12115:3;12111:16;12104:23;;12000:137;;12146:341;12213:38;12245:5;12213:38;:::i;:::-;12273:1;12287:154;12301:6;12298:1;12295:13;12287:154;;;12375:7;12369:14;12365:1;12360:3;12356:11;12349:35;12425:1;12416:7;12412:15;12401:26;;12323:4;12320:1;12316:12;12311:17;;12287:154;;;12470:6;12465:3;12461:16;12454:23;;12153:334;;11967:520;;11755:738;;11648:845;;;;:::o;12499:366::-;12641:3;12662:67;12726:2;12721:3;12662:67;:::i;:::-;12655:74;;12738:93;12827:3;12738:93;:::i;:::-;12856:2;12851:3;12847:12;12840:19;;12499:366;;;:::o;12871:::-;13013:3;13034:67;13098:2;13093:3;13034:67;:::i;:::-;13027:74;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;12871:366;;;:::o;13243:365::-;13385:3;13406:66;13470:1;13465:3;13406:66;:::i;:::-;13399:73;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13243:365;;;:::o;13614:366::-;13756:3;13777:67;13841:2;13836:3;13777:67;:::i;:::-;13770:74;;13853:93;13942:3;13853:93;:::i;:::-;13971:2;13966:3;13962:12;13955:19;;13614:366;;;:::o;13986:::-;14128:3;14149:67;14213:2;14208:3;14149:67;:::i;:::-;14142:74;;14225:93;14314:3;14225:93;:::i;:::-;14343:2;14338:3;14334:12;14327:19;;13986:366;;;:::o;14358:::-;14500:3;14521:67;14585:2;14580:3;14521:67;:::i;:::-;14514:74;;14597:93;14686:3;14597:93;:::i;:::-;14715:2;14710:3;14706:12;14699:19;;14358:366;;;:::o;14730:::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:::-;15244:3;15265:67;15329:2;15324:3;15265:67;:::i;:::-;15258:74;;15341:93;15430:3;15341:93;:::i;:::-;15459:2;15454:3;15450:12;15443:19;;15102:366;;;:::o;15474:::-;15616:3;15637:67;15701:2;15696:3;15637:67;:::i;:::-;15630:74;;15713:93;15802:3;15713:93;:::i;:::-;15831:2;15826:3;15822:12;15815:19;;15474:366;;;:::o;15846:::-;15988:3;16009:67;16073:2;16068:3;16009:67;:::i;:::-;16002:74;;16085:93;16174:3;16085:93;:::i;:::-;16203:2;16198:3;16194:12;16187:19;;15846:366;;;:::o;16218:::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:::-;16732:3;16753:67;16817:2;16812:3;16753:67;:::i;:::-;16746:74;;16829:93;16918:3;16829:93;:::i;:::-;16947:2;16942:3;16938:12;16931:19;;16590:366;;;:::o;16962:::-;17104:3;17125:67;17189:2;17184:3;17125:67;:::i;:::-;17118:74;;17201:93;17290:3;17201:93;:::i;:::-;17319:2;17314:3;17310:12;17303:19;;16962:366;;;:::o;17334:::-;17476:3;17497:67;17561:2;17556:3;17497:67;:::i;:::-;17490:74;;17573:93;17662:3;17573:93;:::i;:::-;17691:2;17686:3;17682:12;17675:19;;17334:366;;;:::o;17706:::-;17848:3;17869:67;17933:2;17928:3;17869:67;:::i;:::-;17862:74;;17945:93;18034:3;17945:93;:::i;:::-;18063:2;18058:3;18054:12;18047:19;;17706:366;;;:::o;18078:::-;18220:3;18241:67;18305:2;18300:3;18241:67;:::i;:::-;18234:74;;18317:93;18406:3;18317:93;:::i;:::-;18435:2;18430:3;18426:12;18419:19;;18078:366;;;:::o;18450:::-;18592:3;18613:67;18677:2;18672:3;18613:67;:::i;:::-;18606:74;;18689:93;18778:3;18689:93;:::i;:::-;18807:2;18802:3;18798:12;18791:19;;18450:366;;;:::o;18822:::-;18964:3;18985:67;19049:2;19044:3;18985:67;:::i;:::-;18978:74;;19061:93;19150:3;19061:93;:::i;:::-;19179:2;19174:3;19170:12;19163:19;;18822:366;;;:::o;19194:::-;19336:3;19357:67;19421:2;19416:3;19357:67;:::i;:::-;19350:74;;19433:93;19522:3;19433:93;:::i;:::-;19551:2;19546:3;19542:12;19535:19;;19194:366;;;:::o;19566:::-;19708:3;19729:67;19793:2;19788:3;19729:67;:::i;:::-;19722:74;;19805:93;19894:3;19805:93;:::i;:::-;19923:2;19918:3;19914:12;19907:19;;19566:366;;;:::o;19938:::-;20080:3;20101:67;20165:2;20160:3;20101:67;:::i;:::-;20094:74;;20177:93;20266:3;20177:93;:::i;:::-;20295:2;20290:3;20286:12;20279:19;;19938:366;;;:::o;20310:::-;20452:3;20473:67;20537:2;20532:3;20473:67;:::i;:::-;20466:74;;20549:93;20638:3;20549:93;:::i;:::-;20667:2;20662:3;20658:12;20651:19;;20310:366;;;:::o;20682:::-;20824:3;20845:67;20909:2;20904:3;20845:67;:::i;:::-;20838:74;;20921:93;21010:3;20921:93;:::i;:::-;21039:2;21034:3;21030:12;21023:19;;20682:366;;;:::o;21054:::-;21196:3;21217:67;21281:2;21276:3;21217:67;:::i;:::-;21210:74;;21293:93;21382:3;21293:93;:::i;:::-;21411:2;21406:3;21402:12;21395:19;;21054:366;;;:::o;21426:::-;21568:3;21589:67;21653:2;21648:3;21589:67;:::i;:::-;21582:74;;21665:93;21754:3;21665:93;:::i;:::-;21783:2;21778:3;21774:12;21767:19;;21426:366;;;:::o;21798:365::-;21940:3;21961:66;22025:1;22020:3;21961:66;:::i;:::-;21954:73;;22036:93;22125:3;22036:93;:::i;:::-;22154:2;22149:3;22145:12;22138:19;;21798:365;;;:::o;22169:108::-;22246:24;22264:5;22246:24;:::i;:::-;22241:3;22234:37;22169:108;;:::o;22283:118::-;22370:24;22388:5;22370:24;:::i;:::-;22365:3;22358:37;22283:118;;:::o;22407:589::-;22632:3;22654:95;22745:3;22736:6;22654:95;:::i;:::-;22647:102;;22766:95;22857:3;22848:6;22766:95;:::i;:::-;22759:102;;22878:92;22966:3;22957:6;22878:92;:::i;:::-;22871:99;;22987:3;22980:10;;22407:589;;;;;;:::o;23002:222::-;23095:4;23133:2;23122:9;23118:18;23110:26;;23146:71;23214:1;23203:9;23199:17;23190:6;23146:71;:::i;:::-;23002:222;;;;:::o;23230:640::-;23425:4;23463:3;23452:9;23448:19;23440:27;;23477:71;23545:1;23534:9;23530:17;23521:6;23477:71;:::i;:::-;23558:72;23626:2;23615:9;23611:18;23602:6;23558:72;:::i;:::-;23640;23708:2;23697:9;23693:18;23684:6;23640:72;:::i;:::-;23759:9;23753:4;23749:20;23744:2;23733:9;23729:18;23722:48;23787:76;23858:4;23849:6;23787:76;:::i;:::-;23779:84;;23230:640;;;;;;;:::o;23876:373::-;24019:4;24057:2;24046:9;24042:18;24034:26;;24106:9;24100:4;24096:20;24092:1;24081:9;24077:17;24070:47;24134:108;24237:4;24228:6;24134:108;:::i;:::-;24126:116;;23876:373;;;;:::o;24255:210::-;24342:4;24380:2;24369:9;24365:18;24357:26;;24393:65;24455:1;24444:9;24440:17;24431:6;24393:65;:::i;:::-;24255:210;;;;:::o;24471:313::-;24584:4;24622:2;24611:9;24607:18;24599:26;;24671:9;24665:4;24661:20;24657:1;24646:9;24642:17;24635:47;24699:78;24772:4;24763:6;24699:78;:::i;:::-;24691:86;;24471:313;;;;:::o;24790:419::-;24956:4;24994:2;24983:9;24979:18;24971:26;;25043:9;25037:4;25033:20;25029:1;25018:9;25014:17;25007:47;25071:131;25197:4;25071:131;:::i;:::-;25063:139;;24790:419;;;:::o;25215:::-;25381:4;25419:2;25408:9;25404:18;25396:26;;25468:9;25462:4;25458:20;25454:1;25443:9;25439:17;25432:47;25496:131;25622:4;25496:131;:::i;:::-;25488:139;;25215:419;;;:::o;25640:::-;25806:4;25844:2;25833:9;25829:18;25821:26;;25893:9;25887:4;25883:20;25879:1;25868:9;25864:17;25857:47;25921:131;26047:4;25921:131;:::i;:::-;25913:139;;25640:419;;;:::o;26065:::-;26231:4;26269:2;26258:9;26254:18;26246:26;;26318:9;26312:4;26308:20;26304:1;26293:9;26289:17;26282:47;26346:131;26472:4;26346:131;:::i;:::-;26338:139;;26065:419;;;:::o;26490:::-;26656:4;26694:2;26683:9;26679:18;26671:26;;26743:9;26737:4;26733:20;26729:1;26718:9;26714:17;26707:47;26771:131;26897:4;26771:131;:::i;:::-;26763:139;;26490:419;;;:::o;26915:::-;27081:4;27119:2;27108:9;27104:18;27096:26;;27168:9;27162:4;27158:20;27154:1;27143:9;27139:17;27132:47;27196:131;27322:4;27196:131;:::i;:::-;27188:139;;26915:419;;;:::o;27340:::-;27506:4;27544:2;27533:9;27529:18;27521:26;;27593:9;27587:4;27583:20;27579:1;27568:9;27564:17;27557:47;27621:131;27747:4;27621:131;:::i;:::-;27613:139;;27340:419;;;:::o;27765:::-;27931:4;27969:2;27958:9;27954:18;27946:26;;28018:9;28012:4;28008:20;28004:1;27993:9;27989:17;27982:47;28046:131;28172:4;28046:131;:::i;:::-;28038:139;;27765:419;;;:::o;28190:::-;28356:4;28394:2;28383:9;28379:18;28371:26;;28443:9;28437:4;28433:20;28429:1;28418:9;28414:17;28407:47;28471:131;28597:4;28471:131;:::i;:::-;28463:139;;28190:419;;;:::o;28615:::-;28781:4;28819:2;28808:9;28804:18;28796:26;;28868:9;28862:4;28858:20;28854:1;28843:9;28839:17;28832:47;28896:131;29022:4;28896:131;:::i;:::-;28888:139;;28615:419;;;:::o;29040:::-;29206:4;29244:2;29233:9;29229:18;29221:26;;29293:9;29287:4;29283:20;29279:1;29268:9;29264:17;29257:47;29321:131;29447:4;29321:131;:::i;:::-;29313:139;;29040:419;;;:::o;29465:::-;29631:4;29669:2;29658:9;29654:18;29646:26;;29718:9;29712:4;29708:20;29704:1;29693:9;29689:17;29682:47;29746:131;29872:4;29746:131;:::i;:::-;29738:139;;29465:419;;;:::o;29890:::-;30056:4;30094:2;30083:9;30079:18;30071:26;;30143:9;30137:4;30133:20;30129:1;30118:9;30114:17;30107:47;30171:131;30297:4;30171:131;:::i;:::-;30163:139;;29890:419;;;:::o;30315:::-;30481:4;30519:2;30508:9;30504:18;30496:26;;30568:9;30562:4;30558:20;30554:1;30543:9;30539:17;30532:47;30596:131;30722:4;30596:131;:::i;:::-;30588:139;;30315:419;;;:::o;30740:::-;30906:4;30944:2;30933:9;30929:18;30921:26;;30993:9;30987:4;30983:20;30979:1;30968:9;30964:17;30957:47;31021:131;31147:4;31021:131;:::i;:::-;31013:139;;30740:419;;;:::o;31165:::-;31331:4;31369:2;31358:9;31354:18;31346:26;;31418:9;31412:4;31408:20;31404:1;31393:9;31389:17;31382:47;31446:131;31572:4;31446:131;:::i;:::-;31438:139;;31165:419;;;:::o;31590:::-;31756:4;31794:2;31783:9;31779:18;31771:26;;31843:9;31837:4;31833:20;31829:1;31818:9;31814:17;31807:47;31871:131;31997:4;31871:131;:::i;:::-;31863:139;;31590:419;;;:::o;32015:::-;32181:4;32219:2;32208:9;32204:18;32196:26;;32268:9;32262:4;32258:20;32254:1;32243:9;32239:17;32232:47;32296:131;32422:4;32296:131;:::i;:::-;32288:139;;32015:419;;;:::o;32440:::-;32606:4;32644:2;32633:9;32629:18;32621:26;;32693:9;32687:4;32683:20;32679:1;32668:9;32664:17;32657:47;32721:131;32847:4;32721:131;:::i;:::-;32713:139;;32440:419;;;:::o;32865:::-;33031:4;33069:2;33058:9;33054:18;33046:26;;33118:9;33112:4;33108:20;33104:1;33093:9;33089:17;33082:47;33146:131;33272:4;33146:131;:::i;:::-;33138:139;;32865:419;;;:::o;33290:::-;33456:4;33494:2;33483:9;33479:18;33471:26;;33543:9;33537:4;33533:20;33529:1;33518:9;33514:17;33507:47;33571:131;33697:4;33571:131;:::i;:::-;33563:139;;33290:419;;;:::o;33715:::-;33881:4;33919:2;33908:9;33904:18;33896:26;;33968:9;33962:4;33958:20;33954:1;33943:9;33939:17;33932:47;33996:131;34122:4;33996:131;:::i;:::-;33988:139;;33715:419;;;:::o;34140:::-;34306:4;34344:2;34333:9;34329:18;34321:26;;34393:9;34387:4;34383:20;34379:1;34368:9;34364:17;34357:47;34421:131;34547:4;34421:131;:::i;:::-;34413:139;;34140:419;;;:::o;34565:::-;34731:4;34769:2;34758:9;34754:18;34746:26;;34818:9;34812:4;34808:20;34804:1;34793:9;34789:17;34782:47;34846:131;34972:4;34846:131;:::i;:::-;34838:139;;34565:419;;;:::o;34990:::-;35156:4;35194:2;35183:9;35179:18;35171:26;;35243:9;35237:4;35233:20;35229:1;35218:9;35214:17;35207:47;35271:131;35397:4;35271:131;:::i;:::-;35263:139;;34990:419;;;:::o;35415:::-;35581:4;35619:2;35608:9;35604:18;35596:26;;35668:9;35662:4;35658:20;35654:1;35643:9;35639:17;35632:47;35696:131;35822:4;35696:131;:::i;:::-;35688:139;;35415:419;;;:::o;35840:222::-;35933:4;35971:2;35960:9;35956:18;35948:26;;35984:71;36052:1;36041:9;36037:17;36028:6;35984:71;:::i;:::-;35840:222;;;;:::o;36068:129::-;36102:6;36129:20;;:::i;:::-;36119:30;;36158:33;36186:4;36178:6;36158:33;:::i;:::-;36068:129;;;:::o;36203:75::-;36236:6;36269:2;36263:9;36253:19;;36203:75;:::o;36284:311::-;36361:4;36451:18;36443:6;36440:30;36437:56;;;36473:18;;:::i;:::-;36437:56;36523:4;36515:6;36511:17;36503:25;;36583:4;36577;36573:15;36565:23;;36284:311;;;:::o;36601:307::-;36662:4;36752:18;36744:6;36741:30;36738:56;;;36774:18;;:::i;:::-;36738:56;36812:29;36834:6;36812:29;:::i;:::-;36804:37;;36896:4;36890;36886:15;36878:23;;36601:307;;;:::o;36914:308::-;36976:4;37066:18;37058:6;37055:30;37052:56;;;37088:18;;:::i;:::-;37052:56;37126:29;37148:6;37126:29;:::i;:::-;37118:37;;37210:4;37204;37200:15;37192:23;;36914:308;;;:::o;37228:132::-;37295:4;37318:3;37310:11;;37348:4;37343:3;37339:14;37331:22;;37228:132;;;:::o;37366:141::-;37415:4;37438:3;37430:11;;37461:3;37458:1;37451:14;37495:4;37492:1;37482:18;37474:26;;37366:141;;;:::o;37513:114::-;37580:6;37614:5;37608:12;37598:22;;37513:114;;;:::o;37633:98::-;37684:6;37718:5;37712:12;37702:22;;37633:98;;;:::o;37737:99::-;37789:6;37823:5;37817:12;37807:22;;37737:99;;;:::o;37842:113::-;37912:4;37944;37939:3;37935:14;37927:22;;37842:113;;;:::o;37961:184::-;38060:11;38094:6;38089:3;38082:19;38134:4;38129:3;38125:14;38110:29;;37961:184;;;;:::o;38151:168::-;38234:11;38268:6;38263:3;38256:19;38308:4;38303:3;38299:14;38284:29;;38151:168;;;;:::o;38325:169::-;38409:11;38443:6;38438:3;38431:19;38483:4;38478:3;38474:14;38459:29;;38325:169;;;;:::o;38500:148::-;38602:11;38639:3;38624:18;;38500:148;;;;:::o;38654:305::-;38694:3;38713:20;38731:1;38713:20;:::i;:::-;38708:25;;38747:20;38765:1;38747:20;:::i;:::-;38742:25;;38901:1;38833:66;38829:74;38826:1;38823:81;38820:107;;;38907:18;;:::i;:::-;38820:107;38951:1;38948;38944:9;38937:16;;38654:305;;;;:::o;38965:185::-;39005:1;39022:20;39040:1;39022:20;:::i;:::-;39017:25;;39056:20;39074:1;39056:20;:::i;:::-;39051:25;;39095:1;39085:35;;39100:18;;:::i;:::-;39085:35;39142:1;39139;39135:9;39130:14;;38965:185;;;;:::o;39156:348::-;39196:7;39219:20;39237:1;39219:20;:::i;:::-;39214:25;;39253:20;39271:1;39253:20;:::i;:::-;39248:25;;39441:1;39373:66;39369:74;39366:1;39363:81;39358:1;39351:9;39344:17;39340:105;39337:131;;;39448:18;;:::i;:::-;39337:131;39496:1;39493;39489:9;39478:20;;39156:348;;;;:::o;39510:191::-;39550:4;39570:20;39588:1;39570:20;:::i;:::-;39565:25;;39604:20;39622:1;39604:20;:::i;:::-;39599:25;;39643:1;39640;39637:8;39634:34;;;39648:18;;:::i;:::-;39634:34;39693:1;39690;39686:9;39678:17;;39510:191;;;;:::o;39707:96::-;39744:7;39773:24;39791:5;39773:24;:::i;:::-;39762:35;;39707:96;;;:::o;39809:90::-;39843:7;39886:5;39879:13;39872:21;39861:32;;39809:90;;;:::o;39905:149::-;39941:7;39981:66;39974:5;39970:78;39959:89;;39905:149;;;:::o;40060:126::-;40097:7;40137:42;40130:5;40126:54;40115:65;;40060:126;;;:::o;40192:77::-;40229:7;40258:5;40247:16;;40192:77;;;:::o;40275:86::-;40310:7;40350:4;40343:5;40339:16;40328:27;;40275:86;;;:::o;40367:154::-;40451:6;40446:3;40441;40428:30;40513:1;40504:6;40499:3;40495:16;40488:27;40367:154;;;:::o;40527:307::-;40595:1;40605:113;40619:6;40616:1;40613:13;40605:113;;;40704:1;40699:3;40695:11;40689:18;40685:1;40680:3;40676:11;40669:39;40641:2;40638:1;40634:10;40629:15;;40605:113;;;40736:6;40733:1;40730:13;40727:101;;;40816:1;40807:6;40802:3;40798:16;40791:27;40727:101;40576:258;40527:307;;;:::o;40840:320::-;40884:6;40921:1;40915:4;40911:12;40901:22;;40968:1;40962:4;40958:12;40989:18;40979:81;;41045:4;41037:6;41033:17;41023:27;;40979:81;41107:2;41099:6;41096:14;41076:18;41073:38;41070:84;;;41126:18;;:::i;:::-;41070:84;40891:269;40840:320;;;:::o;41166:281::-;41249:27;41271:4;41249:27;:::i;:::-;41241:6;41237:40;41379:6;41367:10;41364:22;41343:18;41331:10;41328:34;41325:62;41322:88;;;41390:18;;:::i;:::-;41322:88;41430:10;41426:2;41419:22;41209:238;41166:281;;:::o;41453:233::-;41492:3;41515:24;41533:5;41515:24;:::i;:::-;41506:33;;41561:66;41554:5;41551:77;41548:103;;;41631:18;;:::i;:::-;41548:103;41678:1;41671:5;41667:13;41660:20;;41453:233;;;:::o;41692:167::-;41729:3;41752:22;41768:5;41752:22;:::i;:::-;41743:31;;41796:4;41789:5;41786:15;41783:41;;;41804:18;;:::i;:::-;41783:41;41851:1;41844:5;41840:13;41833:20;;41692:167;;;:::o;41865:176::-;41897:1;41914:20;41932:1;41914:20;:::i;:::-;41909:25;;41948:20;41966:1;41948:20;:::i;:::-;41943:25;;41987:1;41977:35;;41992:18;;:::i;:::-;41977:35;42033:1;42030;42026:9;42021:14;;41865:176;;;;:::o;42047:180::-;42095:77;42092:1;42085:88;42192:4;42189:1;42182:15;42216:4;42213:1;42206:15;42233:180;42281:77;42278:1;42271:88;42378:4;42375:1;42368:15;42402:4;42399:1;42392:15;42419:180;42467:77;42464:1;42457:88;42564:4;42561:1;42554:15;42588:4;42585:1;42578:15;42605:180;42653:77;42650:1;42643:88;42750:4;42747:1;42740:15;42774:4;42771:1;42764:15;42791:180;42839:77;42836:1;42829:88;42936:4;42933:1;42926:15;42960:4;42957:1;42950:15;42977:180;43025:77;43022:1;43015:88;43122:4;43119:1;43112:15;43146:4;43143:1;43136:15;43163:117;43272:1;43269;43262:12;43286:117;43395:1;43392;43385:12;43409:117;43518:1;43515;43508:12;43532:117;43641:1;43638;43631:12;43655:117;43764:1;43761;43754:12;43778:102;43819:6;43870:2;43866:7;43861:2;43854:5;43850:14;43846:28;43836:38;;43778:102;;;:::o;43886:176::-;44026:28;44022:1;44014:6;44010:14;44003:52;43886:176;:::o;44068:170::-;44208:22;44204:1;44196:6;44192:14;44185:46;44068:170;:::o;44244:157::-;44384:9;44380:1;44372:6;44368:14;44361:33;44244:157;:::o;44407:222::-;44547:34;44543:1;44535:6;44531:14;44524:58;44616:5;44611:2;44603:6;44599:15;44592:30;44407:222;:::o;44635:230::-;44775:34;44771:1;44763:6;44759:14;44752:58;44844:13;44839:2;44831:6;44827:15;44820:38;44635:230;:::o;44871:237::-;45011:34;45007:1;44999:6;44995:14;44988:58;45080:20;45075:2;45067:6;45063:15;45056:45;44871:237;:::o;45114:225::-;45254:34;45250:1;45242:6;45238:14;45231:58;45323:8;45318:2;45310:6;45306:15;45299:33;45114:225;:::o;45345:224::-;45485:34;45481:1;45473:6;45469:14;45462:58;45554:7;45549:2;45541:6;45537:15;45530:32;45345:224;:::o;45575:178::-;45715:30;45711:1;45703:6;45699:14;45692:54;45575:178;:::o;45759:164::-;45899:16;45895:1;45887:6;45883:14;45876:40;45759:164;:::o;45929:223::-;46069:34;46065:1;46057:6;46053:14;46046:58;46138:6;46133:2;46125:6;46121:15;46114:31;45929:223;:::o;46158:175::-;46298:27;46294:1;46286:6;46282:14;46275:51;46158:175;:::o;46339:231::-;46479:34;46475:1;46467:6;46463:14;46456:58;46548:14;46543:2;46535:6;46531:15;46524:39;46339:231;:::o;46576:166::-;46716:18;46712:1;46704:6;46700:14;46693:42;46576:166;:::o;46748:243::-;46888:34;46884:1;46876:6;46872:14;46865:58;46957:26;46952:2;46944:6;46940:15;46933:51;46748:243;:::o;46997:229::-;47137:34;47133:1;47125:6;47121:14;47114:58;47206:12;47201:2;47193:6;47189:15;47182:37;46997:229;:::o;47232:228::-;47372:34;47368:1;47360:6;47356:14;47349:58;47441:11;47436:2;47428:6;47424:15;47417:36;47232:228;:::o;47466:224::-;47606:34;47602:1;47594:6;47590:14;47583:58;47675:7;47670:2;47662:6;47658:15;47651:32;47466:224;:::o;47696:182::-;47836:34;47832:1;47824:6;47820:14;47813:58;47696:182;:::o;47884:231::-;48024:34;48020:1;48012:6;48008:14;48001:58;48093:14;48088:2;48080:6;48076:15;48069:39;47884:231;:::o;48121:182::-;48261:34;48257:1;48249:6;48245:14;48238:58;48121:182;:::o;48309:234::-;48449:34;48445:1;48437:6;48433:14;48426:58;48518:17;48513:2;48505:6;48501:15;48494:42;48309:234;:::o;48549:220::-;48689:34;48685:1;48677:6;48673:14;48666:58;48758:3;48753:2;48745:6;48741:15;48734:28;48549:220;:::o;48775:236::-;48915:34;48911:1;48903:6;48899:14;48892:58;48984:19;48979:2;48971:6;48967:15;48960:44;48775:236;:::o;49017:231::-;49157:34;49153:1;49145:6;49141:14;49134:58;49226:14;49221:2;49213:6;49209:15;49202:39;49017:231;:::o;49254:163::-;49394:11;49390:1;49382:6;49378:14;49371:35;49254:163;:::o;49427:130::-;49504:24;49522:5;49504:24;:::i;:::-;49497:5;49494:35;49484:63;;49543:1;49540;49533:12;49484:63;49427:130;:::o;49567:124::-;49641:21;49656:5;49641:21;:::i;:::-;49634:5;49631:32;49621:60;;49677:1;49674;49667:12;49621:60;49567:124;:::o;49701:128::-;49777:23;49794:5;49777:23;:::i;:::-;49770:5;49767:34;49757:62;;49815:1;49812;49805:12;49757:62;49701:128;:::o;49839:130::-;49916:24;49934:5;49916:24;:::i;:::-;49909:5;49906:35;49896:63;;49955:1;49952;49945:12;49896:63;49839:130;:::o;49979:126::-;50054:22;50070:5;50054:22;:::i;:::-;50047:5;50044:33;50034:61;;50091:1;50088;50081:12;50034:61;49979:126;:::o
Swarm Source
ipfs://b9594ba3301a5a0e04373ac59cfdb1518540e74c96f7612c5a6f82fd0d5d2931
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.