Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
4,000 Plunder
Holders
2,493
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PlunderLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Plunder
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-21 */ // SPDX-License-Identifier: MIT 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 no longer needed starting with Solidity 0.8. 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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; } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = '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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, 'Strings: hex length insufficient'); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, 'Address: low-level call with value failed'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, 'Address: insufficient balance for call'); require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, 'Address: low-level static call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), 'Address: static call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, 'Address: low-level delegate call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), 'Address: delegate call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } 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); } 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; } } 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; } 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 tokenId); /** * @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); } 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); } 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, 'ERC721: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721: approve caller is not owner nor approved for all' ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), 'ERC721: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), 'ERC721: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved'); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved'); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), 'ERC721: transfer to non ERC721Receiver implementer'); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), 'ERC721: operator query for nonexistent token'); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ''); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), 'ERC721: transfer to non ERC721Receiver implementer' ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), 'ERC721: mint to the zero address'); require(!_exists(tokenId), 'ERC721: token already minted'); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, 'ERC721: transfer of token that is not own'); require(to != address(0), 'ERC721: transfer to the zero address'); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721: transfer to non ERC721Receiver implementer'); } else { // solhint-disable-next-line no-inline-assembly 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` 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 {} } 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(); } } /** .----------------. .----------------. .----------------. .-----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. | | | ______ | || | _____ | || | _____ _____ | || | ____ _____ | || | ________ | || | _________ | || | _______ | | | | |_ __ \ | || | |_ _| | || ||_ _||_ _|| || ||_ \|_ _| | || | |_ ___ `. | || | |_ ___ | | || | |_ __ \ | | | | | |__) | | || | | | | || | | | | | | || | | \ | | | || | | | `. \ | || | | |_ \_| | || | | |__) | | | | | | ___/ | || | | | _ | || | | ' ' | | || | | |\ \| | | || | | | | | | || | | _| _ | || | | __ / | | | | _| |_ | || | _| |__/ | | || | \ `--' / | || | _| |_\ |_ | || | _| |___.' / | || | _| |___/ | | || | _| | \ \_ | | | | |_____| | || | |________| | || | `.__.' | || ||_____|\____| | || | |________.' | || | |_________| | || | |____| |___| | | | | | || | | || | | || | | || | | || | | || | | | | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' ______ .-" "-. / \ _ | | _ ( \ |, .-. .-. ,| / ) > "=._ | )(__/ \__)( | _.=" < (_/"=._"=._ |/ /\ \| _.="_.="\_) "=._ (_ ^^ _)"_.=" "=\__|IIIIII|__/=" _.="| \IIIIII/ |"=._ _ _.="_.="\ /"=._"=._ _ ( \_.="_.=" `--------` "=._"=._/ ) > _.=" "=._ < (_/ \_) // Welcome to Booty Bay, ye scurvy sea dog! // Plunder for pirates, an essential cache of 5000 limited NFT equipment for the everyday swashbuckler sailing the opensea, mint a pirate now at https://ploddingpirates.com", // Come say YarARRGH -> http://discord.gg/ploddingpirates */ pragma solidity ^0.8.0; contract Plunder is ERC721Enumerable, Ownable { using SafeMath for uint256; using Address for address; using Strings for uint256; uint256 public constant NFT_PRICE = 10000000000000000; uint public constant MAX_NFT_PURCHASE = 11; // One free NFT plus purchase of 10 extra uint256 public MAX_PUBLIC_SUPPLY = 4000; uint256 public MAX_RESERVE_SUPPLY = 100; bool public saleIsActive = false; uint public startTimestamp = 1632130200; // Tuesday, September 21, 2021 22:00 UTC address one_address = 0xe1Dad4ae4BFD1d53D234303655bfc44982D46353; address two_address = 0x672c36FA22029369490BB5e33e6d16a7E1309c1e; address three_address = 0x59cE6Be860F8E0A4d8880a0AE39Bd0bc63B82672; bool public publicMintPaused = false; string private _baseURIExtended; mapping(uint256 => string) _tokenURIs; mapping(address => bool) minted; mapping(address => uint256) purchased; receive() external payable {} modifier mintOnlyOnce() { require(!minted[_msgSender()], 'Can only mint once'); minted[_msgSender()] = true; _; } constructor() ERC721("Plodding Pirates Plunder", "Plunder") {} function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function update_three_address(address new_three_address) public onlyOwner{ three_address = new_three_address; } function withdraw() external { require( msg.sender == one_address || msg.sender == two_address || msg.sender == three_address ); uint256 bal = address(this).balance; uint256 FortyFive = bal.mul(45).div(100); (bool sent1,) = one_address.call{value: FortyFive}(""); require(sent1, "Failed to send Ether"); uint256 FortyFive1 = bal.mul(45).div(100); (bool sent2,) = two_address.call{value: FortyFive1}(""); require(sent2, "Failed to send Ether"); uint256 Ten = bal.mul(10).div(100); (bool sent3,) = three_address.call{value: Ten}(""); require(sent3, "Failed to send Ether"); uint256 remaining = address(this).balance; (bool sent4,) = one_address.call{value: remaining}(""); require(sent4, "Failed to send Ether"); } function mintPlunder(uint numberOfTokens) public payable { require(purchased[msg.sender].add(numberOfTokens) <= MAX_NFT_PURCHASE, 'Can only mint up to 10 per address'); require(block.timestamp >= startTimestamp, "publicMint: Not open yet"); require(numberOfTokens > 0, "Number of tokens can not be less than or equal to 0"); require(totalSupply().add(numberOfTokens) <= MAX_PUBLIC_SUPPLY, "Purchase would exceed max supply of tokens"); require(numberOfTokens <= MAX_NFT_PURCHASE,"Can only mint up to 10 per purchase"); require(NFT_PRICE.mul(numberOfTokens) == msg.value, "Sent ether value is incorrect"); purchased[msg.sender] = purchased[msg.sender].add(numberOfTokens); for (uint i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, totalSupply()); } } function mintPlunderForFree() public mintOnlyOnce { require(saleIsActive, 'Sale is not active at the moment'); require(totalSupply().add(1) <= MAX_PUBLIC_SUPPLY, 'Purchase would exceed max public supply of tokens'); _safeMint(msg.sender, totalSupply()); } function reserveTokens() public onlyOwner { require(totalSupply().add(1) <= MAX_RESERVE_SUPPLY, 'Purchase would exceed max reserve supply of tokens'); _safeMint(msg.sender, totalSupply()); } function _baseURI() internal view virtual override returns (string memory) { return _baseURIExtended; } // Sets base URI for all tokens, only able to be called by contract owner function setBaseURI(string memory baseURI_) external onlyOwner { _baseURIExtended = baseURI_; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: 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)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } }
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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NFT_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPlunder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPlunderForFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveTokens","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":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"new_three_address","type":"address"}],"name":"update_three_address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052610fa0600b556064600c556000600d60006101000a81548160ff0219169083151502179055506361485498600e5573e1dad4ae4bfd1d53d234303655bfc44982d46353600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073672c36fa22029369490bb5e33e6d16a7e1309c1e601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507359ce6be860f8e0a4d8880a0ae39bd0bc63b82672601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160146101000a81548160ff0219169083151502179055503480156200015957600080fd5b506040518060400160405280601881526020017f506c6f6464696e67205069726174657320506c756e64657200000000000000008152506040518060400160405280600781526020017f506c756e646572000000000000000000000000000000000000000000000000008152508160009080519060200190620001de929190620002b9565b508060019080519060200190620001f7929190620002b9565b50505060006200020c620002b160201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620003ce565b600033905090565b828054620002c79062000369565b90600052602060002090601f016020900481019282620002eb576000855562000337565b82601f106200030657805160ff191683800117855562000337565b8280016001018555821562000337579182015b828111156200033657825182559160200191906001019062000319565b5b5090506200034691906200034a565b5090565b5b80821115620003655760008160009055506001016200034b565b5090565b600060028204905060018216806200038257607f821691505b602082108114156200039957620003986200039f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614cc080620003de6000396000f3fe6080604052600436106101f25760003560e01c80635b0e840a1161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461069d578063e6fd48bc146106da578063e985e9c514610705578063eb8d244414610742578063f2fde38b1461076d576101f9565b806395d89b41146105f5578063a22cb46514610620578063a4a5e76314610649578063b88d4fde14610674576101f9565b806370a08231116100dc57806370a082311461055a578063715018a6146105975780638da5cb5b146105ae5780638e3ab877146105d9576101f9565b80635b0e840a146104b25780636352211e146104c957806364b24aed14610506578063676dd5631461052f576101f9565b80632a47f799116101855780633ccfd60b116101545780633ccfd60b1461040c57806342842e0e146104235780634f6ccce71461044c57806355f804b314610489576101f9565b80632a47f799146103625780632f745c591461038d57806333d9d5fd146103ca57806334918dfd146103f5576101f9565b8063095ea7b3116101c1578063095ea7b3146102ce57806318160ddd146102f757806323b872dd1461032257806327ac36c41461034b576101f9565b806301ffc9a7146101fe578063020b39cc1461023b57806306fdde0314610266578063081812fc14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613580565b610796565b6040516102329190613bda565b60405180910390f35b34801561024757600080fd5b50610250610810565b60405161025d9190613fb7565b60405180910390f35b34801561027257600080fd5b5061027b610815565b6040516102889190613bf5565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613623565b6108a7565b6040516102c59190613b73565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613540565b61092c565b005b34801561030357600080fd5b5061030c610a44565b6040516103199190613fb7565b60405180910390f35b34801561032e57600080fd5b506103496004803603810190610344919061342a565b610a51565b005b34801561035757600080fd5b50610360610ab1565b005b34801561036e57600080fd5b50610377610b9f565b6040516103849190613fb7565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613540565b610ba5565b6040516103c19190613fb7565b60405180910390f35b3480156103d657600080fd5b506103df610c4a565b6040516103ec9190613bda565b60405180910390f35b34801561040157600080fd5b5061040a610c5d565b005b34801561041857600080fd5b50610421610d05565b005b34801561042f57600080fd5b5061044a6004803603810190610445919061342a565b6111dd565b005b34801561045857600080fd5b50610473600480360381019061046e9190613623565b6111fd565b6040516104809190613fb7565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906135da565b61126e565b005b3480156104be57600080fd5b506104c7611304565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613623565b6114b8565b6040516104fd9190613b73565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906133bd565b61156a565b005b34801561053b57600080fd5b5061054461162a565b6040516105519190613fb7565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c91906133bd565b611635565b60405161058e9190613fb7565b60405180910390f35b3480156105a357600080fd5b506105ac6116ed565b005b3480156105ba57600080fd5b506105c361182a565b6040516105d09190613b73565b60405180910390f35b6105f360048036038101906105ee9190613623565b611854565b005b34801561060157600080fd5b5061060a611b36565b6040516106179190613bf5565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190613500565b611bc8565b005b34801561065557600080fd5b5061065e611d49565b60405161066b9190613fb7565b60405180910390f35b34801561068057600080fd5b5061069b6004803603810190610696919061347d565b611d4f565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613623565b611db1565b6040516106d19190613bf5565b60405180910390f35b3480156106e657600080fd5b506106ef611f24565b6040516106fc9190613fb7565b60405180910390f35b34801561071157600080fd5b5061072c600480360381019061072791906133ea565b611f2a565b6040516107399190613bda565b60405180910390f35b34801561074e57600080fd5b50610757611fbe565b6040516107649190613bda565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906133bd565b611fd1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080957506108088261217d565b5b9050919050565b600b81565b60606000805461082490614272565b80601f016020809104026020016040519081016040528092919081815260200182805461085090614272565b801561089d5780601f106108725761010080835404028352916020019161089d565b820191906000526020600020905b81548152906001019060200180831161088057829003601f168201915b5050505050905090565b60006108b28261225f565b6108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890613e57565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610937826114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90613ed7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c76122cb565b73ffffffffffffffffffffffffffffffffffffffff1614806109f657506109f5816109f06122cb565b611f2a565b5b610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90613d97565b60405180910390fd5b610a3f83836122d3565b505050565b6000600880549050905090565b610a62610a5c6122cb565b8261238c565b610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613f17565b60405180910390fd5b610aac83838361246a565b505050565b610ab96122cb565b73ffffffffffffffffffffffffffffffffffffffff16610ad761182a565b73ffffffffffffffffffffffffffffffffffffffff1614610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613e77565b60405180910390fd5b600c54610b4b6001610b3d610a44565b6126c690919063ffffffff16565b1115610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613c17565b60405180910390fd5b610b9d33610b98610a44565b6126dc565b565b600b5481565b6000610bb083611635565b8210610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890613c57565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601160149054906101000a900460ff1681565b610c656122cb565b73ffffffffffffffffffffffffffffffffffffffff16610c8361182a565b73ffffffffffffffffffffffffffffffffffffffff1614610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd090613e77565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dae5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e065750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e0f57600080fd5b60004790506000610e3d6064610e2f602d856126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610e8790613b5e565b60006040518083038185875af1925050503d8060008114610ec4576040519150601f19603f3d011682016040523d82523d6000602084013e610ec9565b606091505b5050905080610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490613d17565b60405180910390fd5b6000610f366064610f28602d876126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f8090613b5e565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613d17565b60405180910390fd5b600061102f6064611021600a896126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161107990613b5e565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50509050806110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613d17565b60405180910390fd5b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161114c90613b5e565b60006040518083038185875af1925050503d8060008114611189576040519150601f19603f3d011682016040523d82523d6000602084013e61118e565b606091505b50509050806111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613d17565b60405180910390fd5b505050505050505050565b6111f883838360405180602001604052806000815250611d4f565b505050565b6000611207610a44565b8210611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90613f37565b60405180910390fd5b6008828154811061125c5761125b61440b565b5b90600052602060002001549050919050565b6112766122cb565b73ffffffffffffffffffffffffffffffffffffffff1661129461182a565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613e77565b60405180910390fd5b80601290805190602001906113009291906131d1565b5050565b601460006113106122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90613ef7565b60405180910390fd5b6001601460006113a66122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900460ff16611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613f97565b60405180910390fd5b600b546114646001611456610a44565b6126c690919063ffffffff16565b11156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613f77565b60405180910390fd5b6114b6336114b1610a44565b6126dc565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613dd7565b60405180910390fd5b80915050919050565b6115726122cb565b73ffffffffffffffffffffffffffffffffffffffff1661159061182a565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613e77565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b662386f26fc1000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613db7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116f56122cb565b73ffffffffffffffffffffffffffffffffffffffff1661171361182a565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b6118a882601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c690919063ffffffff16565b11156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613cf7565b60405180910390fd5b600e5442101561192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590613f57565b60405180910390fd5b60008111611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890613c37565b60405180910390fd5b600b5461198e82611980610a44565b6126c690919063ffffffff16565b11156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613df7565b60405180910390fd5b600b811115611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90613cd7565b60405180910390fd5b34611a2e82662386f26fc100006126fa90919063ffffffff16565b14611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613e17565b60405180910390fd5b611ac081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c690919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b81811015611b3257611b1f33611b1a610a44565b6126dc565b8080611b2a906142d5565b915050611b06565b5050565b606060018054611b4590614272565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7190614272565b8015611bbe5780601f10611b9357610100808354040283529160200191611bbe565b820191906000526020600020905b815481529060010190602001808311611ba157829003601f168201915b5050505050905090565b611bd06122cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613d57565b60405180910390fd5b8060056000611c4b6122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cf86122cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d3d9190613bda565b60405180910390a35050565b600c5481565b611d60611d5a6122cb565b8361238c565b611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690613f17565b60405180910390fd5b611dab84848484612726565b50505050565b6060611dbc8261225f565b611dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df290613eb7565b60405180910390fd5b6000601360008481526020019081526020016000208054611e1b90614272565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4790614272565b8015611e945780601f10611e6957610100808354040283529160200191611e94565b820191906000526020600020905b815481529060010190602001808311611e7757829003601f168201915b505050505090506000611ea5612782565b9050600081511415611ebb578192505050611f1f565b600082511115611ef0578082604051602001611ed8929190613b3a565b60405160208183030381529060405292505050611f1f565b80611efa85612814565b604051602001611f0b929190613b3a565b604051602081830303815290604052925050505b919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b611fd96122cb565b73ffffffffffffffffffffffffffffffffffffffff16611ff761182a565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490613c97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612258575061225782612975565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612346836114b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123978261225f565b6123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90613d77565b60405180910390fd5b60006123e1836114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061245057508373ffffffffffffffffffffffffffffffffffffffff16612438846108a7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061246157506124608185611f2a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248a826114b8565b73ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790613e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613d37565b60405180910390fd5b61255b8383836129df565b6125666000826122d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b69190614188565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260d91906140a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836126d491906140a7565b905092915050565b6126f6828260405180602001604052806000815250612af3565b5050565b60008183612708919061412e565b905092915050565b6000818361271e91906140fd565b905092915050565b61273184848461246a565b61273d84848484612b4e565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390613c77565b60405180910390fd5b50505050565b60606012805461279190614272565b80601f01602080910402602001604051908101604052809291908181526020018280546127bd90614272565b801561280a5780601f106127df5761010080835404028352916020019161280a565b820191906000526020600020905b8154815290600101906020018083116127ed57829003601f168201915b5050505050905090565b6060600082141561285c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612970565b600082905060005b6000821461288e578080612877906142d5565b915050600a8261288791906140fd565b9150612864565b60008167ffffffffffffffff8111156128aa576128a961443a565b5b6040519080825280601f01601f1916602001820160405280156128dc5781602001600182028036833780820191505090505b5090505b60008514612969576001826128f59190614188565b9150600a85612904919061431e565b603061291091906140a7565b60f81b8183815181106129265761292561440b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296291906140fd565b94506128e0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129ea838383612ce5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a2d57612a2881612cea565b612a6c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a6b57612a6a8382612d33565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aaf57612aaa81612ea0565b612aee565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aed57612aec8282612f71565b5b5b505050565b612afd8383612ff0565b612b0a6000848484612b4e565b612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4090613c77565b60405180910390fd5b505050565b6000612b6f8473ffffffffffffffffffffffffffffffffffffffff166131be565b15612cd8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b986122cb565b8786866040518563ffffffff1660e01b8152600401612bba9493929190613b8e565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c0557506040513d601f19601f82011682018060405250810190612c0291906135ad565b60015b612c88573d8060008114612c35576040519150601f19603f3d011682016040523d82523d6000602084013e612c3a565b606091505b50600081511415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790613c77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cdd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d4084611635565b612d4a9190614188565b9050600060076000848152602001908152602001600020549050818114612e2f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eb49190614188565b9050600060096000848152602001908152602001600020549050600060088381548110612ee457612ee361440b565b5b906000526020600020015490508060088381548110612f0657612f0561440b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f5557612f546143dc565b5b6001900381819060005260206000200160009055905550505050565b6000612f7c83611635565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790613e37565b60405180910390fd5b6130698161225f565b156130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a090613cb7565b60405180910390fd5b6130b5600083836129df565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461310591906140a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131dd90614272565b90600052602060002090601f0160209004810192826131ff5760008555613246565b82601f1061321857805160ff1916838001178555613246565b82800160010185558215613246579182015b8281111561324557825182559160200191906001019061322a565b5b5090506132539190613257565b5090565b5b80821115613270576000816000905550600101613258565b5090565b600061328761328284613ff7565b613fd2565b9050828152602081018484840111156132a3576132a261446e565b5b6132ae848285614230565b509392505050565b60006132c96132c484614028565b613fd2565b9050828152602081018484840111156132e5576132e461446e565b5b6132f0848285614230565b509392505050565b60008135905061330781614c2e565b92915050565b60008135905061331c81614c45565b92915050565b60008135905061333181614c5c565b92915050565b60008151905061334681614c5c565b92915050565b600082601f83011261336157613360614469565b5b8135613371848260208601613274565b91505092915050565b600082601f83011261338f5761338e614469565b5b813561339f8482602086016132b6565b91505092915050565b6000813590506133b781614c73565b92915050565b6000602082840312156133d3576133d2614478565b5b60006133e1848285016132f8565b91505092915050565b6000806040838503121561340157613400614478565b5b600061340f858286016132f8565b9250506020613420858286016132f8565b9150509250929050565b60008060006060848603121561344357613442614478565b5b6000613451868287016132f8565b9350506020613462868287016132f8565b9250506040613473868287016133a8565b9150509250925092565b6000806000806080858703121561349757613496614478565b5b60006134a5878288016132f8565b94505060206134b6878288016132f8565b93505060406134c7878288016133a8565b925050606085013567ffffffffffffffff8111156134e8576134e7614473565b5b6134f48782880161334c565b91505092959194509250565b6000806040838503121561351757613516614478565b5b6000613525858286016132f8565b92505060206135368582860161330d565b9150509250929050565b6000806040838503121561355757613556614478565b5b6000613565858286016132f8565b9250506020613576858286016133a8565b9150509250929050565b60006020828403121561359657613595614478565b5b60006135a484828501613322565b91505092915050565b6000602082840312156135c3576135c2614478565b5b60006135d184828501613337565b91505092915050565b6000602082840312156135f0576135ef614478565b5b600082013567ffffffffffffffff81111561360e5761360d614473565b5b61361a8482850161337a565b91505092915050565b60006020828403121561363957613638614478565b5b6000613647848285016133a8565b91505092915050565b613659816141bc565b82525050565b613668816141ce565b82525050565b600061367982614059565b613683818561406f565b935061369381856020860161423f565b61369c8161447d565b840191505092915050565b60006136b282614064565b6136bc818561408b565b93506136cc81856020860161423f565b6136d58161447d565b840191505092915050565b60006136eb82614064565b6136f5818561409c565b935061370581856020860161423f565b80840191505092915050565b600061371e60328361408b565b91506137298261448e565b604082019050919050565b600061374160338361408b565b915061374c826144dd565b604082019050919050565b6000613764602b8361408b565b915061376f8261452c565b604082019050919050565b600061378760328361408b565b91506137928261457b565b604082019050919050565b60006137aa60268361408b565b91506137b5826145ca565b604082019050919050565b60006137cd601c8361408b565b91506137d882614619565b602082019050919050565b60006137f060238361408b565b91506137fb82614642565b604082019050919050565b600061381360228361408b565b915061381e82614691565b604082019050919050565b600061383660148361408b565b9150613841826146e0565b602082019050919050565b600061385960248361408b565b915061386482614709565b604082019050919050565b600061387c60198361408b565b915061388782614758565b602082019050919050565b600061389f602c8361408b565b91506138aa82614781565b604082019050919050565b60006138c260388361408b565b91506138cd826147d0565b604082019050919050565b60006138e5602a8361408b565b91506138f08261481f565b604082019050919050565b600061390860298361408b565b91506139138261486e565b604082019050919050565b600061392b602a8361408b565b9150613936826148bd565b604082019050919050565b600061394e601d8361408b565b91506139598261490c565b602082019050919050565b600061397160208361408b565b915061397c82614935565b602082019050919050565b6000613994602c8361408b565b915061399f8261495e565b604082019050919050565b60006139b760208361408b565b91506139c2826149ad565b602082019050919050565b60006139da60298361408b565b91506139e5826149d6565b604082019050919050565b60006139fd602f8361408b565b9150613a0882614a25565b604082019050919050565b6000613a2060218361408b565b9150613a2b82614a74565b604082019050919050565b6000613a4360128361408b565b9150613a4e82614ac3565b602082019050919050565b6000613a66600083614080565b9150613a7182614aec565b600082019050919050565b6000613a8960318361408b565b9150613a9482614aef565b604082019050919050565b6000613aac602c8361408b565b9150613ab782614b3e565b604082019050919050565b6000613acf60188361408b565b9150613ada82614b8d565b602082019050919050565b6000613af260318361408b565b9150613afd82614bb6565b604082019050919050565b6000613b1560208361408b565b9150613b2082614c05565b602082019050919050565b613b3481614226565b82525050565b6000613b4682856136e0565b9150613b5282846136e0565b91508190509392505050565b6000613b6982613a59565b9150819050919050565b6000602082019050613b886000830184613650565b92915050565b6000608082019050613ba36000830187613650565b613bb06020830186613650565b613bbd6040830185613b2b565b8181036060830152613bcf818461366e565b905095945050505050565b6000602082019050613bef600083018461365f565b92915050565b60006020820190508181036000830152613c0f81846136a7565b905092915050565b60006020820190508181036000830152613c3081613711565b9050919050565b60006020820190508181036000830152613c5081613734565b9050919050565b60006020820190508181036000830152613c7081613757565b9050919050565b60006020820190508181036000830152613c908161377a565b9050919050565b60006020820190508181036000830152613cb08161379d565b9050919050565b60006020820190508181036000830152613cd0816137c0565b9050919050565b60006020820190508181036000830152613cf0816137e3565b9050919050565b60006020820190508181036000830152613d1081613806565b9050919050565b60006020820190508181036000830152613d3081613829565b9050919050565b60006020820190508181036000830152613d508161384c565b9050919050565b60006020820190508181036000830152613d708161386f565b9050919050565b60006020820190508181036000830152613d9081613892565b9050919050565b60006020820190508181036000830152613db0816138b5565b9050919050565b60006020820190508181036000830152613dd0816138d8565b9050919050565b60006020820190508181036000830152613df0816138fb565b9050919050565b60006020820190508181036000830152613e108161391e565b9050919050565b60006020820190508181036000830152613e3081613941565b9050919050565b60006020820190508181036000830152613e5081613964565b9050919050565b60006020820190508181036000830152613e7081613987565b9050919050565b60006020820190508181036000830152613e90816139aa565b9050919050565b60006020820190508181036000830152613eb0816139cd565b9050919050565b60006020820190508181036000830152613ed0816139f0565b9050919050565b60006020820190508181036000830152613ef081613a13565b9050919050565b60006020820190508181036000830152613f1081613a36565b9050919050565b60006020820190508181036000830152613f3081613a7c565b9050919050565b60006020820190508181036000830152613f5081613a9f565b9050919050565b60006020820190508181036000830152613f7081613ac2565b9050919050565b60006020820190508181036000830152613f9081613ae5565b9050919050565b60006020820190508181036000830152613fb081613b08565b9050919050565b6000602082019050613fcc6000830184613b2b565b92915050565b6000613fdc613fed565b9050613fe882826142a4565b919050565b6000604051905090565b600067ffffffffffffffff8211156140125761401161443a565b5b61401b8261447d565b9050602081019050919050565b600067ffffffffffffffff8211156140435761404261443a565b5b61404c8261447d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140b282614226565b91506140bd83614226565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f2576140f161434f565b5b828201905092915050565b600061410882614226565b915061411383614226565b9250826141235761412261437e565b5b828204905092915050565b600061413982614226565b915061414483614226565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561417d5761417c61434f565b5b828202905092915050565b600061419382614226565b915061419e83614226565b9250828210156141b1576141b061434f565b5b828203905092915050565b60006141c782614206565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561425d578082015181840152602081019050614242565b8381111561426c576000848401525b50505050565b6000600282049050600182168061428a57607f821691505b6020821081141561429e5761429d6143ad565b5b50919050565b6142ad8261447d565b810181811067ffffffffffffffff821117156142cc576142cb61443a565b5b80604052505050565b60006142e082614226565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143135761431261434f565b5b600182019050919050565b600061432982614226565b915061433483614226565b9250826143445761434361437e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507572636861736520776f756c6420657863656564206d61782072657365727660008201527f6520737570706c79206f6620746f6b656e730000000000000000000000000000602082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f2031302070657220707572636860008201527f6173650000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420757020746f2031302070657220616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e74206f6e63650000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d6178207075626c696360008201527f20737570706c79206f6620746f6b656e73000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b614c37816141bc565b8114614c4257600080fd5b50565b614c4e816141ce565b8114614c5957600080fd5b50565b614c65816141da565b8114614c7057600080fd5b50565b614c7c81614226565b8114614c8757600080fd5b5056fea26469706673582212205da55894a084f0342eaf41a43443ab60400cbd3fd78672a29e6a2f7ba2aaf51264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80635b0e840a1161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461069d578063e6fd48bc146106da578063e985e9c514610705578063eb8d244414610742578063f2fde38b1461076d576101f9565b806395d89b41146105f5578063a22cb46514610620578063a4a5e76314610649578063b88d4fde14610674576101f9565b806370a08231116100dc57806370a082311461055a578063715018a6146105975780638da5cb5b146105ae5780638e3ab877146105d9576101f9565b80635b0e840a146104b25780636352211e146104c957806364b24aed14610506578063676dd5631461052f576101f9565b80632a47f799116101855780633ccfd60b116101545780633ccfd60b1461040c57806342842e0e146104235780634f6ccce71461044c57806355f804b314610489576101f9565b80632a47f799146103625780632f745c591461038d57806333d9d5fd146103ca57806334918dfd146103f5576101f9565b8063095ea7b3116101c1578063095ea7b3146102ce57806318160ddd146102f757806323b872dd1461032257806327ac36c41461034b576101f9565b806301ffc9a7146101fe578063020b39cc1461023b57806306fdde0314610266578063081812fc14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613580565b610796565b6040516102329190613bda565b60405180910390f35b34801561024757600080fd5b50610250610810565b60405161025d9190613fb7565b60405180910390f35b34801561027257600080fd5b5061027b610815565b6040516102889190613bf5565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613623565b6108a7565b6040516102c59190613b73565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613540565b61092c565b005b34801561030357600080fd5b5061030c610a44565b6040516103199190613fb7565b60405180910390f35b34801561032e57600080fd5b506103496004803603810190610344919061342a565b610a51565b005b34801561035757600080fd5b50610360610ab1565b005b34801561036e57600080fd5b50610377610b9f565b6040516103849190613fb7565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613540565b610ba5565b6040516103c19190613fb7565b60405180910390f35b3480156103d657600080fd5b506103df610c4a565b6040516103ec9190613bda565b60405180910390f35b34801561040157600080fd5b5061040a610c5d565b005b34801561041857600080fd5b50610421610d05565b005b34801561042f57600080fd5b5061044a6004803603810190610445919061342a565b6111dd565b005b34801561045857600080fd5b50610473600480360381019061046e9190613623565b6111fd565b6040516104809190613fb7565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906135da565b61126e565b005b3480156104be57600080fd5b506104c7611304565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613623565b6114b8565b6040516104fd9190613b73565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906133bd565b61156a565b005b34801561053b57600080fd5b5061054461162a565b6040516105519190613fb7565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c91906133bd565b611635565b60405161058e9190613fb7565b60405180910390f35b3480156105a357600080fd5b506105ac6116ed565b005b3480156105ba57600080fd5b506105c361182a565b6040516105d09190613b73565b60405180910390f35b6105f360048036038101906105ee9190613623565b611854565b005b34801561060157600080fd5b5061060a611b36565b6040516106179190613bf5565b60405180910390f35b34801561062c57600080fd5b5061064760048036038101906106429190613500565b611bc8565b005b34801561065557600080fd5b5061065e611d49565b60405161066b9190613fb7565b60405180910390f35b34801561068057600080fd5b5061069b6004803603810190610696919061347d565b611d4f565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613623565b611db1565b6040516106d19190613bf5565b60405180910390f35b3480156106e657600080fd5b506106ef611f24565b6040516106fc9190613fb7565b60405180910390f35b34801561071157600080fd5b5061072c600480360381019061072791906133ea565b611f2a565b6040516107399190613bda565b60405180910390f35b34801561074e57600080fd5b50610757611fbe565b6040516107649190613bda565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906133bd565b611fd1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080957506108088261217d565b5b9050919050565b600b81565b60606000805461082490614272565b80601f016020809104026020016040519081016040528092919081815260200182805461085090614272565b801561089d5780601f106108725761010080835404028352916020019161089d565b820191906000526020600020905b81548152906001019060200180831161088057829003601f168201915b5050505050905090565b60006108b28261225f565b6108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890613e57565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610937826114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90613ed7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109c76122cb565b73ffffffffffffffffffffffffffffffffffffffff1614806109f657506109f5816109f06122cb565b611f2a565b5b610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90613d97565b60405180910390fd5b610a3f83836122d3565b505050565b6000600880549050905090565b610a62610a5c6122cb565b8261238c565b610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613f17565b60405180910390fd5b610aac83838361246a565b505050565b610ab96122cb565b73ffffffffffffffffffffffffffffffffffffffff16610ad761182a565b73ffffffffffffffffffffffffffffffffffffffff1614610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613e77565b60405180910390fd5b600c54610b4b6001610b3d610a44565b6126c690919063ffffffff16565b1115610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613c17565b60405180910390fd5b610b9d33610b98610a44565b6126dc565b565b600b5481565b6000610bb083611635565b8210610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be890613c57565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601160149054906101000a900460ff1681565b610c656122cb565b73ffffffffffffffffffffffffffffffffffffffff16610c8361182a565b73ffffffffffffffffffffffffffffffffffffffff1614610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd090613e77565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610dae5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610e065750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610e0f57600080fd5b60004790506000610e3d6064610e2f602d856126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610e8790613b5e565b60006040518083038185875af1925050503d8060008114610ec4576040519150601f19603f3d011682016040523d82523d6000602084013e610ec9565b606091505b5050905080610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490613d17565b60405180910390fd5b6000610f366064610f28602d876126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f8090613b5e565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613d17565b60405180910390fd5b600061102f6064611021600a896126fa90919063ffffffff16565b61271090919063ffffffff16565b90506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161107990613b5e565b60006040518083038185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b50509050806110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613d17565b60405180910390fd5b60004790506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161114c90613b5e565b60006040518083038185875af1925050503d8060008114611189576040519150601f19603f3d011682016040523d82523d6000602084013e61118e565b606091505b50509050806111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613d17565b60405180910390fd5b505050505050505050565b6111f883838360405180602001604052806000815250611d4f565b505050565b6000611207610a44565b8210611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90613f37565b60405180910390fd5b6008828154811061125c5761125b61440b565b5b90600052602060002001549050919050565b6112766122cb565b73ffffffffffffffffffffffffffffffffffffffff1661129461182a565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613e77565b60405180910390fd5b80601290805190602001906113009291906131d1565b5050565b601460006113106122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90613ef7565b60405180910390fd5b6001601460006113a66122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d60009054906101000a900460ff16611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613f97565b60405180910390fd5b600b546114646001611456610a44565b6126c690919063ffffffff16565b11156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613f77565b60405180910390fd5b6114b6336114b1610a44565b6126dc565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613dd7565b60405180910390fd5b80915050919050565b6115726122cb565b73ffffffffffffffffffffffffffffffffffffffff1661159061182a565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613e77565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b662386f26fc1000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613db7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116f56122cb565b73ffffffffffffffffffffffffffffffffffffffff1661171361182a565b73ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b6118a882601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c690919063ffffffff16565b11156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613cf7565b60405180910390fd5b600e5442101561192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590613f57565b60405180910390fd5b60008111611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890613c37565b60405180910390fd5b600b5461198e82611980610a44565b6126c690919063ffffffff16565b11156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613df7565b60405180910390fd5b600b811115611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a90613cd7565b60405180910390fd5b34611a2e82662386f26fc100006126fa90919063ffffffff16565b14611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613e17565b60405180910390fd5b611ac081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126c690919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b81811015611b3257611b1f33611b1a610a44565b6126dc565b8080611b2a906142d5565b915050611b06565b5050565b606060018054611b4590614272565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7190614272565b8015611bbe5780601f10611b9357610100808354040283529160200191611bbe565b820191906000526020600020905b815481529060010190602001808311611ba157829003601f168201915b5050505050905090565b611bd06122cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3590613d57565b60405180910390fd5b8060056000611c4b6122cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cf86122cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d3d9190613bda565b60405180910390a35050565b600c5481565b611d60611d5a6122cb565b8361238c565b611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690613f17565b60405180910390fd5b611dab84848484612726565b50505050565b6060611dbc8261225f565b611dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df290613eb7565b60405180910390fd5b6000601360008481526020019081526020016000208054611e1b90614272565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4790614272565b8015611e945780601f10611e6957610100808354040283529160200191611e94565b820191906000526020600020905b815481529060010190602001808311611e7757829003601f168201915b505050505090506000611ea5612782565b9050600081511415611ebb578192505050611f1f565b600082511115611ef0578082604051602001611ed8929190613b3a565b60405160208183030381529060405292505050611f1f565b80611efa85612814565b604051602001611f0b929190613b3a565b604051602081830303815290604052925050505b919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d60009054906101000a900460ff1681565b611fd96122cb565b73ffffffffffffffffffffffffffffffffffffffff16611ff761182a565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490613e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b490613c97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612258575061225782612975565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612346836114b8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123978261225f565b6123d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cd90613d77565b60405180910390fd5b60006123e1836114b8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061245057508373ffffffffffffffffffffffffffffffffffffffff16612438846108a7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061246157506124608185611f2a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248a826114b8565b73ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d790613e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613d37565b60405180910390fd5b61255b8383836129df565b6125666000826122d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b69190614188565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260d91906140a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836126d491906140a7565b905092915050565b6126f6828260405180602001604052806000815250612af3565b5050565b60008183612708919061412e565b905092915050565b6000818361271e91906140fd565b905092915050565b61273184848461246a565b61273d84848484612b4e565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390613c77565b60405180910390fd5b50505050565b60606012805461279190614272565b80601f01602080910402602001604051908101604052809291908181526020018280546127bd90614272565b801561280a5780601f106127df5761010080835404028352916020019161280a565b820191906000526020600020905b8154815290600101906020018083116127ed57829003601f168201915b5050505050905090565b6060600082141561285c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612970565b600082905060005b6000821461288e578080612877906142d5565b915050600a8261288791906140fd565b9150612864565b60008167ffffffffffffffff8111156128aa576128a961443a565b5b6040519080825280601f01601f1916602001820160405280156128dc5781602001600182028036833780820191505090505b5090505b60008514612969576001826128f59190614188565b9150600a85612904919061431e565b603061291091906140a7565b60f81b8183815181106129265761292561440b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561296291906140fd565b94506128e0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129ea838383612ce5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a2d57612a2881612cea565b612a6c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a6b57612a6a8382612d33565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aaf57612aaa81612ea0565b612aee565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aed57612aec8282612f71565b5b5b505050565b612afd8383612ff0565b612b0a6000848484612b4e565b612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4090613c77565b60405180910390fd5b505050565b6000612b6f8473ffffffffffffffffffffffffffffffffffffffff166131be565b15612cd8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b986122cb565b8786866040518563ffffffff1660e01b8152600401612bba9493929190613b8e565b602060405180830381600087803b158015612bd457600080fd5b505af1925050508015612c0557506040513d601f19601f82011682018060405250810190612c0291906135ad565b60015b612c88573d8060008114612c35576040519150601f19603f3d011682016040523d82523d6000602084013e612c3a565b606091505b50600081511415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790613c77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cdd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d4084611635565b612d4a9190614188565b9050600060076000848152602001908152602001600020549050818114612e2f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612eb49190614188565b9050600060096000848152602001908152602001600020549050600060088381548110612ee457612ee361440b565b5b906000526020600020015490508060088381548110612f0657612f0561440b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f5557612f546143dc565b5b6001900381819060005260206000200160009055905550505050565b6000612f7c83611635565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790613e37565b60405180910390fd5b6130698161225f565b156130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a090613cb7565b60405180910390fd5b6130b5600083836129df565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461310591906140a7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131dd90614272565b90600052602060002090601f0160209004810192826131ff5760008555613246565b82601f1061321857805160ff1916838001178555613246565b82800160010185558215613246579182015b8281111561324557825182559160200191906001019061322a565b5b5090506132539190613257565b5090565b5b80821115613270576000816000905550600101613258565b5090565b600061328761328284613ff7565b613fd2565b9050828152602081018484840111156132a3576132a261446e565b5b6132ae848285614230565b509392505050565b60006132c96132c484614028565b613fd2565b9050828152602081018484840111156132e5576132e461446e565b5b6132f0848285614230565b509392505050565b60008135905061330781614c2e565b92915050565b60008135905061331c81614c45565b92915050565b60008135905061333181614c5c565b92915050565b60008151905061334681614c5c565b92915050565b600082601f83011261336157613360614469565b5b8135613371848260208601613274565b91505092915050565b600082601f83011261338f5761338e614469565b5b813561339f8482602086016132b6565b91505092915050565b6000813590506133b781614c73565b92915050565b6000602082840312156133d3576133d2614478565b5b60006133e1848285016132f8565b91505092915050565b6000806040838503121561340157613400614478565b5b600061340f858286016132f8565b9250506020613420858286016132f8565b9150509250929050565b60008060006060848603121561344357613442614478565b5b6000613451868287016132f8565b9350506020613462868287016132f8565b9250506040613473868287016133a8565b9150509250925092565b6000806000806080858703121561349757613496614478565b5b60006134a5878288016132f8565b94505060206134b6878288016132f8565b93505060406134c7878288016133a8565b925050606085013567ffffffffffffffff8111156134e8576134e7614473565b5b6134f48782880161334c565b91505092959194509250565b6000806040838503121561351757613516614478565b5b6000613525858286016132f8565b92505060206135368582860161330d565b9150509250929050565b6000806040838503121561355757613556614478565b5b6000613565858286016132f8565b9250506020613576858286016133a8565b9150509250929050565b60006020828403121561359657613595614478565b5b60006135a484828501613322565b91505092915050565b6000602082840312156135c3576135c2614478565b5b60006135d184828501613337565b91505092915050565b6000602082840312156135f0576135ef614478565b5b600082013567ffffffffffffffff81111561360e5761360d614473565b5b61361a8482850161337a565b91505092915050565b60006020828403121561363957613638614478565b5b6000613647848285016133a8565b91505092915050565b613659816141bc565b82525050565b613668816141ce565b82525050565b600061367982614059565b613683818561406f565b935061369381856020860161423f565b61369c8161447d565b840191505092915050565b60006136b282614064565b6136bc818561408b565b93506136cc81856020860161423f565b6136d58161447d565b840191505092915050565b60006136eb82614064565b6136f5818561409c565b935061370581856020860161423f565b80840191505092915050565b600061371e60328361408b565b91506137298261448e565b604082019050919050565b600061374160338361408b565b915061374c826144dd565b604082019050919050565b6000613764602b8361408b565b915061376f8261452c565b604082019050919050565b600061378760328361408b565b91506137928261457b565b604082019050919050565b60006137aa60268361408b565b91506137b5826145ca565b604082019050919050565b60006137cd601c8361408b565b91506137d882614619565b602082019050919050565b60006137f060238361408b565b91506137fb82614642565b604082019050919050565b600061381360228361408b565b915061381e82614691565b604082019050919050565b600061383660148361408b565b9150613841826146e0565b602082019050919050565b600061385960248361408b565b915061386482614709565b604082019050919050565b600061387c60198361408b565b915061388782614758565b602082019050919050565b600061389f602c8361408b565b91506138aa82614781565b604082019050919050565b60006138c260388361408b565b91506138cd826147d0565b604082019050919050565b60006138e5602a8361408b565b91506138f08261481f565b604082019050919050565b600061390860298361408b565b91506139138261486e565b604082019050919050565b600061392b602a8361408b565b9150613936826148bd565b604082019050919050565b600061394e601d8361408b565b91506139598261490c565b602082019050919050565b600061397160208361408b565b915061397c82614935565b602082019050919050565b6000613994602c8361408b565b915061399f8261495e565b604082019050919050565b60006139b760208361408b565b91506139c2826149ad565b602082019050919050565b60006139da60298361408b565b91506139e5826149d6565b604082019050919050565b60006139fd602f8361408b565b9150613a0882614a25565b604082019050919050565b6000613a2060218361408b565b9150613a2b82614a74565b604082019050919050565b6000613a4360128361408b565b9150613a4e82614ac3565b602082019050919050565b6000613a66600083614080565b9150613a7182614aec565b600082019050919050565b6000613a8960318361408b565b9150613a9482614aef565b604082019050919050565b6000613aac602c8361408b565b9150613ab782614b3e565b604082019050919050565b6000613acf60188361408b565b9150613ada82614b8d565b602082019050919050565b6000613af260318361408b565b9150613afd82614bb6565b604082019050919050565b6000613b1560208361408b565b9150613b2082614c05565b602082019050919050565b613b3481614226565b82525050565b6000613b4682856136e0565b9150613b5282846136e0565b91508190509392505050565b6000613b6982613a59565b9150819050919050565b6000602082019050613b886000830184613650565b92915050565b6000608082019050613ba36000830187613650565b613bb06020830186613650565b613bbd6040830185613b2b565b8181036060830152613bcf818461366e565b905095945050505050565b6000602082019050613bef600083018461365f565b92915050565b60006020820190508181036000830152613c0f81846136a7565b905092915050565b60006020820190508181036000830152613c3081613711565b9050919050565b60006020820190508181036000830152613c5081613734565b9050919050565b60006020820190508181036000830152613c7081613757565b9050919050565b60006020820190508181036000830152613c908161377a565b9050919050565b60006020820190508181036000830152613cb08161379d565b9050919050565b60006020820190508181036000830152613cd0816137c0565b9050919050565b60006020820190508181036000830152613cf0816137e3565b9050919050565b60006020820190508181036000830152613d1081613806565b9050919050565b60006020820190508181036000830152613d3081613829565b9050919050565b60006020820190508181036000830152613d508161384c565b9050919050565b60006020820190508181036000830152613d708161386f565b9050919050565b60006020820190508181036000830152613d9081613892565b9050919050565b60006020820190508181036000830152613db0816138b5565b9050919050565b60006020820190508181036000830152613dd0816138d8565b9050919050565b60006020820190508181036000830152613df0816138fb565b9050919050565b60006020820190508181036000830152613e108161391e565b9050919050565b60006020820190508181036000830152613e3081613941565b9050919050565b60006020820190508181036000830152613e5081613964565b9050919050565b60006020820190508181036000830152613e7081613987565b9050919050565b60006020820190508181036000830152613e90816139aa565b9050919050565b60006020820190508181036000830152613eb0816139cd565b9050919050565b60006020820190508181036000830152613ed0816139f0565b9050919050565b60006020820190508181036000830152613ef081613a13565b9050919050565b60006020820190508181036000830152613f1081613a36565b9050919050565b60006020820190508181036000830152613f3081613a7c565b9050919050565b60006020820190508181036000830152613f5081613a9f565b9050919050565b60006020820190508181036000830152613f7081613ac2565b9050919050565b60006020820190508181036000830152613f9081613ae5565b9050919050565b60006020820190508181036000830152613fb081613b08565b9050919050565b6000602082019050613fcc6000830184613b2b565b92915050565b6000613fdc613fed565b9050613fe882826142a4565b919050565b6000604051905090565b600067ffffffffffffffff8211156140125761401161443a565b5b61401b8261447d565b9050602081019050919050565b600067ffffffffffffffff8211156140435761404261443a565b5b61404c8261447d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140b282614226565b91506140bd83614226565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f2576140f161434f565b5b828201905092915050565b600061410882614226565b915061411383614226565b9250826141235761412261437e565b5b828204905092915050565b600061413982614226565b915061414483614226565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561417d5761417c61434f565b5b828202905092915050565b600061419382614226565b915061419e83614226565b9250828210156141b1576141b061434f565b5b828203905092915050565b60006141c782614206565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561425d578082015181840152602081019050614242565b8381111561426c576000848401525b50505050565b6000600282049050600182168061428a57607f821691505b6020821081141561429e5761429d6143ad565b5b50919050565b6142ad8261447d565b810181811067ffffffffffffffff821117156142cc576142cb61443a565b5b80604052505050565b60006142e082614226565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143135761431261434f565b5b600182019050919050565b600061432982614226565b915061433483614226565b9250826143445761434361437e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507572636861736520776f756c6420657863656564206d61782072657365727660008201527f6520737570706c79206f6620746f6b656e730000000000000000000000000000602082015250565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f2031302070657220707572636860008201527f6173650000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420757020746f2031302070657220616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f53656e742065746865722076616c756520697320696e636f7272656374000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e74206f6e63650000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b7f507572636861736520776f756c6420657863656564206d6178207075626c696360008201527f20737570706c79206f6620746f6b656e73000000000000000000000000000000602082015250565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b614c37816141bc565b8114614c4257600080fd5b50565b614c4e816141ce565b8114614c5957600080fd5b50565b614c65816141da565b8114614c7057600080fd5b50565b614c7c81614226565b8114614c8757600080fd5b5056fea26469706673582212205da55894a084f0342eaf41a43443ab60400cbd3fd78672a29e6a2f7ba2aaf51264736f6c63430008070033
Deployed Bytecode Sourcemap
52835:4873:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43573:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53048:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31551:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32999:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32522:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44213:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33889:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56368:213;;;;;;;;;;;;;:::i;:::-;;53139:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43881:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53572:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54048:89;;;;;;;;;;;;;:::i;:::-;;54278:923;;;;;;;;;;;;;:::i;:::-;;34299:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44403:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56795:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56075:287;;;;;;;;;;;;;:::i;:::-;;31245:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54145:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52987:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30975:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28798:148;;;;;;;;;;;;;:::i;:::-;;28147:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55211:856;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31720:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33292:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53185:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34555:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56912:793;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53270:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33658:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53231:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29101:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43573:224;43675:4;43714:35;43699:50;;;:11;:50;;;;:90;;;;43753:36;43777:11;43753:23;:36::i;:::-;43699:90;43692:97;;43573:224;;;:::o;53048:42::-;53088:2;53048:42;:::o;31551:100::-;31605:13;31638:5;31631:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31551:100;:::o;32999:221::-;33075:7;33103:16;33111:7;33103;:16::i;:::-;33095:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33188:15;:24;33204:7;33188:24;;;;;;;;;;;;;;;;;;;;;33181:31;;32999:221;;;:::o;32522:411::-;32603:13;32619:23;32634:7;32619:14;:23::i;:::-;32603:39;;32667:5;32661:11;;:2;:11;;;;32653:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32761:5;32745:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32770:37;32787:5;32794:12;:10;:12::i;:::-;32770:16;:37::i;:::-;32745:62;32723:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32904:21;32913:2;32917:7;32904:8;:21::i;:::-;32592:341;32522:411;;:::o;44213:113::-;44274:7;44301:10;:17;;;;44294:24;;44213:113;:::o;33889:339::-;34084:41;34103:12;:10;:12::i;:::-;34117:7;34084:18;:41::i;:::-;34076:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34192:28;34202:4;34208:2;34212:7;34192:9;:28::i;:::-;33889:339;;;:::o;56368:213::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56453:18:::1;;56429:20;56447:1;56429:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:42;;56421:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;56537:36;56547:10;56559:13;:11;:13::i;:::-;56537:9;:36::i;:::-;56368:213::o:0;53139:39::-;;;;:::o;43881:256::-;43978:7;44014:23;44031:5;44014:16;:23::i;:::-;44006:5;:31;43998:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44103:12;:19;44116:5;44103:19;;;;;;;;;;;;;;;:26;44123:5;44103:26;;;;;;;;;;;;44096:33;;43881:256;;;;:::o;53572:36::-;;;;;;;;;;;;;:::o;54048:89::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54117:12:::1;;;;;;;;;;;54116:13;54101:12;;:28;;;;;;;;;;;;;;;;;;54048:89::o:0;54278:923::-;54358:11;;;;;;;;;;;54344:25;;:10;:25;;;:71;;;;54404:11;;;;;;;;;;;54390:25;;:10;:25;;;54344:71;:119;;;;54450:13;;;;;;;;;;;54436:27;;:10;:27;;;54344:119;54318:157;;;;;;54488:11;54502:21;54488:35;;54536:17;54556:20;54572:3;54556:11;54564:2;54556:3;:7;;:11;;;;:::i;:::-;:15;;:20;;;;:::i;:::-;54536:40;;54588:10;54603:11;;;;;;;;;;;:16;;54627:9;54603:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54587:54;;;54660:5;54652:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;54703:18;54724:20;54740:3;54724:11;54732:2;54724:3;:7;;:11;;;;:::i;:::-;:15;;:20;;;;:::i;:::-;54703:41;;54756:10;54771:11;;;;;;;;;;;:16;;54795:10;54771:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54755:55;;;54829:5;54821:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;54872:11;54886:20;54902:3;54886:11;54894:2;54886:3;:7;;:11;;;;:::i;:::-;:15;;:20;;;;:::i;:::-;54872:34;;54918:10;54933:13;;;;;;;;;;;:18;;54959:3;54933:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54917:50;;;54986:5;54978:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;55038:17;55058:21;55038:41;;55091:10;55106:11;;;;;;;;;;;:16;;55130:9;55106:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55090:54;;;55163:5;55155:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;54307:894;;;;;;;;;54278:923::o;34299:185::-;34437:39;34454:4;34460:2;34464:7;34437:39;;;;;;;;;;;;:16;:39::i;:::-;34299:185;;;:::o;44403:233::-;44478:7;44514:30;:28;:30::i;:::-;44506:5;:38;44498:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44611:10;44622:5;44611:17;;;;;;;;:::i;:::-;;;;;;;;;;44604:24;;44403:233;;;:::o;56795:109::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56888:8:::1;56869:16;:27;;;;;;;;;;;;:::i;:::-;;56795:109:::0;:::o;56075:287::-;53869:6;:20;53876:12;:10;:12::i;:::-;53869:20;;;;;;;;;;;;;;;;;;;;;;;;;53868:21;53860:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;53946:4;53923:6;:20;53930:12;:10;:12::i;:::-;53923:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;56144:12:::1;;;;;;;;;;;56136:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;56236:17;;56212:20;56230:1;56212:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:41;;56204:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;56318:36;56328:10;56340:13;:11;:13::i;:::-;56318:9;:36::i;:::-;56075:287::o:0;31245:239::-;31317:7;31337:13;31353:7;:16;31361:7;31353:16;;;;;;;;;;;;;;;;;;;;;31337:32;;31405:1;31388:19;;:5;:19;;;;31380:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31471:5;31464:12;;;31245:239;;;:::o;54145:125::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54245:17:::1;54229:13;;:33;;;;;;;;;;;;;;;;;;54145:125:::0;:::o;52987:53::-;53023:17;52987:53;:::o;30975:208::-;31047:7;31092:1;31075:19;;:5;:19;;;;31067:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31159:9;:16;31169:5;31159:16;;;;;;;;;;;;;;;;31152:23;;30975:208;;;:::o;28798:148::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28905:1:::1;28868:40;;28889:6;;;;;;;;;;;28868:40;;;;;;;;;;;;28936:1;28919:6;;:19;;;;;;;;;;;;;;;;;;28798:148::o:0;28147:87::-;28193:7;28220:6;;;;;;;;;;;28213:13;;28147:87;:::o;55211:856::-;53088:2;55287:41;55313:14;55287:9;:21;55297:10;55287:21;;;;;;;;;;;;;;;;:25;;:41;;;;:::i;:::-;:61;;55279:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;55425:14;;55406:15;:33;;55398:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;55504:1;55487:14;:18;55479:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;55617:17;;55580:33;55598:14;55580:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:54;;55572:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;53088:2;55700:14;:34;;55692:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;55825:9;55792:29;55806:14;53023:17;55792:13;;:29;;;;:::i;:::-;:42;55784:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;55903:41;55929:14;55903:9;:21;55913:10;55903:21;;;;;;;;;;;;;;;;:25;;:41;;;;:::i;:::-;55879:9;:21;55889:10;55879:21;;;;;;;;;;;;;;;:65;;;;55960:6;55955:105;55976:14;55972:1;:18;55955:105;;;56012:36;56022:10;56034:13;:11;:13::i;:::-;56012:9;:36::i;:::-;55992:3;;;;;:::i;:::-;;;;55955:105;;;;55211:856;:::o;31720:104::-;31776:13;31809:7;31802:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31720:104;:::o;33292:295::-;33407:12;:10;:12::i;:::-;33395:24;;:8;:24;;;;33387:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33507:8;33462:18;:32;33481:12;:10;:12::i;:::-;33462:32;;;;;;;;;;;;;;;:42;33495:8;33462:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33560:8;33531:48;;33546:12;:10;:12::i;:::-;33531:48;;;33570:8;33531:48;;;;;;:::i;:::-;;;;;;;;33292:295;;:::o;53185:39::-;;;;:::o;34555:328::-;34730:41;34749:12;:10;:12::i;:::-;34763:7;34730:18;:41::i;:::-;34722:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34836:39;34850:4;34856:2;34860:7;34869:5;34836:13;:39::i;:::-;34555:328;;;;:::o;56912:793::-;56985:13;57019:16;57027:7;57019;:16::i;:::-;57011:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;57100:23;57126:10;:19;57137:7;57126:19;;;;;;;;;;;57100:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57156:18;57177:10;:8;:10::i;:::-;57156:31;;57285:1;57269:4;57263:18;:23;57259:72;;;57310:9;57303:16;;;;;;57259:72;57461:1;57441:9;57435:23;:27;57431:108;;;57510:4;57516:9;57493:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57479:48;;;;;;57431:108;57671:4;57677:18;:7;:16;:18::i;:::-;57654:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57640:57;;;;56912:793;;;;:::o;53270:39::-;;;;:::o;33658:164::-;33755:4;33779:18;:25;33798:5;33779:25;;;;;;;;;;;;;;;:35;33805:8;33779:35;;;;;;;;;;;;;;;;;;;;;;;;;33772:42;;33658:164;;;;:::o;53231:32::-;;;;;;;;;;;;;:::o;29101:244::-;28378:12;:10;:12::i;:::-;28367:23;;:7;:5;:7::i;:::-;:23;;;28359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:1:::1;29190:22;;:8;:22;;;;29182:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29300:8;29271:38;;29292:6;;;;;;;;;;;29271:38;;;;;;;;;;;;29329:8;29320:6;;:17;;;;;;;;;;;;;;;;;;29101:244:::0;:::o;30606:305::-;30708:4;30760:25;30745:40;;;:11;:40;;;;:105;;;;30817:33;30802:48;;;:11;:48;;;;30745:105;:158;;;;30867:36;30891:11;30867:23;:36::i;:::-;30745:158;30725:178;;30606:305;;;:::o;36393:127::-;36458:4;36510:1;36482:30;;:7;:16;36490:7;36482:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36475:37;;36393:127;;;:::o;26765:98::-;26818:7;26845:10;26838:17;;26765:98;:::o;40375:174::-;40477:2;40450:15;:24;40466:7;40450:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40533:7;40529:2;40495:46;;40504:23;40519:7;40504:14;:23::i;:::-;40495:46;;;;;;;;;;;;40375:174;;:::o;36687:348::-;36780:4;36805:16;36813:7;36805;:16::i;:::-;36797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36881:13;36897:23;36912:7;36897:14;:23::i;:::-;36881:39;;36950:5;36939:16;;:7;:16;;;:51;;;;36983:7;36959:31;;:20;36971:7;36959:11;:20::i;:::-;:31;;;36939:51;:87;;;;36994:32;37011:5;37018:7;36994:16;:32::i;:::-;36939:87;36931:96;;;36687:348;;;;:::o;39679:578::-;39838:4;39811:31;;:23;39826:7;39811:14;:23::i;:::-;:31;;;39803:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39921:1;39907:16;;:2;:16;;;;39899:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39977:39;39998:4;40004:2;40008:7;39977:20;:39::i;:::-;40081:29;40098:1;40102:7;40081:8;:29::i;:::-;40142:1;40123:9;:15;40133:4;40123:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40171:1;40154:9;:13;40164:2;40154:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40202:2;40183:7;:16;40191:7;40183:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40241:7;40237:2;40222:27;;40231:4;40222:27;;;;;;;;;;;;39679:578;;;:::o;2763:98::-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;37377:110::-;37453:26;37463:2;37467:7;37453:26;;;;;;;;;;;;:9;:26::i;:::-;37377:110;;:::o;3501:98::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;3900:::-;3958:7;3989:1;3985;:5;;;;:::i;:::-;3978:12;;3900:98;;;;:::o;35765:315::-;35922:28;35932:4;35938:2;35942:7;35922:9;:28::i;:::-;35969:48;35992:4;35998:2;36002:7;36011:5;35969:22;:48::i;:::-;35961:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35765:315;;;;:::o;56591:117::-;56651:13;56684:16;56677:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56591:117;:::o;7404:723::-;7460:13;7690:1;7681:5;:10;7677:53;;;7708:10;;;;;;;;;;;;;;;;;;;;;7677:53;7740:12;7755:5;7740:20;;7771:14;7796:78;7811:1;7803:4;:9;7796:78;;7829:8;;;;;:::i;:::-;;;;7860:2;7852:10;;;;;:::i;:::-;;;7796:78;;;7884:19;7916:6;7906:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7884:39;;7934:154;7950:1;7941:5;:10;7934:154;;7978:1;7968:11;;;;;:::i;:::-;;;8045:2;8037:5;:10;;;;:::i;:::-;8024:2;:24;;;;:::i;:::-;8011:39;;7994:6;8001;7994:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8074:2;8065:11;;;;;:::i;:::-;;;7934:154;;;8112:6;8098:21;;;;;7404:723;;;;:::o;19751:157::-;19836:4;19875:25;19860:40;;;:11;:40;;;;19853:47;;19751:157;;;:::o;45249:589::-;45393:45;45420:4;45426:2;45430:7;45393:26;:45::i;:::-;45471:1;45455:18;;:4;:18;;;45451:187;;;45490:40;45522:7;45490:31;:40::i;:::-;45451:187;;;45560:2;45552:10;;:4;:10;;;45548:90;;45579:47;45612:4;45618:7;45579:32;:47::i;:::-;45548:90;45451:187;45666:1;45652:16;;:2;:16;;;45648:183;;;45685:45;45722:7;45685:36;:45::i;:::-;45648:183;;;45758:4;45752:10;;:2;:10;;;45748:83;;45779:40;45807:2;45811:7;45779:27;:40::i;:::-;45748:83;45648:183;45249:589;;;:::o;37714:321::-;37844:18;37850:2;37854:7;37844:5;:18::i;:::-;37895:54;37926:1;37930:2;37934:7;37943:5;37895:22;:54::i;:::-;37873:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37714:321;;;:::o;41114:872::-;41269:4;41290:15;:2;:13;;;:15::i;:::-;41286:693;;;41342:2;41326:36;;;41363:12;:10;:12::i;:::-;41377:4;41383:7;41392:5;41326:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41322:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41589:1;41572:6;:13;:18;41568:341;;;41615:60;;;;;;;;;;:::i;:::-;;;;;;;;41568:341;41859:6;41853:13;41844:6;41840:2;41836:15;41829:38;41322:602;41459:45;;;41449:55;;;:6;:55;;;;41442:62;;;;;41286:693;41963:4;41956:11;;41114:872;;;;;;;:::o;42599:126::-;;;;:::o;46561:164::-;46665:10;:17;;;;46638:15;:24;46654:7;46638:24;;;;;;;;;;;:44;;;;46693:10;46709:7;46693:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46561:164;:::o;47352:988::-;47618:22;47668:1;47643:22;47660:4;47643:16;:22::i;:::-;:26;;;;:::i;:::-;47618:51;;47680:18;47701:17;:26;47719:7;47701:26;;;;;;;;;;;;47680:47;;47848:14;47834:10;:28;47830:328;;47879:19;47901:12;:18;47914:4;47901:18;;;;;;;;;;;;;;;:34;47920:14;47901:34;;;;;;;;;;;;47879:56;;47985:11;47952:12;:18;47965:4;47952:18;;;;;;;;;;;;;;;:30;47971:10;47952:30;;;;;;;;;;;:44;;;;48102:10;48069:17;:30;48087:11;48069:30;;;;;;;;;;;:43;;;;47864:294;47830:328;48254:17;:26;48272:7;48254:26;;;;;;;;;;;48247:33;;;48298:12;:18;48311:4;48298:18;;;;;;;;;;;;;;;:34;48317:14;48298:34;;;;;;;;;;;48291:41;;;47433:907;;47352:988;;:::o;48635:1079::-;48888:22;48933:1;48913:10;:17;;;;:21;;;;:::i;:::-;48888:46;;48945:18;48966:15;:24;48982:7;48966:24;;;;;;;;;;;;48945:45;;49317:19;49339:10;49350:14;49339:26;;;;;;;;:::i;:::-;;;;;;;;;;49317:48;;49403:11;49378:10;49389;49378:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49514:10;49483:15;:28;49499:11;49483:28;;;;;;;;;;;:41;;;;49655:15;:24;49671:7;49655:24;;;;;;;;;;;49648:31;;;49690:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48706:1008;;;48635:1079;:::o;46139:221::-;46224:14;46241:20;46258:2;46241:16;:20::i;:::-;46224:37;;46299:7;46272:12;:16;46285:2;46272:16;;;;;;;;;;;;;;;:24;46289:6;46272:24;;;;;;;;;;;:34;;;;46346:6;46317:17;:26;46335:7;46317:26;;;;;;;;;;;:35;;;;46213:147;46139:221;;:::o;38371:382::-;38465:1;38451:16;;:2;:16;;;;38443:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38524:16;38532:7;38524;:16::i;:::-;38523:17;38515:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38586:45;38615:1;38619:2;38623:7;38586:20;:45::i;:::-;38661:1;38644:9;:13;38654:2;38644:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38692:2;38673:7;:16;38681:7;38673:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38737:7;38733:2;38712:33;;38729:1;38712:33;;;;;;;;;;;;38371:382;;:::o;9867:444::-;9927:4;10135:12;10259:7;10247:20;10239:28;;10302:1;10295:4;:8;10288:15;;;9867:444;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;15956:366;;;:::o;16328:::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:::-;17214:3;17235:67;17299:2;17294:3;17235:67;:::i;:::-;17228:74;;17311:93;17400:3;17311:93;:::i;:::-;17429:2;17424:3;17420:12;17413:19;;17072:366;;;:::o;17444:398::-;17603:3;17624:83;17705:1;17700:3;17624:83;:::i;:::-;17617:90;;17716:93;17805:3;17716:93;:::i;:::-;17834:1;17829:3;17825:11;17818:18;;17444:398;;;:::o;17848:366::-;17990:3;18011:67;18075:2;18070:3;18011:67;:::i;:::-;18004:74;;18087:93;18176:3;18087:93;:::i;:::-;18205:2;18200:3;18196:12;18189:19;;17848:366;;;:::o;18220:::-;18362:3;18383:67;18447:2;18442:3;18383:67;:::i;:::-;18376:74;;18459:93;18548:3;18459:93;:::i;:::-;18577:2;18572:3;18568:12;18561:19;;18220:366;;;:::o;18592:::-;18734:3;18755:67;18819:2;18814:3;18755:67;:::i;:::-;18748:74;;18831:93;18920:3;18831:93;:::i;:::-;18949:2;18944:3;18940:12;18933:19;;18592:366;;;:::o;18964:::-;19106:3;19127:67;19191:2;19186:3;19127:67;:::i;:::-;19120:74;;19203:93;19292:3;19203:93;:::i;:::-;19321:2;19316:3;19312:12;19305:19;;18964:366;;;:::o;19336:::-;19478:3;19499:67;19563:2;19558:3;19499:67;:::i;:::-;19492:74;;19575:93;19664:3;19575:93;:::i;:::-;19693:2;19688:3;19684:12;19677:19;;19336:366;;;:::o;19708:118::-;19795:24;19813:5;19795:24;:::i;:::-;19790:3;19783:37;19708:118;;:::o;19832:435::-;20012:3;20034:95;20125:3;20116:6;20034:95;:::i;:::-;20027:102;;20146:95;20237:3;20228:6;20146:95;:::i;:::-;20139:102;;20258:3;20251:10;;19832:435;;;;;:::o;20273:379::-;20457:3;20479:147;20622:3;20479:147;:::i;:::-;20472:154;;20643:3;20636:10;;20273:379;;;:::o;20658:222::-;20751:4;20789:2;20778:9;20774:18;20766:26;;20802:71;20870:1;20859:9;20855:17;20846:6;20802:71;:::i;:::-;20658:222;;;;:::o;20886:640::-;21081:4;21119:3;21108:9;21104:19;21096:27;;21133:71;21201:1;21190:9;21186:17;21177:6;21133:71;:::i;:::-;21214:72;21282:2;21271:9;21267:18;21258:6;21214:72;:::i;:::-;21296;21364:2;21353:9;21349:18;21340:6;21296:72;:::i;:::-;21415:9;21409:4;21405:20;21400:2;21389:9;21385:18;21378:48;21443:76;21514:4;21505:6;21443:76;:::i;:::-;21435:84;;20886:640;;;;;;;:::o;21532:210::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21670:65;21732:1;21721:9;21717:17;21708:6;21670:65;:::i;:::-;21532:210;;;;:::o;21748:313::-;21861:4;21899:2;21888:9;21884:18;21876:26;;21948:9;21942:4;21938:20;21934:1;21923:9;21919:17;21912:47;21976:78;22049:4;22040:6;21976:78;:::i;:::-;21968:86;;21748:313;;;;:::o;22067:419::-;22233:4;22271:2;22260:9;22256:18;22248:26;;22320:9;22314:4;22310:20;22306:1;22295:9;22291:17;22284:47;22348:131;22474:4;22348:131;:::i;:::-;22340:139;;22067:419;;;:::o;22492:::-;22658:4;22696:2;22685:9;22681:18;22673:26;;22745:9;22739:4;22735:20;22731:1;22720:9;22716:17;22709:47;22773:131;22899:4;22773:131;:::i;:::-;22765:139;;22492:419;;;:::o;22917:::-;23083:4;23121:2;23110:9;23106:18;23098:26;;23170:9;23164:4;23160:20;23156:1;23145:9;23141:17;23134:47;23198:131;23324:4;23198:131;:::i;:::-;23190:139;;22917:419;;;:::o;23342:::-;23508:4;23546:2;23535:9;23531:18;23523:26;;23595:9;23589:4;23585:20;23581:1;23570:9;23566:17;23559:47;23623:131;23749:4;23623:131;:::i;:::-;23615:139;;23342:419;;;:::o;23767:::-;23933:4;23971:2;23960:9;23956:18;23948:26;;24020:9;24014:4;24010:20;24006:1;23995:9;23991:17;23984:47;24048:131;24174:4;24048:131;:::i;:::-;24040:139;;23767:419;;;:::o;24192:::-;24358:4;24396:2;24385:9;24381:18;24373:26;;24445:9;24439:4;24435:20;24431:1;24420:9;24416:17;24409:47;24473:131;24599:4;24473:131;:::i;:::-;24465:139;;24192:419;;;:::o;24617:::-;24783:4;24821:2;24810:9;24806:18;24798:26;;24870:9;24864:4;24860:20;24856:1;24845:9;24841:17;24834:47;24898:131;25024:4;24898:131;:::i;:::-;24890:139;;24617:419;;;:::o;25042:::-;25208:4;25246:2;25235:9;25231:18;25223:26;;25295:9;25289:4;25285:20;25281:1;25270:9;25266:17;25259:47;25323:131;25449:4;25323:131;:::i;:::-;25315:139;;25042:419;;;:::o;25467:::-;25633:4;25671:2;25660:9;25656:18;25648:26;;25720:9;25714:4;25710:20;25706:1;25695:9;25691:17;25684:47;25748:131;25874:4;25748:131;:::i;:::-;25740:139;;25467:419;;;:::o;25892:::-;26058:4;26096:2;26085:9;26081:18;26073:26;;26145:9;26139:4;26135:20;26131:1;26120:9;26116:17;26109:47;26173:131;26299:4;26173:131;:::i;:::-;26165:139;;25892:419;;;:::o;26317:::-;26483:4;26521:2;26510:9;26506:18;26498:26;;26570:9;26564:4;26560:20;26556:1;26545:9;26541:17;26534:47;26598:131;26724:4;26598:131;:::i;:::-;26590:139;;26317:419;;;:::o;26742:::-;26908:4;26946:2;26935:9;26931:18;26923:26;;26995:9;26989:4;26985:20;26981:1;26970:9;26966:17;26959:47;27023:131;27149:4;27023:131;:::i;:::-;27015:139;;26742:419;;;:::o;27167:::-;27333:4;27371:2;27360:9;27356:18;27348:26;;27420:9;27414:4;27410:20;27406:1;27395:9;27391:17;27384:47;27448:131;27574:4;27448:131;:::i;:::-;27440:139;;27167:419;;;:::o;27592:::-;27758:4;27796:2;27785:9;27781:18;27773:26;;27845:9;27839:4;27835:20;27831:1;27820:9;27816:17;27809:47;27873:131;27999:4;27873:131;:::i;:::-;27865:139;;27592:419;;;:::o;28017:::-;28183:4;28221:2;28210:9;28206:18;28198:26;;28270:9;28264:4;28260:20;28256:1;28245:9;28241:17;28234:47;28298:131;28424:4;28298:131;:::i;:::-;28290:139;;28017:419;;;:::o;28442:::-;28608:4;28646:2;28635:9;28631:18;28623:26;;28695:9;28689:4;28685:20;28681:1;28670:9;28666:17;28659:47;28723:131;28849:4;28723:131;:::i;:::-;28715:139;;28442:419;;;:::o;28867:::-;29033:4;29071:2;29060:9;29056:18;29048:26;;29120:9;29114:4;29110:20;29106:1;29095:9;29091:17;29084:47;29148:131;29274:4;29148:131;:::i;:::-;29140:139;;28867:419;;;:::o;29292:::-;29458:4;29496:2;29485:9;29481:18;29473:26;;29545:9;29539:4;29535:20;29531:1;29520:9;29516:17;29509:47;29573:131;29699:4;29573:131;:::i;:::-;29565:139;;29292:419;;;:::o;29717:::-;29883:4;29921:2;29910:9;29906:18;29898:26;;29970:9;29964:4;29960:20;29956:1;29945:9;29941:17;29934:47;29998:131;30124:4;29998:131;:::i;:::-;29990:139;;29717:419;;;:::o;30142:::-;30308:4;30346:2;30335:9;30331:18;30323:26;;30395:9;30389:4;30385:20;30381:1;30370:9;30366:17;30359:47;30423:131;30549:4;30423:131;:::i;:::-;30415:139;;30142:419;;;:::o;30567:::-;30733:4;30771:2;30760:9;30756:18;30748:26;;30820:9;30814:4;30810:20;30806:1;30795:9;30791:17;30784:47;30848:131;30974:4;30848:131;:::i;:::-;30840:139;;30567:419;;;:::o;30992:::-;31158:4;31196:2;31185:9;31181:18;31173:26;;31245:9;31239:4;31235:20;31231:1;31220:9;31216:17;31209:47;31273:131;31399:4;31273:131;:::i;:::-;31265:139;;30992:419;;;:::o;31417:::-;31583:4;31621:2;31610:9;31606:18;31598:26;;31670:9;31664:4;31660:20;31656:1;31645:9;31641:17;31634:47;31698:131;31824:4;31698:131;:::i;:::-;31690:139;;31417:419;;;:::o;31842:::-;32008:4;32046:2;32035:9;32031:18;32023:26;;32095:9;32089:4;32085:20;32081:1;32070:9;32066:17;32059:47;32123:131;32249:4;32123:131;:::i;:::-;32115:139;;31842:419;;;:::o;32267:::-;32433:4;32471:2;32460:9;32456:18;32448:26;;32520:9;32514:4;32510:20;32506:1;32495:9;32491:17;32484:47;32548:131;32674:4;32548:131;:::i;:::-;32540:139;;32267:419;;;:::o;32692:::-;32858:4;32896:2;32885:9;32881:18;32873:26;;32945:9;32939:4;32935:20;32931:1;32920:9;32916:17;32909:47;32973:131;33099:4;32973:131;:::i;:::-;32965:139;;32692:419;;;:::o;33117:::-;33283:4;33321:2;33310:9;33306:18;33298:26;;33370:9;33364:4;33360:20;33356:1;33345:9;33341:17;33334:47;33398:131;33524:4;33398:131;:::i;:::-;33390:139;;33117:419;;;:::o;33542:::-;33708:4;33746:2;33735:9;33731:18;33723:26;;33795:9;33789:4;33785:20;33781:1;33770:9;33766:17;33759:47;33823:131;33949:4;33823:131;:::i;:::-;33815:139;;33542:419;;;:::o;33967:::-;34133:4;34171:2;34160:9;34156:18;34148:26;;34220:9;34214:4;34210:20;34206:1;34195:9;34191:17;34184:47;34248:131;34374:4;34248:131;:::i;:::-;34240:139;;33967:419;;;:::o;34392:222::-;34485:4;34523:2;34512:9;34508:18;34500:26;;34536:71;34604:1;34593:9;34589:17;34580:6;34536:71;:::i;:::-;34392:222;;;;:::o;34620:129::-;34654:6;34681:20;;:::i;:::-;34671:30;;34710:33;34738:4;34730:6;34710:33;:::i;:::-;34620:129;;;:::o;34755:75::-;34788:6;34821:2;34815:9;34805:19;;34755:75;:::o;34836:307::-;34897:4;34987:18;34979:6;34976:30;34973:56;;;35009:18;;:::i;:::-;34973:56;35047:29;35069:6;35047:29;:::i;:::-;35039:37;;35131:4;35125;35121:15;35113:23;;34836:307;;;:::o;35149:308::-;35211:4;35301:18;35293:6;35290:30;35287:56;;;35323:18;;:::i;:::-;35287:56;35361:29;35383:6;35361:29;:::i;:::-;35353:37;;35445:4;35439;35435:15;35427:23;;35149:308;;;:::o;35463:98::-;35514:6;35548:5;35542:12;35532:22;;35463:98;;;:::o;35567:99::-;35619:6;35653:5;35647:12;35637:22;;35567:99;;;:::o;35672:168::-;35755:11;35789:6;35784:3;35777:19;35829:4;35824:3;35820:14;35805:29;;35672:168;;;;:::o;35846:147::-;35947:11;35984:3;35969:18;;35846:147;;;;:::o;35999:169::-;36083:11;36117:6;36112:3;36105:19;36157:4;36152:3;36148:14;36133:29;;35999:169;;;;:::o;36174:148::-;36276:11;36313:3;36298:18;;36174:148;;;;:::o;36328:305::-;36368:3;36387:20;36405:1;36387:20;:::i;:::-;36382:25;;36421:20;36439:1;36421:20;:::i;:::-;36416:25;;36575:1;36507:66;36503:74;36500:1;36497:81;36494:107;;;36581:18;;:::i;:::-;36494:107;36625:1;36622;36618:9;36611:16;;36328:305;;;;:::o;36639:185::-;36679:1;36696:20;36714:1;36696:20;:::i;:::-;36691:25;;36730:20;36748:1;36730:20;:::i;:::-;36725:25;;36769:1;36759:35;;36774:18;;:::i;:::-;36759:35;36816:1;36813;36809:9;36804:14;;36639:185;;;;:::o;36830:348::-;36870:7;36893:20;36911:1;36893:20;:::i;:::-;36888:25;;36927:20;36945:1;36927:20;:::i;:::-;36922:25;;37115:1;37047:66;37043:74;37040:1;37037:81;37032:1;37025:9;37018:17;37014:105;37011:131;;;37122:18;;:::i;:::-;37011:131;37170:1;37167;37163:9;37152:20;;36830:348;;;;:::o;37184:191::-;37224:4;37244:20;37262:1;37244:20;:::i;:::-;37239:25;;37278:20;37296:1;37278:20;:::i;:::-;37273:25;;37317:1;37314;37311:8;37308:34;;;37322:18;;:::i;:::-;37308:34;37367:1;37364;37360:9;37352:17;;37184:191;;;;:::o;37381:96::-;37418:7;37447:24;37465:5;37447:24;:::i;:::-;37436:35;;37381:96;;;:::o;37483:90::-;37517:7;37560:5;37553:13;37546:21;37535:32;;37483:90;;;:::o;37579:149::-;37615:7;37655:66;37648:5;37644:78;37633:89;;37579:149;;;:::o;37734:126::-;37771:7;37811:42;37804:5;37800:54;37789:65;;37734:126;;;:::o;37866:77::-;37903:7;37932:5;37921:16;;37866:77;;;:::o;37949:154::-;38033:6;38028:3;38023;38010:30;38095:1;38086:6;38081:3;38077:16;38070:27;37949:154;;;:::o;38109:307::-;38177:1;38187:113;38201:6;38198:1;38195:13;38187:113;;;38286:1;38281:3;38277:11;38271:18;38267:1;38262:3;38258:11;38251:39;38223:2;38220:1;38216:10;38211:15;;38187:113;;;38318:6;38315:1;38312:13;38309:101;;;38398:1;38389:6;38384:3;38380:16;38373:27;38309:101;38158:258;38109:307;;;:::o;38422:320::-;38466:6;38503:1;38497:4;38493:12;38483:22;;38550:1;38544:4;38540:12;38571:18;38561:81;;38627:4;38619:6;38615:17;38605:27;;38561:81;38689:2;38681:6;38678:14;38658:18;38655:38;38652:84;;;38708:18;;:::i;:::-;38652:84;38473:269;38422:320;;;:::o;38748:281::-;38831:27;38853:4;38831:27;:::i;:::-;38823:6;38819:40;38961:6;38949:10;38946:22;38925:18;38913:10;38910:34;38907:62;38904:88;;;38972:18;;:::i;:::-;38904:88;39012:10;39008:2;39001:22;38791:238;38748:281;;:::o;39035:233::-;39074:3;39097:24;39115:5;39097:24;:::i;:::-;39088:33;;39143:66;39136:5;39133:77;39130:103;;;39213:18;;:::i;:::-;39130:103;39260:1;39253:5;39249:13;39242:20;;39035:233;;;:::o;39274:176::-;39306:1;39323:20;39341:1;39323:20;:::i;:::-;39318:25;;39357:20;39375:1;39357:20;:::i;:::-;39352:25;;39396:1;39386:35;;39401:18;;:::i;:::-;39386:35;39442:1;39439;39435:9;39430:14;;39274:176;;;;:::o;39456:180::-;39504:77;39501:1;39494:88;39601:4;39598:1;39591:15;39625:4;39622:1;39615:15;39642:180;39690:77;39687:1;39680:88;39787:4;39784:1;39777:15;39811:4;39808:1;39801:15;39828:180;39876:77;39873:1;39866:88;39973:4;39970:1;39963:15;39997:4;39994:1;39987:15;40014:180;40062:77;40059:1;40052:88;40159:4;40156:1;40149:15;40183:4;40180:1;40173:15;40200:180;40248:77;40245:1;40238:88;40345:4;40342:1;40335:15;40369:4;40366:1;40359:15;40386:180;40434:77;40431:1;40424:88;40531:4;40528:1;40521:15;40555:4;40552:1;40545:15;40572:117;40681:1;40678;40671:12;40695:117;40804:1;40801;40794:12;40818:117;40927:1;40924;40917:12;40941:117;41050:1;41047;41040:12;41064:102;41105:6;41156:2;41152:7;41147:2;41140:5;41136:14;41132:28;41122:38;;41064:102;;;:::o;41172:237::-;41312:34;41308:1;41300:6;41296:14;41289:58;41381:20;41376:2;41368:6;41364:15;41357:45;41172:237;:::o;41415:238::-;41555:34;41551:1;41543:6;41539:14;41532:58;41624:21;41619:2;41611:6;41607:15;41600:46;41415:238;:::o;41659:230::-;41799:34;41795:1;41787:6;41783:14;41776:58;41868:13;41863:2;41855:6;41851:15;41844:38;41659:230;:::o;41895:237::-;42035:34;42031:1;42023:6;42019:14;42012:58;42104:20;42099:2;42091:6;42087:15;42080:45;41895:237;:::o;42138:225::-;42278:34;42274:1;42266:6;42262:14;42255:58;42347:8;42342:2;42334:6;42330:15;42323:33;42138:225;:::o;42369:178::-;42509:30;42505:1;42497:6;42493:14;42486:54;42369:178;:::o;42553:222::-;42693:34;42689:1;42681:6;42677:14;42670:58;42762:5;42757:2;42749:6;42745:15;42738:30;42553:222;:::o;42781:221::-;42921:34;42917:1;42909:6;42905:14;42898:58;42990:4;42985:2;42977:6;42973:15;42966:29;42781:221;:::o;43008:170::-;43148:22;43144:1;43136:6;43132:14;43125:46;43008:170;:::o;43184:223::-;43324:34;43320:1;43312:6;43308:14;43301:58;43393:6;43388:2;43380:6;43376:15;43369:31;43184:223;:::o;43413:175::-;43553:27;43549:1;43541:6;43537:14;43530:51;43413:175;:::o;43594:231::-;43734:34;43730:1;43722:6;43718:14;43711:58;43803:14;43798:2;43790:6;43786:15;43779:39;43594:231;:::o;43831:243::-;43971:34;43967:1;43959:6;43955:14;43948:58;44040:26;44035:2;44027:6;44023:15;44016:51;43831:243;:::o;44080:229::-;44220:34;44216:1;44208:6;44204:14;44197:58;44289:12;44284:2;44276:6;44272:15;44265:37;44080:229;:::o;44315:228::-;44455:34;44451:1;44443:6;44439:14;44432:58;44524:11;44519:2;44511:6;44507:15;44500:36;44315:228;:::o;44549:229::-;44689:34;44685:1;44677:6;44673:14;44666:58;44758:12;44753:2;44745:6;44741:15;44734:37;44549:229;:::o;44784:179::-;44924:31;44920:1;44912:6;44908:14;44901:55;44784:179;:::o;44969:182::-;45109:34;45105:1;45097:6;45093:14;45086:58;44969:182;:::o;45157:231::-;45297:34;45293:1;45285:6;45281:14;45274:58;45366:14;45361:2;45353:6;45349:15;45342:39;45157:231;:::o;45394:182::-;45534:34;45530:1;45522:6;45518:14;45511:58;45394:182;:::o;45582:228::-;45722:34;45718:1;45710:6;45706:14;45699:58;45791:11;45786:2;45778:6;45774:15;45767:36;45582:228;:::o;45816:234::-;45956:34;45952:1;45944:6;45940:14;45933:58;46025:17;46020:2;46012:6;46008:15;46001:42;45816:234;:::o;46056:220::-;46196:34;46192:1;46184:6;46180:14;46173:58;46265:3;46260:2;46252:6;46248:15;46241:28;46056:220;:::o;46282:168::-;46422:20;46418:1;46410:6;46406:14;46399:44;46282:168;:::o;46456:114::-;;:::o;46576:236::-;46716:34;46712:1;46704:6;46700:14;46693:58;46785:19;46780:2;46772:6;46768:15;46761:44;46576:236;:::o;46818:231::-;46958:34;46954:1;46946:6;46942:14;46935:58;47027:14;47022:2;47014:6;47010:15;47003:39;46818:231;:::o;47055:174::-;47195:26;47191:1;47183:6;47179:14;47172:50;47055:174;:::o;47235:236::-;47375:34;47371:1;47363:6;47359:14;47352:58;47444:19;47439:2;47431:6;47427:15;47420:44;47235:236;:::o;47477:182::-;47617:34;47613:1;47605:6;47601:14;47594:58;47477:182;:::o;47665:122::-;47738:24;47756:5;47738:24;:::i;:::-;47731:5;47728:35;47718:63;;47777:1;47774;47767:12;47718:63;47665:122;:::o;47793:116::-;47863:21;47878:5;47863:21;:::i;:::-;47856:5;47853:32;47843:60;;47899:1;47896;47889:12;47843:60;47793:116;:::o;47915:120::-;47987:23;48004:5;47987:23;:::i;:::-;47980:5;47977:34;47967:62;;48025:1;48022;48015:12;47967:62;47915:120;:::o;48041:122::-;48114:24;48132:5;48114:24;:::i;:::-;48107:5;48104:35;48094:63;;48153:1;48150;48143:12;48094:63;48041:122;:::o
Swarm Source
ipfs://5da55894a084f0342eaf41a43443ab60400cbd3fd78672a29e6a2f7ba2aaf512
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.