Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
10,000 BEE
Holders
5,313
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 BEELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Beeings
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * * t __ __ * h | Y__\_/_/ * e \ / \ ## ## * / .__. \ ####### * b / _ /_ ##### * e | _ V |V_ ## * e | V \V * i \ | # # * n <\_______/ ##### * g ._L___L_. ### * s o o # * * The official Beeings ERC-721 Smart Contract */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) 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; 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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/beeings.sol pragma solidity ^0.8.0; contract Beeings is ERC721, Ownable, Pausable { using Counters for Counters.Counter; using Strings for uint256; address _address_for_withdrawal = 0x5144E324bE090F8b22e56476E6e5ed624037f925; Counters.Counter private _total; Counters.Counter private _reserved_total; mapping (address => bool) private _whitelist; mapping (address => uint256) private _addr_balance; uint256 private _price = 0.075 ether; uint256 private _mint_supply = 10000; uint256 private _mint_reserved = 50; uint256 private _mint_limit = 3; uint256 private _mint_limit_whitelist = 3; string private _base_url = 'https://2-crypto.s3.amazonaws.com/the-beeings/NFT_META/'; bool private _is_whitelist_only = true; bool private _mint_limit_by_addy = true; //construct constructor() ERC721('Beeings','BEE') { } //pausing of contract function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } //whitelist function toggle_whitelist(bool change) external onlyOwner { _is_whitelist_only = change; } function add_to_whitelist(address[] memory addresses) external onlyOwner { for(uint i=0;i<addresses.length;i++) { address user = addresses[i]; if(_whitelist[user]) { continue; } _whitelist[user] = true; } } function remove_from_whitelist(address[] memory addresses) external onlyOwner { for(uint i=0;i<addresses.length;i++) { address user = addresses[i]; if(_whitelist[user]) { _whitelist[user] = false; } } } function is_whitelisted(address user) public view returns (bool) { return _whitelist[user]; } function is_whitelist_on() external view returns (bool) { return _is_whitelist_only; } //set function set_price(uint256 new_price) external onlyOwner() { _price = new_price; } function set_mint_supply(uint256 new_limit) external onlyOwner() { _mint_supply = new_limit; } function set_mint_reserve(uint256 new_limit) external onlyOwner() { _mint_reserved = new_limit; } function set_mint_limit(uint256 new_limit) external onlyOwner() { _mint_limit = new_limit; } function set_whitelist_mint_limit(uint256 new_limit) external onlyOwner() { _mint_limit_whitelist = new_limit; } function set_mint_limit_state(bool state) external onlyOwner() { _mint_limit_by_addy = state; } function set_base_url(string memory new_url) external onlyOwner() { _base_url = new_url; } //get function get_price() external view returns (uint256) { return _price; } function get_supply_limit() external view returns (uint256) { return _mint_supply; } function get_reserve_limit() external view returns (uint256) { return _mint_reserved; } function get_mint_limit() external view returns (uint256) { return _mint_limit; } function get_whitelisted_mint_limit() external view returns (uint256) { return _mint_limit_whitelist; } function get_addr_minted_balance(address user) public view returns (uint256) { return _addr_balance[user]; } function baseTokenURI() public view returns (string memory) { return _base_url; } function tokenURI(uint256 token_id) public view override returns (string memory) { require(_exists(token_id),'missing token'); return string(abi.encodePacked(_base_url,token_id.toString())); } function get_total_reserved() external view returns (uint256) { return _reserved_total.current(); } function totalSupply() public view returns (uint256) { return _total.current(); } //withdraw function withdraw() external payable onlyOwner { require(payable(_address_for_withdrawal).send(address(this).balance-1)); } //mint function mint(uint256 mint_num) public payable { //entire mint supply has been minted require(_total.current() - _reserved_total.current() + mint_num <= _mint_supply - _mint_reserved, 'exceeded remaining'); //must mint at least one require(mint_num > 0, 'must mint 1'); //minter did not send enough ETH require(msg.value >= _price * mint_num, 'not enough eth'); //whitelist is on if(_is_whitelist_only) { //must be whitelisted require(is_whitelisted(msg.sender),'not whitelisted'); //cannot mint more than allowed require(get_addr_minted_balance(msg.sender) + mint_num <= _mint_limit_whitelist, 'exceeded max limit'); } //cannot mint, per address, more than allowance else if(_mint_limit_by_addy) { require(get_addr_minted_balance(msg.sender) + mint_num <= _mint_limit, 'exceeded max limit'); } //cannot mint, per transaction, more than allowance else { require(mint_num <= _mint_limit, 'exceeded max mint'); } //mint for(uint256 i;i<mint_num;i++) { _total.increment(); _addr_balance[msg.sender] += 1; _safeMint(msg.sender,_total.current()); } } function mint_reserve(address address_to, uint256 mint_num) external onlyOwner() { //cannot mint more than what has been reserved require(_reserved_total.current() + mint_num <= _mint_reserved, 'exceeded max limit.'); //mint for(uint256 i;i<mint_num;i++) { _total.increment(); _reserved_total.increment(); _safeMint(address_to,_total.current()); } } function _beforeTokenTransfer(address from, address to, uint256 token_id) internal whenNotPaused override(ERC721) { super._beforeTokenTransfer(from, to, token_id); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"add_to_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"get_addr_minted_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_mint_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_reserve_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_supply_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_total_reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_whitelisted_mint_limit","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":[],"name":"is_whitelist_on","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"is_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mint_num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"address_to","type":"address"},{"internalType":"uint256","name":"mint_num","type":"uint256"}],"name":"mint_reserve","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"remove_from_whitelist","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"new_url","type":"string"}],"name":"set_base_url","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"set_mint_limit_state","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_mint_supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"set_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_limit","type":"uint256"}],"name":"set_whitelist_mint_limit","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":"bool","name":"change","type":"bool"}],"name":"toggle_whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052735144e324be090f8b22e56476e6e5ed624037f925600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067010a741a46278000600c55612710600d556032600e556003600f55600360105560405180606001604052806037815260200162004bab6037913960119080519060200190620000ab9291906200029f565b506001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000ef57600080fd5b506040518060400160405280600781526020017f426565696e6773000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42454500000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001749291906200029f565b5080600190805190602001906200018d9291906200029f565b505050620001b0620001a4620001d160201b60201c565b620001d960201b60201c565b6000600660146101000a81548160ff021916908315150217905550620003b4565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ad906200034f565b90600052602060002090601f016020900481019282620002d157600085556200031d565b82601f10620002ec57805160ff19168380011785556200031d565b828001600101855582156200031d579182015b828111156200031c578251825591602001919060010190620002ff565b5b5090506200032c919062000330565b5090565b5b808211156200034b57600081600090555060010162000331565b5090565b600060028204905060018216806200036857607f821691505b602082108114156200037f576200037e62000385565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147e780620003c46000396000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063b97b808f116100b6578063c87b56dd1161007a578063c87b56dd1461087a578063c93b3f0e146108b7578063d547cfb7146108e0578063da0650001461090b578063e985e9c514610936578063f2fde38b146109735761025c565b8063b97b808f146107ab578063c2ce3552146107d4578063c30054c7146107fd578063c64d5af614610826578063c7dee0e71461084f5761025c565b806395d89b411161010857806395d89b41146106aa578063a0712d68146106d5578063a14a141f146106f1578063a22cb4651461071c578063b344363d14610745578063b88d4fde146107825761025c565b8063715018a6146105eb578063745862bf14610602578063779ee6281461062b5780638456cb59146106685780638da5cb5b1461067f5761025c565b80633ccfd60b116101dd5780635ab087f4116101a15780635ab087f4146104c75780635c975abb146104f2578063600502f61461051d57806361138cda146105465780636352211e1461057157806370a08231146105ae5761025c565b80633ccfd60b1461042b5780633f4ba83a1461043557806342842e0e1461044c578063516b475c146104755780635447fabf1461049e5761025c565b806311f37ceb1161022457806311f37ceb1461035a57806318160ddd1461038557806323b872dd146103b057806328bf794d146103d95780632c404089146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630c1fd5531461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061350c565b61099c565b6040516102959190613f84565b60405180910390f35b3480156102aa57600080fd5b506102b3610a7e565b6040516102c09190613f9f565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610b10565b6040516102fd9190613f1d565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613466565b610b95565b005b34801561033b57600080fd5b50610344610cad565b60405161035191906142e1565b60405180910390f35b34801561036657600080fd5b5061036f610cb7565b60405161037c91906142e1565b60405180910390f35b34801561039157600080fd5b5061039a610cc1565b6040516103a791906142e1565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613360565b610cd2565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061359f565b610d32565b005b34801561040e57600080fd5b5061042960048036038101906104249190613466565b610db8565b005b610433610ed7565b005b34801561044157600080fd5b5061044a610fc1565b005b34801561045857600080fd5b50610473600480360381019061046e9190613360565b611047565b005b34801561048157600080fd5b5061049c6004803603810190610497919061359f565b611067565b005b3480156104aa57600080fd5b506104c560048036038101906104c0919061359f565b6110ed565b005b3480156104d357600080fd5b506104dc611173565b6040516104e991906142e1565b60405180910390f35b3480156104fe57600080fd5b5061050761117d565b6040516105149190613f84565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906134a2565b611194565b005b34801561055257600080fd5b5061055b61132a565b60405161056891906142e1565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061359f565b611334565b6040516105a59190613f1d565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d091906132fb565b6113e6565b6040516105e291906142e1565b60405180910390f35b3480156105f757600080fd5b5061060061149e565b005b34801561060e57600080fd5b506106296004803603810190610624919061355e565b611526565b005b34801561063757600080fd5b50610652600480360381019061064d91906132fb565b6115bc565b60405161065f9190613f84565b60405180910390f35b34801561067457600080fd5b5061067d611612565b005b34801561068b57600080fd5b50610694611698565b6040516106a19190613f1d565b60405180910390f35b3480156106b657600080fd5b506106bf6116c2565b6040516106cc9190613f9f565b60405180910390f35b6106ef60048036038101906106ea919061359f565b611754565b005b3480156106fd57600080fd5b50610706611a6a565b60405161071391906142e1565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061342a565b611a7b565b005b34801561075157600080fd5b5061076c600480360381019061076791906132fb565b611a91565b60405161077991906142e1565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906133af565b611ada565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906134a2565b611b3c565b005b3480156107e057600080fd5b506107fb60048036038101906107f691906134e3565b611ccc565b005b34801561080957600080fd5b50610824600480360381019061081f919061359f565b611d65565b005b34801561083257600080fd5b5061084d6004803603810190610848919061359f565b611deb565b005b34801561085b57600080fd5b50610864611e71565b60405161087191906142e1565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c919061359f565b611e7b565b6040516108ae9190613f9f565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d991906134e3565b611ef7565b005b3480156108ec57600080fd5b506108f5611f90565b6040516109029190613f9f565b60405180910390f35b34801561091757600080fd5b50610920612022565b60405161092d9190613f84565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190613324565b612039565b60405161096a9190613f84565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906132fb565b6120cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a775750610a76826121c5565b5b9050919050565b606060008054610a8d906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab9906145dc565b8015610b065780601f10610adb57610100808354040283529160200191610b06565b820191906000526020600020905b815481529060010190602001808311610ae957829003601f168201915b5050505050905090565b6000610b1b8261222f565b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b51906141c1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba082611334565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890614241565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3061229b565b73ffffffffffffffffffffffffffffffffffffffff161480610c5f5750610c5e81610c5961229b565b612039565b5b610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590614121565b60405180910390fd5b610ca883836122a3565b505050565b6000600d54905090565b6000600c54905090565b6000610ccd600861235c565b905090565b610ce3610cdd61229b565b8261236a565b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614261565b60405180910390fd5b610d2d838383612448565b505050565b610d3a61229b565b73ffffffffffffffffffffffffffffffffffffffff16610d58611698565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141e1565b60405180910390fd5b80600c8190555050565b610dc061229b565b73ffffffffffffffffffffffffffffffffffffffff16610dde611698565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906141e1565b60405180910390fd5b600e5481610e42600961235c565b610e4c9190614411565b1115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614101565b60405180910390fd5b60005b81811015610ed257610ea260086126a4565b610eac60096126a4565b610ebf83610eba600861235c565b6126ba565b8080610eca9061460e565b915050610e90565b505050565b610edf61229b565b73ffffffffffffffffffffffffffffffffffffffff16610efd611698565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906141e1565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600147610f9c91906144f2565b9081150290604051600060405180830381858888f19350505050610fbf57600080fd5b565b610fc961229b565b73ffffffffffffffffffffffffffffffffffffffff16610fe7611698565b73ffffffffffffffffffffffffffffffffffffffff161461103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906141e1565b60405180910390fd5b6110456126d8565b565b61106283838360405180602001604052806000815250611ada565b505050565b61106f61229b565b73ffffffffffffffffffffffffffffffffffffffff1661108d611698565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906141e1565b60405180910390fd5b80600e8190555050565b6110f561229b565b73ffffffffffffffffffffffffffffffffffffffff16611113611698565b73ffffffffffffffffffffffffffffffffffffffff1614611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906141e1565b60405180910390fd5b80600d8190555050565b6000601054905090565b6000600660149054906101000a900460ff16905090565b61119c61229b565b73ffffffffffffffffffffffffffffffffffffffff166111ba611698565b73ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906141e1565b60405180910390fd5b60005b8151811015611326576000828281518110611257577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112b95750611313565b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b808061131e9061460e565b915050611213565b5050565b6000600f54905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490614161565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90614141565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a661229b565b73ffffffffffffffffffffffffffffffffffffffff166114c4611698565b73ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906141e1565b60405180910390fd5b611524600061277a565b565b61152e61229b565b73ffffffffffffffffffffffffffffffffffffffff1661154c611698565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906141e1565b60405180910390fd5b80601190805190602001906115b8929190613089565b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61161a61229b565b73ffffffffffffffffffffffffffffffffffffffff16611638611698565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611685906141e1565b60405180910390fd5b611696612840565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116d1906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546116fd906145dc565b801561174a5780601f1061171f5761010080835404028352916020019161174a565b820191906000526020600020905b81548152906001019060200180831161172d57829003601f168201915b5050505050905090565b600e54600d5461176491906144f2565b8161176f600961235c565b611779600861235c565b61178391906144f2565b61178d9190614411565b11156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906142a1565b60405180910390fd5b60008111611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906141a1565b60405180910390fd5b80600c5461181f9190614498565b341015611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906142c1565b60405180910390fd5b601260009054906101000a900460ff161561191b5761187f336115bc565b6118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614281565b60405180910390fd5b601054816118cb33611a91565b6118d59190614411565b1115611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90614221565b60405180910390fd5b6119d4565b601260019054906101000a900460ff161561198d57600f548161193d33611a91565b6119479190614411565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614221565b60405180910390fd5b6119d3565b600f548111156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990614001565b60405180910390fd5b5b5b60005b81811015611a66576119e960086126a4565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a399190614411565b92505081905550611a5333611a4e600861235c565b6126ba565b8080611a5e9061460e565b9150506119d7565b5050565b6000611a76600961235c565b905090565b611a8d611a8661229b565b83836128e3565b5050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aeb611ae561229b565b8361236a565b611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614261565b60405180910390fd5b611b3684848484612a50565b50505050565b611b4461229b565b73ffffffffffffffffffffffffffffffffffffffff16611b62611698565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf906141e1565b60405180910390fd5b60005b8151811015611cc8576000828281518110611bff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611cb4576000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080611cc09061460e565b915050611bbb565b5050565b611cd461229b565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611698565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906141e1565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b611d6d61229b565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611698565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906141e1565b60405180910390fd5b8060108190555050565b611df361229b565b73ffffffffffffffffffffffffffffffffffffffff16611e11611698565b73ffffffffffffffffffffffffffffffffffffffff1614611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e906141e1565b60405180910390fd5b80600f8190555050565b6000600e54905090565b6060611e868261222f565b611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613fc1565b60405180910390fd5b6011611ed083612aac565b604051602001611ee1929190613ef9565b6040516020818303038152906040529050919050565b611eff61229b565b73ffffffffffffffffffffffffffffffffffffffff16611f1d611698565b73ffffffffffffffffffffffffffffffffffffffff1614611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a906141e1565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606060118054611f9f906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb906145dc565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b5050505050905090565b6000601260009054906101000a900460ff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d561229b565b73ffffffffffffffffffffffffffffffffffffffff166120f3611698565b73ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612140906141e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090614041565b60405180910390fd5b6121c28161277a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231683611334565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006123758261222f565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906140c1565b60405180910390fd5b60006123bf83611334565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061242e57508373ffffffffffffffffffffffffffffffffffffffff1661241684610b10565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243f575061243e8185612039565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661246882611334565b73ffffffffffffffffffffffffffffffffffffffff16146124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b590614201565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614081565b60405180910390fd5b612539838383612c59565b6125446000826122a3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259491906144f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125eb9190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b6126d4828260405180602001604052806000815250612cb1565b5050565b6126e061117d565b61271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613fe1565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61276361229b565b6040516127709190613f1d565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61284861117d565b15612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f906140e1565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128cc61229b565b6040516128d99190613f1d565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612949906140a1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a439190613f84565b60405180910390a3505050565b612a5b848484612448565b612a6784848484612d0c565b612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90614021565b60405180910390fd5b50505050565b60606000821415612af4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c54565b600082905060005b60008214612b26578080612b0f9061460e565b915050600a82612b1f9190614467565b9150612afc565b60008167ffffffffffffffff811115612b68577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612b9a5781602001600182028036833780820191505090505b5090505b60008514612c4d57600182612bb391906144f2565b9150600a85612bc29190614657565b6030612bce9190614411565b60f81b818381518110612c0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c469190614467565b9450612b9e565b8093505050505b919050565b612c6161117d565b15612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906140e1565b60405180910390fd5b612cac838383612ea3565b505050565b612cbb8383612ea8565b612cc86000848484612d0c565b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe90614021565b60405180910390fd5b505050565b6000612d2d8473ffffffffffffffffffffffffffffffffffffffff16613076565b15612e96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d5661229b565b8786866040518563ffffffff1660e01b8152600401612d789493929190613f38565b602060405180830381600087803b158015612d9257600080fd5b505af1925050508015612dc357506040513d601f19601f82011682018060405250810190612dc09190613535565b60015b612e46573d8060008114612df3576040519150601f19603f3d011682016040523d82523d6000602084013e612df8565b606091505b50600081511415612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590614021565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e9b565b600190505b949350505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614181565b60405180910390fd5b612f218161222f565b15612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890614061565b60405180910390fd5b612f6d60008383612c59565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fbd9190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613095906145dc565b90600052602060002090601f0160209004810192826130b757600085556130fe565b82601f106130d057805160ff19168380011785556130fe565b828001600101855582156130fe579182015b828111156130fd5782518255916020019190600101906130e2565b5b50905061310b919061310f565b5090565b5b80821115613128576000816000905550600101613110565b5090565b600061313f61313a8461432d565b6142fc565b9050808382526020820190508285602086028201111561315e57600080fd5b60005b8581101561318e57816131748882613214565b845260208401935060208301925050600181019050613161565b5050509392505050565b60006131ab6131a684614359565b6142fc565b9050828152602081018484840111156131c357600080fd5b6131ce84828561459a565b509392505050565b60006131e96131e484614389565b6142fc565b90508281526020810184848401111561320157600080fd5b61320c84828561459a565b509392505050565b60008135905061322381614755565b92915050565b600082601f83011261323a57600080fd5b813561324a84826020860161312c565b91505092915050565b6000813590506132628161476c565b92915050565b60008135905061327781614783565b92915050565b60008151905061328c81614783565b92915050565b600082601f8301126132a357600080fd5b81356132b3848260208601613198565b91505092915050565b600082601f8301126132cd57600080fd5b81356132dd8482602086016131d6565b91505092915050565b6000813590506132f58161479a565b92915050565b60006020828403121561330d57600080fd5b600061331b84828501613214565b91505092915050565b6000806040838503121561333757600080fd5b600061334585828601613214565b925050602061335685828601613214565b9150509250929050565b60008060006060848603121561337557600080fd5b600061338386828701613214565b935050602061339486828701613214565b92505060406133a5868287016132e6565b9150509250925092565b600080600080608085870312156133c557600080fd5b60006133d387828801613214565b94505060206133e487828801613214565b93505060406133f5878288016132e6565b925050606085013567ffffffffffffffff81111561341257600080fd5b61341e87828801613292565b91505092959194509250565b6000806040838503121561343d57600080fd5b600061344b85828601613214565b925050602061345c85828601613253565b9150509250929050565b6000806040838503121561347957600080fd5b600061348785828601613214565b9250506020613498858286016132e6565b9150509250929050565b6000602082840312156134b457600080fd5b600082013567ffffffffffffffff8111156134ce57600080fd5b6134da84828501613229565b91505092915050565b6000602082840312156134f557600080fd5b600061350384828501613253565b91505092915050565b60006020828403121561351e57600080fd5b600061352c84828501613268565b91505092915050565b60006020828403121561354757600080fd5b60006135558482850161327d565b91505092915050565b60006020828403121561357057600080fd5b600082013567ffffffffffffffff81111561358a57600080fd5b613596848285016132bc565b91505092915050565b6000602082840312156135b157600080fd5b60006135bf848285016132e6565b91505092915050565b6135d181614526565b82525050565b6135e081614538565b82525050565b60006135f1826143ce565b6135fb81856143e4565b935061360b8185602086016145a9565b61361481614744565b840191505092915050565b600061362a826143d9565b61363481856143f5565b93506136448185602086016145a9565b61364d81614744565b840191505092915050565b6000613663826143d9565b61366d8185614406565b935061367d8185602086016145a9565b80840191505092915050565b60008154613696816145dc565b6136a08186614406565b945060018216600081146136bb57600181146136cc576136ff565b60ff198316865281860193506136ff565b6136d5856143b9565b60005b838110156136f7578154818901526001820191506020810190506136d8565b838801955050505b50505092915050565b6000613715600d836143f5565b91507f6d697373696e6720746f6b656e000000000000000000000000000000000000006000830152602082019050919050565b60006137556014836143f5565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006137956011836143f5565b91507f6578636565646564206d6178206d696e740000000000000000000000000000006000830152602082019050919050565b60006137d56032836143f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061383b6026836143f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a1601c836143f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138e16024836143f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139476019836143f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613987602c836143f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139ed6010836143f5565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613a2d6013836143f5565b91507f6578636565646564206d6178206c696d69742e000000000000000000000000006000830152602082019050919050565b6000613a6d6038836143f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ad3602a836143f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b396029836143f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9f6020836143f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bdf600b836143f5565b91507f6d757374206d696e7420310000000000000000000000000000000000000000006000830152602082019050919050565b6000613c1f602c836143f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c856020836143f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613cc56029836143f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d2b6012836143f5565b91507f6578636565646564206d6178206c696d697400000000000000000000000000006000830152602082019050919050565b6000613d6b6021836143f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd16031836143f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e37600f836143f5565b91507f6e6f742077686974656c697374656400000000000000000000000000000000006000830152602082019050919050565b6000613e776012836143f5565b91507f65786365656465642072656d61696e696e6700000000000000000000000000006000830152602082019050919050565b6000613eb7600e836143f5565b91507f6e6f7420656e6f756768206574680000000000000000000000000000000000006000830152602082019050919050565b613ef381614590565b82525050565b6000613f058285613689565b9150613f118284613658565b91508190509392505050565b6000602082019050613f3260008301846135c8565b92915050565b6000608082019050613f4d60008301876135c8565b613f5a60208301866135c8565b613f676040830185613eea565b8181036060830152613f7981846135e6565b905095945050505050565b6000602082019050613f9960008301846135d7565b92915050565b60006020820190508181036000830152613fb9818461361f565b905092915050565b60006020820190508181036000830152613fda81613708565b9050919050565b60006020820190508181036000830152613ffa81613748565b9050919050565b6000602082019050818103600083015261401a81613788565b9050919050565b6000602082019050818103600083015261403a816137c8565b9050919050565b6000602082019050818103600083015261405a8161382e565b9050919050565b6000602082019050818103600083015261407a81613894565b9050919050565b6000602082019050818103600083015261409a816138d4565b9050919050565b600060208201905081810360008301526140ba8161393a565b9050919050565b600060208201905081810360008301526140da8161397a565b9050919050565b600060208201905081810360008301526140fa816139e0565b9050919050565b6000602082019050818103600083015261411a81613a20565b9050919050565b6000602082019050818103600083015261413a81613a60565b9050919050565b6000602082019050818103600083015261415a81613ac6565b9050919050565b6000602082019050818103600083015261417a81613b2c565b9050919050565b6000602082019050818103600083015261419a81613b92565b9050919050565b600060208201905081810360008301526141ba81613bd2565b9050919050565b600060208201905081810360008301526141da81613c12565b9050919050565b600060208201905081810360008301526141fa81613c78565b9050919050565b6000602082019050818103600083015261421a81613cb8565b9050919050565b6000602082019050818103600083015261423a81613d1e565b9050919050565b6000602082019050818103600083015261425a81613d5e565b9050919050565b6000602082019050818103600083015261427a81613dc4565b9050919050565b6000602082019050818103600083015261429a81613e2a565b9050919050565b600060208201905081810360008301526142ba81613e6a565b9050919050565b600060208201905081810360008301526142da81613eaa565b9050919050565b60006020820190506142f66000830184613eea565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561432357614322614715565b5b8060405250919050565b600067ffffffffffffffff82111561434857614347614715565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561437457614373614715565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143a4576143a3614715565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061441c82614590565b915061442783614590565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445c5761445b614688565b5b828201905092915050565b600061447282614590565b915061447d83614590565b92508261448d5761448c6146b7565b5b828204905092915050565b60006144a382614590565b91506144ae83614590565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e7576144e6614688565b5b828202905092915050565b60006144fd82614590565b915061450883614590565b92508282101561451b5761451a614688565b5b828203905092915050565b600061453182614570565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145c75780820151818401526020810190506145ac565b838111156145d6576000848401525b50505050565b600060028204905060018216806145f457607f821691505b60208210811415614608576146076146e6565b5b50919050565b600061461982614590565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464c5761464b614688565b5b600182019050919050565b600061466282614590565b915061466d83614590565b92508261467d5761467c6146b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61475e81614526565b811461476957600080fd5b50565b61477581614538565b811461478057600080fd5b50565b61478c81614544565b811461479757600080fd5b50565b6147a381614590565b81146147ae57600080fd5b5056fea2646970667358221220e4dd6d49429bf402a2cb7fa01d5c0b8cae5e8d659455a2078186c65ad957af2564736f6c6343000800003368747470733a2f2f322d63727970746f2e73332e616d617a6f6e6177732e636f6d2f7468652d626565696e67732f4e46545f4d4554412f
Deployed Bytecode
0x60806040526004361061025c5760003560e01c8063715018a611610144578063b97b808f116100b6578063c87b56dd1161007a578063c87b56dd1461087a578063c93b3f0e146108b7578063d547cfb7146108e0578063da0650001461090b578063e985e9c514610936578063f2fde38b146109735761025c565b8063b97b808f146107ab578063c2ce3552146107d4578063c30054c7146107fd578063c64d5af614610826578063c7dee0e71461084f5761025c565b806395d89b411161010857806395d89b41146106aa578063a0712d68146106d5578063a14a141f146106f1578063a22cb4651461071c578063b344363d14610745578063b88d4fde146107825761025c565b8063715018a6146105eb578063745862bf14610602578063779ee6281461062b5780638456cb59146106685780638da5cb5b1461067f5761025c565b80633ccfd60b116101dd5780635ab087f4116101a15780635ab087f4146104c75780635c975abb146104f2578063600502f61461051d57806361138cda146105465780636352211e1461057157806370a08231146105ae5761025c565b80633ccfd60b1461042b5780633f4ba83a1461043557806342842e0e1461044c578063516b475c146104755780635447fabf1461049e5761025c565b806311f37ceb1161022457806311f37ceb1461035a57806318160ddd1461038557806323b872dd146103b057806328bf794d146103d95780632c404089146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630c1fd5531461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061350c565b61099c565b6040516102959190613f84565b60405180910390f35b3480156102aa57600080fd5b506102b3610a7e565b6040516102c09190613f9f565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610b10565b6040516102fd9190613f1d565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613466565b610b95565b005b34801561033b57600080fd5b50610344610cad565b60405161035191906142e1565b60405180910390f35b34801561036657600080fd5b5061036f610cb7565b60405161037c91906142e1565b60405180910390f35b34801561039157600080fd5b5061039a610cc1565b6040516103a791906142e1565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613360565b610cd2565b005b3480156103e557600080fd5b5061040060048036038101906103fb919061359f565b610d32565b005b34801561040e57600080fd5b5061042960048036038101906104249190613466565b610db8565b005b610433610ed7565b005b34801561044157600080fd5b5061044a610fc1565b005b34801561045857600080fd5b50610473600480360381019061046e9190613360565b611047565b005b34801561048157600080fd5b5061049c6004803603810190610497919061359f565b611067565b005b3480156104aa57600080fd5b506104c560048036038101906104c0919061359f565b6110ed565b005b3480156104d357600080fd5b506104dc611173565b6040516104e991906142e1565b60405180910390f35b3480156104fe57600080fd5b5061050761117d565b6040516105149190613f84565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f91906134a2565b611194565b005b34801561055257600080fd5b5061055b61132a565b60405161056891906142e1565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061359f565b611334565b6040516105a59190613f1d565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d091906132fb565b6113e6565b6040516105e291906142e1565b60405180910390f35b3480156105f757600080fd5b5061060061149e565b005b34801561060e57600080fd5b506106296004803603810190610624919061355e565b611526565b005b34801561063757600080fd5b50610652600480360381019061064d91906132fb565b6115bc565b60405161065f9190613f84565b60405180910390f35b34801561067457600080fd5b5061067d611612565b005b34801561068b57600080fd5b50610694611698565b6040516106a19190613f1d565b60405180910390f35b3480156106b657600080fd5b506106bf6116c2565b6040516106cc9190613f9f565b60405180910390f35b6106ef60048036038101906106ea919061359f565b611754565b005b3480156106fd57600080fd5b50610706611a6a565b60405161071391906142e1565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e919061342a565b611a7b565b005b34801561075157600080fd5b5061076c600480360381019061076791906132fb565b611a91565b60405161077991906142e1565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906133af565b611ada565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906134a2565b611b3c565b005b3480156107e057600080fd5b506107fb60048036038101906107f691906134e3565b611ccc565b005b34801561080957600080fd5b50610824600480360381019061081f919061359f565b611d65565b005b34801561083257600080fd5b5061084d6004803603810190610848919061359f565b611deb565b005b34801561085b57600080fd5b50610864611e71565b60405161087191906142e1565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c919061359f565b611e7b565b6040516108ae9190613f9f565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d991906134e3565b611ef7565b005b3480156108ec57600080fd5b506108f5611f90565b6040516109029190613f9f565b60405180910390f35b34801561091757600080fd5b50610920612022565b60405161092d9190613f84565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190613324565b612039565b60405161096a9190613f84565b60405180910390f35b34801561097f57600080fd5b5061099a600480360381019061099591906132fb565b6120cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a775750610a76826121c5565b5b9050919050565b606060008054610a8d906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab9906145dc565b8015610b065780601f10610adb57610100808354040283529160200191610b06565b820191906000526020600020905b815481529060010190602001808311610ae957829003601f168201915b5050505050905090565b6000610b1b8261222f565b610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b51906141c1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba082611334565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0890614241565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3061229b565b73ffffffffffffffffffffffffffffffffffffffff161480610c5f5750610c5e81610c5961229b565b612039565b5b610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590614121565b60405180910390fd5b610ca883836122a3565b505050565b6000600d54905090565b6000600c54905090565b6000610ccd600861235c565b905090565b610ce3610cdd61229b565b8261236a565b610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990614261565b60405180910390fd5b610d2d838383612448565b505050565b610d3a61229b565b73ffffffffffffffffffffffffffffffffffffffff16610d58611698565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141e1565b60405180910390fd5b80600c8190555050565b610dc061229b565b73ffffffffffffffffffffffffffffffffffffffff16610dde611698565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b906141e1565b60405180910390fd5b600e5481610e42600961235c565b610e4c9190614411565b1115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614101565b60405180910390fd5b60005b81811015610ed257610ea260086126a4565b610eac60096126a4565b610ebf83610eba600861235c565b6126ba565b8080610eca9061460e565b915050610e90565b505050565b610edf61229b565b73ffffffffffffffffffffffffffffffffffffffff16610efd611698565b73ffffffffffffffffffffffffffffffffffffffff1614610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906141e1565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600147610f9c91906144f2565b9081150290604051600060405180830381858888f19350505050610fbf57600080fd5b565b610fc961229b565b73ffffffffffffffffffffffffffffffffffffffff16610fe7611698565b73ffffffffffffffffffffffffffffffffffffffff161461103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906141e1565b60405180910390fd5b6110456126d8565b565b61106283838360405180602001604052806000815250611ada565b505050565b61106f61229b565b73ffffffffffffffffffffffffffffffffffffffff1661108d611698565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906141e1565b60405180910390fd5b80600e8190555050565b6110f561229b565b73ffffffffffffffffffffffffffffffffffffffff16611113611698565b73ffffffffffffffffffffffffffffffffffffffff1614611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906141e1565b60405180910390fd5b80600d8190555050565b6000601054905090565b6000600660149054906101000a900460ff16905090565b61119c61229b565b73ffffffffffffffffffffffffffffffffffffffff166111ba611698565b73ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906141e1565b60405180910390fd5b60005b8151811015611326576000828281518110611257577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112b95750611313565b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b808061131e9061460e565b915050611213565b5050565b6000600f54905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490614161565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90614141565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a661229b565b73ffffffffffffffffffffffffffffffffffffffff166114c4611698565b73ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906141e1565b60405180910390fd5b611524600061277a565b565b61152e61229b565b73ffffffffffffffffffffffffffffffffffffffff1661154c611698565b73ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611599906141e1565b60405180910390fd5b80601190805190602001906115b8929190613089565b5050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61161a61229b565b73ffffffffffffffffffffffffffffffffffffffff16611638611698565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611685906141e1565b60405180910390fd5b611696612840565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116d1906145dc565b80601f01602080910402602001604051908101604052809291908181526020018280546116fd906145dc565b801561174a5780601f1061171f5761010080835404028352916020019161174a565b820191906000526020600020905b81548152906001019060200180831161172d57829003601f168201915b5050505050905090565b600e54600d5461176491906144f2565b8161176f600961235c565b611779600861235c565b61178391906144f2565b61178d9190614411565b11156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c5906142a1565b60405180910390fd5b60008111611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906141a1565b60405180910390fd5b80600c5461181f9190614498565b341015611861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611858906142c1565b60405180910390fd5b601260009054906101000a900460ff161561191b5761187f336115bc565b6118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590614281565b60405180910390fd5b601054816118cb33611a91565b6118d59190614411565b1115611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90614221565b60405180910390fd5b6119d4565b601260019054906101000a900460ff161561198d57600f548161193d33611a91565b6119479190614411565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614221565b60405180910390fd5b6119d3565b600f548111156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990614001565b60405180910390fd5b5b5b60005b81811015611a66576119e960086126a4565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a399190614411565b92505081905550611a5333611a4e600861235c565b6126ba565b8080611a5e9061460e565b9150506119d7565b5050565b6000611a76600961235c565b905090565b611a8d611a8661229b565b83836128e3565b5050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aeb611ae561229b565b8361236a565b611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614261565b60405180910390fd5b611b3684848484612a50565b50505050565b611b4461229b565b73ffffffffffffffffffffffffffffffffffffffff16611b62611698565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf906141e1565b60405180910390fd5b60005b8151811015611cc8576000828281518110611bff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611cb4576000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080611cc09061460e565b915050611bbb565b5050565b611cd461229b565b73ffffffffffffffffffffffffffffffffffffffff16611cf2611698565b73ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906141e1565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b611d6d61229b565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611698565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906141e1565b60405180910390fd5b8060108190555050565b611df361229b565b73ffffffffffffffffffffffffffffffffffffffff16611e11611698565b73ffffffffffffffffffffffffffffffffffffffff1614611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e906141e1565b60405180910390fd5b80600f8190555050565b6000600e54905090565b6060611e868261222f565b611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613fc1565b60405180910390fd5b6011611ed083612aac565b604051602001611ee1929190613ef9565b6040516020818303038152906040529050919050565b611eff61229b565b73ffffffffffffffffffffffffffffffffffffffff16611f1d611698565b73ffffffffffffffffffffffffffffffffffffffff1614611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a906141e1565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b606060118054611f9f906145dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb906145dc565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b5050505050905090565b6000601260009054906101000a900460ff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d561229b565b73ffffffffffffffffffffffffffffffffffffffff166120f3611698565b73ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612140906141e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b090614041565b60405180910390fd5b6121c28161277a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231683611334565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006123758261222f565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906140c1565b60405180910390fd5b60006123bf83611334565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061242e57508373ffffffffffffffffffffffffffffffffffffffff1661241684610b10565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243f575061243e8185612039565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661246882611334565b73ffffffffffffffffffffffffffffffffffffffff16146124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b590614201565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590614081565b60405180910390fd5b612539838383612c59565b6125446000826122a3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259491906144f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125eb9190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b6126d4828260405180602001604052806000815250612cb1565b5050565b6126e061117d565b61271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690613fe1565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61276361229b565b6040516127709190613f1d565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61284861117d565b15612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f906140e1565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128cc61229b565b6040516128d99190613f1d565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612949906140a1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a439190613f84565b60405180910390a3505050565b612a5b848484612448565b612a6784848484612d0c565b612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d90614021565b60405180910390fd5b50505050565b60606000821415612af4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c54565b600082905060005b60008214612b26578080612b0f9061460e565b915050600a82612b1f9190614467565b9150612afc565b60008167ffffffffffffffff811115612b68577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612b9a5781602001600182028036833780820191505090505b5090505b60008514612c4d57600182612bb391906144f2565b9150600a85612bc29190614657565b6030612bce9190614411565b60f81b818381518110612c0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c469190614467565b9450612b9e565b8093505050505b919050565b612c6161117d565b15612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906140e1565b60405180910390fd5b612cac838383612ea3565b505050565b612cbb8383612ea8565b612cc86000848484612d0c565b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe90614021565b60405180910390fd5b505050565b6000612d2d8473ffffffffffffffffffffffffffffffffffffffff16613076565b15612e96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d5661229b565b8786866040518563ffffffff1660e01b8152600401612d789493929190613f38565b602060405180830381600087803b158015612d9257600080fd5b505af1925050508015612dc357506040513d601f19601f82011682018060405250810190612dc09190613535565b60015b612e46573d8060008114612df3576040519150601f19603f3d011682016040523d82523d6000602084013e612df8565b606091505b50600081511415612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590614021565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e9b565b600190505b949350505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614181565b60405180910390fd5b612f218161222f565b15612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890614061565b60405180910390fd5b612f6d60008383612c59565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fbd9190614411565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613095906145dc565b90600052602060002090601f0160209004810192826130b757600085556130fe565b82601f106130d057805160ff19168380011785556130fe565b828001600101855582156130fe579182015b828111156130fd5782518255916020019190600101906130e2565b5b50905061310b919061310f565b5090565b5b80821115613128576000816000905550600101613110565b5090565b600061313f61313a8461432d565b6142fc565b9050808382526020820190508285602086028201111561315e57600080fd5b60005b8581101561318e57816131748882613214565b845260208401935060208301925050600181019050613161565b5050509392505050565b60006131ab6131a684614359565b6142fc565b9050828152602081018484840111156131c357600080fd5b6131ce84828561459a565b509392505050565b60006131e96131e484614389565b6142fc565b90508281526020810184848401111561320157600080fd5b61320c84828561459a565b509392505050565b60008135905061322381614755565b92915050565b600082601f83011261323a57600080fd5b813561324a84826020860161312c565b91505092915050565b6000813590506132628161476c565b92915050565b60008135905061327781614783565b92915050565b60008151905061328c81614783565b92915050565b600082601f8301126132a357600080fd5b81356132b3848260208601613198565b91505092915050565b600082601f8301126132cd57600080fd5b81356132dd8482602086016131d6565b91505092915050565b6000813590506132f58161479a565b92915050565b60006020828403121561330d57600080fd5b600061331b84828501613214565b91505092915050565b6000806040838503121561333757600080fd5b600061334585828601613214565b925050602061335685828601613214565b9150509250929050565b60008060006060848603121561337557600080fd5b600061338386828701613214565b935050602061339486828701613214565b92505060406133a5868287016132e6565b9150509250925092565b600080600080608085870312156133c557600080fd5b60006133d387828801613214565b94505060206133e487828801613214565b93505060406133f5878288016132e6565b925050606085013567ffffffffffffffff81111561341257600080fd5b61341e87828801613292565b91505092959194509250565b6000806040838503121561343d57600080fd5b600061344b85828601613214565b925050602061345c85828601613253565b9150509250929050565b6000806040838503121561347957600080fd5b600061348785828601613214565b9250506020613498858286016132e6565b9150509250929050565b6000602082840312156134b457600080fd5b600082013567ffffffffffffffff8111156134ce57600080fd5b6134da84828501613229565b91505092915050565b6000602082840312156134f557600080fd5b600061350384828501613253565b91505092915050565b60006020828403121561351e57600080fd5b600061352c84828501613268565b91505092915050565b60006020828403121561354757600080fd5b60006135558482850161327d565b91505092915050565b60006020828403121561357057600080fd5b600082013567ffffffffffffffff81111561358a57600080fd5b613596848285016132bc565b91505092915050565b6000602082840312156135b157600080fd5b60006135bf848285016132e6565b91505092915050565b6135d181614526565b82525050565b6135e081614538565b82525050565b60006135f1826143ce565b6135fb81856143e4565b935061360b8185602086016145a9565b61361481614744565b840191505092915050565b600061362a826143d9565b61363481856143f5565b93506136448185602086016145a9565b61364d81614744565b840191505092915050565b6000613663826143d9565b61366d8185614406565b935061367d8185602086016145a9565b80840191505092915050565b60008154613696816145dc565b6136a08186614406565b945060018216600081146136bb57600181146136cc576136ff565b60ff198316865281860193506136ff565b6136d5856143b9565b60005b838110156136f7578154818901526001820191506020810190506136d8565b838801955050505b50505092915050565b6000613715600d836143f5565b91507f6d697373696e6720746f6b656e000000000000000000000000000000000000006000830152602082019050919050565b60006137556014836143f5565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006137956011836143f5565b91507f6578636565646564206d6178206d696e740000000000000000000000000000006000830152602082019050919050565b60006137d56032836143f5565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061383b6026836143f5565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a1601c836143f5565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006138e16024836143f5565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139476019836143f5565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613987602c836143f5565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139ed6010836143f5565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000613a2d6013836143f5565b91507f6578636565646564206d6178206c696d69742e000000000000000000000000006000830152602082019050919050565b6000613a6d6038836143f5565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ad3602a836143f5565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b396029836143f5565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b9f6020836143f5565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613bdf600b836143f5565b91507f6d757374206d696e7420310000000000000000000000000000000000000000006000830152602082019050919050565b6000613c1f602c836143f5565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613c856020836143f5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613cc56029836143f5565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d2b6012836143f5565b91507f6578636565646564206d6178206c696d697400000000000000000000000000006000830152602082019050919050565b6000613d6b6021836143f5565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dd16031836143f5565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e37600f836143f5565b91507f6e6f742077686974656c697374656400000000000000000000000000000000006000830152602082019050919050565b6000613e776012836143f5565b91507f65786365656465642072656d61696e696e6700000000000000000000000000006000830152602082019050919050565b6000613eb7600e836143f5565b91507f6e6f7420656e6f756768206574680000000000000000000000000000000000006000830152602082019050919050565b613ef381614590565b82525050565b6000613f058285613689565b9150613f118284613658565b91508190509392505050565b6000602082019050613f3260008301846135c8565b92915050565b6000608082019050613f4d60008301876135c8565b613f5a60208301866135c8565b613f676040830185613eea565b8181036060830152613f7981846135e6565b905095945050505050565b6000602082019050613f9960008301846135d7565b92915050565b60006020820190508181036000830152613fb9818461361f565b905092915050565b60006020820190508181036000830152613fda81613708565b9050919050565b60006020820190508181036000830152613ffa81613748565b9050919050565b6000602082019050818103600083015261401a81613788565b9050919050565b6000602082019050818103600083015261403a816137c8565b9050919050565b6000602082019050818103600083015261405a8161382e565b9050919050565b6000602082019050818103600083015261407a81613894565b9050919050565b6000602082019050818103600083015261409a816138d4565b9050919050565b600060208201905081810360008301526140ba8161393a565b9050919050565b600060208201905081810360008301526140da8161397a565b9050919050565b600060208201905081810360008301526140fa816139e0565b9050919050565b6000602082019050818103600083015261411a81613a20565b9050919050565b6000602082019050818103600083015261413a81613a60565b9050919050565b6000602082019050818103600083015261415a81613ac6565b9050919050565b6000602082019050818103600083015261417a81613b2c565b9050919050565b6000602082019050818103600083015261419a81613b92565b9050919050565b600060208201905081810360008301526141ba81613bd2565b9050919050565b600060208201905081810360008301526141da81613c12565b9050919050565b600060208201905081810360008301526141fa81613c78565b9050919050565b6000602082019050818103600083015261421a81613cb8565b9050919050565b6000602082019050818103600083015261423a81613d1e565b9050919050565b6000602082019050818103600083015261425a81613d5e565b9050919050565b6000602082019050818103600083015261427a81613dc4565b9050919050565b6000602082019050818103600083015261429a81613e2a565b9050919050565b600060208201905081810360008301526142ba81613e6a565b9050919050565b600060208201905081810360008301526142da81613eaa565b9050919050565b60006020820190506142f66000830184613eea565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561432357614322614715565b5b8060405250919050565b600067ffffffffffffffff82111561434857614347614715565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561437457614373614715565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143a4576143a3614715565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061441c82614590565b915061442783614590565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445c5761445b614688565b5b828201905092915050565b600061447282614590565b915061447d83614590565b92508261448d5761448c6146b7565b5b828204905092915050565b60006144a382614590565b91506144ae83614590565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144e7576144e6614688565b5b828202905092915050565b60006144fd82614590565b915061450883614590565b92508282101561451b5761451a614688565b5b828203905092915050565b600061453182614570565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145c75780820151818401526020810190506145ac565b838111156145d6576000848401525b50505050565b600060028204905060018216806145f457607f821691505b60208210811415614608576146076146e6565b5b50919050565b600061461982614590565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561464c5761464b614688565b5b600182019050919050565b600061466282614590565b915061466d83614590565b92508261467d5761467c6146b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61475e81614526565b811461476957600080fd5b50565b61477581614538565b811461478057600080fd5b50565b61478c81614544565b811461479757600080fd5b50565b6147a381614590565b81146147ae57600080fd5b5056fea2646970667358221220e4dd6d49429bf402a2cb7fa01d5c0b8cae5e8d659455a2078186c65ad957af2564736f6c63430008000033
Deployed Bytecode Sourcemap
40521:5487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28022:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28967:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30526:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30049:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43140:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43061:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44042:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31276:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42333:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45446:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44146:128;;;:::i;:::-;;41485:58;;;;;;;;;;;;;:::i;:::-;;31686:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42525:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42423:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43416:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6111:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41660:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43327:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28661:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28391:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9010:103;;;;;;;;;;;;;:::i;:::-;;42953:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42128:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41428:54;;;;;;;;;;;;;:::i;:::-;;8359:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29136:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44288:1155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43935:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30819:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43527:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31942:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41898:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41562:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42730:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42630:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43232:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43732:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42850:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43643:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42229:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31045:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9268:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28022:305;28124:4;28176:25;28161:40;;;:11;:40;;;;:105;;;;28233:33;28218:48;;;:11;:48;;;;28161:105;:158;;;;28283:36;28307:11;28283:23;:36::i;:::-;28161:158;28141:178;;28022:305;;;:::o;28967:100::-;29021:13;29054:5;29047:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28967:100;:::o;30526:221::-;30602:7;30630:16;30638:7;30630;:16::i;:::-;30622:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30715:15;:24;30731:7;30715:24;;;;;;;;;;;;;;;;;;;;;30708:31;;30526:221;;;:::o;30049:411::-;30130:13;30146:23;30161:7;30146:14;:23::i;:::-;30130:39;;30194:5;30188:11;;:2;:11;;;;30180:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30288:5;30272:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30297:37;30314:5;30321:12;:10;:12::i;:::-;30297:16;:37::i;:::-;30272:62;30250:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30431:21;30440:2;30444:7;30431:8;:21::i;:::-;30049:411;;;:::o;43140:89::-;43191:7;43212:12;;43205:19;;43140:89;:::o;43061:76::-;43105:7;43126:6;;43119:13;;43061:76;:::o;44042:86::-;44086:7;44107:16;:6;:14;:16::i;:::-;44100:23;;44042:86;:::o;31276:339::-;31471:41;31490:12;:10;:12::i;:::-;31504:7;31471:18;:41::i;:::-;31463:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31579:28;31589:4;31595:2;31599:7;31579:9;:28::i;:::-;31276:339;;;:::o;42333:87::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42406:9:::1;42397:6;:18;;;;42333:87:::0;:::o;45446:384::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45632:14:::1;;45620:8;45592:25;:15;:23;:25::i;:::-;:36;;;;:::i;:::-;:54;;45584:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;45691:9;45687:137;45703:8;45701:1;:10;45687:137;;;45723:18;:6;:16;:18::i;:::-;45747:27;:15;:25;:27::i;:::-;45780:38;45790:10;45801:16;:6;:14;:16::i;:::-;45780:9;:38::i;:::-;45712:3;;;;;:::i;:::-;;;;45687:137;;;;45446:384:::0;;:::o;44146:128::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44214:23:::1;;;;;;;;;;;44206:37;;:62;44266:1;44244:21;:23;;;;:::i;:::-;44206:62;;;;;;;;;;;;;;;;;;;;;;;44198:71;;;::::0;::::1;;44146:128::o:0;41485:58::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41528:10:::1;:8;:10::i;:::-;41485:58::o:0;31686:185::-;31824:39;31841:4;31847:2;31851:7;31824:39;;;;;;;;;;;;:16;:39::i;:::-;31686:185;;;:::o;42525:102::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42613:9:::1;42596:14;:26;;;;42525:102:::0;:::o;42423:99::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42508:9:::1;42493:12;:24;;;;42423:99:::0;:::o;43416:108::-;43477:7;43498:21;;43491:28;;43416:108;:::o;6111:86::-;6158:4;6182:7;;;;;;;;;;;6175:14;;6111:86;:::o;41660:235::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41742:6:::1;41738:153;41753:9;:16;41751:1;:18;41738:153;;;41781:12;41796:9;41806:1;41796:12;;;;;;;;;;;;;;;;;;;;;;41781:27;;41817:10;:16;41828:4;41817:16;;;;;;;;;;;;;;;;;;;;;;;;;41814:43;;;41842:8;;;41814:43;41881:4;41862:10;:16;41873:4;41862:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41738:153;;41770:3;;;;;:::i;:::-;;;;41738:153;;;;41660:235:::0;:::o;43327:86::-;43376:7;43397:11;;43390:18;;43327:86;:::o;28661:239::-;28733:7;28753:13;28769:7;:16;28777:7;28769:16;;;;;;;;;;;;;;;;;;;;;28753:32;;28821:1;28804:19;;:5;:19;;;;28796:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28887:5;28880:12;;;28661:239;;;:::o;28391:208::-;28463:7;28508:1;28491:19;;:5;:19;;;;28483:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28575:9;:16;28585:5;28575:16;;;;;;;;;;;;;;;;28568:23;;28391:208;;;:::o;9010:103::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9075:30:::1;9102:1;9075:18;:30::i;:::-;9010:103::o:0;42953:95::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43036:7:::1;43024:9;:19;;;;;;;;;;;;:::i;:::-;;42953:95:::0;:::o;42128:98::-;42187:4;42205:10;:16;42216:4;42205:16;;;;;;;;;;;;;;;;;;;;;;;;;42198:23;;42128:98;;;:::o;41428:54::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41469:8:::1;:6;:8::i;:::-;41428:54::o:0;8359:87::-;8405:7;8432:6;;;;;;;;;;;8425:13;;8359:87;:::o;29136:104::-;29192:13;29225:7;29218:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29136:104;:::o;44288:1155::-;44464:14;;44449:12;;:29;;;;:::i;:::-;44437:8;44409:25;:15;:23;:25::i;:::-;44390:16;:6;:14;:16::i;:::-;:44;;;;:::i;:::-;:55;;;;:::i;:::-;:88;;44382:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;44555:1;44544:8;:12;44536:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;44645:8;44636:6;;:17;;;;:::i;:::-;44623:9;:30;;44615:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44703:18;;;;;;;;;;;44700:583;;;44765:26;44780:10;44765:14;:26::i;:::-;44757:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44912:21;;44900:8;44862:35;44886:10;44862:23;:35::i;:::-;:46;;;;:::i;:::-;:71;;44854:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;44700:583;;;45027:19;;;;;;;;;;;45024:259;;;45112:11;;45100:8;45062:35;45086:10;45062:23;:35::i;:::-;:46;;;;:::i;:::-;:61;;45054:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45024:259;;;45244:11;;45232:8;:23;;45224:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45024:259;44700:583;45303:9;45299:140;45315:8;45313:1;:10;45299:140;;;45335:18;:6;:16;:18::i;:::-;45388:1;45359:13;:25;45373:10;45359:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;45395:38;45405:10;45416:16;:6;:14;:16::i;:::-;45395:9;:38::i;:::-;45324:3;;;;;:::i;:::-;;;;45299:140;;;;44288:1155;:::o;43935:104::-;43988:7;44009:25;:15;:23;:25::i;:::-;44002:32;;43935:104;:::o;30819:155::-;30914:52;30933:12;:10;:12::i;:::-;30947:8;30957;30914:18;:52::i;:::-;30819:155;;:::o;43527:113::-;43595:7;43616:13;:19;43630:4;43616:19;;;;;;;;;;;;;;;;43609:26;;43527:113;;;:::o;31942:328::-;32117:41;32136:12;:10;:12::i;:::-;32150:7;32117:18;:41::i;:::-;32109:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32223:39;32237:4;32243:2;32247:7;32256:5;32223:13;:39::i;:::-;31942:328;;;;:::o;41898:227::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41985:6:::1;41981:140;41996:9;:16;41994:1;:18;41981:140;;;42024:12;42039:9;42049:1;42039:12;;;;;;;;;;;;;;;;;;;;;;42024:27;;42060:10;:16;42071:4;42060:16;;;;;;;;;;;;;;;;;;;;;;;;;42057:59;;;42104:5;42085:10;:16;42096:4;42085:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;42057:59;41981:140;42013:3;;;;;:::i;:::-;;;;41981:140;;;;41898:227:::0;:::o;41562:95::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41646:6:::1;41625:18;;:27;;;;;;;;;;;;;;;;;;41562:95:::0;:::o;42730:117::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42833:9:::1;42809:21;:33;;;;42730:117:::0;:::o;42630:97::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42713:9:::1;42699:11;:23;;;;42630:97:::0;:::o;43232:92::-;43284:7;43305:14;;43298:21;;43232:92;:::o;43732:200::-;43798:13;43826:17;43834:8;43826:7;:17::i;:::-;43818:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;43896:9;43906:19;:8;:17;:19::i;:::-;43879:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43865:62;;43732:200;;;:::o;42850:100::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42940:5:::1;42918:19;;:27;;;;;;;;;;;;;;;;;;42850:100:::0;:::o;43643:86::-;43688:13;43715:9;43708:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43643:86;:::o;42229:91::-;42279:4;42297:18;;;;;;;;;;;42290:25;;42229:91;:::o;31045:164::-;31142:4;31166:18;:25;31185:5;31166:25;;;;;;;;;;;;;;;:35;31192:8;31166:35;;;;;;;;;;;;;;;;;;;;;;;;;31159:42;;31045:164;;;;:::o;9268:201::-;8590:12;:10;:12::i;:::-;8579:23;;:7;:5;:7::i;:::-;:23;;;8571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9377:1:::1;9357:22;;:8;:22;;;;9349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9433:28;9452:8;9433:18;:28::i;:::-;9268:201:::0;:::o;20791:157::-;20876:4;20915:25;20900:40;;;:11;:40;;;;20893:47;;20791:157;;;:::o;33780:127::-;33845:4;33897:1;33869:30;;:7;:16;33877:7;33869:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33862:37;;33780:127;;;:::o;4765:98::-;4818:7;4845:10;4838:17;;4765:98;:::o;37762:174::-;37864:2;37837:15;:24;37853:7;37837:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37920:7;37916:2;37882:46;;37891:23;37906:7;37891:14;:23::i;:::-;37882:46;;;;;;;;;;;;37762:174;;:::o;1369:114::-;1434:7;1461;:14;;;1454:21;;1369:114;;;:::o;34074:348::-;34167:4;34192:16;34200:7;34192;:16::i;:::-;34184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34268:13;34284:23;34299:7;34284:14;:23::i;:::-;34268:39;;34337:5;34326:16;;:7;:16;;;:51;;;;34370:7;34346:31;;:20;34358:7;34346:11;:20::i;:::-;:31;;;34326:51;:87;;;;34381:32;34398:5;34405:7;34381:16;:32::i;:::-;34326:87;34318:96;;;34074:348;;;;:::o;37066:578::-;37225:4;37198:31;;:23;37213:7;37198:14;:23::i;:::-;:31;;;37190:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37308:1;37294:16;;:2;:16;;;;37286:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37364:39;37385:4;37391:2;37395:7;37364:20;:39::i;:::-;37468:29;37485:1;37489:7;37468:8;:29::i;:::-;37529:1;37510:9;:15;37520:4;37510:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37558:1;37541:9;:13;37551:2;37541:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37589:2;37570:7;:16;37578:7;37570:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37628:7;37624:2;37609:27;;37618:4;37609:27;;;;;;;;;;;;37066:578;;;:::o;1491:127::-;1598:1;1580:7;:14;;;:19;;;;;;;;;;;1491:127;:::o;34764:110::-;34840:26;34850:2;34854:7;34840:26;;;;;;;;;;;;:9;:26::i;:::-;34764:110;;:::o;7170:120::-;6714:8;:6;:8::i;:::-;6706:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7239:5:::1;7229:7;;:15;;;;;;;;;;;;;;;;;;7260:22;7269:12;:10;:12::i;:::-;7260:22;;;;;;:::i;:::-;;;;;;;;7170:120::o:0;9629:191::-;9703:16;9722:6;;;;;;;;;;;9703:25;;9748:8;9739:6;;:17;;;;;;;;;;;;;;;;;;9803:8;9772:40;;9793:8;9772:40;;;;;;;;;;;;9629:191;;:::o;6911:118::-;6437:8;:6;:8::i;:::-;6436:9;6428:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6981:4:::1;6971:7;;:14;;;;;;;;;;;;;;;;;;7001:20;7008:12;:10;:12::i;:::-;7001:20;;;;;;:::i;:::-;;;;;;;;6911:118::o:0;38078:315::-;38233:8;38224:17;;:5;:17;;;;38216:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38320:8;38282:18;:25;38301:5;38282:25;;;;;;;;;;;;;;;:35;38308:8;38282:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38366:8;38344:41;;38359:5;38344:41;;;38376:8;38344:41;;;;;;:::i;:::-;;;;;;;;38078:315;;;:::o;33152:::-;33309:28;33319:4;33325:2;33329:7;33309:9;:28::i;:::-;33356:48;33379:4;33385:2;33389:7;33398:5;33356:22;:48::i;:::-;33348:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33152:315;;;;:::o;2327:723::-;2383:13;2613:1;2604:5;:10;2600:53;;;2631:10;;;;;;;;;;;;;;;;;;;;;2600:53;2663:12;2678:5;2663:20;;2694:14;2719:78;2734:1;2726:4;:9;2719:78;;2752:8;;;;;:::i;:::-;;;;2783:2;2775:10;;;;;:::i;:::-;;;2719:78;;;2807:19;2839:6;2829:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2807:39;;2857:154;2873:1;2864:5;:10;2857:154;;2901:1;2891:11;;;;;:::i;:::-;;;2968:2;2960:5;:10;;;;:::i;:::-;2947:2;:24;;;;:::i;:::-;2934:39;;2917:6;2924;2917:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2997:2;2988:11;;;;;:::i;:::-;;;2857:154;;;3035:6;3021:21;;;;;2327:723;;;;:::o;45833:170::-;6437:8;:6;:8::i;:::-;6436:9;6428:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45952:46:::1;45979:4;45985:2;45989:8;45952:26;:46::i;:::-;45833:170:::0;;;:::o;35101:321::-;35231:18;35237:2;35241:7;35231:5;:18::i;:::-;35282:54;35313:1;35317:2;35321:7;35330:5;35282:22;:54::i;:::-;35260:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35101:321;;;:::o;38958:799::-;39113:4;39134:15;:2;:13;;;:15::i;:::-;39130:620;;;39186:2;39170:36;;;39207:12;:10;:12::i;:::-;39221:4;39227:7;39236:5;39170:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39166:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39429:1;39412:6;:13;:18;39408:272;;;39455:60;;;;;;;;;;:::i;:::-;;;;;;;;39408:272;39630:6;39624:13;39615:6;39611:2;39607:15;39600:38;39166:529;39303:41;;;39293:51;;;:6;:51;;;;39286:58;;;;;39130:620;39734:4;39727:11;;38958:799;;;;;;;:::o;40329:126::-;;;;:::o;35758:382::-;35852:1;35838:16;;:2;:16;;;;35830:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35911:16;35919:7;35911;:16::i;:::-;35910:17;35902:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35973:45;36002:1;36006:2;36010:7;35973:20;:45::i;:::-;36048:1;36031:9;:13;36041:2;36031:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36079:2;36060:7;:16;36068:7;36060:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36124:7;36120:2;36099:33;;36116:1;36099:33;;;;;;;;;;;;35758:382;;:::o;10647:387::-;10707:4;10915:12;10982:7;10970:20;10962:28;;11025:1;11018:4;:8;11011:15;;;10647:387;;;:::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::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:256::-;;6368:2;6356:9;6347:7;6343:23;6339:32;6336:2;;;6384:1;6381;6374:12;6336:2;6427:1;6452:50;6494:7;6485:6;6474:9;6470:22;6452:50;:::i;:::-;6442:60;;6398:114;6326:193;;;;:::o;6525:260::-;;6632:2;6620:9;6611:7;6607:23;6603:32;6600:2;;;6648:1;6645;6638:12;6600:2;6691:1;6716:52;6760:7;6751:6;6740:9;6736:22;6716:52;:::i;:::-;6706:62;;6662:116;6590:195;;;;:::o;6791:282::-;;6909:2;6897:9;6888:7;6884:23;6880:32;6877:2;;;6925:1;6922;6915:12;6877:2;6968:1;6993:63;7048:7;7039:6;7028:9;7024:22;6993:63;:::i;:::-;6983:73;;6939:127;6867:206;;;;:::o;7079:375::-;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7213:1;7210;7203:12;7165:2;7284:1;7273:9;7269:17;7256:31;7314:18;7306:6;7303:30;7300:2;;;7346:1;7343;7336:12;7300:2;7374:63;7429:7;7420:6;7409:9;7405:22;7374:63;:::i;:::-;7364:73;;7227:220;7155:299;;;;:::o;7460:262::-;;7568:2;7556:9;7547:7;7543:23;7539:32;7536:2;;;7584:1;7581;7574:12;7536:2;7627:1;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7598:117;7526:196;;;;:::o;7728:118::-;7815:24;7833:5;7815:24;:::i;:::-;7810:3;7803:37;7793:53;;:::o;7852:109::-;7933:21;7948:5;7933:21;:::i;:::-;7928:3;7921:34;7911:50;;:::o;7967:360::-;;8081:38;8113:5;8081:38;:::i;:::-;8135:70;8198:6;8193:3;8135:70;:::i;:::-;8128:77;;8214:52;8259:6;8254:3;8247:4;8240:5;8236:16;8214:52;:::i;:::-;8291:29;8313:6;8291:29;:::i;:::-;8286:3;8282:39;8275:46;;8057:270;;;;;:::o;8333:364::-;;8449:39;8482:5;8449:39;:::i;:::-;8504:71;8568:6;8563:3;8504:71;:::i;:::-;8497:78;;8584:52;8629:6;8624:3;8617:4;8610:5;8606:16;8584:52;:::i;:::-;8661:29;8683:6;8661:29;:::i;:::-;8656:3;8652:39;8645:46;;8425:272;;;;;:::o;8703:377::-;;8837:39;8870:5;8837:39;:::i;:::-;8892:89;8974:6;8969:3;8892:89;:::i;:::-;8885:96;;8990:52;9035:6;9030:3;9023:4;9016:5;9012:16;8990:52;:::i;:::-;9067:6;9062:3;9058:16;9051:23;;8813:267;;;;;:::o;9110:845::-;;9250:5;9244:12;9279:36;9305:9;9279:36;:::i;:::-;9331:89;9413:6;9408:3;9331:89;:::i;:::-;9324:96;;9451:1;9440:9;9436:17;9467:1;9462:137;;;;9613:1;9608:341;;;;9429:520;;9462:137;9546:4;9542:9;9531;9527:25;9522:3;9515:38;9582:6;9577:3;9573:16;9566:23;;9462:137;;9608:341;9675:38;9707:5;9675:38;:::i;:::-;9735:1;9749:154;9763:6;9760:1;9757:13;9749:154;;;9837:7;9831:14;9827:1;9822:3;9818:11;9811:35;9887:1;9878:7;9874:15;9863:26;;9785:4;9782:1;9778:12;9773:17;;9749:154;;;9932:6;9927:3;9923:16;9916:23;;9615:334;;9429:520;;9217:738;;;;;;:::o;9961:311::-;;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10221:15;10217:1;10212:3;10208:11;10201:36;10263:2;10258:3;10254:12;10247:19;;10107:165;;;:::o;10278:318::-;;10441:67;10505:2;10500:3;10441:67;:::i;:::-;10434:74;;10538:22;10534:1;10529:3;10525:11;10518:43;10587:2;10582:3;10578:12;10571:19;;10424:172;;;:::o;10602:315::-;;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10862:19;10858:1;10853:3;10849:11;10842:40;10908:2;10903:3;10899:12;10892:19;;10748:169;;;:::o;10923:382::-;;11086:67;11150:2;11145:3;11086:67;:::i;:::-;11079:74;;11183:34;11179:1;11174:3;11170:11;11163:55;11249:20;11244:2;11239:3;11235:12;11228:42;11296:2;11291:3;11287:12;11280:19;;11069:236;;;:::o;11311:370::-;;11474:67;11538:2;11533:3;11474:67;:::i;:::-;11467:74;;11571:34;11567:1;11562:3;11558:11;11551:55;11637:8;11632:2;11627:3;11623:12;11616:30;11672:2;11667:3;11663:12;11656:19;;11457:224;;;:::o;11687:326::-;;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11947:30;11943:1;11938:3;11934:11;11927:51;12004:2;11999:3;11995:12;11988:19;;11833:180;;;:::o;12019:368::-;;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12279:34;12275:1;12270:3;12266:11;12259:55;12345:6;12340:2;12335:3;12331:12;12324:28;12378:2;12373:3;12369:12;12362:19;;12165:222;;;:::o;12393:323::-;;12556:67;12620:2;12615:3;12556:67;:::i;:::-;12549:74;;12653:27;12649:1;12644:3;12640:11;12633:48;12707:2;12702:3;12698:12;12691:19;;12539:177;;;:::o;12722:376::-;;12885:67;12949:2;12944:3;12885:67;:::i;:::-;12878:74;;12982:34;12978:1;12973:3;12969:11;12962:55;13048:14;13043:2;13038:3;13034:12;13027:36;13089:2;13084:3;13080:12;13073:19;;12868:230;;;:::o;13104:314::-;;13267:67;13331:2;13326:3;13267:67;:::i;:::-;13260:74;;13364:18;13360:1;13355:3;13351:11;13344:39;13409:2;13404:3;13400:12;13393:19;;13250:168;;;:::o;13424:317::-;;13587:67;13651:2;13646:3;13587:67;:::i;:::-;13580:74;;13684:21;13680:1;13675:3;13671:11;13664:42;13732:2;13727:3;13723:12;13716:19;;13570:171;;;:::o;13747:388::-;;13910:67;13974:2;13969:3;13910:67;:::i;:::-;13903:74;;14007:34;14003:1;13998:3;13994:11;13987:55;14073:26;14068:2;14063:3;14059:12;14052:48;14126:2;14121:3;14117:12;14110:19;;13893:242;;;:::o;14141:374::-;;14304:67;14368:2;14363:3;14304:67;:::i;:::-;14297:74;;14401:34;14397:1;14392:3;14388:11;14381:55;14467:12;14462:2;14457:3;14453:12;14446:34;14506:2;14501:3;14497:12;14490:19;;14287:228;;;:::o;14521:373::-;;14684:67;14748:2;14743:3;14684:67;:::i;:::-;14677:74;;14781:34;14777:1;14772:3;14768:11;14761:55;14847:11;14842:2;14837:3;14833:12;14826:33;14885:2;14880:3;14876:12;14869:19;;14667:227;;;:::o;14900:330::-;;15063:67;15127:2;15122:3;15063:67;:::i;:::-;15056:74;;15160:34;15156:1;15151:3;15147:11;15140:55;15221:2;15216:3;15212:12;15205:19;;15046:184;;;:::o;15236:309::-;;15399:67;15463:2;15458:3;15399:67;:::i;:::-;15392:74;;15496:13;15492:1;15487:3;15483:11;15476:34;15536:2;15531:3;15527:12;15520:19;;15382:163;;;:::o;15551:376::-;;15714:67;15778:2;15773:3;15714:67;:::i;:::-;15707:74;;15811:34;15807:1;15802:3;15798:11;15791:55;15877:14;15872:2;15867:3;15863:12;15856:36;15918:2;15913:3;15909:12;15902:19;;15697:230;;;:::o;15933:330::-;;16096:67;16160:2;16155:3;16096:67;:::i;:::-;16089:74;;16193:34;16189:1;16184:3;16180:11;16173:55;16254:2;16249:3;16245:12;16238:19;;16079:184;;;:::o;16269:373::-;;16432:67;16496:2;16491:3;16432:67;:::i;:::-;16425:74;;16529:34;16525:1;16520:3;16516:11;16509:55;16595:11;16590:2;16585:3;16581:12;16574:33;16633:2;16628:3;16624:12;16617:19;;16415:227;;;:::o;16648:316::-;;16811:67;16875:2;16870:3;16811:67;:::i;:::-;16804:74;;16908:20;16904:1;16899:3;16895:11;16888:41;16955:2;16950:3;16946:12;16939:19;;16794:170;;;:::o;16970:365::-;;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17230:34;17226:1;17221:3;17217:11;17210:55;17296:3;17291:2;17286:3;17282:12;17275:25;17326:2;17321:3;17317:12;17310:19;;17116:219;;;:::o;17341:381::-;;17504:67;17568:2;17563:3;17504:67;:::i;:::-;17497:74;;17601:34;17597:1;17592:3;17588:11;17581:55;17667:19;17662:2;17657:3;17653:12;17646:41;17713:2;17708:3;17704:12;17697:19;;17487:235;;;:::o;17728:313::-;;17891:67;17955:2;17950:3;17891:67;:::i;:::-;17884:74;;17988:17;17984:1;17979:3;17975:11;17968:38;18032:2;18027:3;18023:12;18016:19;;17874:167;;;:::o;18047:316::-;;18210:67;18274:2;18269:3;18210:67;:::i;:::-;18203:74;;18307:20;18303:1;18298:3;18294:11;18287:41;18354:2;18349:3;18345:12;18338:19;;18193:170;;;:::o;18369:312::-;;18532:67;18596:2;18591:3;18532:67;:::i;:::-;18525:74;;18629:16;18625:1;18620:3;18616:11;18609:37;18672:2;18667:3;18663:12;18656:19;;18515:166;;;:::o;18687:118::-;18774:24;18792:5;18774:24;:::i;:::-;18769:3;18762:37;18752:53;;:::o;18811:429::-;;19010:92;19098:3;19089:6;19010:92;:::i;:::-;19003:99;;19119:95;19210:3;19201:6;19119:95;:::i;:::-;19112:102;;19231:3;19224:10;;18992:248;;;;;:::o;19246:222::-;;19377:2;19366:9;19362:18;19354:26;;19390:71;19458:1;19447:9;19443:17;19434:6;19390:71;:::i;:::-;19344:124;;;;:::o;19474:640::-;;19707:3;19696:9;19692:19;19684:27;;19721:71;19789:1;19778:9;19774:17;19765:6;19721:71;:::i;:::-;19802:72;19870:2;19859:9;19855:18;19846:6;19802:72;:::i;:::-;19884;19952:2;19941:9;19937:18;19928:6;19884:72;:::i;:::-;20003:9;19997:4;19993:20;19988:2;19977:9;19973:18;19966:48;20031:76;20102:4;20093:6;20031:76;:::i;:::-;20023:84;;19674:440;;;;;;;:::o;20120:210::-;;20245:2;20234:9;20230:18;20222:26;;20258:65;20320:1;20309:9;20305:17;20296:6;20258:65;:::i;:::-;20212:118;;;;:::o;20336:313::-;;20487:2;20476:9;20472:18;20464:26;;20536:9;20530:4;20526:20;20522:1;20511:9;20507:17;20500:47;20564:78;20637:4;20628:6;20564:78;:::i;:::-;20556:86;;20454:195;;;;:::o;20655:419::-;;20859:2;20848:9;20844:18;20836:26;;20908:9;20902:4;20898:20;20894:1;20883:9;20879:17;20872:47;20936:131;21062:4;20936:131;:::i;:::-;20928:139;;20826:248;;;:::o;21080:419::-;;21284:2;21273:9;21269:18;21261:26;;21333:9;21327:4;21323:20;21319:1;21308:9;21304:17;21297:47;21361:131;21487:4;21361:131;:::i;:::-;21353:139;;21251:248;;;:::o;21505:419::-;;21709:2;21698:9;21694:18;21686:26;;21758:9;21752:4;21748:20;21744:1;21733:9;21729:17;21722:47;21786:131;21912:4;21786:131;:::i;:::-;21778:139;;21676:248;;;:::o;21930:419::-;;22134:2;22123:9;22119:18;22111:26;;22183:9;22177:4;22173:20;22169:1;22158:9;22154:17;22147:47;22211:131;22337:4;22211:131;:::i;:::-;22203:139;;22101:248;;;:::o;22355:419::-;;22559:2;22548:9;22544:18;22536:26;;22608:9;22602:4;22598:20;22594:1;22583:9;22579:17;22572:47;22636:131;22762:4;22636:131;:::i;:::-;22628:139;;22526:248;;;:::o;22780:419::-;;22984:2;22973:9;22969:18;22961:26;;23033:9;23027:4;23023:20;23019:1;23008:9;23004:17;22997:47;23061:131;23187:4;23061:131;:::i;:::-;23053:139;;22951:248;;;:::o;23205:419::-;;23409:2;23398:9;23394:18;23386:26;;23458:9;23452:4;23448:20;23444:1;23433:9;23429:17;23422:47;23486:131;23612:4;23486:131;:::i;:::-;23478:139;;23376:248;;;:::o;23630:419::-;;23834:2;23823:9;23819:18;23811:26;;23883:9;23877:4;23873:20;23869:1;23858:9;23854:17;23847:47;23911:131;24037:4;23911:131;:::i;:::-;23903:139;;23801:248;;;:::o;24055:419::-;;24259:2;24248:9;24244:18;24236:26;;24308:9;24302:4;24298:20;24294:1;24283:9;24279:17;24272:47;24336:131;24462:4;24336:131;:::i;:::-;24328:139;;24226:248;;;:::o;24480:419::-;;24684:2;24673:9;24669:18;24661:26;;24733:9;24727:4;24723:20;24719:1;24708:9;24704:17;24697:47;24761:131;24887:4;24761:131;:::i;:::-;24753:139;;24651:248;;;:::o;24905:419::-;;25109:2;25098:9;25094:18;25086:26;;25158:9;25152:4;25148:20;25144:1;25133:9;25129:17;25122:47;25186:131;25312:4;25186:131;:::i;:::-;25178:139;;25076:248;;;:::o;25330:419::-;;25534:2;25523:9;25519:18;25511:26;;25583:9;25577:4;25573:20;25569:1;25558:9;25554:17;25547:47;25611:131;25737:4;25611:131;:::i;:::-;25603:139;;25501:248;;;:::o;25755:419::-;;25959:2;25948:9;25944:18;25936:26;;26008:9;26002:4;25998:20;25994:1;25983:9;25979:17;25972:47;26036:131;26162:4;26036:131;:::i;:::-;26028:139;;25926:248;;;:::o;26180:419::-;;26384:2;26373:9;26369:18;26361:26;;26433:9;26427:4;26423:20;26419:1;26408:9;26404:17;26397:47;26461:131;26587:4;26461:131;:::i;:::-;26453:139;;26351:248;;;:::o;26605:419::-;;26809:2;26798:9;26794:18;26786:26;;26858:9;26852:4;26848:20;26844:1;26833:9;26829:17;26822:47;26886:131;27012:4;26886:131;:::i;:::-;26878:139;;26776:248;;;:::o;27030:419::-;;27234:2;27223:9;27219:18;27211:26;;27283:9;27277:4;27273:20;27269:1;27258:9;27254:17;27247:47;27311:131;27437:4;27311:131;:::i;:::-;27303:139;;27201:248;;;:::o;27455:419::-;;27659:2;27648:9;27644:18;27636:26;;27708:9;27702:4;27698:20;27694:1;27683:9;27679:17;27672:47;27736:131;27862:4;27736:131;:::i;:::-;27728:139;;27626:248;;;:::o;27880:419::-;;28084:2;28073:9;28069:18;28061:26;;28133:9;28127:4;28123:20;28119:1;28108:9;28104:17;28097:47;28161:131;28287:4;28161:131;:::i;:::-;28153:139;;28051:248;;;:::o;28305:419::-;;28509:2;28498:9;28494:18;28486:26;;28558:9;28552:4;28548:20;28544:1;28533:9;28529:17;28522:47;28586:131;28712:4;28586:131;:::i;:::-;28578:139;;28476:248;;;:::o;28730:419::-;;28934:2;28923:9;28919:18;28911:26;;28983:9;28977:4;28973:20;28969:1;28958:9;28954:17;28947:47;29011:131;29137:4;29011:131;:::i;:::-;29003:139;;28901:248;;;:::o;29155:419::-;;29359:2;29348:9;29344:18;29336:26;;29408:9;29402:4;29398:20;29394:1;29383:9;29379:17;29372:47;29436:131;29562:4;29436:131;:::i;:::-;29428:139;;29326:248;;;:::o;29580:419::-;;29784:2;29773:9;29769:18;29761:26;;29833:9;29827:4;29823:20;29819:1;29808:9;29804:17;29797:47;29861:131;29987:4;29861:131;:::i;:::-;29853:139;;29751:248;;;:::o;30005:419::-;;30209:2;30198:9;30194:18;30186:26;;30258:9;30252:4;30248:20;30244:1;30233:9;30229:17;30222:47;30286:131;30412:4;30286:131;:::i;:::-;30278:139;;30176:248;;;:::o;30430:419::-;;30634:2;30623:9;30619:18;30611:26;;30683:9;30677:4;30673:20;30669:1;30658:9;30654:17;30647:47;30711:131;30837:4;30711:131;:::i;:::-;30703:139;;30601:248;;;:::o;30855:419::-;;31059:2;31048:9;31044:18;31036:26;;31108:9;31102:4;31098:20;31094:1;31083:9;31079:17;31072:47;31136:131;31262:4;31136:131;:::i;:::-;31128:139;;31026:248;;;:::o;31280:222::-;;31411:2;31400:9;31396:18;31388:26;;31424:71;31492:1;31481:9;31477:17;31468:6;31424:71;:::i;:::-;31378:124;;;;:::o;31508:283::-;;31574:2;31568:9;31558:19;;31616:4;31608:6;31604:17;31723:6;31711:10;31708:22;31687:18;31675:10;31672:34;31669:62;31666:2;;;31734:18;;:::i;:::-;31666:2;31774:10;31770:2;31763:22;31548:243;;;;:::o;31797:311::-;;31964:18;31956:6;31953:30;31950:2;;;31986:18;;:::i;:::-;31950:2;32036:4;32028:6;32024:17;32016:25;;32096:4;32090;32086:15;32078:23;;31879:229;;;:::o;32114:331::-;;32265:18;32257:6;32254:30;32251:2;;;32287:18;;:::i;:::-;32251:2;32372:4;32368:9;32361:4;32353:6;32349:17;32345:33;32337:41;;32433:4;32427;32423:15;32415:23;;32180:265;;;:::o;32451:332::-;;32603:18;32595:6;32592:30;32589:2;;;32625:18;;:::i;:::-;32589:2;32710:4;32706:9;32699:4;32691:6;32687:17;32683:33;32675:41;;32771:4;32765;32761:15;32753:23;;32518:265;;;:::o;32789:141::-;;32861:3;32853:11;;32884:3;32881:1;32874:14;32918:4;32915:1;32905:18;32897:26;;32843:87;;;:::o;32936:98::-;;33021:5;33015:12;33005:22;;32994:40;;;:::o;33040:99::-;;33126:5;33120:12;33110:22;;33099:40;;;:::o;33145:168::-;;33262:6;33257:3;33250:19;33302:4;33297:3;33293:14;33278:29;;33240:73;;;;:::o;33319:169::-;;33437:6;33432:3;33425:19;33477:4;33472:3;33468:14;33453:29;;33415:73;;;;:::o;33494:148::-;;33633:3;33618:18;;33608:34;;;;:::o;33648:305::-;;33707:20;33725:1;33707:20;:::i;:::-;33702:25;;33741:20;33759:1;33741:20;:::i;:::-;33736:25;;33895:1;33827:66;33823:74;33820:1;33817:81;33814:2;;;33901:18;;:::i;:::-;33814:2;33945:1;33942;33938:9;33931:16;;33692:261;;;;:::o;33959:185::-;;34016:20;34034:1;34016:20;:::i;:::-;34011:25;;34050:20;34068:1;34050:20;:::i;:::-;34045:25;;34089:1;34079:2;;34094:18;;:::i;:::-;34079:2;34136:1;34133;34129:9;34124:14;;34001:143;;;;:::o;34150:348::-;;34213:20;34231:1;34213:20;:::i;:::-;34208:25;;34247:20;34265:1;34247:20;:::i;:::-;34242:25;;34435:1;34367:66;34363:74;34360:1;34357:81;34352:1;34345:9;34338:17;34334:105;34331:2;;;34442:18;;:::i;:::-;34331:2;34490:1;34487;34483:9;34472:20;;34198:300;;;;:::o;34504:191::-;;34564:20;34582:1;34564:20;:::i;:::-;34559:25;;34598:20;34616:1;34598:20;:::i;:::-;34593:25;;34637:1;34634;34631:8;34628:2;;;34642:18;;:::i;:::-;34628:2;34687:1;34684;34680:9;34672:17;;34549:146;;;;:::o;34701:96::-;;34767:24;34785:5;34767:24;:::i;:::-;34756:35;;34746:51;;;:::o;34803:90::-;;34880:5;34873:13;34866:21;34855:32;;34845:48;;;:::o;34899:149::-;;34975:66;34968:5;34964:78;34953:89;;34943:105;;;:::o;35054:126::-;;35131:42;35124:5;35120:54;35109:65;;35099:81;;;:::o;35186:77::-;;35252:5;35241:16;;35231:32;;;:::o;35269:154::-;35353:6;35348:3;35343;35330:30;35415:1;35406:6;35401:3;35397:16;35390:27;35320:103;;;:::o;35429:307::-;35497:1;35507:113;35521:6;35518:1;35515:13;35507:113;;;35606:1;35601:3;35597:11;35591:18;35587:1;35582:3;35578:11;35571:39;35543:2;35540:1;35536:10;35531:15;;35507:113;;;35638:6;35635:1;35632:13;35629:2;;;35718:1;35709:6;35704:3;35700:16;35693:27;35629:2;35478:258;;;;:::o;35742:320::-;;35823:1;35817:4;35813:12;35803:22;;35870:1;35864:4;35860:12;35891:18;35881:2;;35947:4;35939:6;35935:17;35925:27;;35881:2;36009;36001:6;35998:14;35978:18;35975:38;35972:2;;;36028:18;;:::i;:::-;35972:2;35793:269;;;;:::o;36068:233::-;;36130:24;36148:5;36130:24;:::i;:::-;36121:33;;36176:66;36169:5;36166:77;36163:2;;;36246:18;;:::i;:::-;36163:2;36293:1;36286:5;36282:13;36275:20;;36111:190;;;:::o;36307:176::-;;36356:20;36374:1;36356:20;:::i;:::-;36351:25;;36390:20;36408:1;36390:20;:::i;:::-;36385:25;;36429:1;36419:2;;36434:18;;:::i;:::-;36419:2;36475:1;36472;36468:9;36463:14;;36341:142;;;;:::o;36489:180::-;36537:77;36534:1;36527:88;36634:4;36631:1;36624:15;36658:4;36655:1;36648:15;36675:180;36723:77;36720:1;36713:88;36820:4;36817:1;36810:15;36844:4;36841:1;36834:15;36861:180;36909:77;36906:1;36899:88;37006:4;37003:1;36996:15;37030:4;37027:1;37020:15;37047:180;37095:77;37092:1;37085:88;37192:4;37189:1;37182:15;37216:4;37213:1;37206:15;37233:102;;37325:2;37321:7;37316:2;37309:5;37305:14;37301:28;37291:38;;37281:54;;;:::o;37341:122::-;37414:24;37432:5;37414:24;:::i;:::-;37407:5;37404:35;37394:2;;37453:1;37450;37443:12;37394:2;37384:79;:::o;37469:116::-;37539:21;37554:5;37539:21;:::i;:::-;37532:5;37529:32;37519:2;;37575:1;37572;37565:12;37519:2;37509:76;:::o;37591:120::-;37663:23;37680:5;37663:23;:::i;:::-;37656:5;37653:34;37643:2;;37701:1;37698;37691:12;37643:2;37633:78;:::o;37717:122::-;37790:24;37808:5;37790:24;:::i;:::-;37783:5;37780:35;37770:2;;37829:1;37826;37819:12;37770:2;37760:79;:::o
Swarm Source
ipfs://e4dd6d49429bf402a2cb7fa01d5c0b8cae5e8d659455a2078186c65ad957af25
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.