ERC-721
Overview
Max Total Supply
205 MighttGojirascity
Holders
69
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MighttGojirascityLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
gojiracityContract
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-24 */ // 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 multipligojiraion 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 multipligojiraion of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multipligojiraion 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 depregojiraed because it requires allogojiraing 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 depregojiraed because it requires allogojiraing 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 appligojiraion * 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, true); _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, true); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } function _burnSave(address owner, uint256 tokenId) internal virtual { _beforeTokenTransfer(owner, address(0), tokenId, false); // 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, true); // 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, bool isDelete) 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, bool isDelete) internal virtual override { super._beforeTokenTransfer(from, to, tokenId, isDelete); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0) && isDelete) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from && isDelete) { _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(); } } pragma solidity ^0.8.0; contract gojiracityContract is ERC721Enumerable, Ownable{ using SafeMath for uint256; using Address for address; using Strings for uint256; uint public MAX_NFT_PURCHASE = 1; uint256 public MAX_SUPPLY = 9000; uint256 public CITY_PRICE = 100 ether; IGOJ public GOJ; uint public MAX_CITY_COUNT = 100; bool public saleIsActive = false; bool public composeIsActive = false; address public GojirasContractAddress; string private _baseURIExtended; mapping (uint256 => string) _tokenURIs; mapping (uint256 => uint256) public Gojcitytypecount; mapping (uint => uint256) public GojcitytypeMaxcount; mapping (uint => uint256) public GojcitytypeMintprice; mapping (uint256 => uint256) public GojtokenIDcitytype; constructor() ERC721("Mightt Gojiras city","MighttGojirascity"){ } function setGojcitytypeMaxcount(uint256[] memory citytypecounts) public onlyOwner{ for(uint i = 0; i < citytypecounts.length; i++) { GojcitytypeMaxcount[i] = citytypecounts[i]; } } function getGojcitytypeMaxcount(uint _citytypeId) public view returns( uint256 ){ return GojcitytypeMaxcount[_citytypeId]; } function setGojcitytypeMintPrice(uint256[] memory citytypemintprice) public onlyOwner{ for(uint i = 0; i < citytypemintprice.length; i++) { GojcitytypeMintprice[i] = citytypemintprice[i]; } } function getGojcitytypeMintPrice(uint _citytypeId) public view returns( uint256 ){ return GojcitytypeMintprice[_citytypeId]; } function setGojirasContractAddress(address contractAddress) public onlyOwner { GojirasContractAddress = contractAddress; } function setGojContract(address contractAddress) external onlyOwner { GOJ = IGOJ(contractAddress); } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function flipComposeState() public onlyOwner { composeIsActive = !composeIsActive; } function setCityPrice(uint price) external onlyOwner { CITY_PRICE = price; } function setCityMaxPurchase(uint maxpurchase) external onlyOwner { MAX_NFT_PURCHASE = maxpurchase; } function setMaxcitys(uint maxcity) external onlyOwner { MAX_SUPPLY = maxcity; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function mintcitys(uint numberOfTokens, uint CityType) public { require(saleIsActive, "Sale must be active to mint city"); require(numberOfTokens > 0 && numberOfTokens <= MAX_NFT_PURCHASE, "Can only mint 1 city at a time"); require(totalSupply().add(numberOfTokens) <= MAX_SUPPLY, "Purchase would exceed max supply of citys"); require(Gojcitytypecount[CityType].add(numberOfTokens) <= GojcitytypeMaxcount[CityType], "Purchase would exceed max supply of this city"); GOJ.burn(msg.sender, GojcitytypeMintprice[CityType]); for (uint i = 0; i < numberOfTokens; i++) { if (totalSupply() < MAX_SUPPLY) { GojtokenIDcitytype[totalSupply()] = CityType; _safeMint(msg.sender, totalSupply()); Gojcitytypecount[CityType]++; } } } function compose(uint256 useTokenId, uint256 gojiratokenId) public { require(composeIsActive, "Not allowed"); require(GojirasContractAddress != address(0), "gojira contract address need be set"); address from = msg.sender; IMightygojiras gojira = IMightygojiras(GojirasContractAddress); bool result = gojira.composeCityWithGojira(from, useTokenId, gojiratokenId, GojtokenIDcitytype[useTokenId]); require(result, "gojira compose failed"); _burnSave(msg.sender, useTokenId); } 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, congojiraenate 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, congojiraenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } function tokensOfOwner(address _owner) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } } interface IMightygojiras { function composeCityWithGojira(address owner, uint256 citytokenId, uint256 gojiratokenId, uint256 CityTypeId) external returns (bool); } interface IGOJ { function burn(address _from, uint256 _amount) external; function updateReward(address _from, address _to) external; }
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":"CITY_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOJ","outputs":[{"internalType":"contract IGOJ","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"GojcitytypeMaxcount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"GojcitytypeMintprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Gojcitytypecount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GojirasContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"GojtokenIDcitytype","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_CITY_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","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":[{"internalType":"uint256","name":"useTokenId","type":"uint256"},{"internalType":"uint256","name":"gojiratokenId","type":"uint256"}],"name":"compose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composeIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipComposeState","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_citytypeId","type":"uint256"}],"name":"getGojcitytypeMaxcount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_citytypeId","type":"uint256"}],"name":"getGojcitytypeMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint256","name":"CityType","type":"uint256"}],"name":"mintcitys","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":"renounceOwnership","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":[{"internalType":"uint256","name":"maxpurchase","type":"uint256"}],"name":"setCityMaxPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setCityPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setGojContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"citytypecounts","type":"uint256[]"}],"name":"setGojcitytypeMaxcount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"citytypemintprice","type":"uint256[]"}],"name":"setGojcitytypeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setGojirasContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxcity","type":"uint256"}],"name":"setMaxcitys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600b55612328600c5568056bc75e2d63100000600d556064600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055503480156200006457600080fd5b506040518060400160405280601381526020017f4d696768747420476f6a697261732063697479000000000000000000000000008152506040518060400160405280601181526020017f4d6967687474476f6a69726173636974790000000000000000000000000000008152508160009080519060200190620000e9929190620001c4565b50806001908051906020019062000102929190620001c4565b505050600062000117620001bc60201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002d9565b600033905090565b828054620001d29062000274565b90600052602060002090601f016020900481019282620001f6576000855562000242565b82601f106200021157805160ff191683800117855562000242565b8280016001018555821562000242579182015b828111156200024157825182559160200191906001019062000224565b5b50905062000251919062000255565b5090565b5b808211156200027057600081600090555060010162000256565b5090565b600060028204905060018216806200028d57607f821691505b60208210811415620002a457620002a3620002aa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61506d80620002e96000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c80636352211e11610167578063b7d16640116100ce578063e9df39ed11610087578063e9df39ed146107fa578063eb7a33331461082a578063eb8d244414610834578063ed54b9ea14610852578063ef503f4814610882578063f2fde38b1461089e57610295565b8063b7d1664014610726578063b88d4fde14610744578063c87b56dd14610760578063e83c653d14610790578063e8e713ac146107ae578063e985e9c5146107ca57610295565b80638da5cb5b116101205780638da5cb5b1461067857806395d89b4114610696578063a22cb465146106b4578063a3f7be1f146106d0578063a6e8a624146106ec578063b5cc916c1461070857610295565b80636352211e146105a45780636ceb86ed146105d457806370a08231146105f0578063715018a61461062057806372856e611461062a5780638462151c1461064857610295565b80632f745c591161020b5780633a6ec765116101c45780633a6ec765146104e65780633ccfd60b1461051657806342842e0e146105205780634f6ccce71461053c57806354c402a81461056c57806355f804b31461058857610295565b80632f745c591461042457806332cb6b0c1461045457806334918dfd14610472578063355e6ffe1461047c57806338ba89bc1461049a578063391bf9a7146104b657610295565b8063095ea7b31161025d578063095ea7b3146103525780630f8f95e91461036e578063115db0091461039e57806316a0a66a146103ba57806318160ddd146103ea57806323b872dd1461040857610295565b806301ffc9a71461029a578063020b39cc146102ca5780630699289a146102e857806306fdde0314610304578063081812fc14610322575b600080fd5b6102b460048036038101906102af9190613bc4565b6108ba565b6040516102c19190614801565b60405180910390f35b6102d2610934565b6040516102df9190614b79565b60405180910390f35b61030260048036038101906102fd9190613c57565b61093a565b005b61030c6109c0565b6040516103199190614837565b60405180910390f35b61033c60048036038101906103379190613c57565b610a52565b604051610349919061470a565b60405180910390f35b61036c60048036038101906103679190613b1e565b610ad7565b005b61038860048036038101906103839190613c57565b610bef565b6040516103959190614b79565b60405180910390f35b6103b860048036038101906103b39190613c57565b610c0c565b005b6103d460048036038101906103cf9190613c57565b610c92565b6040516103e19190614b79565b60405180910390f35b6103f2610caf565b6040516103ff9190614b79565b60405180910390f35b610422600480360381019061041d9190613a18565b610cbc565b005b61043e60048036038101906104399190613b1e565b610d1c565b60405161044b9190614b79565b60405180910390f35b61045c610dc1565b6040516104699190614b79565b60405180910390f35b61047a610dc7565b005b610484610e6f565b6040516104919190614b79565b60405180910390f35b6104b460048036038101906104af91906139b3565b610e75565b005b6104d060048036038101906104cb9190613c57565b610f35565b6040516104dd9190614b79565b60405180910390f35b61050060048036038101906104fb9190613c57565b610f4d565b60405161050d9190614b79565b60405180910390f35b61051e610f65565b005b61053a60048036038101906105359190613a18565b611030565b005b61055660048036038101906105519190613c57565b611050565b6040516105639190614b79565b60405180910390f35b61058660048036038101906105819190613c80565b6110e7565b005b6105a2600480360381019061059d9190613c16565b6112ed565b005b6105be60048036038101906105b99190613c57565b611383565b6040516105cb919061470a565b60405180910390f35b6105ee60048036038101906105e991906139b3565b611435565b005b61060a600480360381019061060591906139b3565b6114f5565b6040516106179190614b79565b60405180910390f35b6106286115ad565b005b6106326116ea565b60405161063f919061470a565b60405180910390f35b610662600480360381019061065d91906139b3565b611710565b60405161066f91906147df565b60405180910390f35b61068061188c565b60405161068d919061470a565b60405180910390f35b61069e6118b6565b6040516106ab9190614837565b60405180910390f35b6106ce60048036038101906106c99190613ae2565b611948565b005b6106ea60048036038101906106e59190613c80565b611ac9565b005b61070660048036038101906107019190613b5a565b611d72565b005b610710611e69565b60405161071d9190614b79565b60405180910390f35b61072e611e6f565b60405161073b9190614801565b60405180910390f35b61075e60048036038101906107599190613a67565b611e82565b005b61077a60048036038101906107759190613c57565b611ee4565b6040516107879190614837565b60405180910390f35b610798612057565b6040516107a5919061481c565b60405180910390f35b6107c860048036038101906107c39190613c57565b61207d565b005b6107e460048036038101906107df91906139dc565b612103565b6040516107f19190614801565b60405180910390f35b610814600480360381019061080f9190613c57565b612197565b6040516108219190614b79565b60405180910390f35b6108326121af565b005b61083c612257565b6040516108499190614801565b60405180910390f35b61086c60048036038101906108679190613c57565b61226a565b6040516108799190614b79565b60405180910390f35b61089c60048036038101906108979190613b5a565b612282565b005b6108b860048036038101906108b391906139b3565b612379565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092d575061092c82612525565b5b9050919050565b600b5481565b610942612607565b73ffffffffffffffffffffffffffffffffffffffff1661096061188c565b73ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90614a79565b60405180910390fd5b80600c8190555050565b6060600080546109cf90614e62565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90614e62565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b6000610a5d8261260f565b610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390614a39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae282611383565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90614ad9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b72612607565b73ffffffffffffffffffffffffffffffffffffffff161480610ba15750610ba081610b9b612607565b612103565b5b610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790614999565b60405180910390fd5b610bea838361267b565b505050565b600060156000838152602001908152602001600020549050919050565b610c14612607565b73ffffffffffffffffffffffffffffffffffffffff16610c3261188c565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90614a79565b60405180910390fd5b80600d8190555050565b600060146000838152602001908152602001600020549050919050565b6000600880549050905090565b610ccd610cc7612607565b82612734565b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614af9565b60405180910390fd5b610d17838383612812565b505050565b6000610d27836114f5565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90614899565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610dcf612607565b73ffffffffffffffffffffffffffffffffffffffff16610ded61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a79565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b600f5481565b610e7d612607565b73ffffffffffffffffffffffffffffffffffffffff16610e9b61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890614a79565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b610f6d612607565b73ffffffffffffffffffffffffffffffffffffffff16610f8b61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890614a79565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561102c573d6000803e3d6000fd5b5050565b61104b83838360405180602001604052806000815250611e82565b505050565b600061105a610caf565b821061109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614b39565b60405180910390fd5b600882815481106110d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff16611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90614a59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614b59565b60405180910390fd5b60003390506000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a2071d40848787601660008b8152602001908152602001600020546040518563ffffffff1660e01b8152600401611248949392919061479a565b602060405180830381600087803b15801561126257600080fd5b505af1158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129a9190613b9b565b9050806112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b19565b60405180910390fd5b6112e63386612a70565b5050505050565b6112f5612607565b73ffffffffffffffffffffffffffffffffffffffff1661131361188c565b73ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136090614a79565b60405180910390fd5b806011908051906020019061137f92919061372c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906149d9565b60405180910390fd5b80915050919050565b61143d612607565b73ffffffffffffffffffffffffffffffffffffffff1661145b61188c565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890614a79565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d906149b9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b5612607565b73ffffffffffffffffffffffffffffffffffffffff166115d361188c565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600061171d836114f5565b905060008114156117a057600067ffffffffffffffff811115611769577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117975781602001602082028036833780820191505090505b50915050611887565b60008167ffffffffffffffff8111156117e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118105781602001602082028036833780820191505090505b50905060005b82811015611880576118288582610d1c565b828281518110611861577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061187890614e94565b915050611816565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118c590614e62565b80601f01602080910402602001604051908101604052809291908181526020018280546118f190614e62565b801561193e5780601f106119135761010080835404028352916020019161193e565b820191906000526020600020905b81548152906001019060200180831161192157829003601f168201915b5050505050905090565b611950612607565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614939565b60405180910390fd5b80600560006119cb612607565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a78612607565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611abd9190614801565b60405180910390a35050565b601060009054906101000a900460ff16611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90614859565b60405180910390fd5b600082118015611b2a5750600b548211155b611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906149f9565b60405180910390fd5b600c54611b8683611b78610caf565b612b7690919063ffffffff16565b1115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe90614879565b60405180910390fd5b6014600082815260200190815260200160002054611c01836013600085815260200190815260200160002054612b7690919063ffffffff16565b1115611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990614959565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3360156000858152602001908152602001600020546040518363ffffffff1660e01b8152600401611cb2929190614771565b600060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b5050505060005b82811015611d6d57600c54611cfa610caf565b1015611d5a578160166000611d0d610caf565b815260200190815260200160002081905550611d3033611d2b610caf565b612b8c565b601360008381526020019081526020016000206000815480929190611d5490614e94565b91905055505b8080611d6590614e94565b915050611ce7565b505050565b611d7a612607565b73ffffffffffffffffffffffffffffffffffffffff16611d9861188c565b73ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614a79565b60405180910390fd5b60005b8151811015611e6557818181518110611e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160156000838152602001908152602001600020819055508080611e5d90614e94565b915050611df1565b5050565b600d5481565b601060019054906101000a900460ff1681565b611e93611e8d612607565b83612734565b611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614af9565b60405180910390fd5b611ede84848484612baa565b50505050565b6060611eef8261260f565b611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590614ab9565b60405180910390fd5b6000601260008481526020019081526020016000208054611f4e90614e62565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7a90614e62565b8015611fc75780601f10611f9c57610100808354040283529160200191611fc7565b820191906000526020600020905b815481529060010190602001808311611faa57829003601f168201915b505050505090506000611fd8612c06565b9050600081511415611fee578192505050612052565b60008251111561202357808260405160200161200b9291906146e6565b60405160208183030381529060405292505050612052565b8061202d85612c98565b60405160200161203e9291906146e6565b604051602081830303815290604052925050505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612085612607565b73ffffffffffffffffffffffffffffffffffffffff166120a361188c565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614a79565b60405180910390fd5b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60146020528060005260406000206000915090505481565b6121b7612607565b73ffffffffffffffffffffffffffffffffffffffff166121d561188c565b73ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614a79565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b60156020528060005260406000206000915090505481565b61228a612607565b73ffffffffffffffffffffffffffffffffffffffff166122a861188c565b73ffffffffffffffffffffffffffffffffffffffff16146122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614a79565b60405180910390fd5b60005b815181101561237557818181518110612343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516014600083815260200190815260200160002081905550808061236d90614e94565b915050612301565b5050565b612381612607565b73ffffffffffffffffffffffffffffffffffffffff1661239f61188c565b73ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c906148d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061260057506125ff82612e45565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ee83611383565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061273f8261260f565b61277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590614979565b60405180910390fd5b600061278983611383565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127f857508373ffffffffffffffffffffffffffffffffffffffff166127e084610a52565b73ffffffffffffffffffffffffffffffffffffffff16145b8061280957506128088185612103565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283282611383565b73ffffffffffffffffffffffffffffffffffffffff1614612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614919565b60405180910390fd5b6129058383836001612eaf565b61291060008261267b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129609190614d54565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b79190614ccd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612a7e826000836000612eaf565b612a8960008261267b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad99190614d54565b925050819055506002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008183612b849190614ccd565b905092915050565b612ba6828260405180602001604052806000815250612fd9565b5050565b612bb5848484612812565b612bc184848484613034565b612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906148b9565b60405180910390fd5b50505050565b606060118054612c1590614e62565b80601f0160208091040260200160405190810160405280929190818152602001828054612c4190614e62565b8015612c8e5780601f10612c6357610100808354040283529160200191612c8e565b820191906000526020600020905b815481529060010190602001808311612c7157829003601f168201915b5050505050905090565b60606000821415612ce0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e40565b600082905060005b60008214612d12578080612cfb90614e94565b915050600a82612d0b9190614d23565b9150612ce8565b60008167ffffffffffffffff811115612d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d865781602001600182028036833780820191505090505b5090505b60008514612e3957600182612d9f9190614d54565b9150600a85612dae9190614edd565b6030612dba9190614ccd565b60f81b818381518110612df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e329190614d23565b9450612d8a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ebb848484846131cb565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612efe57612ef9826131d1565b612f3d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612f3c57612f3b848361321a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612f765750805b15612f8957612f8482613387565b612fd3565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc25750805b15612fd257612fd183836134ca565b5b5b50505050565b612fe38383613549565b612ff06000848484613034565b61302f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613026906148b9565b60405180910390fd5b505050565b60006130558473ffffffffffffffffffffffffffffffffffffffff16613719565b156131be578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261307e612607565b8786866040518563ffffffff1660e01b81526004016130a09493929190614725565b602060405180830381600087803b1580156130ba57600080fd5b505af19250505080156130eb57506040513d601f19601f820116820180604052508101906130e89190613bed565b60015b61316e573d806000811461311b576040519150601f19603f3d011682016040523d82523d6000602084013e613120565b606091505b50600081511415613166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315d906148b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131c3565b600190505b949350505050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613227846114f5565b6132319190614d54565b9050600060076000848152602001908152602001600020549050818114613316576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061339b9190614d54565b90506000600960008481526020019081526020016000205490506000600883815481106133f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613439577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134d5836114f5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b090614a19565b60405180910390fd5b6135c28161260f565b15613602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f9906148f9565b60405180910390fd5b613610600083836001612eaf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136609190614ccd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461373890614e62565b90600052602060002090601f01602090048101928261375a57600085556137a1565b82601f1061377357805160ff19168380011785556137a1565b828001600101855582156137a1579182015b828111156137a0578251825591602001919060010190613785565b5b5090506137ae91906137b2565b5090565b5b808211156137cb5760008160009055506001016137b3565b5090565b60006137e26137dd84614bc5565b614b94565b9050808382526020820190508285602086028201111561380157600080fd5b60005b858110156138315781613817888261399e565b845260208401935060208301925050600181019050613804565b5050509392505050565b600061384e61384984614bf1565b614b94565b90508281526020810184848401111561386657600080fd5b613871848285614e20565b509392505050565b600061388c61388784614c21565b614b94565b9050828152602081018484840111156138a457600080fd5b6138af848285614e20565b509392505050565b6000813590506138c681614fdb565b92915050565b600082601f8301126138dd57600080fd5b81356138ed8482602086016137cf565b91505092915050565b60008135905061390581614ff2565b92915050565b60008151905061391a81614ff2565b92915050565b60008135905061392f81615009565b92915050565b60008151905061394481615009565b92915050565b600082601f83011261395b57600080fd5b813561396b84826020860161383b565b91505092915050565b600082601f83011261398557600080fd5b8135613995848260208601613879565b91505092915050565b6000813590506139ad81615020565b92915050565b6000602082840312156139c557600080fd5b60006139d3848285016138b7565b91505092915050565b600080604083850312156139ef57600080fd5b60006139fd858286016138b7565b9250506020613a0e858286016138b7565b9150509250929050565b600080600060608486031215613a2d57600080fd5b6000613a3b868287016138b7565b9350506020613a4c868287016138b7565b9250506040613a5d8682870161399e565b9150509250925092565b60008060008060808587031215613a7d57600080fd5b6000613a8b878288016138b7565b9450506020613a9c878288016138b7565b9350506040613aad8782880161399e565b925050606085013567ffffffffffffffff811115613aca57600080fd5b613ad68782880161394a565b91505092959194509250565b60008060408385031215613af557600080fd5b6000613b03858286016138b7565b9250506020613b14858286016138f6565b9150509250929050565b60008060408385031215613b3157600080fd5b6000613b3f858286016138b7565b9250506020613b508582860161399e565b9150509250929050565b600060208284031215613b6c57600080fd5b600082013567ffffffffffffffff811115613b8657600080fd5b613b92848285016138cc565b91505092915050565b600060208284031215613bad57600080fd5b6000613bbb8482850161390b565b91505092915050565b600060208284031215613bd657600080fd5b6000613be484828501613920565b91505092915050565b600060208284031215613bff57600080fd5b6000613c0d84828501613935565b91505092915050565b600060208284031215613c2857600080fd5b600082013567ffffffffffffffff811115613c4257600080fd5b613c4e84828501613974565b91505092915050565b600060208284031215613c6957600080fd5b6000613c778482850161399e565b91505092915050565b60008060408385031215613c9357600080fd5b6000613ca18582860161399e565b9250506020613cb28582860161399e565b9150509250929050565b6000613cc883836146c8565b60208301905092915050565b613cdd81614d88565b82525050565b6000613cee82614c61565b613cf88185614c8f565b9350613d0383614c51565b8060005b83811015613d34578151613d1b8882613cbc565b9750613d2683614c82565b925050600181019050613d07565b5085935050505092915050565b613d4a81614d9a565b82525050565b6000613d5b82614c6c565b613d658185614ca0565b9350613d75818560208601614e2f565b613d7e81614fca565b840191505092915050565b613d9281614dfc565b82525050565b6000613da382614c77565b613dad8185614cb1565b9350613dbd818560208601614e2f565b613dc681614fca565b840191505092915050565b6000613ddc82614c77565b613de68185614cc2565b9350613df6818560208601614e2f565b80840191505092915050565b6000613e0f602083614cb1565b91507f53616c65206d7573742062652061637469766520746f206d696e7420636974796000830152602082019050919050565b6000613e4f602983614cb1565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620636974797300000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eb5602b83614cb1565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f1b603283614cb1565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613f81602683614cb1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fe7601c83614cb1565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614027602483614cb1565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061408d601983614cb1565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006140cd602d83614cb1565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620746869732063697479000000000000000000000000000000000000006020830152604082019050919050565b6000614133602c83614cb1565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614199603883614cb1565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006141ff602a83614cb1565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614265602983614cb1565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006142cb601e83614cb1565b91507f43616e206f6e6c79206d696e742031206369747920617420612074696d6500006000830152602082019050919050565b600061430b602083614cb1565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061434b602c83614cb1565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006143b1600b83614cb1565b91507f4e6f7420616c6c6f7765640000000000000000000000000000000000000000006000830152602082019050919050565b60006143f1602083614cb1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614431602983614cb1565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614497602f83614cb1565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006144fd602183614cb1565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614563603183614cb1565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006145c9601583614cb1565b91507f676f6a69726120636f6d706f7365206661696c656400000000000000000000006000830152602082019050919050565b6000614609602c83614cb1565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061466f602383614cb1565b91507f676f6a69726120636f6e74726163742061646472657373206e6565642062652060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146d181614df2565b82525050565b6146e081614df2565b82525050565b60006146f28285613dd1565b91506146fe8284613dd1565b91508190509392505050565b600060208201905061471f6000830184613cd4565b92915050565b600060808201905061473a6000830187613cd4565b6147476020830186613cd4565b61475460408301856146d7565b81810360608301526147668184613d50565b905095945050505050565b60006040820190506147866000830185613cd4565b61479360208301846146d7565b9392505050565b60006080820190506147af6000830187613cd4565b6147bc60208301866146d7565b6147c960408301856146d7565b6147d660608301846146d7565b95945050505050565b600060208201905081810360008301526147f98184613ce3565b905092915050565b60006020820190506148166000830184613d41565b92915050565b60006020820190506148316000830184613d89565b92915050565b600060208201905081810360008301526148518184613d98565b905092915050565b6000602082019050818103600083015261487281613e02565b9050919050565b6000602082019050818103600083015261489281613e42565b9050919050565b600060208201905081810360008301526148b281613ea8565b9050919050565b600060208201905081810360008301526148d281613f0e565b9050919050565b600060208201905081810360008301526148f281613f74565b9050919050565b6000602082019050818103600083015261491281613fda565b9050919050565b600060208201905081810360008301526149328161401a565b9050919050565b6000602082019050818103600083015261495281614080565b9050919050565b60006020820190508181036000830152614972816140c0565b9050919050565b6000602082019050818103600083015261499281614126565b9050919050565b600060208201905081810360008301526149b28161418c565b9050919050565b600060208201905081810360008301526149d2816141f2565b9050919050565b600060208201905081810360008301526149f281614258565b9050919050565b60006020820190508181036000830152614a12816142be565b9050919050565b60006020820190508181036000830152614a32816142fe565b9050919050565b60006020820190508181036000830152614a528161433e565b9050919050565b60006020820190508181036000830152614a72816143a4565b9050919050565b60006020820190508181036000830152614a92816143e4565b9050919050565b60006020820190508181036000830152614ab281614424565b9050919050565b60006020820190508181036000830152614ad28161448a565b9050919050565b60006020820190508181036000830152614af2816144f0565b9050919050565b60006020820190508181036000830152614b1281614556565b9050919050565b60006020820190508181036000830152614b32816145bc565b9050919050565b60006020820190508181036000830152614b52816145fc565b9050919050565b60006020820190508181036000830152614b7281614662565b9050919050565b6000602082019050614b8e60008301846146d7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614bbb57614bba614f9b565b5b8060405250919050565b600067ffffffffffffffff821115614be057614bdf614f9b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c0c57614c0b614f9b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614c3c57614c3b614f9b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cd882614df2565b9150614ce383614df2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1857614d17614f0e565b5b828201905092915050565b6000614d2e82614df2565b9150614d3983614df2565b925082614d4957614d48614f3d565b5b828204905092915050565b6000614d5f82614df2565b9150614d6a83614df2565b925082821015614d7d57614d7c614f0e565b5b828203905092915050565b6000614d9382614dd2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e0782614e0e565b9050919050565b6000614e1982614dd2565b9050919050565b82818337600083830152505050565b60005b83811015614e4d578082015181840152602081019050614e32565b83811115614e5c576000848401525b50505050565b60006002820490506001821680614e7a57607f821691505b60208210811415614e8e57614e8d614f6c565b5b50919050565b6000614e9f82614df2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ed257614ed1614f0e565b5b600182019050919050565b6000614ee882614df2565b9150614ef383614df2565b925082614f0357614f02614f3d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fe481614d88565b8114614fef57600080fd5b50565b614ffb81614d9a565b811461500657600080fd5b50565b61501281614da6565b811461501d57600080fd5b50565b61502981614df2565b811461503457600080fd5b5056fea26469706673582212202987c7de8435529436c50c68704b900e23f2fad7591d597ff5acb6960dc8513264736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102955760003560e01c80636352211e11610167578063b7d16640116100ce578063e9df39ed11610087578063e9df39ed146107fa578063eb7a33331461082a578063eb8d244414610834578063ed54b9ea14610852578063ef503f4814610882578063f2fde38b1461089e57610295565b8063b7d1664014610726578063b88d4fde14610744578063c87b56dd14610760578063e83c653d14610790578063e8e713ac146107ae578063e985e9c5146107ca57610295565b80638da5cb5b116101205780638da5cb5b1461067857806395d89b4114610696578063a22cb465146106b4578063a3f7be1f146106d0578063a6e8a624146106ec578063b5cc916c1461070857610295565b80636352211e146105a45780636ceb86ed146105d457806370a08231146105f0578063715018a61461062057806372856e611461062a5780638462151c1461064857610295565b80632f745c591161020b5780633a6ec765116101c45780633a6ec765146104e65780633ccfd60b1461051657806342842e0e146105205780634f6ccce71461053c57806354c402a81461056c57806355f804b31461058857610295565b80632f745c591461042457806332cb6b0c1461045457806334918dfd14610472578063355e6ffe1461047c57806338ba89bc1461049a578063391bf9a7146104b657610295565b8063095ea7b31161025d578063095ea7b3146103525780630f8f95e91461036e578063115db0091461039e57806316a0a66a146103ba57806318160ddd146103ea57806323b872dd1461040857610295565b806301ffc9a71461029a578063020b39cc146102ca5780630699289a146102e857806306fdde0314610304578063081812fc14610322575b600080fd5b6102b460048036038101906102af9190613bc4565b6108ba565b6040516102c19190614801565b60405180910390f35b6102d2610934565b6040516102df9190614b79565b60405180910390f35b61030260048036038101906102fd9190613c57565b61093a565b005b61030c6109c0565b6040516103199190614837565b60405180910390f35b61033c60048036038101906103379190613c57565b610a52565b604051610349919061470a565b60405180910390f35b61036c60048036038101906103679190613b1e565b610ad7565b005b61038860048036038101906103839190613c57565b610bef565b6040516103959190614b79565b60405180910390f35b6103b860048036038101906103b39190613c57565b610c0c565b005b6103d460048036038101906103cf9190613c57565b610c92565b6040516103e19190614b79565b60405180910390f35b6103f2610caf565b6040516103ff9190614b79565b60405180910390f35b610422600480360381019061041d9190613a18565b610cbc565b005b61043e60048036038101906104399190613b1e565b610d1c565b60405161044b9190614b79565b60405180910390f35b61045c610dc1565b6040516104699190614b79565b60405180910390f35b61047a610dc7565b005b610484610e6f565b6040516104919190614b79565b60405180910390f35b6104b460048036038101906104af91906139b3565b610e75565b005b6104d060048036038101906104cb9190613c57565b610f35565b6040516104dd9190614b79565b60405180910390f35b61050060048036038101906104fb9190613c57565b610f4d565b60405161050d9190614b79565b60405180910390f35b61051e610f65565b005b61053a60048036038101906105359190613a18565b611030565b005b61055660048036038101906105519190613c57565b611050565b6040516105639190614b79565b60405180910390f35b61058660048036038101906105819190613c80565b6110e7565b005b6105a2600480360381019061059d9190613c16565b6112ed565b005b6105be60048036038101906105b99190613c57565b611383565b6040516105cb919061470a565b60405180910390f35b6105ee60048036038101906105e991906139b3565b611435565b005b61060a600480360381019061060591906139b3565b6114f5565b6040516106179190614b79565b60405180910390f35b6106286115ad565b005b6106326116ea565b60405161063f919061470a565b60405180910390f35b610662600480360381019061065d91906139b3565b611710565b60405161066f91906147df565b60405180910390f35b61068061188c565b60405161068d919061470a565b60405180910390f35b61069e6118b6565b6040516106ab9190614837565b60405180910390f35b6106ce60048036038101906106c99190613ae2565b611948565b005b6106ea60048036038101906106e59190613c80565b611ac9565b005b61070660048036038101906107019190613b5a565b611d72565b005b610710611e69565b60405161071d9190614b79565b60405180910390f35b61072e611e6f565b60405161073b9190614801565b60405180910390f35b61075e60048036038101906107599190613a67565b611e82565b005b61077a60048036038101906107759190613c57565b611ee4565b6040516107879190614837565b60405180910390f35b610798612057565b6040516107a5919061481c565b60405180910390f35b6107c860048036038101906107c39190613c57565b61207d565b005b6107e460048036038101906107df91906139dc565b612103565b6040516107f19190614801565b60405180910390f35b610814600480360381019061080f9190613c57565b612197565b6040516108219190614b79565b60405180910390f35b6108326121af565b005b61083c612257565b6040516108499190614801565b60405180910390f35b61086c60048036038101906108679190613c57565b61226a565b6040516108799190614b79565b60405180910390f35b61089c60048036038101906108979190613b5a565b612282565b005b6108b860048036038101906108b391906139b3565b612379565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092d575061092c82612525565b5b9050919050565b600b5481565b610942612607565b73ffffffffffffffffffffffffffffffffffffffff1661096061188c565b73ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90614a79565b60405180910390fd5b80600c8190555050565b6060600080546109cf90614e62565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90614e62565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b6000610a5d8261260f565b610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390614a39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae282611383565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90614ad9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b72612607565b73ffffffffffffffffffffffffffffffffffffffff161480610ba15750610ba081610b9b612607565b612103565b5b610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790614999565b60405180910390fd5b610bea838361267b565b505050565b600060156000838152602001908152602001600020549050919050565b610c14612607565b73ffffffffffffffffffffffffffffffffffffffff16610c3261188c565b73ffffffffffffffffffffffffffffffffffffffff1614610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90614a79565b60405180910390fd5b80600d8190555050565b600060146000838152602001908152602001600020549050919050565b6000600880549050905090565b610ccd610cc7612607565b82612734565b610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390614af9565b60405180910390fd5b610d17838383612812565b505050565b6000610d27836114f5565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90614899565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c5481565b610dcf612607565b73ffffffffffffffffffffffffffffffffffffffff16610ded61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a79565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b600f5481565b610e7d612607565b73ffffffffffffffffffffffffffffffffffffffff16610e9b61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890614a79565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915090505481565b60166020528060005260406000206000915090505481565b610f6d612607565b73ffffffffffffffffffffffffffffffffffffffff16610f8b61188c565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890614a79565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561102c573d6000803e3d6000fd5b5050565b61104b83838360405180602001604052806000815250611e82565b505050565b600061105a610caf565b821061109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614b39565b60405180910390fd5b600882815481106110d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff16611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90614a59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90614b59565b60405180910390fd5b60003390506000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663a2071d40848787601660008b8152602001908152602001600020546040518563ffffffff1660e01b8152600401611248949392919061479a565b602060405180830381600087803b15801561126257600080fd5b505af1158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129a9190613b9b565b9050806112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614b19565b60405180910390fd5b6112e63386612a70565b5050505050565b6112f5612607565b73ffffffffffffffffffffffffffffffffffffffff1661131361188c565b73ffffffffffffffffffffffffffffffffffffffff1614611369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136090614a79565b60405180910390fd5b806011908051906020019061137f92919061372c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906149d9565b60405180910390fd5b80915050919050565b61143d612607565b73ffffffffffffffffffffffffffffffffffffffff1661145b61188c565b73ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890614a79565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d906149b9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b5612607565b73ffffffffffffffffffffffffffffffffffffffff166115d361188c565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600061171d836114f5565b905060008114156117a057600067ffffffffffffffff811115611769577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117975781602001602082028036833780820191505090505b50915050611887565b60008167ffffffffffffffff8111156117e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156118105781602001602082028036833780820191505090505b50905060005b82811015611880576118288582610d1c565b828281518110611861577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061187890614e94565b915050611816565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118c590614e62565b80601f01602080910402602001604051908101604052809291908181526020018280546118f190614e62565b801561193e5780601f106119135761010080835404028352916020019161193e565b820191906000526020600020905b81548152906001019060200180831161192157829003601f168201915b5050505050905090565b611950612607565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614939565b60405180910390fd5b80600560006119cb612607565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a78612607565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611abd9190614801565b60405180910390a35050565b601060009054906101000a900460ff16611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90614859565b60405180910390fd5b600082118015611b2a5750600b548211155b611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906149f9565b60405180910390fd5b600c54611b8683611b78610caf565b612b7690919063ffffffff16565b1115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe90614879565b60405180910390fd5b6014600082815260200190815260200160002054611c01836013600085815260200190815260200160002054612b7690919063ffffffff16565b1115611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990614959565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3360156000858152602001908152602001600020546040518363ffffffff1660e01b8152600401611cb2929190614771565b600060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b5050505060005b82811015611d6d57600c54611cfa610caf565b1015611d5a578160166000611d0d610caf565b815260200190815260200160002081905550611d3033611d2b610caf565b612b8c565b601360008381526020019081526020016000206000815480929190611d5490614e94565b91905055505b8080611d6590614e94565b915050611ce7565b505050565b611d7a612607565b73ffffffffffffffffffffffffffffffffffffffff16611d9861188c565b73ffffffffffffffffffffffffffffffffffffffff1614611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de590614a79565b60405180910390fd5b60005b8151811015611e6557818181518110611e33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160156000838152602001908152602001600020819055508080611e5d90614e94565b915050611df1565b5050565b600d5481565b601060019054906101000a900460ff1681565b611e93611e8d612607565b83612734565b611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614af9565b60405180910390fd5b611ede84848484612baa565b50505050565b6060611eef8261260f565b611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2590614ab9565b60405180910390fd5b6000601260008481526020019081526020016000208054611f4e90614e62565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7a90614e62565b8015611fc75780601f10611f9c57610100808354040283529160200191611fc7565b820191906000526020600020905b815481529060010190602001808311611faa57829003601f168201915b505050505090506000611fd8612c06565b9050600081511415611fee578192505050612052565b60008251111561202357808260405160200161200b9291906146e6565b60405160208183030381529060405292505050612052565b8061202d85612c98565b60405160200161203e9291906146e6565b604051602081830303815290604052925050505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612085612607565b73ffffffffffffffffffffffffffffffffffffffff166120a361188c565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614a79565b60405180910390fd5b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60146020528060005260406000206000915090505481565b6121b7612607565b73ffffffffffffffffffffffffffffffffffffffff166121d561188c565b73ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614a79565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff1681565b60156020528060005260406000206000915090505481565b61228a612607565b73ffffffffffffffffffffffffffffffffffffffff166122a861188c565b73ffffffffffffffffffffffffffffffffffffffff16146122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614a79565b60405180910390fd5b60005b815181101561237557818181518110612343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516014600083815260200190815260200160002081905550808061236d90614e94565b915050612301565b5050565b612381612607565b73ffffffffffffffffffffffffffffffffffffffff1661239f61188c565b73ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ec90614a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c906148d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061260057506125ff82612e45565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ee83611383565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061273f8261260f565b61277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590614979565b60405180910390fd5b600061278983611383565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127f857508373ffffffffffffffffffffffffffffffffffffffff166127e084610a52565b73ffffffffffffffffffffffffffffffffffffffff16145b8061280957506128088185612103565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283282611383565b73ffffffffffffffffffffffffffffffffffffffff1614612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ef90614919565b60405180910390fd5b6129058383836001612eaf565b61291060008261267b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129609190614d54565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b79190614ccd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612a7e826000836000612eaf565b612a8960008261267b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad99190614d54565b925050819055506002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008183612b849190614ccd565b905092915050565b612ba6828260405180602001604052806000815250612fd9565b5050565b612bb5848484612812565b612bc184848484613034565b612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906148b9565b60405180910390fd5b50505050565b606060118054612c1590614e62565b80601f0160208091040260200160405190810160405280929190818152602001828054612c4190614e62565b8015612c8e5780601f10612c6357610100808354040283529160200191612c8e565b820191906000526020600020905b815481529060010190602001808311612c7157829003601f168201915b5050505050905090565b60606000821415612ce0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e40565b600082905060005b60008214612d12578080612cfb90614e94565b915050600a82612d0b9190614d23565b9150612ce8565b60008167ffffffffffffffff811115612d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d865781602001600182028036833780820191505090505b5090505b60008514612e3957600182612d9f9190614d54565b9150600a85612dae9190614edd565b6030612dba9190614ccd565b60f81b818381518110612df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e329190614d23565b9450612d8a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ebb848484846131cb565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612efe57612ef9826131d1565b612f3d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612f3c57612f3b848361321a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612f765750805b15612f8957612f8482613387565b612fd3565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc25750805b15612fd257612fd183836134ca565b5b5b50505050565b612fe38383613549565b612ff06000848484613034565b61302f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613026906148b9565b60405180910390fd5b505050565b60006130558473ffffffffffffffffffffffffffffffffffffffff16613719565b156131be578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261307e612607565b8786866040518563ffffffff1660e01b81526004016130a09493929190614725565b602060405180830381600087803b1580156130ba57600080fd5b505af19250505080156130eb57506040513d601f19601f820116820180604052508101906130e89190613bed565b60015b61316e573d806000811461311b576040519150601f19603f3d011682016040523d82523d6000602084013e613120565b606091505b50600081511415613166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315d906148b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131c3565b600190505b949350505050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613227846114f5565b6132319190614d54565b9050600060076000848152602001908152602001600020549050818114613316576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061339b9190614d54565b90506000600960008481526020019081526020016000205490506000600883815481106133f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613439577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006134d5836114f5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b090614a19565b60405180910390fd5b6135c28161260f565b15613602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f9906148f9565b60405180910390fd5b613610600083836001612eaf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136609190614ccd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461373890614e62565b90600052602060002090601f01602090048101928261375a57600085556137a1565b82601f1061377357805160ff19168380011785556137a1565b828001600101855582156137a1579182015b828111156137a0578251825591602001919060010190613785565b5b5090506137ae91906137b2565b5090565b5b808211156137cb5760008160009055506001016137b3565b5090565b60006137e26137dd84614bc5565b614b94565b9050808382526020820190508285602086028201111561380157600080fd5b60005b858110156138315781613817888261399e565b845260208401935060208301925050600181019050613804565b5050509392505050565b600061384e61384984614bf1565b614b94565b90508281526020810184848401111561386657600080fd5b613871848285614e20565b509392505050565b600061388c61388784614c21565b614b94565b9050828152602081018484840111156138a457600080fd5b6138af848285614e20565b509392505050565b6000813590506138c681614fdb565b92915050565b600082601f8301126138dd57600080fd5b81356138ed8482602086016137cf565b91505092915050565b60008135905061390581614ff2565b92915050565b60008151905061391a81614ff2565b92915050565b60008135905061392f81615009565b92915050565b60008151905061394481615009565b92915050565b600082601f83011261395b57600080fd5b813561396b84826020860161383b565b91505092915050565b600082601f83011261398557600080fd5b8135613995848260208601613879565b91505092915050565b6000813590506139ad81615020565b92915050565b6000602082840312156139c557600080fd5b60006139d3848285016138b7565b91505092915050565b600080604083850312156139ef57600080fd5b60006139fd858286016138b7565b9250506020613a0e858286016138b7565b9150509250929050565b600080600060608486031215613a2d57600080fd5b6000613a3b868287016138b7565b9350506020613a4c868287016138b7565b9250506040613a5d8682870161399e565b9150509250925092565b60008060008060808587031215613a7d57600080fd5b6000613a8b878288016138b7565b9450506020613a9c878288016138b7565b9350506040613aad8782880161399e565b925050606085013567ffffffffffffffff811115613aca57600080fd5b613ad68782880161394a565b91505092959194509250565b60008060408385031215613af557600080fd5b6000613b03858286016138b7565b9250506020613b14858286016138f6565b9150509250929050565b60008060408385031215613b3157600080fd5b6000613b3f858286016138b7565b9250506020613b508582860161399e565b9150509250929050565b600060208284031215613b6c57600080fd5b600082013567ffffffffffffffff811115613b8657600080fd5b613b92848285016138cc565b91505092915050565b600060208284031215613bad57600080fd5b6000613bbb8482850161390b565b91505092915050565b600060208284031215613bd657600080fd5b6000613be484828501613920565b91505092915050565b600060208284031215613bff57600080fd5b6000613c0d84828501613935565b91505092915050565b600060208284031215613c2857600080fd5b600082013567ffffffffffffffff811115613c4257600080fd5b613c4e84828501613974565b91505092915050565b600060208284031215613c6957600080fd5b6000613c778482850161399e565b91505092915050565b60008060408385031215613c9357600080fd5b6000613ca18582860161399e565b9250506020613cb28582860161399e565b9150509250929050565b6000613cc883836146c8565b60208301905092915050565b613cdd81614d88565b82525050565b6000613cee82614c61565b613cf88185614c8f565b9350613d0383614c51565b8060005b83811015613d34578151613d1b8882613cbc565b9750613d2683614c82565b925050600181019050613d07565b5085935050505092915050565b613d4a81614d9a565b82525050565b6000613d5b82614c6c565b613d658185614ca0565b9350613d75818560208601614e2f565b613d7e81614fca565b840191505092915050565b613d9281614dfc565b82525050565b6000613da382614c77565b613dad8185614cb1565b9350613dbd818560208601614e2f565b613dc681614fca565b840191505092915050565b6000613ddc82614c77565b613de68185614cc2565b9350613df6818560208601614e2f565b80840191505092915050565b6000613e0f602083614cb1565b91507f53616c65206d7573742062652061637469766520746f206d696e7420636974796000830152602082019050919050565b6000613e4f602983614cb1565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620636974797300000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eb5602b83614cb1565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613f1b603283614cb1565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613f81602683614cb1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fe7601c83614cb1565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614027602483614cb1565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061408d601983614cb1565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006140cd602d83614cb1565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f6620746869732063697479000000000000000000000000000000000000006020830152604082019050919050565b6000614133602c83614cb1565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614199603883614cb1565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006141ff602a83614cb1565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614265602983614cb1565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006142cb601e83614cb1565b91507f43616e206f6e6c79206d696e742031206369747920617420612074696d6500006000830152602082019050919050565b600061430b602083614cb1565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061434b602c83614cb1565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006143b1600b83614cb1565b91507f4e6f7420616c6c6f7765640000000000000000000000000000000000000000006000830152602082019050919050565b60006143f1602083614cb1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614431602983614cb1565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614497602f83614cb1565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006144fd602183614cb1565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614563603183614cb1565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006145c9601583614cb1565b91507f676f6a69726120636f6d706f7365206661696c656400000000000000000000006000830152602082019050919050565b6000614609602c83614cb1565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061466f602383614cb1565b91507f676f6a69726120636f6e74726163742061646472657373206e6565642062652060008301527f73657400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146d181614df2565b82525050565b6146e081614df2565b82525050565b60006146f28285613dd1565b91506146fe8284613dd1565b91508190509392505050565b600060208201905061471f6000830184613cd4565b92915050565b600060808201905061473a6000830187613cd4565b6147476020830186613cd4565b61475460408301856146d7565b81810360608301526147668184613d50565b905095945050505050565b60006040820190506147866000830185613cd4565b61479360208301846146d7565b9392505050565b60006080820190506147af6000830187613cd4565b6147bc60208301866146d7565b6147c960408301856146d7565b6147d660608301846146d7565b95945050505050565b600060208201905081810360008301526147f98184613ce3565b905092915050565b60006020820190506148166000830184613d41565b92915050565b60006020820190506148316000830184613d89565b92915050565b600060208201905081810360008301526148518184613d98565b905092915050565b6000602082019050818103600083015261487281613e02565b9050919050565b6000602082019050818103600083015261489281613e42565b9050919050565b600060208201905081810360008301526148b281613ea8565b9050919050565b600060208201905081810360008301526148d281613f0e565b9050919050565b600060208201905081810360008301526148f281613f74565b9050919050565b6000602082019050818103600083015261491281613fda565b9050919050565b600060208201905081810360008301526149328161401a565b9050919050565b6000602082019050818103600083015261495281614080565b9050919050565b60006020820190508181036000830152614972816140c0565b9050919050565b6000602082019050818103600083015261499281614126565b9050919050565b600060208201905081810360008301526149b28161418c565b9050919050565b600060208201905081810360008301526149d2816141f2565b9050919050565b600060208201905081810360008301526149f281614258565b9050919050565b60006020820190508181036000830152614a12816142be565b9050919050565b60006020820190508181036000830152614a32816142fe565b9050919050565b60006020820190508181036000830152614a528161433e565b9050919050565b60006020820190508181036000830152614a72816143a4565b9050919050565b60006020820190508181036000830152614a92816143e4565b9050919050565b60006020820190508181036000830152614ab281614424565b9050919050565b60006020820190508181036000830152614ad28161448a565b9050919050565b60006020820190508181036000830152614af2816144f0565b9050919050565b60006020820190508181036000830152614b1281614556565b9050919050565b60006020820190508181036000830152614b32816145bc565b9050919050565b60006020820190508181036000830152614b52816145fc565b9050919050565b60006020820190508181036000830152614b7281614662565b9050919050565b6000602082019050614b8e60008301846146d7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614bbb57614bba614f9b565b5b8060405250919050565b600067ffffffffffffffff821115614be057614bdf614f9b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c0c57614c0b614f9b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614c3c57614c3b614f9b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cd882614df2565b9150614ce383614df2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1857614d17614f0e565b5b828201905092915050565b6000614d2e82614df2565b9150614d3983614df2565b925082614d4957614d48614f3d565b5b828204905092915050565b6000614d5f82614df2565b9150614d6a83614df2565b925082821015614d7d57614d7c614f0e565b5b828203905092915050565b6000614d9382614dd2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e0782614e0e565b9050919050565b6000614e1982614dd2565b9050919050565b82818337600083830152505050565b60005b83811015614e4d578082015181840152602081019050614e32565b83811115614e5c576000848401525b50505050565b60006002820490506001821680614e7a57607f821691505b60208210811415614e8e57614e8d614f6c565b5b50919050565b6000614e9f82614df2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ed257614ed1614f0e565b5b600182019050919050565b6000614ee882614df2565b9150614ef383614df2565b925082614f0357614f02614f3d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fe481614d88565b8114614fef57600080fd5b50565b614ffb81614d9a565b811461500657600080fd5b50565b61501281614da6565b811461501d57600080fd5b50565b61502981614df2565b811461503457600080fd5b5056fea26469706673582212202987c7de8435529436c50c68704b900e23f2fad7591d597ff5acb6960dc8513264736f6c63430008000033
Deployed Bytecode Sourcemap
49232:5691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43031:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49403:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51615:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30953:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32405:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31942:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50752:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51387:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50364:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43680:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33295:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43348:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49442:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51180:89;;;:::i;:::-;;49547:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51054:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49804:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49986:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51716:140;;;:::i;:::-;;33671:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43870:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52683:554;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53450:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30647:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50907:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30377:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28213:148;;;:::i;:::-;;49674:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54380:540;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27562:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31122:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32698:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51869:804;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50513:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49481:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49632:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33893:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53567:799;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49525:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51489:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33064:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49863:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51277:98;;;:::i;:::-;;49593:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49922:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50136:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28516:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43031:233;43133:4;43172:35;43157:50;;;:11;:50;;;;:99;;;;43220:36;43244:11;43220:23;:36::i;:::-;43157:99;43150:106;;43031:233;;;:::o;49403:32::-;;;;:::o;51615:93::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51693:7:::1;51680:10;:20;;;;51615:93:::0;:::o;30953:100::-;31007:13;31040:5;31033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30953:100;:::o;32405:221::-;32481:7;32509:16;32517:7;32509;:16::i;:::-;32501:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32594:15;:24;32610:7;32594:24;;;;;;;;;;;;;;;;;;;;;32587:31;;32405:221;;;:::o;31942:397::-;32023:13;32039:23;32054:7;32039:14;:23::i;:::-;32023:39;;32087:5;32081:11;;:2;:11;;;;32073:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:5;32151:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32176:37;32193:5;32200:12;:10;:12::i;:::-;32176:16;:37::i;:::-;32151:62;32143:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32310:21;32319:2;32323:7;32310:8;:21::i;:::-;31942:397;;;:::o;50752:140::-;50825:7;50852:20;:33;50873:11;50852:33;;;;;;;;;;;;50845:40;;50752:140;;;:::o;51387:90::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51464:5:::1;51451:10;:18;;;;51387:90:::0;:::o;50364:138::-;50436:7;50463:19;:32;50483:11;50463:32;;;;;;;;;;;;50456:39;;50364:138;;;:::o;43680:113::-;43741:7;43768:10;:17;;;;43761:24;;43680:113;:::o;33295:305::-;33456:41;33475:12;:10;:12::i;:::-;33489:7;33456:18;:41::i;:::-;33448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:28;33574:4;33580:2;33584:7;33564:9;:28::i;:::-;33295:305;;;:::o;43348:256::-;43445:7;43481:23;43498:5;43481:16;:23::i;:::-;43473:5;:31;43465:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43570:12;:19;43583:5;43570:19;;;;;;;;;;;;;;;:26;43590:5;43570:26;;;;;;;;;;;;43563:33;;43348:256;;;;:::o;49442:32::-;;;;:::o;51180:89::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51249:12:::1;;;;;;;;;;;51248:13;51233:12;;:28;;;;;;;;;;;;;;;;;;51180:89::o:0;49547:32::-;;;;:::o;51054:114::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51144:15:::1;51133:3;;:27;;;;;;;;;;;;;;;;;;51054:114:::0;:::o;49804:52::-;;;;;;;;;;;;;;;;;:::o;49986:54::-;;;;;;;;;;;;;;;;;:::o;51716:140::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51764:12:::1;51779:21;51764:36;;51819:10;51811:28;;:37;51840:7;51811:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27853:1;51716:140::o:0;33671:151::-;33775:39;33792:4;33798:2;33802:7;33775:39;;;;;;;;;;;;:16;:39::i;:::-;33671:151;;;:::o;43870:233::-;43945:7;43981:30;:28;:30::i;:::-;43973:5;:38;43965:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44078:10;44089:5;44078:17;;;;;;;;;;;;;;;;;;;;;;;;44071:24;;43870:233;;;:::o;52683:554::-;52769:15;;;;;;;;;;;52761:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;52853:1;52819:36;;:22;;;;;;;;;;;:36;;;;52811:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;52908:12;52923:10;52908:25;;52944:21;52983:22;;;;;;;;;;;52944:62;;53017:11;53031:6;:28;;;53060:4;53066:10;53078:13;53093:18;:30;53112:10;53093:30;;;;;;;;;;;;53031:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53017:107;;53143:6;53135:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;53196:33;53206:10;53218;53196:9;:33::i;:::-;52683:554;;;;;:::o;53450:109::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53543:8:::1;53524:16;:27;;;;;;;;;;;;:::i;:::-;;53450:109:::0;:::o;30647:239::-;30719:7;30739:13;30755:7;:16;30763:7;30755:16;;;;;;;;;;;;;;;;;;;;;30739:32;;30807:1;30790:19;;:5;:19;;;;30782:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30873:5;30866:12;;;30647:239;;;:::o;50907:136::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51020:15:::1;50995:22;;:40;;;;;;;;;;;;;;;;;;50907:136:::0;:::o;30377:208::-;30449:7;30494:1;30477:19;;:5;:19;;;;30469:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30561:9;:16;30571:5;30561:16;;;;;;;;;;;;;;;;30554:23;;30377:208;;;:::o;28213:148::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28320:1:::1;28283:40;;28304:6;;;;;;;;;;;28283:40;;;;;;;;;;;;28351:1;28334:6;;:19;;;;;;;;;;;;;;;;;;28213:148::o:0;49674:38::-;;;;;;;;;;;;;:::o;54380:540::-;54441:16;54471:18;54492:17;54502:6;54492:9;:17::i;:::-;54471:38;;54538:1;54524:10;:15;54520:393;;;54615:1;54601:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54594:23;;;;;54520:393;54650:23;54690:10;54676:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54650:51;;54716:13;54744:130;54768:10;54760:5;:18;54744:130;;;54824:34;54844:6;54852:5;54824:19;:34::i;:::-;54808:6;54815:5;54808:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;54780:7;;;;;:::i;:::-;;;;54744:130;;;54895:6;54888:13;;;;;54380:540;;;;:::o;27562:87::-;27608:7;27635:6;;;;;;;;;;;27628:13;;27562:87;:::o;31122:104::-;31178:13;31211:7;31204:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31122:104;:::o;32698:295::-;32813:12;:10;:12::i;:::-;32801:24;;:8;:24;;;;32793:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32913:8;32868:18;:32;32887:12;:10;:12::i;:::-;32868:32;;;;;;;;;;;;;;;:42;32901:8;32868:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32966:8;32937:48;;32952:12;:10;:12::i;:::-;32937:48;;;32976:8;32937:48;;;;;;:::i;:::-;;;;;;;;32698:295;;:::o;51869:804::-;51947:12;;;;;;;;;;;51939:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52028:1;52011:14;:18;:56;;;;;52051:16;;52033:14;:34;;52011:56;52003:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;52154:10;;52117:33;52135:14;52117:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:47;;52109:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;52281:19;:29;52301:8;52281:29;;;;;;;;;;;;52231:46;52262:14;52231:16;:26;52248:8;52231:26;;;;;;;;;;;;:30;;:46;;;;:::i;:::-;:79;;52223:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;52366:3;;;;;;;;;;;:8;;;52375:10;52387:20;:30;52408:8;52387:30;;;;;;;;;;;;52366:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52430:6;52425:242;52446:14;52442:1;:18;52425:242;;;52496:10;;52480:13;:11;:13::i;:::-;:26;52476:184;;;52556:8;52520:18;:33;52539:13;:11;:13::i;:::-;52520:33;;;;;;;;;;;:44;;;;52575:36;52585:10;52597:13;:11;:13::i;:::-;52575:9;:36::i;:::-;52622:16;:26;52639:8;52622:26;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;52476:184;52462:3;;;;;:::i;:::-;;;;52425:242;;;;51869:804;;:::o;50513:227::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50613:6:::1;50609:124;50629:17;:24;50625:1;:28;50609:124;;;50701:17;50719:1;50701:20;;;;;;;;;;;;;;;;;;;;;;50675;:23;50696:1;50675:23;;;;;;;;;;;:46;;;;50655:3;;;;;:::i;:::-;;;;50609:124;;;;50513:227:::0;:::o;49481:37::-;;;;:::o;49632:35::-;;;;;;;;;;;;;:::o;33893:285::-;34025:41;34044:12;:10;:12::i;:::-;34058:7;34025:18;:41::i;:::-;34017:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34131:39;34145:4;34151:2;34155:7;34164:5;34131:13;:39::i;:::-;33893:285;;;;:::o;53567:799::-;53640:13;53674:16;53682:7;53674;:16::i;:::-;53666:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53755:23;53781:10;:19;53792:7;53781:19;;;;;;;;;;;53755:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53811:18;53832:10;:8;:10::i;:::-;53811:31;;53940:1;53924:4;53918:18;:23;53914:72;;;53965:9;53958:16;;;;;;53914:72;54119:1;54099:9;54093:23;:27;54089:108;;;54168:4;54174:9;54151:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54137:48;;;;;;54089:108;54332:4;54338:18;:7;:16;:18::i;:::-;54315:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54301:57;;;;53567:799;;;;:::o;49525:15::-;;;;;;;;;;;;;:::o;51489:114::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51584:11:::1;51565:16;:30;;;;51489:114:::0;:::o;33064:164::-;33161:4;33185:18;:25;33204:5;33185:25;;;;;;;;;;;;;;;:35;33211:8;33185:35;;;;;;;;;;;;;;;;;;;;;;;;;33178:42;;33064:164;;;;:::o;49863:52::-;;;;;;;;;;;;;;;;;:::o;51277:98::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51352:15:::1;;;;;;;;;;;51351:16;51333:15;;:34;;;;;;;;;;;;;;;;;;51277:98::o:0;49593:32::-;;;;;;;;;;;;;:::o;49922:53::-;;;;;;;;;;;;;;;;;:::o;50136:216::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50232:6:::1;50228:117;50248:14;:21;50244:1;:25;50228:117;;;50316:14;50331:1;50316:17;;;;;;;;;;;;;;;;;;;;;;50291:19;:22;50311:1;50291:22;;;;;;;;;;;:42;;;;50271:3;;;;;:::i;:::-;;;;50228:117;;;;50136:216:::0;:::o;28516:244::-;27793:12;:10;:12::i;:::-;27782:23;;:7;:5;:7::i;:::-;:23;;;27774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28625:1:::1;28605:22;;:8;:22;;;;28597:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28715:8;28686:38;;28707:6;;;;;;;;;;;28686:38;;;;;;;;;;;;28744:8;28735:6;;:17;;;;;;;;;;;;;;;;;;28516:244:::0;:::o;30029:284::-;30131:4;30170:25;30155:40;;;:11;:40;;;;:101;;;;30223:33;30208:48;;;:11;:48;;;;30155:101;:150;;;;30269:36;30293:11;30269:23;:36::i;:::-;30155:150;30148:157;;30029:284;;;:::o;26179:98::-;26232:7;26259:10;26252:17;;26179:98;:::o;35645:127::-;35710:4;35762:1;35734:30;;:7;:16;35742:7;35734:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35727:37;;35645:127;;;:::o;39884:174::-;39986:2;39959:15;:24;39975:7;39959:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40042:7;40038:2;40004:46;;40013:23;40028:7;40013:14;:23::i;:::-;40004:46;;;;;;;;;;;;39884:174;;:::o;35939:348::-;36032:4;36057:16;36065:7;36057;:16::i;:::-;36049:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:13;36149:23;36164:7;36149:14;:23::i;:::-;36133:39;;36202:5;36191:16;;:7;:16;;;:51;;;;36235:7;36211:31;;:20;36223:7;36211:11;:20::i;:::-;:31;;;36191:51;:87;;;;36246:32;36263:5;36270:7;36246:16;:32::i;:::-;36191:87;36183:96;;;35939:348;;;;:::o;39216:550::-;39341:4;39314:31;;:23;39329:7;39314:14;:23::i;:::-;:31;;;39306:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39424:1;39410:16;;:2;:16;;;;39402:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39480:45;39501:4;39507:2;39511:7;39520:4;39480:20;:45::i;:::-;39590:29;39607:1;39611:7;39590:8;:29::i;:::-;39651:1;39632:9;:15;39642:4;39632:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39680:1;39663:9;:13;39673:2;39663:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39711:2;39692:7;:16;39700:7;39692:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39750:7;39746:2;39731:27;;39740:4;39731:27;;;;;;;;;;;;39216:550;;;:::o;38543:336::-;38624:55;38645:5;38660:1;38664:7;38673:5;38624:20;:55::i;:::-;38720:29;38737:1;38741:7;38720:8;:29::i;:::-;38782:1;38762:9;:16;38772:5;38762:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;38801:7;:16;38809:7;38801:16;;;;;;;;;;;;38794:23;;;;;;;;;;;38863:7;38859:1;38835:36;;38844:5;38835:36;;;;;;;;;;;;38543:336;;:::o;2662:98::-;2720:7;2751:1;2747;:5;;;;:::i;:::-;2740:12;;2662:98;;;;:::o;36629:110::-;36705:26;36715:2;36719:7;36705:26;;;;;;;;;;;;:9;:26::i;:::-;36629:110;;:::o;35060:272::-;35174:28;35184:4;35190:2;35194:7;35174:9;:28::i;:::-;35221:48;35244:4;35250:2;35254:7;35263:5;35221:22;:48::i;:::-;35213:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35060:272;;;;:::o;53246:117::-;53306:13;53339:16;53332:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53246:117;:::o;7173:723::-;7229:13;7459:1;7450:5;:10;7446:53;;;7477:10;;;;;;;;;;;;;;;;;;;;;7446:53;7509:12;7524:5;7509:20;;7540:14;7565:78;7580:1;7572:4;:9;7565:78;;7598:8;;;;;:::i;:::-;;;;7629:2;7621:10;;;;;:::i;:::-;;;7565:78;;;7653:19;7685:6;7675:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7653:39;;7703:154;7719:1;7710:5;:10;7703:154;;7747:1;7737:11;;;;;:::i;:::-;;;7814:2;7806:5;:10;;;;:::i;:::-;7793:2;:24;;;;:::i;:::-;7780:39;;7763:6;7770;7763:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7843:2;7834:11;;;;;:::i;:::-;;;7703:154;;;7881:6;7867:21;;;;;7173:723;;;;:::o;19249:157::-;19334:4;19373:25;19358:40;;;:11;:40;;;;19351:47;;19249:157;;;:::o;44716:604::-;44841:55;44868:4;44874:2;44878:7;44887:8;44841:26;:55::i;:::-;44929:1;44913:18;;:4;:18;;;44909:187;;;44948:40;44980:7;44948:31;:40::i;:::-;44909:187;;;45018:2;45010:10;;:4;:10;;;45006:90;;45037:47;45070:4;45076:7;45037:32;:47::i;:::-;45006:90;44909:187;45124:1;45110:16;;:2;:16;;;:28;;;;;45130:8;45110:28;45106:207;;;45155:45;45192:7;45155:36;:45::i;:::-;45106:207;;;45228:4;45222:10;;:2;:10;;;;:22;;;;;45236:8;45222:22;45218:95;;;45261:40;45289:2;45293:7;45261:27;:40::i;:::-;45218:95;45106:207;44716:604;;;;:::o;36966:250::-;37062:18;37068:2;37072:7;37062:5;:18::i;:::-;37099:54;37130:1;37134:2;37138:7;37147:5;37099:22;:54::i;:::-;37091:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;36966:250;;;:::o;40623:839::-;40740:4;40766:15;:2;:13;;;:15::i;:::-;40762:693;;;40818:2;40802:36;;;40839:12;:10;:12::i;:::-;40853:4;40859:7;40868:5;40802:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40798:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41065:1;41048:6;:13;:18;41044:341;;;41091:60;;;;;;;;;;:::i;:::-;;;;;;;;41044:341;41335:6;41329:13;41320:6;41316:2;41312:15;41305:38;40798:602;40935:45;;;40925:55;;;:6;:55;;;;40918:62;;;;;40762:693;41439:4;41432:11;;40623:839;;;;;;;:::o;42075:108::-;;;;;:::o;46043:164::-;46147:10;:17;;;;46120:15;:24;46136:7;46120:24;;;;;;;;;;;:44;;;;46175:10;46191:7;46175:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46043:164;:::o;46834:988::-;47100:22;47150:1;47125:22;47142:4;47125:16;:22::i;:::-;:26;;;;:::i;:::-;47100:51;;47162:18;47183:17;:26;47201:7;47183:26;;;;;;;;;;;;47162:47;;47330:14;47316:10;:28;47312:328;;47361:19;47383:12;:18;47396:4;47383:18;;;;;;;;;;;;;;;:34;47402:14;47383:34;;;;;;;;;;;;47361:56;;47467:11;47434:12;:18;47447:4;47434:18;;;;;;;;;;;;;;;:30;47453:10;47434:30;;;;;;;;;;;:44;;;;47584:10;47551:17;:30;47569:11;47551:30;;;;;;;;;;;:43;;;;47312:328;;47736:17;:26;47754:7;47736:26;;;;;;;;;;;47729:33;;;47780:12;:18;47793:4;47780:18;;;;;;;;;;;;;;;:34;47799:14;47780:34;;;;;;;;;;;47773:41;;;46834:988;;;;:::o;48117:1079::-;48370:22;48415:1;48395:10;:17;;;;:21;;;;:::i;:::-;48370:46;;48427:18;48448:15;:24;48464:7;48448:24;;;;;;;;;;;;48427:45;;48799:19;48821:10;48832:14;48821:26;;;;;;;;;;;;;;;;;;;;;;;;48799:48;;48885:11;48860:10;48871;48860:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48996:10;48965:15;:28;48981:11;48965:28;;;;;;;;;;;:41;;;;49137:15;:24;49153:7;49137:24;;;;;;;;;;;49130:31;;;49172:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48117:1079;;;;:::o;45621:221::-;45706:14;45723:20;45740:2;45723:16;:20::i;:::-;45706:37;;45781:7;45754:12;:16;45767:2;45754:16;;;;;;;;;;;;;;;:24;45771:6;45754:24;;;;;;;;;;;:34;;;;45828:6;45799:17;:26;45817:7;45799:26;;;;;;;;;;;:35;;;;45621:221;;;:::o;37552:388::-;37646:1;37632:16;;:2;:16;;;;37624:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37705:16;37713:7;37705;:16::i;:::-;37704:17;37696:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37767:51;37796:1;37800:2;37804:7;37813:4;37767:20;:51::i;:::-;37848:1;37831:9;:13;37841:2;37831:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37879:2;37860:7;:16;37868:7;37860:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37924:7;37920:2;37899:33;;37916:1;37899:33;;;;;;;;;;;;37552:388;;:::o;9638:422::-;9698:4;9906:12;10017:7;10005:20;9997:28;;10051:1;10044:4;:8;10037:15;;;9638:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2045:6;2039:13;2030:22;;2061:30;2085:5;2061:30;:::i;:::-;2020:77;;;;:::o;2103:137::-;;2186:6;2173:20;2164:29;;2202:32;2228:5;2202:32;:::i;:::-;2154:86;;;;:::o;2246:141::-;;2333:6;2327:13;2318:22;;2349:32;2375:5;2349:32;:::i;:::-;2308:79;;;;:::o;2406:271::-;;2510:3;2503:4;2495:6;2491:17;2487:27;2477:2;;2528:1;2525;2518:12;2477:2;2568:6;2555:20;2593:78;2667:3;2659:6;2652:4;2644:6;2640:17;2593:78;:::i;:::-;2584:87;;2467:210;;;;;:::o;2697:273::-;;2802:3;2795:4;2787:6;2783:17;2779:27;2769:2;;2820:1;2817;2810:12;2769:2;2860:6;2847:20;2885:79;2960:3;2952:6;2945:4;2937:6;2933:17;2885:79;:::i;:::-;2876:88;;2759:211;;;;;:::o;2976:139::-;;3060:6;3047:20;3038:29;;3076:33;3103:5;3076:33;:::i;:::-;3028:87;;;;:::o;3121:262::-;;3229:2;3217:9;3208:7;3204:23;3200:32;3197:2;;;3245:1;3242;3235:12;3197:2;3288:1;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3259:117;3187:196;;;;:::o;3389:407::-;;;3514:2;3502:9;3493:7;3489:23;3485:32;3482:2;;;3530:1;3527;3520:12;3482:2;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3700:2;3726:53;3771:7;3762:6;3751:9;3747:22;3726:53;:::i;:::-;3716:63;;3671:118;3472:324;;;;;:::o;3802:552::-;;;;3944:2;3932:9;3923:7;3919:23;3915:32;3912:2;;;3960:1;3957;3950:12;3912:2;4003:1;4028:53;4073:7;4064:6;4053:9;4049:22;4028:53;:::i;:::-;4018:63;;3974:117;4130:2;4156:53;4201:7;4192:6;4181:9;4177:22;4156:53;:::i;:::-;4146:63;;4101:118;4258:2;4284:53;4329:7;4320:6;4309:9;4305:22;4284:53;:::i;:::-;4274:63;;4229:118;3902:452;;;;;:::o;4360:809::-;;;;;4528:3;4516:9;4507:7;4503:23;4499:33;4496:2;;;4545:1;4542;4535:12;4496:2;4588:1;4613:53;4658:7;4649:6;4638:9;4634:22;4613:53;:::i;:::-;4603:63;;4559:117;4715:2;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4686:118;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4999:2;4988:9;4984:18;4971:32;5030:18;5022:6;5019:30;5016:2;;;5062:1;5059;5052:12;5016:2;5090:62;5144:7;5135:6;5124:9;5120:22;5090:62;:::i;:::-;5080:72;;4942:220;4486:683;;;;;;;:::o;5175:401::-;;;5297:2;5285:9;5276:7;5272:23;5268:32;5265:2;;;5313:1;5310;5303:12;5265:2;5356:1;5381:53;5426:7;5417:6;5406:9;5402:22;5381:53;:::i;:::-;5371:63;;5327:117;5483:2;5509:50;5551:7;5542:6;5531:9;5527:22;5509:50;:::i;:::-;5499:60;;5454:115;5255:321;;;;;:::o;5582:407::-;;;5707:2;5695:9;5686:7;5682:23;5678:32;5675:2;;;5723:1;5720;5713:12;5675:2;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;5665:324;;;;;:::o;5995:405::-;;6128:2;6116:9;6107:7;6103:23;6099:32;6096:2;;;6144:1;6141;6134:12;6096:2;6215:1;6204:9;6200:17;6187:31;6245:18;6237:6;6234:30;6231:2;;;6277:1;6274;6267:12;6231:2;6305:78;6375:7;6366:6;6355:9;6351:22;6305:78;:::i;:::-;6295:88;;6158:235;6086:314;;;;:::o;6406:278::-;;6522:2;6510:9;6501:7;6497:23;6493:32;6490:2;;;6538:1;6535;6528:12;6490:2;6581:1;6606:61;6659:7;6650:6;6639:9;6635:22;6606:61;:::i;:::-;6596:71;;6552:125;6480:204;;;;:::o;6690:260::-;;6797:2;6785:9;6776:7;6772:23;6768:32;6765:2;;;6813:1;6810;6803:12;6765:2;6856:1;6881:52;6925:7;6916:6;6905:9;6901:22;6881:52;:::i;:::-;6871:62;;6827:116;6755:195;;;;:::o;6956:282::-;;7074:2;7062:9;7053:7;7049:23;7045:32;7042:2;;;7090:1;7087;7080:12;7042:2;7133:1;7158:63;7213:7;7204:6;7193:9;7189:22;7158:63;:::i;:::-;7148:73;;7104:127;7032:206;;;;:::o;7244:375::-;;7362:2;7350:9;7341:7;7337:23;7333:32;7330:2;;;7378:1;7375;7368:12;7330:2;7449:1;7438:9;7434:17;7421:31;7479:18;7471:6;7468:30;7465:2;;;7511:1;7508;7501:12;7465:2;7539:63;7594:7;7585:6;7574:9;7570:22;7539:63;:::i;:::-;7529:73;;7392:220;7320:299;;;;:::o;7625:262::-;;7733:2;7721:9;7712:7;7708:23;7704:32;7701:2;;;7749:1;7746;7739:12;7701:2;7792:1;7817:53;7862:7;7853:6;7842:9;7838:22;7817:53;:::i;:::-;7807:63;;7763:117;7691:196;;;;:::o;7893:407::-;;;8018:2;8006:9;7997:7;7993:23;7989:32;7986:2;;;8034:1;8031;8024:12;7986:2;8077:1;8102:53;8147:7;8138:6;8127:9;8123:22;8102:53;:::i;:::-;8092:63;;8048:117;8204:2;8230:53;8275:7;8266:6;8255:9;8251:22;8230:53;:::i;:::-;8220:63;;8175:118;7976:324;;;;;:::o;8306:179::-;;8396:46;8438:3;8430:6;8396:46;:::i;:::-;8474:4;8469:3;8465:14;8451:28;;8386:99;;;;:::o;8491:118::-;8578:24;8596:5;8578:24;:::i;:::-;8573:3;8566:37;8556:53;;:::o;8645:732::-;;8793:54;8841:5;8793:54;:::i;:::-;8863:86;8942:6;8937:3;8863:86;:::i;:::-;8856:93;;8973:56;9023:5;8973:56;:::i;:::-;9052:7;9083:1;9068:284;9093:6;9090:1;9087:13;9068:284;;;9169:6;9163:13;9196:63;9255:3;9240:13;9196:63;:::i;:::-;9189:70;;9282:60;9335:6;9282:60;:::i;:::-;9272:70;;9128:224;9115:1;9112;9108:9;9103:14;;9068:284;;;9072:14;9368:3;9361:10;;8769:608;;;;;;;:::o;9383:109::-;9464:21;9479:5;9464:21;:::i;:::-;9459:3;9452:34;9442:50;;:::o;9498:360::-;;9612:38;9644:5;9612:38;:::i;:::-;9666:70;9729:6;9724:3;9666:70;:::i;:::-;9659:77;;9745:52;9790:6;9785:3;9778:4;9771:5;9767:16;9745:52;:::i;:::-;9822:29;9844:6;9822:29;:::i;:::-;9817:3;9813:39;9806:46;;9588:270;;;;;:::o;9864:157::-;9964:50;10008:5;9964:50;:::i;:::-;9959:3;9952:63;9942:79;;:::o;10027:364::-;;10143:39;10176:5;10143:39;:::i;:::-;10198:71;10262:6;10257:3;10198:71;:::i;:::-;10191:78;;10278:52;10323:6;10318:3;10311:4;10304:5;10300:16;10278:52;:::i;:::-;10355:29;10377:6;10355:29;:::i;:::-;10350:3;10346:39;10339:46;;10119:272;;;;;:::o;10397:377::-;;10531:39;10564:5;10531:39;:::i;:::-;10586:89;10668:6;10663:3;10586:89;:::i;:::-;10579:96;;10684:52;10729:6;10724:3;10717:4;10710:5;10706:16;10684:52;:::i;:::-;10761:6;10756:3;10752:16;10745:23;;10507:267;;;;;:::o;10780:330::-;;10943:67;11007:2;11002:3;10943:67;:::i;:::-;10936:74;;11040:34;11036:1;11031:3;11027:11;11020:55;11101:2;11096:3;11092:12;11085:19;;10926:184;;;:::o;11116:373::-;;11279:67;11343:2;11338:3;11279:67;:::i;:::-;11272:74;;11376:34;11372:1;11367:3;11363:11;11356:55;11442:11;11437:2;11432:3;11428:12;11421:33;11480:2;11475:3;11471:12;11464:19;;11262:227;;;:::o;11495:375::-;;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11755:34;11751:1;11746:3;11742:11;11735:55;11821:13;11816:2;11811:3;11807:12;11800:35;11861:2;11856:3;11852:12;11845:19;;11641:229;;;:::o;11876:382::-;;12039:67;12103:2;12098:3;12039:67;:::i;:::-;12032:74;;12136:34;12132:1;12127:3;12123:11;12116:55;12202:20;12197:2;12192:3;12188:12;12181:42;12249:2;12244:3;12240:12;12233:19;;12022:236;;;:::o;12264:370::-;;12427:67;12491:2;12486:3;12427:67;:::i;:::-;12420:74;;12524:34;12520:1;12515:3;12511:11;12504:55;12590:8;12585:2;12580:3;12576:12;12569:30;12625:2;12620:3;12616:12;12609:19;;12410:224;;;:::o;12640:326::-;;12803:67;12867:2;12862:3;12803:67;:::i;:::-;12796:74;;12900:30;12896:1;12891:3;12887:11;12880:51;12957:2;12952:3;12948:12;12941:19;;12786:180;;;:::o;12972:368::-;;13135:67;13199:2;13194:3;13135:67;:::i;:::-;13128:74;;13232:34;13228:1;13223:3;13219:11;13212:55;13298:6;13293:2;13288:3;13284:12;13277:28;13331:2;13326:3;13322:12;13315:19;;13118:222;;;:::o;13346:323::-;;13509:67;13573:2;13568:3;13509:67;:::i;:::-;13502:74;;13606:27;13602:1;13597:3;13593:11;13586:48;13660:2;13655:3;13651:12;13644:19;;13492:177;;;:::o;13675:377::-;;13838:67;13902:2;13897:3;13838:67;:::i;:::-;13831:74;;13935:34;13931:1;13926:3;13922:11;13915:55;14001:15;13996:2;13991:3;13987:12;13980:37;14043:2;14038:3;14034:12;14027:19;;13821:231;;;:::o;14058:376::-;;14221:67;14285:2;14280:3;14221:67;:::i;:::-;14214:74;;14318:34;14314:1;14309:3;14305:11;14298:55;14384:14;14379:2;14374:3;14370:12;14363:36;14425:2;14420:3;14416:12;14409:19;;14204:230;;;:::o;14440:388::-;;14603:67;14667:2;14662:3;14603:67;:::i;:::-;14596:74;;14700:34;14696:1;14691:3;14687:11;14680:55;14766:26;14761:2;14756:3;14752:12;14745:48;14819:2;14814:3;14810:12;14803:19;;14586:242;;;:::o;14834:374::-;;14997:67;15061:2;15056:3;14997:67;:::i;:::-;14990:74;;15094:34;15090:1;15085:3;15081:11;15074:55;15160:12;15155:2;15150:3;15146:12;15139:34;15199:2;15194:3;15190:12;15183:19;;14980:228;;;:::o;15214:373::-;;15377:67;15441:2;15436:3;15377:67;:::i;:::-;15370:74;;15474:34;15470:1;15465:3;15461:11;15454:55;15540:11;15535:2;15530:3;15526:12;15519:33;15578:2;15573:3;15569:12;15562:19;;15360:227;;;:::o;15593:328::-;;15756:67;15820:2;15815:3;15756:67;:::i;:::-;15749:74;;15853:32;15849:1;15844:3;15840:11;15833:53;15912:2;15907:3;15903:12;15896:19;;15739:182;;;:::o;15927:330::-;;16090:67;16154:2;16149:3;16090:67;:::i;:::-;16083:74;;16187:34;16183:1;16178:3;16174:11;16167:55;16248:2;16243:3;16239:12;16232:19;;16073:184;;;:::o;16263:376::-;;16426:67;16490:2;16485:3;16426:67;:::i;:::-;16419:74;;16523:34;16519:1;16514:3;16510:11;16503:55;16589:14;16584:2;16579:3;16575:12;16568:36;16630:2;16625:3;16621:12;16614:19;;16409:230;;;:::o;16645:309::-;;16808:67;16872:2;16867:3;16808:67;:::i;:::-;16801:74;;16905:13;16901:1;16896:3;16892:11;16885:34;16945:2;16940:3;16936:12;16929:19;;16791:163;;;:::o;16960:330::-;;17123:67;17187:2;17182:3;17123:67;:::i;:::-;17116:74;;17220:34;17216:1;17211:3;17207:11;17200:55;17281:2;17276:3;17272:12;17265:19;;17106:184;;;:::o;17296:373::-;;17459:67;17523:2;17518:3;17459:67;:::i;:::-;17452:74;;17556:34;17552:1;17547:3;17543:11;17536:55;17622:11;17617:2;17612:3;17608:12;17601:33;17660:2;17655:3;17651:12;17644:19;;17442:227;;;:::o;17675:379::-;;17838:67;17902:2;17897:3;17838:67;:::i;:::-;17831:74;;17935:34;17931:1;17926:3;17922:11;17915:55;18001:17;17996:2;17991:3;17987:12;17980:39;18045:2;18040:3;18036:12;18029:19;;17821:233;;;:::o;18060:365::-;;18223:67;18287:2;18282:3;18223:67;:::i;:::-;18216:74;;18320:34;18316:1;18311:3;18307:11;18300:55;18386:3;18381:2;18376:3;18372:12;18365:25;18416:2;18411:3;18407:12;18400:19;;18206:219;;;:::o;18431:381::-;;18594:67;18658:2;18653:3;18594:67;:::i;:::-;18587:74;;18691:34;18687:1;18682:3;18678:11;18671:55;18757:19;18752:2;18747:3;18743:12;18736:41;18803:2;18798:3;18794:12;18787:19;;18577:235;;;:::o;18818:319::-;;18981:67;19045:2;19040:3;18981:67;:::i;:::-;18974:74;;19078:23;19074:1;19069:3;19065:11;19058:44;19128:2;19123:3;19119:12;19112:19;;18964:173;;;:::o;19143:376::-;;19306:67;19370:2;19365:3;19306:67;:::i;:::-;19299:74;;19403:34;19399:1;19394:3;19390:11;19383:55;19469:14;19464:2;19459:3;19455:12;19448:36;19510:2;19505:3;19501:12;19494:19;;19289:230;;;:::o;19525:367::-;;19688:67;19752:2;19747:3;19688:67;:::i;:::-;19681:74;;19785:34;19781:1;19776:3;19772:11;19765:55;19851:5;19846:2;19841:3;19837:12;19830:27;19883:2;19878:3;19874:12;19867:19;;19671:221;;;:::o;19898:108::-;19975:24;19993:5;19975:24;:::i;:::-;19970:3;19963:37;19953:53;;:::o;20012:118::-;20099:24;20117:5;20099:24;:::i;:::-;20094:3;20087:37;20077:53;;:::o;20136:435::-;;20338:95;20429:3;20420:6;20338:95;:::i;:::-;20331:102;;20450:95;20541:3;20532:6;20450:95;:::i;:::-;20443:102;;20562:3;20555:10;;20320:251;;;;;:::o;20577:222::-;;20708:2;20697:9;20693:18;20685:26;;20721:71;20789:1;20778:9;20774:17;20765:6;20721:71;:::i;:::-;20675:124;;;;:::o;20805:640::-;;21038:3;21027:9;21023:19;21015:27;;21052:71;21120:1;21109:9;21105:17;21096:6;21052:71;:::i;:::-;21133:72;21201:2;21190:9;21186:18;21177:6;21133:72;:::i;:::-;21215;21283:2;21272:9;21268:18;21259:6;21215:72;:::i;:::-;21334:9;21328:4;21324:20;21319:2;21308:9;21304:18;21297:48;21362:76;21433:4;21424:6;21362:76;:::i;:::-;21354:84;;21005:440;;;;;;;:::o;21451:332::-;;21610:2;21599:9;21595:18;21587:26;;21623:71;21691:1;21680:9;21676:17;21667:6;21623:71;:::i;:::-;21704:72;21772:2;21761:9;21757:18;21748:6;21704:72;:::i;:::-;21577:206;;;;;:::o;21789:553::-;;22004:3;21993:9;21989:19;21981:27;;22018:71;22086:1;22075:9;22071:17;22062:6;22018:71;:::i;:::-;22099:72;22167:2;22156:9;22152:18;22143:6;22099:72;:::i;:::-;22181;22249:2;22238:9;22234:18;22225:6;22181:72;:::i;:::-;22263;22331:2;22320:9;22316:18;22307:6;22263:72;:::i;:::-;21971:371;;;;;;;:::o;22348:373::-;;22529:2;22518:9;22514:18;22506:26;;22578:9;22572:4;22568:20;22564:1;22553:9;22549:17;22542:47;22606:108;22709:4;22700:6;22606:108;:::i;:::-;22598:116;;22496:225;;;;:::o;22727:210::-;;22852:2;22841:9;22837:18;22829:26;;22865:65;22927:1;22916:9;22912:17;22903:6;22865:65;:::i;:::-;22819:118;;;;:::o;22943:248::-;;23087:2;23076:9;23072:18;23064:26;;23100:84;23181:1;23170:9;23166:17;23157:6;23100:84;:::i;:::-;23054:137;;;;:::o;23197:313::-;;23348:2;23337:9;23333:18;23325:26;;23397:9;23391:4;23387:20;23383:1;23372:9;23368:17;23361:47;23425:78;23498:4;23489:6;23425:78;:::i;:::-;23417:86;;23315:195;;;;:::o;23516:419::-;;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:131;23923:4;23797:131;:::i;:::-;23789:139;;23687:248;;;:::o;23941:419::-;;24145:2;24134:9;24130:18;24122:26;;24194:9;24188:4;24184:20;24180:1;24169:9;24165:17;24158:47;24222:131;24348:4;24222:131;:::i;:::-;24214:139;;24112:248;;;:::o;24366:419::-;;24570:2;24559:9;24555:18;24547:26;;24619:9;24613:4;24609:20;24605:1;24594:9;24590:17;24583:47;24647:131;24773:4;24647:131;:::i;:::-;24639:139;;24537:248;;;:::o;24791:419::-;;24995:2;24984:9;24980:18;24972:26;;25044:9;25038:4;25034:20;25030:1;25019:9;25015:17;25008:47;25072:131;25198:4;25072:131;:::i;:::-;25064:139;;24962:248;;;:::o;25216:419::-;;25420:2;25409:9;25405:18;25397:26;;25469:9;25463:4;25459:20;25455:1;25444:9;25440:17;25433:47;25497:131;25623:4;25497:131;:::i;:::-;25489:139;;25387:248;;;:::o;25641:419::-;;25845:2;25834:9;25830:18;25822:26;;25894:9;25888:4;25884:20;25880:1;25869:9;25865:17;25858:47;25922:131;26048:4;25922:131;:::i;:::-;25914:139;;25812:248;;;:::o;26066:419::-;;26270:2;26259:9;26255:18;26247:26;;26319:9;26313:4;26309:20;26305:1;26294:9;26290:17;26283:47;26347:131;26473:4;26347:131;:::i;:::-;26339:139;;26237:248;;;:::o;26491:419::-;;26695:2;26684:9;26680:18;26672:26;;26744:9;26738:4;26734:20;26730:1;26719:9;26715:17;26708:47;26772:131;26898:4;26772:131;:::i;:::-;26764:139;;26662:248;;;:::o;26916:419::-;;27120:2;27109:9;27105:18;27097:26;;27169:9;27163:4;27159:20;27155:1;27144:9;27140:17;27133:47;27197:131;27323:4;27197:131;:::i;:::-;27189:139;;27087:248;;;:::o;27341:419::-;;27545:2;27534:9;27530:18;27522:26;;27594:9;27588:4;27584:20;27580:1;27569:9;27565:17;27558:47;27622:131;27748:4;27622:131;:::i;:::-;27614:139;;27512:248;;;:::o;27766:419::-;;27970:2;27959:9;27955:18;27947:26;;28019:9;28013:4;28009:20;28005:1;27994:9;27990:17;27983:47;28047:131;28173:4;28047:131;:::i;:::-;28039:139;;27937:248;;;:::o;28191:419::-;;28395:2;28384:9;28380:18;28372:26;;28444:9;28438:4;28434:20;28430:1;28419:9;28415:17;28408:47;28472:131;28598:4;28472:131;:::i;:::-;28464:139;;28362:248;;;:::o;28616:419::-;;28820:2;28809:9;28805:18;28797:26;;28869:9;28863:4;28859:20;28855:1;28844:9;28840:17;28833:47;28897:131;29023:4;28897:131;:::i;:::-;28889:139;;28787:248;;;:::o;29041:419::-;;29245:2;29234:9;29230:18;29222:26;;29294:9;29288:4;29284:20;29280:1;29269:9;29265:17;29258:47;29322:131;29448:4;29322:131;:::i;:::-;29314:139;;29212:248;;;:::o;29466:419::-;;29670:2;29659:9;29655:18;29647:26;;29719:9;29713:4;29709:20;29705:1;29694:9;29690:17;29683:47;29747:131;29873:4;29747:131;:::i;:::-;29739:139;;29637:248;;;:::o;29891:419::-;;30095:2;30084:9;30080:18;30072:26;;30144:9;30138:4;30134:20;30130:1;30119:9;30115:17;30108:47;30172:131;30298:4;30172:131;:::i;:::-;30164:139;;30062:248;;;:::o;30316:419::-;;30520:2;30509:9;30505:18;30497:26;;30569:9;30563:4;30559:20;30555:1;30544:9;30540:17;30533:47;30597:131;30723:4;30597:131;:::i;:::-;30589:139;;30487:248;;;:::o;30741:419::-;;30945:2;30934:9;30930:18;30922:26;;30994:9;30988:4;30984:20;30980:1;30969:9;30965:17;30958:47;31022:131;31148:4;31022:131;:::i;:::-;31014:139;;30912:248;;;:::o;31166:419::-;;31370:2;31359:9;31355:18;31347:26;;31419:9;31413:4;31409:20;31405:1;31394:9;31390:17;31383:47;31447:131;31573:4;31447:131;:::i;:::-;31439:139;;31337:248;;;:::o;31591:419::-;;31795:2;31784:9;31780:18;31772:26;;31844:9;31838:4;31834:20;31830:1;31819:9;31815:17;31808:47;31872:131;31998:4;31872:131;:::i;:::-;31864:139;;31762:248;;;:::o;32016:419::-;;32220:2;32209:9;32205:18;32197:26;;32269:9;32263:4;32259:20;32255:1;32244:9;32240:17;32233:47;32297:131;32423:4;32297:131;:::i;:::-;32289:139;;32187:248;;;:::o;32441:419::-;;32645:2;32634:9;32630:18;32622:26;;32694:9;32688:4;32684:20;32680:1;32669:9;32665:17;32658:47;32722:131;32848:4;32722:131;:::i;:::-;32714:139;;32612:248;;;:::o;32866:419::-;;33070:2;33059:9;33055:18;33047:26;;33119:9;33113:4;33109:20;33105:1;33094:9;33090:17;33083:47;33147:131;33273:4;33147:131;:::i;:::-;33139:139;;33037:248;;;:::o;33291:419::-;;33495:2;33484:9;33480:18;33472:26;;33544:9;33538:4;33534:20;33530:1;33519:9;33515:17;33508:47;33572:131;33698:4;33572:131;:::i;:::-;33564:139;;33462:248;;;:::o;33716:419::-;;33920:2;33909:9;33905:18;33897:26;;33969:9;33963:4;33959:20;33955:1;33944:9;33940:17;33933:47;33997:131;34123:4;33997:131;:::i;:::-;33989:139;;33887:248;;;:::o;34141:222::-;;34272:2;34261:9;34257:18;34249:26;;34285:71;34353:1;34342:9;34338:17;34329:6;34285:71;:::i;:::-;34239:124;;;;:::o;34369:283::-;;34435:2;34429:9;34419:19;;34477:4;34469:6;34465:17;34584:6;34572:10;34569:22;34548:18;34536:10;34533:34;34530:62;34527:2;;;34595:18;;:::i;:::-;34527:2;34635:10;34631:2;34624:22;34409:243;;;;:::o;34658:311::-;;34825:18;34817:6;34814:30;34811:2;;;34847:18;;:::i;:::-;34811:2;34897:4;34889:6;34885:17;34877:25;;34957:4;34951;34947:15;34939:23;;34740:229;;;:::o;34975:331::-;;35126:18;35118:6;35115:30;35112:2;;;35148:18;;:::i;:::-;35112:2;35233:4;35229:9;35222:4;35214:6;35210:17;35206:33;35198:41;;35294:4;35288;35284:15;35276:23;;35041:265;;;:::o;35312:332::-;;35464:18;35456:6;35453:30;35450:2;;;35486:18;;:::i;:::-;35450:2;35571:4;35567:9;35560:4;35552:6;35548:17;35544:33;35536:41;;35632:4;35626;35622:15;35614:23;;35379:265;;;:::o;35650:132::-;;35740:3;35732:11;;35770:4;35765:3;35761:14;35753:22;;35722:60;;;:::o;35788:114::-;;35889:5;35883:12;35873:22;;35862:40;;;:::o;35908:98::-;;35993:5;35987:12;35977:22;;35966:40;;;:::o;36012:99::-;;36098:5;36092:12;36082:22;;36071:40;;;:::o;36117:113::-;;36219:4;36214:3;36210:14;36202:22;;36192:38;;;:::o;36236:184::-;;36369:6;36364:3;36357:19;36409:4;36404:3;36400:14;36385:29;;36347:73;;;;:::o;36426:168::-;;36543:6;36538:3;36531:19;36583:4;36578:3;36574:14;36559:29;;36521:73;;;;:::o;36600:169::-;;36718:6;36713:3;36706:19;36758:4;36753:3;36749:14;36734:29;;36696:73;;;;:::o;36775:148::-;;36914:3;36899:18;;36889:34;;;;:::o;36929:305::-;;36988:20;37006:1;36988:20;:::i;:::-;36983:25;;37022:20;37040:1;37022:20;:::i;:::-;37017:25;;37176:1;37108:66;37104:74;37101:1;37098:81;37095:2;;;37182:18;;:::i;:::-;37095:2;37226:1;37223;37219:9;37212:16;;36973:261;;;;:::o;37240:185::-;;37297:20;37315:1;37297:20;:::i;:::-;37292:25;;37331:20;37349:1;37331:20;:::i;:::-;37326:25;;37370:1;37360:2;;37375:18;;:::i;:::-;37360:2;37417:1;37414;37410:9;37405:14;;37282:143;;;;:::o;37431:191::-;;37491:20;37509:1;37491:20;:::i;:::-;37486:25;;37525:20;37543:1;37525:20;:::i;:::-;37520:25;;37564:1;37561;37558:8;37555:2;;;37569:18;;:::i;:::-;37555:2;37614:1;37611;37607:9;37599:17;;37476:146;;;;:::o;37628:96::-;;37694:24;37712:5;37694:24;:::i;:::-;37683:35;;37673:51;;;:::o;37730:90::-;;37807:5;37800:13;37793:21;37782:32;;37772:48;;;:::o;37826:149::-;;37902:66;37895:5;37891:78;37880:89;;37870:105;;;:::o;37981:126::-;;38058:42;38051:5;38047:54;38036:65;;38026:81;;;:::o;38113:77::-;;38179:5;38168:16;;38158:32;;;:::o;38196:152::-;;38292:50;38336:5;38292:50;:::i;:::-;38279:63;;38269:79;;;:::o;38354:126::-;;38450:24;38468:5;38450:24;:::i;:::-;38437:37;;38427:53;;;:::o;38486:154::-;38570:6;38565:3;38560;38547:30;38632:1;38623:6;38618:3;38614:16;38607:27;38537:103;;;:::o;38646:307::-;38714:1;38724:113;38738:6;38735:1;38732:13;38724:113;;;38823:1;38818:3;38814:11;38808:18;38804:1;38799:3;38795:11;38788:39;38760:2;38757:1;38753:10;38748:15;;38724:113;;;38855:6;38852:1;38849:13;38846:2;;;38935:1;38926:6;38921:3;38917:16;38910:27;38846:2;38695:258;;;;:::o;38959:320::-;;39040:1;39034:4;39030:12;39020:22;;39087:1;39081:4;39077:12;39108:18;39098:2;;39164:4;39156:6;39152:17;39142:27;;39098:2;39226;39218:6;39215:14;39195:18;39192:38;39189:2;;;39245:18;;:::i;:::-;39189:2;39010:269;;;;:::o;39285:233::-;;39347:24;39365:5;39347:24;:::i;:::-;39338:33;;39393:66;39386:5;39383:77;39380:2;;;39463:18;;:::i;:::-;39380:2;39510:1;39503:5;39499:13;39492:20;;39328:190;;;:::o;39524:176::-;;39573:20;39591:1;39573:20;:::i;:::-;39568:25;;39607:20;39625:1;39607:20;:::i;:::-;39602:25;;39646:1;39636:2;;39651:18;;:::i;:::-;39636:2;39692:1;39689;39685:9;39680:14;;39558:142;;;;:::o;39706:180::-;39754:77;39751:1;39744:88;39851:4;39848:1;39841:15;39875:4;39872:1;39865:15;39892:180;39940:77;39937:1;39930:88;40037:4;40034:1;40027:15;40061:4;40058:1;40051:15;40078:180;40126:77;40123:1;40116:88;40223:4;40220:1;40213:15;40247:4;40244:1;40237:15;40264:180;40312:77;40309:1;40302:88;40409:4;40406:1;40399:15;40433:4;40430:1;40423:15;40450:102;;40542:2;40538:7;40533:2;40526:5;40522:14;40518:28;40508:38;;40498:54;;;:::o;40558:122::-;40631:24;40649:5;40631:24;:::i;:::-;40624:5;40621:35;40611:2;;40670:1;40667;40660:12;40611:2;40601:79;:::o;40686:116::-;40756:21;40771:5;40756:21;:::i;:::-;40749:5;40746:32;40736:2;;40792:1;40789;40782:12;40736:2;40726:76;:::o;40808:120::-;40880:23;40897:5;40880:23;:::i;:::-;40873:5;40870:34;40860:2;;40918:1;40915;40908:12;40860:2;40850:78;:::o;40934:122::-;41007:24;41025:5;41007:24;:::i;:::-;41000:5;40997:35;40987:2;;41046:1;41043;41036:12;40987:2;40977:79;:::o
Swarm Source
ipfs://2987c7de8435529436c50c68704b900e23f2fad7591d597ff5acb6960dc85132
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.