Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint Reserved | 15497547 | 878 days ago | IN | 0 ETH | 0.00727544 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LRP
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-08 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol 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 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/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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 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 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 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 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 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 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} } // By EvolveNFTs.com pragma solidity >=0.7.0 <0.9.0; contract LRP is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.00 ether; uint256 public maxSupply = 456; uint256 public reserved = 56; uint256 public maxMintAmountPerTx = 1; uint256 public nftPerAddressLimit = 1; bool public paused = true; bool public revealed = false; mapping(address => uint256) public addressMintedBalance; constructor() ERC721("Locker Room Pass Genesis", "LRP") { setHiddenMetadataUri("ipfs://QmZnafm7avgvSgde7DukbRhRa2qUcYd75VMszSMmffTKiM/"); } //ensures minting security modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; } _mintLoop(msg.sender, _mintAmount); } function mintReserved(uint256 _mintAmount) public onlyOwner{ require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); require(_mintAmount <= reserved); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= reserved); for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; } _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } //returns an array of NFT owners wallets and amounts function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } //hide and unhide metadata function setRevealed(bool _state) public onlyOwner { revealed = _state; } //set cost of minting in wei function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setLimit(uint256 _nftPerAddressLimit) public onlyOwner { nftPerAddressLimit = _nftPerAddressLimit; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } //takes a string updates metadata function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } //updates the metadata used before reveal function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function withdraw() external onlyOwner { address[1] memory addresses = [ 0x6E9075da365BE17041e704A16d39652a7a54b862 ]; uint32[1] memory shares = [ uint32(10000) ]; uint256 balance = address(this).balance; for (uint32 i = 0; i < addresses.length; i++) { uint256 amount = i == addresses.length - 1 ? address(this).balance : balance * shares[i] / 10000; payable(addresses[i]).transfer(amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftPerAddressLimit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600890805190602001906200002b9291906200036b565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060099080519060200190620000799291906200036b565b506000600b556101c8600c556038600d556001600e556001600f556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000d757600080fd5b506040518060400160405280601881526020017f4c6f636b657220526f6f6d20506173732047656e6573697300000000000000008152506040518060400160405280600381526020017f4c5250000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200015c9291906200036b565b508060019080519060200190620001759291906200036b565b505050620001986200018c620001c860201b60201c565b620001d060201b60201c565b620001c260405180606001604052806036815260200162004d1e603691396200029660201b60201c565b62000503565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a6620001c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002cc6200034160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031c9062000442565b60405180910390fd5b80600a90805190602001906200033d9291906200036b565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003799062000475565b90600052602060002090601f0160209004810192826200039d5760008555620003e9565b82601f10620003b857805160ff1916838001178555620003e9565b82800160010185558215620003e9579182015b82811115620003e8578251825591602001919060010190620003cb565b5b509050620003f89190620003fc565b5090565b5b8082111562000417576000816000905550600101620003fd565b5090565b60006200042a60208362000464565b91506200043782620004da565b602082019050919050565b600060208201905081810360008301526200045d816200041b565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200048e57607f821691505b60208210811415620004a557620004a4620004ab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61480b80620005136000396000f3fe6080604052600436106102465760003560e01c80636352211e11610139578063a45ba8e7116100b6578063d5abeb011161007a578063d5abeb0114610859578063e0a8085314610884578063e985e9c5146108ad578063efbd73f4146108ea578063f2fde38b14610913578063fe60d12c1461093c57610246565b8063a45ba8e714610774578063b071401b1461079f578063b88d4fde146107c8578063ba7d2c76146107f1578063c87b56dd1461081c57610246565b806394354fd0116100fd57806394354fd0146106b057806395d89b41146106db5780639a5d140b14610706578063a0712d681461072f578063a22cb4651461074b57610246565b80636352211e146105cb57806370a0823114610608578063715018a6146106455780637ec4a6591461065c5780638da5cb5b1461068557610246565b806327ea6f2b116101c75780634fdd43cb1161018b5780634fdd43cb146104f6578063518302271461051f5780635503a0e81461054a5780635c975abb1461057557806362b99ad4146105a057610246565b806327ea6f2b146104275780633ccfd60b1461045057806342842e0e14610467578063438b63001461049057806344a0d68a146104cd57610246565b806316ba10e01161020e57806316ba10e01461034457806316c38b3c1461036d57806318160ddd1461039657806318cae269146103c157806323b872dd146103fe57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806313faede614610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061342d565b610967565b60405161027f9190613a92565b60405180910390f35b34801561029457600080fd5b5061029d610a49565b6040516102aa9190613aad565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906134c0565b610adb565b6040516102e79190613a09565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906133c8565b610b60565b005b34801561032557600080fd5b5061032e610c78565b60405161033b9190613d6f565b60405180910390f35b34801561035057600080fd5b5061036b6004803603810190610366919061347f565b610c7e565b005b34801561037957600080fd5b50610394600480360381019061038f9190613404565b610d14565b005b3480156103a257600080fd5b506103ab610dad565b6040516103b89190613d6f565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e3919061325d565b610dbe565b6040516103f59190613d6f565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906132c2565b610dd6565b005b34801561043357600080fd5b5061044e600480360381019061044991906134c0565b610e36565b005b34801561045c57600080fd5b50610465610ebc565b005b34801561047357600080fd5b5061048e600480360381019061048991906132c2565b6110ed565b005b34801561049c57600080fd5b506104b760048036038101906104b2919061325d565b61110d565b6040516104c49190613a70565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906134c0565b611264565b005b34801561050257600080fd5b5061051d6004803603810190610518919061347f565b6112ea565b005b34801561052b57600080fd5b50610534611380565b6040516105419190613a92565b60405180910390f35b34801561055657600080fd5b5061055f611393565b60405161056c9190613aad565b60405180910390f35b34801561058157600080fd5b5061058a611421565b6040516105979190613a92565b60405180910390f35b3480156105ac57600080fd5b506105b5611434565b6040516105c29190613aad565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134c0565b6114c2565b6040516105ff9190613a09565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a919061325d565b611574565b60405161063c9190613d6f565b60405180910390f35b34801561065157600080fd5b5061065a61162c565b005b34801561066857600080fd5b50610683600480360381019061067e919061347f565b6116b4565b005b34801561069157600080fd5b5061069a61174a565b6040516106a79190613a09565b60405180910390f35b3480156106bc57600080fd5b506106c5611774565b6040516106d29190613d6f565b60405180910390f35b3480156106e757600080fd5b506106f061177a565b6040516106fd9190613aad565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906134c0565b61180c565b005b610749600480360381019061074491906134c0565b6119d3565b005b34801561075757600080fd5b50610772600480360381019061076d919061338c565b611c38565b005b34801561078057600080fd5b50610789611db9565b6040516107969190613aad565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906134c0565b611e47565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613311565b611ecd565b005b3480156107fd57600080fd5b50610806611f2f565b6040516108139190613d6f565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906134c0565b611f35565b6040516108509190613aad565b60405180910390f35b34801561086557600080fd5b5061086e61208e565b60405161087b9190613d6f565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a69190613404565b612094565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190613286565b61212d565b6040516108e19190613a92565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c91906134e9565b6121c1565b005b34801561091f57600080fd5b5061093a6004803603810190610935919061325d565b6122f7565b005b34801561094857600080fd5b506109516123ef565b60405161095e9190613d6f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a425750610a41826123f5565b5b9050919050565b606060008054610a589061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a849061407d565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610ae68261245f565b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613c4f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6b826114c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613cef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfb6124cb565b73ffffffffffffffffffffffffffffffffffffffff161480610c2a5750610c2981610c246124cb565b61212d565b5b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613bcf565b60405180910390fd5b610c7383836124d3565b505050565b600b5481565b610c866124cb565b73ffffffffffffffffffffffffffffffffffffffff16610ca461174a565b73ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190613c6f565b60405180910390fd5b8060099080519060200190610d10929190613081565b5050565b610d1c6124cb565b73ffffffffffffffffffffffffffffffffffffffff16610d3a61174a565b73ffffffffffffffffffffffffffffffffffffffff1614610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790613c6f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610db9600761258c565b905090565b60116020528060005260406000206000915090505481565b610de7610de16124cb565b8261259a565b610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613d2f565b60405180910390fd5b610e31838383612678565b505050565b610e3e6124cb565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61174a565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613c6f565b60405180910390fd5b80600f8190555050565b610ec46124cb565b73ffffffffffffffffffffffffffffffffffffffff16610ee261174a565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90613c6f565b60405180910390fd5b60006040518060200160405280736e9075da365be17041e704a16d39652a7a54b86273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090506000604051806020016040528061271063ffffffff1663ffffffff168152509050600047905060005b60018163ffffffff1610156110e7576000600180610fd29190613f83565b8263ffffffff161461104557612710848363ffffffff1660018110611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015163ffffffff16846110369190613f29565b6110409190613ef8565b611047565b475b9050848263ffffffff1660018110611088577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110d2573d6000803e3d6000fd5b505080806110df90614129565b915050610fb4565b50505050565b61110883838360405180602001604052806000815250611ecd565b505050565b6060600061111a83611574565b905060008167ffffffffffffffff81111561115e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561118c5781602001602082028036833780820191505090505b50905060006001905060005b83811080156111a95750600c548211155b156112585760006111b9836114c2565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112445782848381518110611229577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508180611240906140e0565b9250505b828061124f906140e0565b93505050611198565b82945050505050919050565b61126c6124cb565b73ffffffffffffffffffffffffffffffffffffffff1661128a61174a565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613c6f565b60405180910390fd5b80600b8190555050565b6112f26124cb565b73ffffffffffffffffffffffffffffffffffffffff1661131061174a565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613c6f565b60405180910390fd5b80600a908051906020019061137c929190613081565b5050565b601060019054906101000a900460ff1681565b600980546113a09061407d565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc9061407d565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600880546114419061407d565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061407d565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613c0f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613bef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116346124cb565b73ffffffffffffffffffffffffffffffffffffffff1661165261174a565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90613c6f565b60405180910390fd5b6116b260006128d4565b565b6116bc6124cb565b73ffffffffffffffffffffffffffffffffffffffff166116da61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c6f565b60405180910390fd5b8060089080519060200190611746929190613081565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600180546117899061407d565b80601f01602080910402602001604051908101604052809291908181526020018280546117b59061407d565b80156118025780601f106117d757610100808354040283529160200191611802565b820191906000526020600020905b8154815290600101906020018083116117e557829003601f168201915b5050505050905090565b6118146124cb565b73ffffffffffffffffffffffffffffffffffffffff1661183261174a565b73ffffffffffffffffffffffffffffffffffffffff1614611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613c6f565b60405180910390fd5b600c5481611896600761258c565b6118a09190613ea2565b11156118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613d0f565b60405180910390fd5b600d548111156118f057600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d5482826119439190613ea2565b111561194e57600080fd5b6000600190505b8281116119c457601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906119ac906140e0565b919050555080806119bc906140e0565b915050611955565b506119cf338361299a565b5050565b806000811180156119e65750600e548111155b611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613b2f565b60405180910390fd5b600c5481611a33600761258c565b611a3d9190613ea2565b1115611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613d0f565b60405180910390fd5b601060009054906101000a900460ff1615611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613c8f565b60405180910390fd5b81600b54611adc9190613f29565b341015611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1590613d4f565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548382611b719190613ea2565b1115611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990613b4f565b60405180910390fd5b6000600190505b838111611c2857601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c10906140e0565b91905055508080611c20906140e0565b915050611bb9565b50611c33338461299a565b505050565b611c406124cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613b8f565b60405180910390fd5b8060056000611cbb6124cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d686124cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dad9190613a92565b60405180910390a35050565b600a8054611dc69061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054611df29061407d565b8015611e3f5780601f10611e1457610100808354040283529160200191611e3f565b820191906000526020600020905b815481529060010190602001808311611e2257829003601f168201915b505050505081565b611e4f6124cb565b73ffffffffffffffffffffffffffffffffffffffff16611e6d61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90613c6f565b60405180910390fd5b80600e8190555050565b611ede611ed86124cb565b8361259a565b611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613d2f565b60405180910390fd5b611f29848484846129da565b50505050565b600f5481565b6060611f408261245f565b611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613ccf565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561202d57600a8054611fa89061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd49061407d565b80156120215780601f10611ff657610100808354040283529160200191612021565b820191906000526020600020905b81548152906001019060200180831161200457829003601f168201915b50505050509050612089565b6000612037612a36565b905060008151116120575760405180602001604052806000815250612085565b8061206184612ac8565b6009604051602001612075939291906139d8565b6040516020818303038152906040525b9150505b919050565b600c5481565b61209c6124cb565b73ffffffffffffffffffffffffffffffffffffffff166120ba61174a565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790613c6f565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156121d45750600e548111155b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90613b2f565b60405180910390fd5b600c5481612221600761258c565b61222b9190613ea2565b111561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613d0f565b60405180910390fd5b6122746124cb565b73ffffffffffffffffffffffffffffffffffffffff1661229261174a565b73ffffffffffffffffffffffffffffffffffffffff16146122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90613c6f565b60405180910390fd5b6122f2828461299a565b505050565b6122ff6124cb565b73ffffffffffffffffffffffffffffffffffffffff1661231d61174a565b73ffffffffffffffffffffffffffffffffffffffff1614612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90613aef565b60405180910390fd5b6123ec816128d4565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612546836114c2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006125a58261245f565b6125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613baf565b60405180910390fd5b60006125ef836114c2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061265e57508373ffffffffffffffffffffffffffffffffffffffff1661264684610adb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061266f575061266e818561212d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612698826114c2565b73ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e590613caf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561275e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275590613b6f565b60405180910390fd5b612769838383612c75565b6127746000826124d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c49190613f83565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281b9190613ea2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156129d5576129af6007612c7a565b6129c2836129bd600761258c565b612c90565b80806129cd906140e0565b91505061299d565b505050565b6129e5848484612678565b6129f184848484612cae565b612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790613acf565b60405180910390fd5b50505050565b606060088054612a459061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a719061407d565b8015612abe5780601f10612a9357610100808354040283529160200191612abe565b820191906000526020600020905b815481529060010190602001808311612aa157829003601f168201915b5050505050905090565b60606000821415612b10576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c70565b600082905060005b60008214612b42578080612b2b906140e0565b915050600a82612b3b9190613ef8565b9150612b18565b60008167ffffffffffffffff811115612b84577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bb65781602001600182028036833780820191505090505b5090505b60008514612c6957600182612bcf9190613f83565b9150600a85612bde9190614156565b6030612bea9190613ea2565b60f81b818381518110612c26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c629190613ef8565b9450612bba565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b612caa828260405180602001604052806000815250612e45565b5050565b6000612ccf8473ffffffffffffffffffffffffffffffffffffffff16612ea0565b15612e38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf86124cb565b8786866040518563ffffffff1660e01b8152600401612d1a9493929190613a24565b602060405180830381600087803b158015612d3457600080fd5b505af1925050508015612d6557506040513d601f19601f82011682018060405250810190612d629190613456565b60015b612de8573d8060008114612d95576040519150601f19603f3d011682016040523d82523d6000602084013e612d9a565b606091505b50600081511415612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790613acf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e3d565b600190505b949350505050565b612e4f8383612eb3565b612e5c6000848484612cae565b612e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9290613acf565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90613c2f565b60405180910390fd5b612f2c8161245f565b15612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390613b0f565b60405180910390fd5b612f7860008383612c75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc89190613ea2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461308d9061407d565b90600052602060002090601f0160209004810192826130af57600085556130f6565b82601f106130c857805160ff19168380011785556130f6565b828001600101855582156130f6579182015b828111156130f55782518255916020019190600101906130da565b5b5090506131039190613107565b5090565b5b80821115613120576000816000905550600101613108565b5090565b600061313761313284613daf565b613d8a565b90508281526020810184848401111561314f57600080fd5b61315a84828561403b565b509392505050565b600061317561317084613de0565b613d8a565b90508281526020810184848401111561318d57600080fd5b61319884828561403b565b509392505050565b6000813590506131af81614779565b92915050565b6000813590506131c481614790565b92915050565b6000813590506131d9816147a7565b92915050565b6000815190506131ee816147a7565b92915050565b600082601f83011261320557600080fd5b8135613215848260208601613124565b91505092915050565b600082601f83011261322f57600080fd5b813561323f848260208601613162565b91505092915050565b600081359050613257816147be565b92915050565b60006020828403121561326f57600080fd5b600061327d848285016131a0565b91505092915050565b6000806040838503121561329957600080fd5b60006132a7858286016131a0565b92505060206132b8858286016131a0565b9150509250929050565b6000806000606084860312156132d757600080fd5b60006132e5868287016131a0565b93505060206132f6868287016131a0565b925050604061330786828701613248565b9150509250925092565b6000806000806080858703121561332757600080fd5b6000613335878288016131a0565b9450506020613346878288016131a0565b935050604061335787828801613248565b925050606085013567ffffffffffffffff81111561337457600080fd5b613380878288016131f4565b91505092959194509250565b6000806040838503121561339f57600080fd5b60006133ad858286016131a0565b92505060206133be858286016131b5565b9150509250929050565b600080604083850312156133db57600080fd5b60006133e9858286016131a0565b92505060206133fa85828601613248565b9150509250929050565b60006020828403121561341657600080fd5b6000613424848285016131b5565b91505092915050565b60006020828403121561343f57600080fd5b600061344d848285016131ca565b91505092915050565b60006020828403121561346857600080fd5b6000613476848285016131df565b91505092915050565b60006020828403121561349157600080fd5b600082013567ffffffffffffffff8111156134ab57600080fd5b6134b78482850161321e565b91505092915050565b6000602082840312156134d257600080fd5b60006134e084828501613248565b91505092915050565b600080604083850312156134fc57600080fd5b600061350a85828601613248565b925050602061351b858286016131a0565b9150509250929050565b600061353183836139ba565b60208301905092915050565b61354681613fb7565b82525050565b600061355782613e36565b6135618185613e64565b935061356c83613e11565b8060005b8381101561359d5781516135848882613525565b975061358f83613e57565b925050600181019050613570565b5085935050505092915050565b6135b381613fc9565b82525050565b60006135c482613e41565b6135ce8185613e75565b93506135de81856020860161404a565b6135e781614243565b840191505092915050565b60006135fd82613e4c565b6136078185613e86565b935061361781856020860161404a565b61362081614243565b840191505092915050565b600061363682613e4c565b6136408185613e97565b935061365081856020860161404a565b80840191505092915050565b600081546136698161407d565b6136738186613e97565b9450600182166000811461368e576001811461369f576136d2565b60ff198316865281860193506136d2565b6136a885613e21565b60005b838110156136ca578154818901526001820191506020810190506136ab565b838801955050505b50505092915050565b60006136e8603283613e86565b91506136f382614254565b604082019050919050565b600061370b602683613e86565b9150613716826142a3565b604082019050919050565b600061372e601c83613e86565b9150613739826142f2565b602082019050919050565b6000613751601483613e86565b915061375c8261431b565b602082019050919050565b6000613774601c83613e86565b915061377f82614344565b602082019050919050565b6000613797602483613e86565b91506137a28261436d565b604082019050919050565b60006137ba601983613e86565b91506137c5826143bc565b602082019050919050565b60006137dd602c83613e86565b91506137e8826143e5565b604082019050919050565b6000613800603883613e86565b915061380b82614434565b604082019050919050565b6000613823602a83613e86565b915061382e82614483565b604082019050919050565b6000613846602983613e86565b9150613851826144d2565b604082019050919050565b6000613869602083613e86565b915061387482614521565b602082019050919050565b600061388c602c83613e86565b91506138978261454a565b604082019050919050565b60006138af602083613e86565b91506138ba82614599565b602082019050919050565b60006138d2601783613e86565b91506138dd826145c2565b602082019050919050565b60006138f5602983613e86565b9150613900826145eb565b604082019050919050565b6000613918602f83613e86565b91506139238261463a565b604082019050919050565b600061393b602183613e86565b915061394682614689565b604082019050919050565b600061395e601483613e86565b9150613969826146d8565b602082019050919050565b6000613981603183613e86565b915061398c82614701565b604082019050919050565b60006139a4601383613e86565b91506139af82614750565b602082019050919050565b6139c381614021565b82525050565b6139d281614021565b82525050565b60006139e4828661362b565b91506139f0828561362b565b91506139fc828461365c565b9150819050949350505050565b6000602082019050613a1e600083018461353d565b92915050565b6000608082019050613a39600083018761353d565b613a46602083018661353d565b613a5360408301856139c9565b8181036060830152613a6581846135b9565b905095945050505050565b60006020820190508181036000830152613a8a818461354c565b905092915050565b6000602082019050613aa760008301846135aa565b92915050565b60006020820190508181036000830152613ac781846135f2565b905092915050565b60006020820190508181036000830152613ae8816136db565b9050919050565b60006020820190508181036000830152613b08816136fe565b9050919050565b60006020820190508181036000830152613b2881613721565b9050919050565b60006020820190508181036000830152613b4881613744565b9050919050565b60006020820190508181036000830152613b6881613767565b9050919050565b60006020820190508181036000830152613b888161378a565b9050919050565b60006020820190508181036000830152613ba8816137ad565b9050919050565b60006020820190508181036000830152613bc8816137d0565b9050919050565b60006020820190508181036000830152613be8816137f3565b9050919050565b60006020820190508181036000830152613c0881613816565b9050919050565b60006020820190508181036000830152613c2881613839565b9050919050565b60006020820190508181036000830152613c488161385c565b9050919050565b60006020820190508181036000830152613c688161387f565b9050919050565b60006020820190508181036000830152613c88816138a2565b9050919050565b60006020820190508181036000830152613ca8816138c5565b9050919050565b60006020820190508181036000830152613cc8816138e8565b9050919050565b60006020820190508181036000830152613ce88161390b565b9050919050565b60006020820190508181036000830152613d088161392e565b9050919050565b60006020820190508181036000830152613d2881613951565b9050919050565b60006020820190508181036000830152613d4881613974565b9050919050565b60006020820190508181036000830152613d6881613997565b9050919050565b6000602082019050613d8460008301846139c9565b92915050565b6000613d94613da5565b9050613da082826140af565b919050565b6000604051905090565b600067ffffffffffffffff821115613dca57613dc9614214565b5b613dd382614243565b9050602081019050919050565b600067ffffffffffffffff821115613dfb57613dfa614214565b5b613e0482614243565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ead82614021565b9150613eb883614021565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eed57613eec614187565b5b828201905092915050565b6000613f0382614021565b9150613f0e83614021565b925082613f1e57613f1d6141b6565b5b828204905092915050565b6000613f3482614021565b9150613f3f83614021565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7857613f77614187565b5b828202905092915050565b6000613f8e82614021565b9150613f9983614021565b925082821015613fac57613fab614187565b5b828203905092915050565b6000613fc282614001565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561406857808201518184015260208101905061404d565b83811115614077576000848401525b50505050565b6000600282049050600182168061409557607f821691505b602082108114156140a9576140a86141e5565b5b50919050565b6140b882614243565b810181811067ffffffffffffffff821117156140d7576140d6614214565b5b80604052505050565b60006140eb82614021565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411e5761411d614187565b5b600182019050919050565b60006141348261402b565b915063ffffffff82141561414b5761414a614187565b5b600182019050919050565b600061416182614021565b915061416c83614021565b92508261417c5761417b6141b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61478281613fb7565b811461478d57600080fd5b50565b61479981613fc9565b81146147a457600080fd5b50565b6147b081613fd5565b81146147bb57600080fd5b50565b6147c781614021565b81146147d257600080fd5b5056fea2646970667358221220f3758599a41ef5e90c8380886a33000be698638bb6701fdf700c2bbf7c18e3dc64736f6c63430008040033697066733a2f2f516d5a6e61666d3761766776536764653744756b62526852613271556359643735564d737a534d6d6666544b694d2f
Deployed Bytecode
0x6080604052600436106102465760003560e01c80636352211e11610139578063a45ba8e7116100b6578063d5abeb011161007a578063d5abeb0114610859578063e0a8085314610884578063e985e9c5146108ad578063efbd73f4146108ea578063f2fde38b14610913578063fe60d12c1461093c57610246565b8063a45ba8e714610774578063b071401b1461079f578063b88d4fde146107c8578063ba7d2c76146107f1578063c87b56dd1461081c57610246565b806394354fd0116100fd57806394354fd0146106b057806395d89b41146106db5780639a5d140b14610706578063a0712d681461072f578063a22cb4651461074b57610246565b80636352211e146105cb57806370a0823114610608578063715018a6146106455780637ec4a6591461065c5780638da5cb5b1461068557610246565b806327ea6f2b116101c75780634fdd43cb1161018b5780634fdd43cb146104f6578063518302271461051f5780635503a0e81461054a5780635c975abb1461057557806362b99ad4146105a057610246565b806327ea6f2b146104275780633ccfd60b1461045057806342842e0e14610467578063438b63001461049057806344a0d68a146104cd57610246565b806316ba10e01161020e57806316ba10e01461034457806316c38b3c1461036d57806318160ddd1461039657806318cae269146103c157806323b872dd146103fe57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806313faede614610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d919061342d565b610967565b60405161027f9190613a92565b60405180910390f35b34801561029457600080fd5b5061029d610a49565b6040516102aa9190613aad565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906134c0565b610adb565b6040516102e79190613a09565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906133c8565b610b60565b005b34801561032557600080fd5b5061032e610c78565b60405161033b9190613d6f565b60405180910390f35b34801561035057600080fd5b5061036b6004803603810190610366919061347f565b610c7e565b005b34801561037957600080fd5b50610394600480360381019061038f9190613404565b610d14565b005b3480156103a257600080fd5b506103ab610dad565b6040516103b89190613d6f565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e3919061325d565b610dbe565b6040516103f59190613d6f565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906132c2565b610dd6565b005b34801561043357600080fd5b5061044e600480360381019061044991906134c0565b610e36565b005b34801561045c57600080fd5b50610465610ebc565b005b34801561047357600080fd5b5061048e600480360381019061048991906132c2565b6110ed565b005b34801561049c57600080fd5b506104b760048036038101906104b2919061325d565b61110d565b6040516104c49190613a70565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906134c0565b611264565b005b34801561050257600080fd5b5061051d6004803603810190610518919061347f565b6112ea565b005b34801561052b57600080fd5b50610534611380565b6040516105419190613a92565b60405180910390f35b34801561055657600080fd5b5061055f611393565b60405161056c9190613aad565b60405180910390f35b34801561058157600080fd5b5061058a611421565b6040516105979190613a92565b60405180910390f35b3480156105ac57600080fd5b506105b5611434565b6040516105c29190613aad565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906134c0565b6114c2565b6040516105ff9190613a09565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a919061325d565b611574565b60405161063c9190613d6f565b60405180910390f35b34801561065157600080fd5b5061065a61162c565b005b34801561066857600080fd5b50610683600480360381019061067e919061347f565b6116b4565b005b34801561069157600080fd5b5061069a61174a565b6040516106a79190613a09565b60405180910390f35b3480156106bc57600080fd5b506106c5611774565b6040516106d29190613d6f565b60405180910390f35b3480156106e757600080fd5b506106f061177a565b6040516106fd9190613aad565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906134c0565b61180c565b005b610749600480360381019061074491906134c0565b6119d3565b005b34801561075757600080fd5b50610772600480360381019061076d919061338c565b611c38565b005b34801561078057600080fd5b50610789611db9565b6040516107969190613aad565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906134c0565b611e47565b005b3480156107d457600080fd5b506107ef60048036038101906107ea9190613311565b611ecd565b005b3480156107fd57600080fd5b50610806611f2f565b6040516108139190613d6f565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906134c0565b611f35565b6040516108509190613aad565b60405180910390f35b34801561086557600080fd5b5061086e61208e565b60405161087b9190613d6f565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a69190613404565b612094565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190613286565b61212d565b6040516108e19190613a92565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c91906134e9565b6121c1565b005b34801561091f57600080fd5b5061093a6004803603810190610935919061325d565b6122f7565b005b34801561094857600080fd5b506109516123ef565b60405161095e9190613d6f565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a425750610a41826123f5565b5b9050919050565b606060008054610a589061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a849061407d565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610ae68261245f565b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613c4f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6b826114c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613cef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfb6124cb565b73ffffffffffffffffffffffffffffffffffffffff161480610c2a5750610c2981610c246124cb565b61212d565b5b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613bcf565b60405180910390fd5b610c7383836124d3565b505050565b600b5481565b610c866124cb565b73ffffffffffffffffffffffffffffffffffffffff16610ca461174a565b73ffffffffffffffffffffffffffffffffffffffff1614610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf190613c6f565b60405180910390fd5b8060099080519060200190610d10929190613081565b5050565b610d1c6124cb565b73ffffffffffffffffffffffffffffffffffffffff16610d3a61174a565b73ffffffffffffffffffffffffffffffffffffffff1614610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8790613c6f565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610db9600761258c565b905090565b60116020528060005260406000206000915090505481565b610de7610de16124cb565b8261259a565b610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613d2f565b60405180910390fd5b610e31838383612678565b505050565b610e3e6124cb565b73ffffffffffffffffffffffffffffffffffffffff16610e5c61174a565b73ffffffffffffffffffffffffffffffffffffffff1614610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613c6f565b60405180910390fd5b80600f8190555050565b610ec46124cb565b73ffffffffffffffffffffffffffffffffffffffff16610ee261174a565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90613c6f565b60405180910390fd5b60006040518060200160405280736e9075da365be17041e704a16d39652a7a54b86273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090506000604051806020016040528061271063ffffffff1663ffffffff168152509050600047905060005b60018163ffffffff1610156110e7576000600180610fd29190613f83565b8263ffffffff161461104557612710848363ffffffff1660018110611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015163ffffffff16846110369190613f29565b6110409190613ef8565b611047565b475b9050848263ffffffff1660018110611088577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110d2573d6000803e3d6000fd5b505080806110df90614129565b915050610fb4565b50505050565b61110883838360405180602001604052806000815250611ecd565b505050565b6060600061111a83611574565b905060008167ffffffffffffffff81111561115e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561118c5781602001602082028036833780820191505090505b50905060006001905060005b83811080156111a95750600c548211155b156112585760006111b9836114c2565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112445782848381518110611229577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508180611240906140e0565b9250505b828061124f906140e0565b93505050611198565b82945050505050919050565b61126c6124cb565b73ffffffffffffffffffffffffffffffffffffffff1661128a61174a565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613c6f565b60405180910390fd5b80600b8190555050565b6112f26124cb565b73ffffffffffffffffffffffffffffffffffffffff1661131061174a565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90613c6f565b60405180910390fd5b80600a908051906020019061137c929190613081565b5050565b601060019054906101000a900460ff1681565b600980546113a09061407d565b80601f01602080910402602001604051908101604052809291908181526020018280546113cc9061407d565b80156114195780601f106113ee57610100808354040283529160200191611419565b820191906000526020600020905b8154815290600101906020018083116113fc57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600880546114419061407d565b80601f016020809104026020016040519081016040528092919081815260200182805461146d9061407d565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613c0f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90613bef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116346124cb565b73ffffffffffffffffffffffffffffffffffffffff1661165261174a565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90613c6f565b60405180910390fd5b6116b260006128d4565b565b6116bc6124cb565b73ffffffffffffffffffffffffffffffffffffffff166116da61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c6f565b60405180910390fd5b8060089080519060200190611746929190613081565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600180546117899061407d565b80601f01602080910402602001604051908101604052809291908181526020018280546117b59061407d565b80156118025780601f106117d757610100808354040283529160200191611802565b820191906000526020600020905b8154815290600101906020018083116117e557829003601f168201915b5050505050905090565b6118146124cb565b73ffffffffffffffffffffffffffffffffffffffff1661183261174a565b73ffffffffffffffffffffffffffffffffffffffff1614611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613c6f565b60405180910390fd5b600c5481611896600761258c565b6118a09190613ea2565b11156118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613d0f565b60405180910390fd5b600d548111156118f057600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600d5482826119439190613ea2565b111561194e57600080fd5b6000600190505b8281116119c457601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906119ac906140e0565b919050555080806119bc906140e0565b915050611955565b506119cf338361299a565b5050565b806000811180156119e65750600e548111155b611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613b2f565b60405180910390fd5b600c5481611a33600761258c565b611a3d9190613ea2565b1115611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613d0f565b60405180910390fd5b601060009054906101000a900460ff1615611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613c8f565b60405180910390fd5b81600b54611adc9190613f29565b341015611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1590613d4f565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f548382611b719190613ea2565b1115611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990613b4f565b60405180910390fd5b6000600190505b838111611c2857601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611c10906140e0565b91905055508080611c20906140e0565b915050611bb9565b50611c33338461299a565b505050565b611c406124cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590613b8f565b60405180910390fd5b8060056000611cbb6124cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d686124cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dad9190613a92565b60405180910390a35050565b600a8054611dc69061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054611df29061407d565b8015611e3f5780601f10611e1457610100808354040283529160200191611e3f565b820191906000526020600020905b815481529060010190602001808311611e2257829003601f168201915b505050505081565b611e4f6124cb565b73ffffffffffffffffffffffffffffffffffffffff16611e6d61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eba90613c6f565b60405180910390fd5b80600e8190555050565b611ede611ed86124cb565b8361259a565b611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613d2f565b60405180910390fd5b611f29848484846129da565b50505050565b600f5481565b6060611f408261245f565b611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690613ccf565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561202d57600a8054611fa89061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd49061407d565b80156120215780601f10611ff657610100808354040283529160200191612021565b820191906000526020600020905b81548152906001019060200180831161200457829003601f168201915b50505050509050612089565b6000612037612a36565b905060008151116120575760405180602001604052806000815250612085565b8061206184612ac8565b6009604051602001612075939291906139d8565b6040516020818303038152906040525b9150505b919050565b600c5481565b61209c6124cb565b73ffffffffffffffffffffffffffffffffffffffff166120ba61174a565b73ffffffffffffffffffffffffffffffffffffffff1614612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790613c6f565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156121d45750600e548111155b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90613b2f565b60405180910390fd5b600c5481612221600761258c565b61222b9190613ea2565b111561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613d0f565b60405180910390fd5b6122746124cb565b73ffffffffffffffffffffffffffffffffffffffff1661229261174a565b73ffffffffffffffffffffffffffffffffffffffff16146122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df90613c6f565b60405180910390fd5b6122f2828461299a565b505050565b6122ff6124cb565b73ffffffffffffffffffffffffffffffffffffffff1661231d61174a565b73ffffffffffffffffffffffffffffffffffffffff1614612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90613aef565b60405180910390fd5b6123ec816128d4565b50565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612546836114c2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006125a58261245f565b6125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90613baf565b60405180910390fd5b60006125ef836114c2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061265e57508373ffffffffffffffffffffffffffffffffffffffff1661264684610adb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061266f575061266e818561212d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612698826114c2565b73ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e590613caf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561275e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275590613b6f565b60405180910390fd5b612769838383612c75565b6127746000826124d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c49190613f83565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281b9190613ea2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156129d5576129af6007612c7a565b6129c2836129bd600761258c565b612c90565b80806129cd906140e0565b91505061299d565b505050565b6129e5848484612678565b6129f184848484612cae565b612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790613acf565b60405180910390fd5b50505050565b606060088054612a459061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054612a719061407d565b8015612abe5780601f10612a9357610100808354040283529160200191612abe565b820191906000526020600020905b815481529060010190602001808311612aa157829003601f168201915b5050505050905090565b60606000821415612b10576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c70565b600082905060005b60008214612b42578080612b2b906140e0565b915050600a82612b3b9190613ef8565b9150612b18565b60008167ffffffffffffffff811115612b84577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bb65781602001600182028036833780820191505090505b5090505b60008514612c6957600182612bcf9190613f83565b9150600a85612bde9190614156565b6030612bea9190613ea2565b60f81b818381518110612c26577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c629190613ef8565b9450612bba565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b612caa828260405180602001604052806000815250612e45565b5050565b6000612ccf8473ffffffffffffffffffffffffffffffffffffffff16612ea0565b15612e38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf86124cb565b8786866040518563ffffffff1660e01b8152600401612d1a9493929190613a24565b602060405180830381600087803b158015612d3457600080fd5b505af1925050508015612d6557506040513d601f19601f82011682018060405250810190612d629190613456565b60015b612de8573d8060008114612d95576040519150601f19603f3d011682016040523d82523d6000602084013e612d9a565b606091505b50600081511415612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd790613acf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e3d565b600190505b949350505050565b612e4f8383612eb3565b612e5c6000848484612cae565b612e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9290613acf565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a90613c2f565b60405180910390fd5b612f2c8161245f565b15612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390613b0f565b60405180910390fd5b612f7860008383612c75565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc89190613ea2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461308d9061407d565b90600052602060002090601f0160209004810192826130af57600085556130f6565b82601f106130c857805160ff19168380011785556130f6565b828001600101855582156130f6579182015b828111156130f55782518255916020019190600101906130da565b5b5090506131039190613107565b5090565b5b80821115613120576000816000905550600101613108565b5090565b600061313761313284613daf565b613d8a565b90508281526020810184848401111561314f57600080fd5b61315a84828561403b565b509392505050565b600061317561317084613de0565b613d8a565b90508281526020810184848401111561318d57600080fd5b61319884828561403b565b509392505050565b6000813590506131af81614779565b92915050565b6000813590506131c481614790565b92915050565b6000813590506131d9816147a7565b92915050565b6000815190506131ee816147a7565b92915050565b600082601f83011261320557600080fd5b8135613215848260208601613124565b91505092915050565b600082601f83011261322f57600080fd5b813561323f848260208601613162565b91505092915050565b600081359050613257816147be565b92915050565b60006020828403121561326f57600080fd5b600061327d848285016131a0565b91505092915050565b6000806040838503121561329957600080fd5b60006132a7858286016131a0565b92505060206132b8858286016131a0565b9150509250929050565b6000806000606084860312156132d757600080fd5b60006132e5868287016131a0565b93505060206132f6868287016131a0565b925050604061330786828701613248565b9150509250925092565b6000806000806080858703121561332757600080fd5b6000613335878288016131a0565b9450506020613346878288016131a0565b935050604061335787828801613248565b925050606085013567ffffffffffffffff81111561337457600080fd5b613380878288016131f4565b91505092959194509250565b6000806040838503121561339f57600080fd5b60006133ad858286016131a0565b92505060206133be858286016131b5565b9150509250929050565b600080604083850312156133db57600080fd5b60006133e9858286016131a0565b92505060206133fa85828601613248565b9150509250929050565b60006020828403121561341657600080fd5b6000613424848285016131b5565b91505092915050565b60006020828403121561343f57600080fd5b600061344d848285016131ca565b91505092915050565b60006020828403121561346857600080fd5b6000613476848285016131df565b91505092915050565b60006020828403121561349157600080fd5b600082013567ffffffffffffffff8111156134ab57600080fd5b6134b78482850161321e565b91505092915050565b6000602082840312156134d257600080fd5b60006134e084828501613248565b91505092915050565b600080604083850312156134fc57600080fd5b600061350a85828601613248565b925050602061351b858286016131a0565b9150509250929050565b600061353183836139ba565b60208301905092915050565b61354681613fb7565b82525050565b600061355782613e36565b6135618185613e64565b935061356c83613e11565b8060005b8381101561359d5781516135848882613525565b975061358f83613e57565b925050600181019050613570565b5085935050505092915050565b6135b381613fc9565b82525050565b60006135c482613e41565b6135ce8185613e75565b93506135de81856020860161404a565b6135e781614243565b840191505092915050565b60006135fd82613e4c565b6136078185613e86565b935061361781856020860161404a565b61362081614243565b840191505092915050565b600061363682613e4c565b6136408185613e97565b935061365081856020860161404a565b80840191505092915050565b600081546136698161407d565b6136738186613e97565b9450600182166000811461368e576001811461369f576136d2565b60ff198316865281860193506136d2565b6136a885613e21565b60005b838110156136ca578154818901526001820191506020810190506136ab565b838801955050505b50505092915050565b60006136e8603283613e86565b91506136f382614254565b604082019050919050565b600061370b602683613e86565b9150613716826142a3565b604082019050919050565b600061372e601c83613e86565b9150613739826142f2565b602082019050919050565b6000613751601483613e86565b915061375c8261431b565b602082019050919050565b6000613774601c83613e86565b915061377f82614344565b602082019050919050565b6000613797602483613e86565b91506137a28261436d565b604082019050919050565b60006137ba601983613e86565b91506137c5826143bc565b602082019050919050565b60006137dd602c83613e86565b91506137e8826143e5565b604082019050919050565b6000613800603883613e86565b915061380b82614434565b604082019050919050565b6000613823602a83613e86565b915061382e82614483565b604082019050919050565b6000613846602983613e86565b9150613851826144d2565b604082019050919050565b6000613869602083613e86565b915061387482614521565b602082019050919050565b600061388c602c83613e86565b91506138978261454a565b604082019050919050565b60006138af602083613e86565b91506138ba82614599565b602082019050919050565b60006138d2601783613e86565b91506138dd826145c2565b602082019050919050565b60006138f5602983613e86565b9150613900826145eb565b604082019050919050565b6000613918602f83613e86565b91506139238261463a565b604082019050919050565b600061393b602183613e86565b915061394682614689565b604082019050919050565b600061395e601483613e86565b9150613969826146d8565b602082019050919050565b6000613981603183613e86565b915061398c82614701565b604082019050919050565b60006139a4601383613e86565b91506139af82614750565b602082019050919050565b6139c381614021565b82525050565b6139d281614021565b82525050565b60006139e4828661362b565b91506139f0828561362b565b91506139fc828461365c565b9150819050949350505050565b6000602082019050613a1e600083018461353d565b92915050565b6000608082019050613a39600083018761353d565b613a46602083018661353d565b613a5360408301856139c9565b8181036060830152613a6581846135b9565b905095945050505050565b60006020820190508181036000830152613a8a818461354c565b905092915050565b6000602082019050613aa760008301846135aa565b92915050565b60006020820190508181036000830152613ac781846135f2565b905092915050565b60006020820190508181036000830152613ae8816136db565b9050919050565b60006020820190508181036000830152613b08816136fe565b9050919050565b60006020820190508181036000830152613b2881613721565b9050919050565b60006020820190508181036000830152613b4881613744565b9050919050565b60006020820190508181036000830152613b6881613767565b9050919050565b60006020820190508181036000830152613b888161378a565b9050919050565b60006020820190508181036000830152613ba8816137ad565b9050919050565b60006020820190508181036000830152613bc8816137d0565b9050919050565b60006020820190508181036000830152613be8816137f3565b9050919050565b60006020820190508181036000830152613c0881613816565b9050919050565b60006020820190508181036000830152613c2881613839565b9050919050565b60006020820190508181036000830152613c488161385c565b9050919050565b60006020820190508181036000830152613c688161387f565b9050919050565b60006020820190508181036000830152613c88816138a2565b9050919050565b60006020820190508181036000830152613ca8816138c5565b9050919050565b60006020820190508181036000830152613cc8816138e8565b9050919050565b60006020820190508181036000830152613ce88161390b565b9050919050565b60006020820190508181036000830152613d088161392e565b9050919050565b60006020820190508181036000830152613d2881613951565b9050919050565b60006020820190508181036000830152613d4881613974565b9050919050565b60006020820190508181036000830152613d6881613997565b9050919050565b6000602082019050613d8460008301846139c9565b92915050565b6000613d94613da5565b9050613da082826140af565b919050565b6000604051905090565b600067ffffffffffffffff821115613dca57613dc9614214565b5b613dd382614243565b9050602081019050919050565b600067ffffffffffffffff821115613dfb57613dfa614214565b5b613e0482614243565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ead82614021565b9150613eb883614021565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eed57613eec614187565b5b828201905092915050565b6000613f0382614021565b9150613f0e83614021565b925082613f1e57613f1d6141b6565b5b828204905092915050565b6000613f3482614021565b9150613f3f83614021565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7857613f77614187565b5b828202905092915050565b6000613f8e82614021565b9150613f9983614021565b925082821015613fac57613fab614187565b5b828203905092915050565b6000613fc282614001565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561406857808201518184015260208101905061404d565b83811115614077576000848401525b50505050565b6000600282049050600182168061409557607f821691505b602082108114156140a9576140a86141e5565b5b50919050565b6140b882614243565b810181811067ffffffffffffffff821117156140d7576140d6614214565b5b80604052505050565b60006140eb82614021565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561411e5761411d614187565b5b600182019050919050565b60006141348261402b565b915063ffffffff82141561414b5761414a614187565b5b600182019050919050565b600061416182614021565b915061416c83614021565b92508261417c5761417b6141b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61478281613fb7565b811461478d57600080fd5b50565b61479981613fc9565b81146147a457600080fd5b50565b6147b081613fd5565b81146147bb57600080fd5b50565b6147c781614021565b81146147d257600080fd5b5056fea2646970667358221220f3758599a41ef5e90c8380886a33000be698638bb6701fdf700c2bbf7c18e3dc64736f6c63430008040033
Deployed Bytecode Sourcemap
36607:5302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24423:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25368:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26927:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26450:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36865:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40877:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40983:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37608:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37121:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27817:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40290:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41386:520;;;;;;;;;;;;;:::i;:::-;;28227:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38919:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40210:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40588:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37086:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36787:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37056:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36754:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25062:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24792:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6058:94;;;;;;;;;;;;;:::i;:::-;;40771:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5407:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36970:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25537:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38226:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37703:517;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27220:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36825:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40415:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28483:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37012:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39560:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40090:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27586:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38702:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6307:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36937:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24423:305;24525:4;24577:25;24562:40;;;:11;:40;;;;:105;;;;24634:33;24619:48;;;:11;:48;;;;24562:105;:158;;;;24684:36;24708:11;24684:23;:36::i;:::-;24562:158;24542:178;;24423:305;;;:::o;25368:100::-;25422:13;25455:5;25448:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25368:100;:::o;26927:221::-;27003:7;27031:16;27039:7;27031;:16::i;:::-;27023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27116:15;:24;27132:7;27116:24;;;;;;;;;;;;;;;;;;;;;27109:31;;26927:221;;;:::o;26450:411::-;26531:13;26547:23;26562:7;26547:14;:23::i;:::-;26531:39;;26595:5;26589:11;;:2;:11;;;;26581:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26689:5;26673:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26698:37;26715:5;26722:12;:10;:12::i;:::-;26698:16;:37::i;:::-;26673:62;26651:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26832:21;26841:2;26845:7;26832:8;:21::i;:::-;26450:411;;;:::o;36865:32::-;;;;:::o;40877:100::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40961:10:::1;40949:9;:22;;;;;;;;;;;;:::i;:::-;;40877:100:::0;:::o;40983:77::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:6:::1;41039;;:15;;;;;;;;;;;;;;;;;;40983:77:::0;:::o;37608:89::-;37652:7;37675:16;:6;:14;:16::i;:::-;37668:23;;37608:89;:::o;37121:55::-;;;;;;;;;;;;;;;;;:::o;27817:339::-;28012:41;28031:12;:10;:12::i;:::-;28045:7;28012:18;:41::i;:::-;28004:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28120:28;28130:4;28136:2;28140:7;28120:9;:28::i;:::-;27817:339;;;:::o;40290:119::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40384:19:::1;40363:18;:40;;;;40290:119:::0;:::o;41386:520::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41436:27:::1;:98;;;;;;;;41481:42;41436:98;;;;;;::::0;::::1;;41547:23;:65;;;;;;;;41595:5;41547:65;;;;;;::::0;::::1;;41625:15;41643:21;41625:39;;41682:8;41677:222;41700:16;41696:1;:20;;;41677:222;;;41738:14;41779:1;41760:16:::0;:20:::1;;;;:::i;:::-;41755:1;:25;;;:79;;41829:5;41817:6;41824:1;41817:9;;;;;;;;;;;;;;;;;;;;;41807:19;;:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;41755:79;;;41783:21;41755:79;41738:96;;41857:9;41867:1;41857:12;;;;;;;;;;;;;;;;;;;;;41849:30;;:38;41880:6;41849:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41677:222;41718:3;;;;;:::i;:::-;;;;41677:222;;;;5698:1;;;41386:520::o:0;28227:185::-;28365:39;28382:4;28388:2;28392:7;28365:39;;;;;;;;;;;;:16;:39::i;:::-;28227:185;;;:::o;38919:635::-;38994:16;39022:23;39048:17;39058:6;39048:9;:17::i;:::-;39022:43;;39072:30;39119:15;39105:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39072:63;;39142:22;39167:1;39142:26;;39175:23;39211:309;39236:15;39218;:33;:64;;;;;39273:9;;39255:14;:27;;39218:64;39211:309;;;39293:25;39321:23;39329:14;39321:7;:23::i;:::-;39293:51;;39380:6;39359:27;;:17;:27;;;39355:131;;;39432:14;39399:13;39413:15;39399:30;;;;;;;;;;;;;;;;;;;;;:47;;;;;39459:17;;;;;:::i;:::-;;;;39355:131;39496:16;;;;;:::i;:::-;;;;39211:309;;;;39535:13;39528:20;;;;;;38919:635;;;:::o;40210:74::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40273:5:::1;40266:4;:12;;;;40210:74:::0;:::o;40588:132::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40696:18:::1;40676:17;:38;;;;;;;;;;;;:::i;:::-;;40588:132:::0;:::o;37086:28::-;;;;;;;;;;;;;:::o;36787:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37056:25::-;;;;;;;;;;;;;:::o;36754:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25062:239::-;25134:7;25154:13;25170:7;:16;25178:7;25170:16;;;;;;;;;;;;;;;;;;;;;25154:32;;25222:1;25205:19;;:5;:19;;;;25197:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:5;25281:12;;;25062:239;;;:::o;24792:208::-;24864:7;24909:1;24892:19;;:5;:19;;;;24884:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24976:9;:16;24986:5;24976:16;;;;;;;;;;;;;;;;24969:23;;24792:208;;;:::o;6058:94::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6123:21:::1;6141:1;6123:9;:21::i;:::-;6058:94::o:0;40771:100::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40855:10:::1;40843:9;:22;;;;;;;;;;;;:::i;:::-;;40771:100:::0;:::o;5407:87::-;5453:7;5480:6;;;;;;;;;;;5473:13;;5407:87;:::o;36970:37::-;;;;:::o;25537:104::-;25593:13;25626:7;25619:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25537:104;:::o;38226:468::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38336:9:::1;;38321:11;38302:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;38294:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38402:8;;38387:11;:23;;38379:32;;;::::0;::::1;;38420:24;38447:20;:32;38468:10;38447:32;;;;;;;;;;;;;;;;38420:59;;38530:8;;38515:11;38496:16;:30;;;;:::i;:::-;:42;;38488:51;;;::::0;::::1;;38553:9;38565:1;38553:13;;38548:98;38573:11;38568:1;:16;38548:98;;38602:20;:32;38623:10;38602:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;38586:3;;;;;:::i;:::-;;;;38548:98;;;;38654:34;38664:10;38676:11;38654:9;:34::i;:::-;5698:1;38226:468:::0;:::o;37703:517::-;37768:11;37442:1;37428:11;:15;:52;;;;;37462:18;;37447:11;:33;;37428:52;37420:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37554:9;;37539:11;37520:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;37512:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37797:6:::1;;;;;;;;;;;37796:7;37788:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;37866:11;37859:4;;:18;;;;:::i;:::-;37846:9;:31;;37838:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37908:24;37935:20;:32;37956:10;37935:32;;;;;;;;;;;;;;;;37908:59;;38016:18;;38001:11;37982:16;:30;;;;:::i;:::-;:52;;37974:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;38079:9;38091:1;38079:13;;38074:98;38099:11;38094:1;:16;38074:98;;38128:20;:32;38149:10;38128:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;38112:3;;;;;:::i;:::-;;;;38074:98;;;;38180:34;38190:10;38202:11;38180:9;:34::i;:::-;37595:1;37703:517:::0;;:::o;27220:295::-;27335:12;:10;:12::i;:::-;27323:24;;:8;:24;;;;27315:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27435:8;27390:18;:32;27409:12;:10;:12::i;:::-;27390:32;;;;;;;;;;;;;;;:42;27423:8;27390:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27488:8;27459:48;;27474:12;:10;:12::i;:::-;27459:48;;;27498:8;27459:48;;;;;;:::i;:::-;;;;;;;;27220:295;;:::o;36825:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40415:130::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40520:19:::1;40499:18;:40;;;;40415:130:::0;:::o;28483:328::-;28658:41;28677:12;:10;:12::i;:::-;28691:7;28658:18;:41::i;:::-;28650:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:39;28778:4;28784:2;28788:7;28797:5;28764:13;:39::i;:::-;28483:328;;;;:::o;37012:37::-;;;;:::o;39560:494::-;39659:13;39700:17;39708:8;39700:7;:17::i;:::-;39684:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39807:5;39795:17;;:8;;;;;;;;;;;:17;;;39791:64;;;39830:17;39823:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39791:64;39863:28;39894:10;:8;:10::i;:::-;39863:41;;39949:1;39924:14;39918:28;:32;:130;;;;;;;;;;;;;;;;;39986:14;40002:19;:8;:17;:19::i;:::-;40023:9;39969:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39918:130;39911:137;;;39560:494;;;;:::o;36902:30::-;;;;:::o;40090:81::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40159:6:::1;40148:8;;:17;;;;;;;;;;;;;;;;;;40090:81:::0;:::o;27586:164::-;27683:4;27707:18;:25;27726:5;27707:25;;;;;;;;;;;;;;;:35;27733:8;27707:35;;;;;;;;;;;;;;;;;;;;;;;;;27700:42;;27586:164;;;;:::o;38702:155::-;38788:11;37442:1;37428:11;:15;:52;;;;;37462:18;;37447:11;:33;;37428:52;37420:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37554:9;;37539:11;37520:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;37512:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5638:12:::1;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38818:33:::2;38828:9;38839:11;38818:9;:33::i;:::-;38702:155:::0;;;:::o;6307:192::-;5638:12;:10;:12::i;:::-;5627:23;;:7;:5;:7::i;:::-;:23;;;5619:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6416:1:::1;6396:22;;:8;:22;;;;6388:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6472:19;6482:8;6472:9;:19::i;:::-;6307:192:::0;:::o;36937:28::-;;;;:::o;17393:157::-;17478:4;17517:25;17502:40;;;:11;:40;;;;17495:47;;17393:157;;;:::o;30321:127::-;30386:4;30438:1;30410:30;;:7;:16;30418:7;30410:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30403:37;;30321:127;;;:::o;4195:98::-;4248:7;4275:10;4268:17;;4195:98;:::o;34303:174::-;34405:2;34378:15;:24;34394:7;34378:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34461:7;34457:2;34423:46;;34432:23;34447:7;34432:14;:23::i;:::-;34423:46;;;;;;;;;;;;34303:174;;:::o;909:114::-;974:7;1001;:14;;;994:21;;909:114;;;:::o;30615:348::-;30708:4;30733:16;30741:7;30733;:16::i;:::-;30725:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30809:13;30825:23;30840:7;30825:14;:23::i;:::-;30809:39;;30878:5;30867:16;;:7;:16;;;:51;;;;30911:7;30887:31;;:20;30899:7;30887:11;:20::i;:::-;:31;;;30867:51;:87;;;;30922:32;30939:5;30946:7;30922:16;:32::i;:::-;30867:87;30859:96;;;30615:348;;;;:::o;33607:578::-;33766:4;33739:31;;:23;33754:7;33739:14;:23::i;:::-;:31;;;33731:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:1;33835:16;;:2;:16;;;;33827:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33905:39;33926:4;33932:2;33936:7;33905:20;:39::i;:::-;34009:29;34026:1;34030:7;34009:8;:29::i;:::-;34070:1;34051:9;:15;34061:4;34051:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34099:1;34082:9;:13;34092:2;34082:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34130:2;34111:7;:16;34119:7;34111:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34169:7;34165:2;34150:27;;34159:4;34150:27;;;;;;;;;;;;33607:578;;;:::o;6507:173::-;6563:16;6582:6;;;;;;;;;;;6563:25;;6608:8;6599:6;;:17;;;;;;;;;;;;;;;;;;6663:8;6632:40;;6653:8;6632:40;;;;;;;;;;;;6507:173;;:::o;41068:204::-;41148:9;41143:124;41167:11;41163:1;:15;41143:124;;;41194:18;:6;:16;:18::i;:::-;41221:38;41231:9;41242:16;:6;:14;:16::i;:::-;41221:9;:38::i;:::-;41180:3;;;;;:::i;:::-;;;;41143:124;;;;41068:204;;:::o;29693:315::-;29850:28;29860:4;29866:2;29870:7;29850:9;:28::i;:::-;29897:48;29920:4;29926:2;29930:7;29939:5;29897:22;:48::i;:::-;29889:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29693:315;;;;:::o;41278:104::-;41338:13;41367:9;41360:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41278:104;:::o;1811:723::-;1867:13;2097:1;2088:5;:10;2084:53;;;2115:10;;;;;;;;;;;;;;;;;;;;;2084:53;2147:12;2162:5;2147:20;;2178:14;2203:78;2218:1;2210:4;:9;2203:78;;2236:8;;;;;:::i;:::-;;;;2267:2;2259:10;;;;;:::i;:::-;;;2203:78;;;2291:19;2323:6;2313:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:39;;2341:154;2357:1;2348:5;:10;2341:154;;2385:1;2375:11;;;;;:::i;:::-;;;2452:2;2444:5;:10;;;;:::i;:::-;2431:2;:24;;;;:::i;:::-;2418:39;;2401:6;2408;2401:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2481:2;2472:11;;;;;:::i;:::-;;;2341:154;;;2519:6;2505:21;;;;;1811:723;;;;:::o;36413:126::-;;;;:::o;1031:127::-;1138:1;1120:7;:14;;;:19;;;;;;;;;;;1031:127;:::o;31305:110::-;31381:26;31391:2;31395:7;31381:26;;;;;;;;;;;;:9;:26::i;:::-;31305:110;;:::o;35042:799::-;35197:4;35218:15;:2;:13;;;:15::i;:::-;35214:620;;;35270:2;35254:36;;;35291:12;:10;:12::i;:::-;35305:4;35311:7;35320:5;35254:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35250:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35513:1;35496:6;:13;:18;35492:272;;;35539:60;;;;;;;;;;:::i;:::-;;;;;;;;35492:272;35714:6;35708:13;35699:6;35695:2;35691:15;35684:38;35250:529;35387:41;;;35377:51;;;:6;:51;;;;35370:58;;;;;35214:620;35818:4;35811:11;;35042:799;;;;;;;:::o;31642:321::-;31772:18;31778:2;31782:7;31772:5;:18::i;:::-;31823:54;31854:1;31858:2;31862:7;31871:5;31823:22;:54::i;:::-;31801:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31642:321;;;:::o;7453:387::-;7513:4;7721:12;7788:7;7776:20;7768:28;;7831:1;7824:4;:8;7817:15;;;7453:387;;;:::o;32299:382::-;32393:1;32379:16;;:2;:16;;;;32371:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32452:16;32460:7;32452;:16::i;:::-;32451:17;32443:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32514:45;32543:1;32547:2;32551:7;32514:20;:45::i;:::-;32589:1;32572:9;:13;32582:2;32572:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32620:2;32601:7;:16;32609:7;32601:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32665:7;32661:2;32640:33;;32657:1;32640:33;;;;;;;;;;;;32299:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:407::-;6416:6;6424;6473:2;6461:9;6452:7;6448:23;6444:32;6441:2;;;6489:1;6486;6479:12;6441:2;6532:1;6557:53;6602:7;6593:6;6582:9;6578:22;6557:53;:::i;:::-;6547:63;;6503:117;6659:2;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6630:118;6431:324;;;;;:::o;6761:179::-;6830:10;6851:46;6893:3;6885:6;6851:46;:::i;:::-;6929:4;6924:3;6920:14;6906:28;;6841:99;;;;:::o;6946:118::-;7033:24;7051:5;7033:24;:::i;:::-;7028:3;7021:37;7011:53;;:::o;7100:732::-;7219:3;7248:54;7296:5;7248:54;:::i;:::-;7318:86;7397:6;7392:3;7318:86;:::i;:::-;7311:93;;7428:56;7478:5;7428:56;:::i;:::-;7507:7;7538:1;7523:284;7548:6;7545:1;7542:13;7523:284;;;7624:6;7618:13;7651:63;7710:3;7695:13;7651:63;:::i;:::-;7644:70;;7737:60;7790:6;7737:60;:::i;:::-;7727:70;;7583:224;7570:1;7567;7563:9;7558:14;;7523:284;;;7527:14;7823:3;7816:10;;7224:608;;;;;;;:::o;7838:109::-;7919:21;7934:5;7919:21;:::i;:::-;7914:3;7907:34;7897:50;;:::o;7953:360::-;8039:3;8067:38;8099:5;8067:38;:::i;:::-;8121:70;8184:6;8179:3;8121:70;:::i;:::-;8114:77;;8200:52;8245:6;8240:3;8233:4;8226:5;8222:16;8200:52;:::i;:::-;8277:29;8299:6;8277:29;:::i;:::-;8272:3;8268:39;8261:46;;8043:270;;;;;:::o;8319:364::-;8407:3;8435:39;8468:5;8435:39;:::i;:::-;8490:71;8554:6;8549:3;8490:71;:::i;:::-;8483:78;;8570:52;8615:6;8610:3;8603:4;8596:5;8592:16;8570:52;:::i;:::-;8647:29;8669:6;8647:29;:::i;:::-;8642:3;8638:39;8631:46;;8411:272;;;;;:::o;8689:377::-;8795:3;8823:39;8856:5;8823:39;:::i;:::-;8878:89;8960:6;8955:3;8878:89;:::i;:::-;8871:96;;8976:52;9021:6;9016:3;9009:4;9002:5;8998:16;8976:52;:::i;:::-;9053:6;9048:3;9044:16;9037:23;;8799:267;;;;;:::o;9096:845::-;9199:3;9236:5;9230:12;9265:36;9291:9;9265:36;:::i;:::-;9317:89;9399:6;9394:3;9317:89;:::i;:::-;9310:96;;9437:1;9426:9;9422:17;9453:1;9448:137;;;;9599:1;9594:341;;;;9415:520;;9448:137;9532:4;9528:9;9517;9513:25;9508:3;9501:38;9568:6;9563:3;9559:16;9552:23;;9448:137;;9594:341;9661:38;9693:5;9661:38;:::i;:::-;9721:1;9735:154;9749:6;9746:1;9743:13;9735:154;;;9823:7;9817:14;9813:1;9808:3;9804:11;9797:35;9873:1;9864:7;9860:15;9849:26;;9771:4;9768:1;9764:12;9759:17;;9735:154;;;9918:6;9913:3;9909:16;9902:23;;9601:334;;9415:520;;9203:738;;;;;;:::o;9947:366::-;10089:3;10110:67;10174:2;10169:3;10110:67;:::i;:::-;10103:74;;10186:93;10275:3;10186:93;:::i;:::-;10304:2;10299:3;10295:12;10288:19;;10093:220;;;:::o;10319:366::-;10461:3;10482:67;10546:2;10541:3;10482:67;:::i;:::-;10475:74;;10558:93;10647:3;10558:93;:::i;:::-;10676:2;10671:3;10667:12;10660:19;;10465:220;;;:::o;10691:366::-;10833:3;10854:67;10918:2;10913:3;10854:67;:::i;:::-;10847:74;;10930:93;11019:3;10930:93;:::i;:::-;11048:2;11043:3;11039:12;11032:19;;10837:220;;;:::o;11063:366::-;11205:3;11226:67;11290:2;11285:3;11226:67;:::i;:::-;11219:74;;11302:93;11391:3;11302:93;:::i;:::-;11420:2;11415:3;11411:12;11404:19;;11209:220;;;:::o;11435:366::-;11577:3;11598:67;11662:2;11657:3;11598:67;:::i;:::-;11591:74;;11674:93;11763:3;11674:93;:::i;:::-;11792:2;11787:3;11783:12;11776:19;;11581:220;;;:::o;11807:366::-;11949:3;11970:67;12034:2;12029:3;11970:67;:::i;:::-;11963:74;;12046:93;12135:3;12046:93;:::i;:::-;12164:2;12159:3;12155:12;12148:19;;11953:220;;;:::o;12179:366::-;12321:3;12342:67;12406:2;12401:3;12342:67;:::i;:::-;12335:74;;12418:93;12507:3;12418:93;:::i;:::-;12536:2;12531:3;12527:12;12520:19;;12325:220;;;:::o;12551:366::-;12693:3;12714:67;12778:2;12773:3;12714:67;:::i;:::-;12707:74;;12790:93;12879:3;12790:93;:::i;:::-;12908:2;12903:3;12899:12;12892:19;;12697:220;;;:::o;12923:366::-;13065:3;13086:67;13150:2;13145:3;13086:67;:::i;:::-;13079:74;;13162:93;13251:3;13162:93;:::i;:::-;13280:2;13275:3;13271:12;13264:19;;13069:220;;;:::o;13295:366::-;13437:3;13458:67;13522:2;13517:3;13458:67;:::i;:::-;13451:74;;13534:93;13623:3;13534:93;:::i;:::-;13652:2;13647:3;13643:12;13636:19;;13441:220;;;:::o;13667:366::-;13809:3;13830:67;13894:2;13889:3;13830:67;:::i;:::-;13823:74;;13906:93;13995:3;13906:93;:::i;:::-;14024:2;14019:3;14015:12;14008:19;;13813:220;;;:::o;14039:366::-;14181:3;14202:67;14266:2;14261:3;14202:67;:::i;:::-;14195:74;;14278:93;14367:3;14278:93;:::i;:::-;14396:2;14391:3;14387:12;14380:19;;14185:220;;;:::o;14411:366::-;14553:3;14574:67;14638:2;14633:3;14574:67;:::i;:::-;14567:74;;14650:93;14739:3;14650:93;:::i;:::-;14768:2;14763:3;14759:12;14752:19;;14557:220;;;:::o;14783:366::-;14925:3;14946:67;15010:2;15005:3;14946:67;:::i;:::-;14939:74;;15022:93;15111:3;15022:93;:::i;:::-;15140:2;15135:3;15131:12;15124:19;;14929:220;;;:::o;15155:366::-;15297:3;15318:67;15382:2;15377:3;15318:67;:::i;:::-;15311:74;;15394:93;15483:3;15394:93;:::i;:::-;15512:2;15507:3;15503:12;15496:19;;15301:220;;;:::o;15527:366::-;15669:3;15690:67;15754:2;15749:3;15690:67;:::i;:::-;15683:74;;15766:93;15855:3;15766:93;:::i;:::-;15884:2;15879:3;15875:12;15868:19;;15673:220;;;:::o;15899:366::-;16041:3;16062:67;16126:2;16121:3;16062:67;:::i;:::-;16055:74;;16138:93;16227:3;16138:93;:::i;:::-;16256:2;16251:3;16247:12;16240:19;;16045:220;;;:::o;16271:366::-;16413:3;16434:67;16498:2;16493:3;16434:67;:::i;:::-;16427:74;;16510:93;16599:3;16510:93;:::i;:::-;16628:2;16623:3;16619:12;16612:19;;16417:220;;;:::o;16643:366::-;16785:3;16806:67;16870:2;16865:3;16806:67;:::i;:::-;16799:74;;16882:93;16971:3;16882:93;:::i;:::-;17000:2;16995:3;16991:12;16984:19;;16789:220;;;:::o;17015:366::-;17157:3;17178:67;17242:2;17237:3;17178:67;:::i;:::-;17171:74;;17254:93;17343:3;17254:93;:::i;:::-;17372:2;17367:3;17363:12;17356:19;;17161:220;;;:::o;17387:366::-;17529:3;17550:67;17614:2;17609:3;17550:67;:::i;:::-;17543:74;;17626:93;17715:3;17626:93;:::i;:::-;17744:2;17739:3;17735:12;17728:19;;17533:220;;;:::o;17759:108::-;17836:24;17854:5;17836:24;:::i;:::-;17831:3;17824:37;17814:53;;:::o;17873:118::-;17960:24;17978:5;17960:24;:::i;:::-;17955:3;17948:37;17938:53;;:::o;17997:589::-;18222:3;18244:95;18335:3;18326:6;18244:95;:::i;:::-;18237:102;;18356:95;18447:3;18438:6;18356:95;:::i;:::-;18349:102;;18468:92;18556:3;18547:6;18468:92;:::i;:::-;18461:99;;18577:3;18570:10;;18226:360;;;;;;:::o;18592:222::-;18685:4;18723:2;18712:9;18708:18;18700:26;;18736:71;18804:1;18793:9;18789:17;18780:6;18736:71;:::i;:::-;18690:124;;;;:::o;18820:640::-;19015:4;19053:3;19042:9;19038:19;19030:27;;19067:71;19135:1;19124:9;19120:17;19111:6;19067:71;:::i;:::-;19148:72;19216:2;19205:9;19201:18;19192:6;19148:72;:::i;:::-;19230;19298:2;19287:9;19283:18;19274:6;19230:72;:::i;:::-;19349:9;19343:4;19339:20;19334:2;19323:9;19319:18;19312:48;19377:76;19448:4;19439:6;19377:76;:::i;:::-;19369:84;;19020:440;;;;;;;:::o;19466:373::-;19609:4;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:108;19827:4;19818:6;19724:108;:::i;:::-;19716:116;;19614:225;;;;:::o;19845:210::-;19932:4;19970:2;19959:9;19955:18;19947:26;;19983:65;20045:1;20034:9;20030:17;20021:6;19983:65;:::i;:::-;19937:118;;;;:::o;20061:313::-;20174:4;20212:2;20201:9;20197:18;20189:26;;20261:9;20255:4;20251:20;20247:1;20236:9;20232:17;20225:47;20289:78;20362:4;20353:6;20289:78;:::i;:::-;20281:86;;20179:195;;;;:::o;20380:419::-;20546:4;20584:2;20573:9;20569:18;20561:26;;20633:9;20627:4;20623:20;20619:1;20608:9;20604:17;20597:47;20661:131;20787:4;20661:131;:::i;:::-;20653:139;;20551:248;;;:::o;20805:419::-;20971:4;21009:2;20998:9;20994:18;20986:26;;21058:9;21052:4;21048:20;21044:1;21033:9;21029:17;21022:47;21086:131;21212:4;21086:131;:::i;:::-;21078:139;;20976:248;;;:::o;21230:419::-;21396:4;21434:2;21423:9;21419:18;21411:26;;21483:9;21477:4;21473:20;21469:1;21458:9;21454:17;21447:47;21511:131;21637:4;21511:131;:::i;:::-;21503:139;;21401:248;;;:::o;21655:419::-;21821:4;21859:2;21848:9;21844:18;21836:26;;21908:9;21902:4;21898:20;21894:1;21883:9;21879:17;21872:47;21936:131;22062:4;21936:131;:::i;:::-;21928:139;;21826:248;;;:::o;22080:419::-;22246:4;22284:2;22273:9;22269:18;22261:26;;22333:9;22327:4;22323:20;22319:1;22308:9;22304:17;22297:47;22361:131;22487:4;22361:131;:::i;:::-;22353:139;;22251:248;;;:::o;22505:419::-;22671:4;22709:2;22698:9;22694:18;22686:26;;22758:9;22752:4;22748:20;22744:1;22733:9;22729:17;22722:47;22786:131;22912:4;22786:131;:::i;:::-;22778:139;;22676:248;;;:::o;22930:419::-;23096:4;23134:2;23123:9;23119:18;23111:26;;23183:9;23177:4;23173:20;23169:1;23158:9;23154:17;23147:47;23211:131;23337:4;23211:131;:::i;:::-;23203:139;;23101:248;;;:::o;23355:419::-;23521:4;23559:2;23548:9;23544:18;23536:26;;23608:9;23602:4;23598:20;23594:1;23583:9;23579:17;23572:47;23636:131;23762:4;23636:131;:::i;:::-;23628:139;;23526:248;;;:::o;23780:419::-;23946:4;23984:2;23973:9;23969:18;23961:26;;24033:9;24027:4;24023:20;24019:1;24008:9;24004:17;23997:47;24061:131;24187:4;24061:131;:::i;:::-;24053:139;;23951:248;;;:::o;24205:419::-;24371:4;24409:2;24398:9;24394:18;24386:26;;24458:9;24452:4;24448:20;24444:1;24433:9;24429:17;24422:47;24486:131;24612:4;24486:131;:::i;:::-;24478:139;;24376:248;;;:::o;24630:419::-;24796:4;24834:2;24823:9;24819:18;24811:26;;24883:9;24877:4;24873:20;24869:1;24858:9;24854:17;24847:47;24911:131;25037:4;24911:131;:::i;:::-;24903:139;;24801:248;;;:::o;25055:419::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25308:9;25302:4;25298:20;25294:1;25283:9;25279:17;25272:47;25336:131;25462:4;25336:131;:::i;:::-;25328:139;;25226:248;;;:::o;25480:419::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25651:248;;;:::o;25905:419::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:131;26312:4;26186:131;:::i;:::-;26178:139;;26076:248;;;:::o;26330:419::-;26496:4;26534:2;26523:9;26519:18;26511:26;;26583:9;26577:4;26573:20;26569:1;26558:9;26554:17;26547:47;26611:131;26737:4;26611:131;:::i;:::-;26603:139;;26501:248;;;:::o;26755:419::-;26921:4;26959:2;26948:9;26944:18;26936:26;;27008:9;27002:4;26998:20;26994:1;26983:9;26979:17;26972:47;27036:131;27162:4;27036:131;:::i;:::-;27028:139;;26926:248;;;:::o;27180:419::-;27346:4;27384:2;27373:9;27369:18;27361:26;;27433:9;27427:4;27423:20;27419:1;27408:9;27404:17;27397:47;27461:131;27587:4;27461:131;:::i;:::-;27453:139;;27351:248;;;:::o;27605:419::-;27771:4;27809:2;27798:9;27794:18;27786:26;;27858:9;27852:4;27848:20;27844:1;27833:9;27829:17;27822:47;27886:131;28012:4;27886:131;:::i;:::-;27878:139;;27776:248;;;:::o;28030:419::-;28196:4;28234:2;28223:9;28219:18;28211:26;;28283:9;28277:4;28273:20;28269:1;28258:9;28254:17;28247:47;28311:131;28437:4;28311:131;:::i;:::-;28303:139;;28201:248;;;:::o;28455:419::-;28621:4;28659:2;28648:9;28644:18;28636:26;;28708:9;28702:4;28698:20;28694:1;28683:9;28679:17;28672:47;28736:131;28862:4;28736:131;:::i;:::-;28728:139;;28626:248;;;:::o;28880:419::-;29046:4;29084:2;29073:9;29069:18;29061:26;;29133:9;29127:4;29123:20;29119:1;29108:9;29104:17;29097:47;29161:131;29287:4;29161:131;:::i;:::-;29153:139;;29051:248;;;:::o;29305:222::-;29398:4;29436:2;29425:9;29421:18;29413:26;;29449:71;29517:1;29506:9;29502:17;29493:6;29449:71;:::i;:::-;29403:124;;;;:::o;29533:129::-;29567:6;29594:20;;:::i;:::-;29584:30;;29623:33;29651:4;29643:6;29623:33;:::i;:::-;29574:88;;;:::o;29668:75::-;29701:6;29734:2;29728:9;29718:19;;29708:35;:::o;29749:307::-;29810:4;29900:18;29892:6;29889:30;29886:2;;;29922:18;;:::i;:::-;29886:2;29960:29;29982:6;29960:29;:::i;:::-;29952:37;;30044:4;30038;30034:15;30026:23;;29815:241;;;:::o;30062:308::-;30124:4;30214:18;30206:6;30203:30;30200:2;;;30236:18;;:::i;:::-;30200:2;30274:29;30296:6;30274:29;:::i;:::-;30266:37;;30358:4;30352;30348:15;30340:23;;30129:241;;;:::o;30376:132::-;30443:4;30466:3;30458:11;;30496:4;30491:3;30487:14;30479:22;;30448:60;;;:::o;30514:141::-;30563:4;30586:3;30578:11;;30609:3;30606:1;30599:14;30643:4;30640:1;30630:18;30622:26;;30568:87;;;:::o;30661:114::-;30728:6;30762:5;30756:12;30746:22;;30735:40;;;:::o;30781:98::-;30832:6;30866:5;30860:12;30850:22;;30839:40;;;:::o;30885:99::-;30937:6;30971:5;30965:12;30955:22;;30944:40;;;:::o;30990:113::-;31060:4;31092;31087:3;31083:14;31075:22;;31065:38;;;:::o;31109:184::-;31208:11;31242:6;31237:3;31230:19;31282:4;31277:3;31273:14;31258:29;;31220:73;;;;:::o;31299:168::-;31382:11;31416:6;31411:3;31404:19;31456:4;31451:3;31447:14;31432:29;;31394:73;;;;:::o;31473:169::-;31557:11;31591:6;31586:3;31579:19;31631:4;31626:3;31622:14;31607:29;;31569:73;;;;:::o;31648:148::-;31750:11;31787:3;31772:18;;31762:34;;;;:::o;31802:305::-;31842:3;31861:20;31879:1;31861:20;:::i;:::-;31856:25;;31895:20;31913:1;31895:20;:::i;:::-;31890:25;;32049:1;31981:66;31977:74;31974:1;31971:81;31968:2;;;32055:18;;:::i;:::-;31968:2;32099:1;32096;32092:9;32085:16;;31846:261;;;;:::o;32113:185::-;32153:1;32170:20;32188:1;32170:20;:::i;:::-;32165:25;;32204:20;32222:1;32204:20;:::i;:::-;32199:25;;32243:1;32233:2;;32248:18;;:::i;:::-;32233:2;32290:1;32287;32283:9;32278:14;;32155:143;;;;:::o;32304:348::-;32344:7;32367:20;32385:1;32367:20;:::i;:::-;32362:25;;32401:20;32419:1;32401:20;:::i;:::-;32396:25;;32589:1;32521:66;32517:74;32514:1;32511:81;32506:1;32499:9;32492:17;32488:105;32485:2;;;32596:18;;:::i;:::-;32485:2;32644:1;32641;32637:9;32626:20;;32352:300;;;;:::o;32658:191::-;32698:4;32718:20;32736:1;32718:20;:::i;:::-;32713:25;;32752:20;32770:1;32752:20;:::i;:::-;32747:25;;32791:1;32788;32785:8;32782:2;;;32796:18;;:::i;:::-;32782:2;32841:1;32838;32834:9;32826:17;;32703:146;;;;:::o;32855:96::-;32892:7;32921:24;32939:5;32921:24;:::i;:::-;32910:35;;32900:51;;;:::o;32957:90::-;32991:7;33034:5;33027:13;33020:21;33009:32;;32999:48;;;:::o;33053:149::-;33089:7;33129:66;33122:5;33118:78;33107:89;;33097:105;;;:::o;33208:126::-;33245:7;33285:42;33278:5;33274:54;33263:65;;33253:81;;;:::o;33340:77::-;33377:7;33406:5;33395:16;;33385:32;;;:::o;33423:93::-;33459:7;33499:10;33492:5;33488:22;33477:33;;33467:49;;;:::o;33522:154::-;33606:6;33601:3;33596;33583:30;33668:1;33659:6;33654:3;33650:16;33643:27;33573:103;;;:::o;33682:307::-;33750:1;33760:113;33774:6;33771:1;33768:13;33760:113;;;33859:1;33854:3;33850:11;33844:18;33840:1;33835:3;33831:11;33824:39;33796:2;33793:1;33789:10;33784:15;;33760:113;;;33891:6;33888:1;33885:13;33882:2;;;33971:1;33962:6;33957:3;33953:16;33946:27;33882:2;33731:258;;;;:::o;33995:320::-;34039:6;34076:1;34070:4;34066:12;34056:22;;34123:1;34117:4;34113:12;34144:18;34134:2;;34200:4;34192:6;34188:17;34178:27;;34134:2;34262;34254:6;34251:14;34231:18;34228:38;34225:2;;;34281:18;;:::i;:::-;34225:2;34046:269;;;;:::o;34321:281::-;34404:27;34426:4;34404:27;:::i;:::-;34396:6;34392:40;34534:6;34522:10;34519:22;34498:18;34486:10;34483:34;34480:62;34477:2;;;34545:18;;:::i;:::-;34477:2;34585:10;34581:2;34574:22;34364:238;;;:::o;34608:233::-;34647:3;34670:24;34688:5;34670:24;:::i;:::-;34661:33;;34716:66;34709:5;34706:77;34703:2;;;34786:18;;:::i;:::-;34703:2;34833:1;34826:5;34822:13;34815:20;;34651:190;;;:::o;34847:175::-;34885:3;34908:23;34925:5;34908:23;:::i;:::-;34899:32;;34953:10;34946:5;34943:21;34940:2;;;34967:18;;:::i;:::-;34940:2;35014:1;35007:5;35003:13;34996:20;;34889:133;;;:::o;35028:176::-;35060:1;35077:20;35095:1;35077:20;:::i;:::-;35072:25;;35111:20;35129:1;35111:20;:::i;:::-;35106:25;;35150:1;35140:2;;35155:18;;:::i;:::-;35140:2;35196:1;35193;35189:9;35184:14;;35062:142;;;;:::o;35210:180::-;35258:77;35255:1;35248:88;35355:4;35352:1;35345:15;35379:4;35376:1;35369:15;35396:180;35444:77;35441:1;35434:88;35541:4;35538:1;35531:15;35565:4;35562:1;35555:15;35582:180;35630:77;35627:1;35620:88;35727:4;35724:1;35717:15;35751:4;35748:1;35741:15;35768:180;35816:77;35813:1;35806:88;35913:4;35910:1;35903:15;35937:4;35934:1;35927:15;35954:102;35995:6;36046:2;36042:7;36037:2;36030:5;36026:14;36022:28;36012:38;;36002:54;;;:::o;36062:237::-;36202:34;36198:1;36190:6;36186:14;36179:58;36271:20;36266:2;36258:6;36254:15;36247:45;36168:131;:::o;36305:225::-;36445:34;36441:1;36433:6;36429:14;36422:58;36514:8;36509:2;36501:6;36497:15;36490:33;36411:119;:::o;36536:178::-;36676:30;36672:1;36664:6;36660:14;36653:54;36642:72;:::o;36720:170::-;36860:22;36856:1;36848:6;36844:14;36837:46;36826:64;:::o;36896:178::-;37036:30;37032:1;37024:6;37020:14;37013:54;37002:72;:::o;37080:223::-;37220:34;37216:1;37208:6;37204:14;37197:58;37289:6;37284:2;37276:6;37272:15;37265:31;37186:117;:::o;37309:175::-;37449:27;37445:1;37437:6;37433:14;37426:51;37415:69;:::o;37490:231::-;37630:34;37626:1;37618:6;37614:14;37607:58;37699:14;37694:2;37686:6;37682:15;37675:39;37596:125;:::o;37727:243::-;37867:34;37863:1;37855:6;37851:14;37844:58;37936:26;37931:2;37923:6;37919:15;37912:51;37833:137;:::o;37976:229::-;38116:34;38112:1;38104:6;38100:14;38093:58;38185:12;38180:2;38172:6;38168:15;38161:37;38082:123;:::o;38211:228::-;38351:34;38347:1;38339:6;38335:14;38328:58;38420:11;38415:2;38407:6;38403:15;38396:36;38317:122;:::o;38445:182::-;38585:34;38581:1;38573:6;38569:14;38562:58;38551:76;:::o;38633:231::-;38773:34;38769:1;38761:6;38757:14;38750:58;38842:14;38837:2;38829:6;38825:15;38818:39;38739:125;:::o;38870:182::-;39010:34;39006:1;38998:6;38994:14;38987:58;38976:76;:::o;39058:173::-;39198:25;39194:1;39186:6;39182:14;39175:49;39164:67;:::o;39237:228::-;39377:34;39373:1;39365:6;39361:14;39354:58;39446:11;39441:2;39433:6;39429:15;39422:36;39343:122;:::o;39471:234::-;39611:34;39607:1;39599:6;39595:14;39588:58;39680:17;39675:2;39667:6;39663:15;39656:42;39577:128;:::o;39711:220::-;39851:34;39847:1;39839:6;39835:14;39828:58;39920:3;39915:2;39907:6;39903:15;39896:28;39817:114;:::o;39937:170::-;40077:22;40073:1;40065:6;40061:14;40054:46;40043:64;:::o;40113:236::-;40253:34;40249:1;40241:6;40237:14;40230:58;40322:19;40317:2;40309:6;40305:15;40298:44;40219:130;:::o;40355:169::-;40495:21;40491:1;40483:6;40479:14;40472:45;40461:63;:::o;40530:122::-;40603:24;40621:5;40603:24;:::i;:::-;40596:5;40593:35;40583:2;;40642:1;40639;40632:12;40583:2;40573:79;:::o;40658:116::-;40728:21;40743:5;40728:21;:::i;:::-;40721:5;40718:32;40708:2;;40764:1;40761;40754:12;40708:2;40698:76;:::o;40780:120::-;40852:23;40869:5;40852:23;:::i;:::-;40845:5;40842:34;40832:2;;40890:1;40887;40880:12;40832:2;40822:78;:::o;40906:122::-;40979:24;40997:5;40979:24;:::i;:::-;40972:5;40969:35;40959:2;;41018:1;41015;41008:12;40959:2;40949:79;:::o
Swarm Source
ipfs://f3758599a41ef5e90c8380886a33000be698638bb6701fdf700c2bbf7c18e3dc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.