Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 148 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 20032792 | 205 days ago | IN | 0 ETH | 0.00086503 | ||||
Transfer From | 19100000 | 336 days ago | IN | 0 ETH | 0.00078176 | ||||
Set Approval For... | 18722715 | 389 days ago | IN | 0 ETH | 0.00298787 | ||||
Set Approval For... | 17018045 | 628 days ago | IN | 0 ETH | 0.00099399 | ||||
Set Approval For... | 16665312 | 678 days ago | IN | 0 ETH | 0.00093359 | ||||
Set Approval For... | 16646432 | 681 days ago | IN | 0 ETH | 0.00064524 | ||||
Set Approval For... | 16646431 | 681 days ago | IN | 0 ETH | 0.00061511 | ||||
Set Approval For... | 16201168 | 743 days ago | IN | 0 ETH | 0.00073262 | ||||
Set Approval For... | 15978024 | 774 days ago | IN | 0 ETH | 0.00079598 | ||||
Set Approval For... | 15827451 | 795 days ago | IN | 0 ETH | 0.00144906 | ||||
Set Approval For... | 15670715 | 817 days ago | IN | 0 ETH | 0.00089804 | ||||
Set Approval For... | 15434547 | 852 days ago | IN | 0 ETH | 0.00097368 | ||||
Set Approval For... | 15348240 | 866 days ago | IN | 0 ETH | 0.00123989 | ||||
Transfer From | 15269159 | 878 days ago | IN | 0 ETH | 0.00033245 | ||||
Transfer From | 15269155 | 878 days ago | IN | 0 ETH | 0.00047485 | ||||
Set Approval For... | 15261228 | 880 days ago | IN | 0 ETH | 0.00050524 | ||||
Set Approval For... | 15242642 | 883 days ago | IN | 0 ETH | 0.00041326 | ||||
Set Approval For... | 15231042 | 884 days ago | IN | 0 ETH | 0.001487 | ||||
Set Approval For... | 15229686 | 885 days ago | IN | 0 ETH | 0.00076991 | ||||
Transfer From | 15148480 | 897 days ago | IN | 0 ETH | 0.00203222 | ||||
Set Approval For... | 15101957 | 904 days ago | IN | 0 ETH | 0.00128768 | ||||
Set Approval For... | 15061014 | 911 days ago | IN | 0 ETH | 0.00043818 | ||||
Set Approval For... | 14926604 | 934 days ago | IN | 0 ETH | 0.00355766 | ||||
Set Approval For... | 14839885 | 949 days ago | IN | 0 ETH | 0.00144605 | ||||
Set Approval For... | 14810963 | 953 days ago | IN | 0 ETH | 0.00092316 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14322816 | 1030 days ago | 17.7 ETH |
Loading...
Loading
Contract Name:
HonoraryBears
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-24 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/nft_on_chain_whitelist.sol pragma solidity ^0.8.9; // @title: BallerBears.sol contract HonoraryBears is ERC721, Ownable { using Strings for uint256; uint256 public constant MAX_TOKENS = 250; uint256 private constant TOKENS_RESERVED = 100; uint256 public price = 300000000000000000; uint256 public constant MAX_MINT_PER_TX = 2; bool public isSaleActive; bool public isAllowListActive = false; uint256 public totalSupply; mapping(address => uint256) private mintedPerWallet; mapping(address => bool) private _allowList; string public baseUri; string public baseExtension = ".json"; constructor() ERC721("Honorary Bears", "HONOR") { baseUri = "ipfs://QmcZikhPN3mATtZphDbLMDzq9Zen5e4ivrUUQnLsyzUzYy/"; for (uint256 i = 1; i <= TOKENS_RESERVED; ++i) { _safeMint(msg.sender, i); } totalSupply = TOKENS_RESERVED; } // PUBLIC FUNCTIONS function whitelistMint(uint256 _numTokens) external payable { require(isAllowListActive, "Whitelist is not active."); require(_allowList[msg.sender] == true, "Not whitelisted."); require(_numTokens <= MAX_MINT_PER_TX, "You can only mint a maximum of 2 per transaction."); require(mintedPerWallet[msg.sender] + _numTokens <= 2, "You can only mint 2 per wallet."); uint256 curTotalSupply = totalSupply; require(curTotalSupply + _numTokens <= MAX_TOKENS, "Exceeds `MAX_TOKENS`."); require(_numTokens * price <= msg.value, "Incorrect ETH value."); for (uint256 i = 1; i <= _numTokens; ++i) { _safeMint(msg.sender, curTotalSupply + i); } mintedPerWallet[msg.sender] += _numTokens; totalSupply += _numTokens; } function publicMint(uint256 _numTokens) external payable { require(isSaleActive, "Sale is not active."); require(_numTokens <= MAX_MINT_PER_TX, "You can only mint a maximum of 2 per transaction."); require(mintedPerWallet[msg.sender] + _numTokens <= 2, "You can only mint 2 per wallet."); uint256 curTotalSupply = totalSupply; require(curTotalSupply + _numTokens <= MAX_TOKENS, "Exceeds `MAX_TOKENS`."); require(_numTokens * price <= msg.value, "Incorrect ETH value."); for (uint256 i = 1; i <= _numTokens; ++i) { _safeMint(msg.sender, curTotalSupply + i); } mintedPerWallet[msg.sender] += _numTokens; totalSupply += _numTokens; } // OWNER ONLY FUNCTIONS function flipSaleState() external onlyOwner { isSaleActive = !isSaleActive; } function setIsAllowListActive() external onlyOwner { isAllowListActive = !isAllowListActive; } function setAllowList(address[] calldata addresses, bool isAllowed) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { _allowList[addresses[i]] = isAllowed; } } function setBaseURI(string memory _baseUri) external onlyOwner { baseUri = _baseUri; } function setPrice(uint256 _price) external onlyOwner { price = _price; } function withdrawAll() external payable onlyOwner { uint256 balance = address(this).balance; uint256 balanceOne = balance * 100 / 100; (bool transferOne, ) = payable(0xA477c13E0f86170F855d06EFDE32858ad9f18941).call{value: balanceOne}(""); require(transferOne, "Transfer failed."); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } // INTERNAL FUNCTIONS function _baseURI() internal view virtual override returns (string memory) { return baseUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAllowed","type":"bool"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setIsAllowListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","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":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052670429d069189e00006007556000600860016101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000789291906200076d565b503480156200008657600080fd5b506040518060400160405280600e81526020017f486f6e6f726172792042656172730000000000000000000000000000000000008152506040518060400160405280600581526020017f484f4e4f5200000000000000000000000000000000000000000000000000000081525081600090805190602001906200010b9291906200076d565b508060019080519060200190620001249291906200076d565b505050620001476200013b620001be60201b60201c565b620001c660201b60201c565b60405180606001604052806036815260200162004f2160369139600c9080519060200190620001789291906200076d565b506000600190505b60648111620001af576200019b33826200028c60201b60201c565b80620001a79062000856565b905062000180565b50606460098190555062000cd5565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ae828260405180602001604052806000815250620002b260201b60201c565b5050565b620002c483836200032060201b60201c565b620002d960008484846200051a60201b60201c565b6200031b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000312906200092b565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038a906200099d565b60405180910390fd5b620003a481620006d460201b60201c565b15620003e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003de9062000a0f565b60405180910390fd5b620003fb600083836200074060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200044d919062000a31565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a462000516600083836200074560201b60201c565b5050565b6000620005488473ffffffffffffffffffffffffffffffffffffffff166200074a60201b62001bcc1760201c565b15620006c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200057a620001be60201b60201c565b8786866040518563ffffffff1660e01b81526004016200059e949392919062000b88565b602060405180830381600087803b158015620005b957600080fd5b505af1925050508015620005ed57506040513d601f19601f82011682018060405250810190620005ea919062000c3e565b60015b62000676573d806000811462000620576040519150601f19603f3d011682016040523d82523d6000602084013e62000625565b606091505b506000815114156200066e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000665906200092b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006cc565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546200077b9062000c9f565b90600052602060002090601f0160209004810192826200079f5760008555620007eb565b82601f10620007ba57805160ff1916838001178555620007eb565b82800160010185558215620007eb579182015b82811115620007ea578251825591602001919060010190620007cd565b5b509050620007fa9190620007fe565b5090565b5b8082111562000819576000816000905550600101620007ff565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600062000863826200084c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200089957620008986200081d565b5b600182019050919050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000913603283620008a4565b91506200092082620008b5565b604082019050919050565b60006020820190508181036000830152620009468162000904565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062000985602083620008a4565b915062000992826200094d565b602082019050919050565b60006020820190508181036000830152620009b88162000976565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620009f7601c83620008a4565b915062000a0482620009bf565b602082019050919050565b6000602082019050818103600083015262000a2a81620009e8565b9050919050565b600062000a3e826200084c565b915062000a4b836200084c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a835762000a826200081d565b5b828201905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000abb8262000a8e565b9050919050565b62000acd8162000aae565b82525050565b62000ade816200084c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000b2057808201518184015260208101905062000b03565b8381111562000b30576000848401525b50505050565b6000601f19601f8301169050919050565b600062000b548262000ae4565b62000b60818562000aef565b935062000b7281856020860162000b00565b62000b7d8162000b36565b840191505092915050565b600060808201905062000b9f600083018762000ac2565b62000bae602083018662000ac2565b62000bbd604083018562000ad3565b818103606083015262000bd1818462000b47565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000c188162000be1565b811462000c2457600080fd5b50565b60008151905062000c388162000c0d565b92915050565b60006020828403121562000c575762000c5662000bdc565b5b600062000c678482850162000c27565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cb857607f821691505b6020821081141562000ccf5762000cce62000c70565b5b50919050565b61423c8062000ce56000396000f3fe6080604052600436106101e35760003560e01c8063853828b611610102578063a22cb46511610095578063e985e9c511610064578063e985e9c51461067f578063ef3b2ce7146106bc578063f2fde38b146106d3578063f47c84c5146106fc576101e3565b8063a22cb465146105c5578063b88d4fde146105ee578063c668286214610617578063c87b56dd14610642576101e3565b806391b7f5ed116100d157806391b7f5ed1461051b57806395d89b41146105445780639abc83201461056f578063a035b1fe1461059a576101e3565b8063853828b61461049f578063868ff4a2146104a95780638da5cb5b146104c55780638ecad721146104f0576101e3565b8063313674111161017a578063564566a811610149578063564566a8146103e35780636352211e1461040e57806370a082311461044b578063715018a614610488576101e3565b8063313674111461035157806334918dfd1461037a57806342842e0e1461039157806355f804b3146103ba576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e157806329fc6bae1461030a5780632db1154414610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612a50565b610727565b60405161021c9190612a98565b60405180910390f35b34801561023157600080fd5b5061023a610809565b6040516102479190612b4c565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612ba4565b61089b565b6040516102849190612c12565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612c59565b610920565b005b3480156102c257600080fd5b506102cb610a38565b6040516102d89190612ca8565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612cc3565b610a3e565b005b34801561031657600080fd5b5061031f610a9e565b60405161032c9190612a98565b60405180910390f35b61034f600480360381019061034a9190612ba4565b610ab1565b005b34801561035d57600080fd5b5061037860048036038101906103739190612da7565b610d20565b005b34801561038657600080fd5b5061038f610e41565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612cc3565b610ee9565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612f37565b610f09565b005b3480156103ef57600080fd5b506103f8610f9f565b6040516104059190612a98565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190612ba4565b610fb2565b6040516104429190612c12565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612f80565b611064565b60405161047f9190612ca8565b60405180910390f35b34801561049457600080fd5b5061049d61111c565b005b6104a76111a4565b005b6104c360048036038101906104be9190612ba4565b611306565b005b3480156104d157600080fd5b506104da611608565b6040516104e79190612c12565b60405180910390f35b3480156104fc57600080fd5b50610505611632565b6040516105129190612ca8565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612ba4565b611637565b005b34801561055057600080fd5b506105596116bd565b6040516105669190612b4c565b60405180910390f35b34801561057b57600080fd5b5061058461174f565b6040516105919190612b4c565b60405180910390f35b3480156105a657600080fd5b506105af6117dd565b6040516105bc9190612ca8565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190612fad565b6117e3565b005b3480156105fa57600080fd5b506106156004803603810190610610919061308e565b6117f9565b005b34801561062357600080fd5b5061062c61185b565b6040516106399190612b4c565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190612ba4565b6118e9565b6040516106769190612b4c565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613111565b611993565b6040516106b39190612a98565b60405180910390f35b3480156106c857600080fd5b506106d1611a27565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190612f80565b611acf565b005b34801561070857600080fd5b50610711611bc7565b60405161071e9190612ca8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610802575061080182611bef565b5b9050919050565b60606000805461081890613180565b80601f016020809104026020016040519081016040528092919081815260200182805461084490613180565b80156108915780601f1061086657610100808354040283529160200191610891565b820191906000526020600020905b81548152906001019060200180831161087457829003601f168201915b5050505050905090565b60006108a682611c59565b6108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613224565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092b82610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610993906132b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109bb611cc5565b73ffffffffffffffffffffffffffffffffffffffff1614806109ea57506109e9816109e4611cc5565b611993565b5b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613348565b60405180910390fd5b610a338383611ccd565b505050565b60095481565b610a4f610a49611cc5565b82611d86565b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906133da565b60405180910390fd5b610a99838383611e64565b505050565b600860019054906101000a900460ff1681565b600860009054906101000a900460ff16610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613446565b60405180910390fd5b6002811115610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b906134d8565b60405180910390fd5b600281600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b919190613527565b1115610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906135c9565b60405180910390fd5b6000600954905060fa8282610be79190613527565b1115610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90613635565b60405180910390fd5b3460075483610c379190613655565b1115610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906136fb565b60405180910390fd5b6000600190505b828111610cac57610c9b338284610c969190613527565b6120cb565b80610ca59061371b565b9050610c7f565b5081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cfc9190613527565b925050819055508160096000828254610d159190613527565b925050819055505050565b610d28611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610d46611608565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d93906137b0565b60405180910390fd5b60005b83839050811015610e3b5781600b6000868685818110610dc257610dc16137d0565b5b9050602002016020810190610dd79190612f80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e339061371b565b915050610d9f565b50505050565b610e49611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610e67611608565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb4906137b0565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b610f04838383604051806020016040528060008152506117f9565b505050565b610f11611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610f2f611608565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c906137b0565b60405180910390fd5b80600c9080519060200190610f9b929190612941565b5050565b600860009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613871565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613903565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611124611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611142611608565b73ffffffffffffffffffffffffffffffffffffffff1614611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906137b0565b60405180910390fd5b6111a260006120e9565b565b6111ac611cc5565b73ffffffffffffffffffffffffffffffffffffffff166111ca611608565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906137b0565b60405180910390fd5b60004790506000606480836112359190613655565b61123f9190613952565b9050600073a477c13e0f86170f855d06efde32858ad9f1894173ffffffffffffffffffffffffffffffffffffffff168260405161127b906139b4565b60006040518083038185875af1925050503d80600081146112b8576040519150601f19603f3d011682016040523d82523d6000602084013e6112bd565b606091505b5050905080611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613a15565b60405180910390fd5b505050565b600860019054906101000a900460ff16611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613a81565b60405180910390fd5b60011515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613aed565b60405180910390fd5b600281111561142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906134d8565b60405180910390fd5b600281600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114799190613527565b11156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906135c9565b60405180910390fd5b6000600954905060fa82826114cf9190613527565b1115611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613635565b60405180910390fd5b346007548361151f9190613655565b1115611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906136fb565b60405180910390fd5b6000600190505b8281116115945761158333828461157e9190613527565b6120cb565b8061158d9061371b565b9050611567565b5081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e49190613527565b9250508190555081600960008282546115fd9190613527565b925050819055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600281565b61163f611cc5565b73ffffffffffffffffffffffffffffffffffffffff1661165d611608565b73ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906137b0565b60405180910390fd5b8060078190555050565b6060600180546116cc90613180565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890613180565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b600c805461175c90613180565b80601f016020809104026020016040519081016040528092919081815260200182805461178890613180565b80156117d55780601f106117aa576101008083540402835291602001916117d5565b820191906000526020600020905b8154815290600101906020018083116117b857829003601f168201915b505050505081565b60075481565b6117f56117ee611cc5565b83836121af565b5050565b61180a611804611cc5565b83611d86565b611849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611840906133da565b60405180910390fd5b6118558484848461231c565b50505050565b600d805461186890613180565b80601f016020809104026020016040519081016040528092919081815260200182805461189490613180565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b505050505081565b60606118f482611c59565b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613b7f565b60405180910390fd5b600061193d612378565b9050600081511161195d576040518060200160405280600081525061198b565b806119678461240a565b600d60405160200161197b93929190613c6f565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a2f611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611a4d611608565b73ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a906137b0565b60405180910390fd5b600860019054906101000a900460ff1615600860016101000a81548160ff021916908315150217905550565b611ad7611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611af5611608565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906137b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290613d12565b60405180910390fd5b611bc4816120e9565b50565b60fa81565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d4083610fb2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d9182611c59565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790613da4565b60405180910390fd5b6000611ddb83610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e4a57508373ffffffffffffffffffffffffffffffffffffffff16611e328461089b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e5b5750611e5a8185611993565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e8482610fb2565b73ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613e36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190613ec8565b60405180910390fd5b611f5583838361256b565b611f60600082611ccd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb09190613ee8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120079190613527565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120c6838383612570565b505050565b6120e5828260405180602001604052806000815250612575565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590613f68565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230f9190612a98565b60405180910390a3505050565b612327848484611e64565b612333848484846125d0565b612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613ffa565b60405180910390fd5b50505050565b6060600c805461238790613180565b80601f01602080910402602001604051908101604052809291908181526020018280546123b390613180565b80156124005780601f106123d557610100808354040283529160200191612400565b820191906000526020600020905b8154815290600101906020018083116123e357829003601f168201915b5050505050905090565b60606000821415612452576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612566565b600082905060005b6000821461248457808061246d9061371b565b915050600a8261247d9190613952565b915061245a565b60008167ffffffffffffffff8111156124a05761249f612e0c565b5b6040519080825280601f01601f1916602001820160405280156124d25781602001600182028036833780820191505090505b5090505b6000851461255f576001826124eb9190613ee8565b9150600a856124fa919061401a565b60306125069190613527565b60f81b81838151811061251c5761251b6137d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125589190613952565b94506124d6565b8093505050505b919050565b505050565b505050565b61257f8383612767565b61258c60008484846125d0565b6125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c290613ffa565b60405180910390fd5b505050565b60006125f18473ffffffffffffffffffffffffffffffffffffffff16611bcc565b1561275a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261261a611cc5565b8786866040518563ffffffff1660e01b815260040161263c94939291906140a0565b602060405180830381600087803b15801561265657600080fd5b505af192505050801561268757506040513d601f19601f820116820180604052508101906126849190614101565b60015b61270a573d80600081146126b7576040519150601f19603f3d011682016040523d82523d6000602084013e6126bc565b606091505b50600081511415612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990613ffa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061275f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce9061417a565b60405180910390fd5b6127e081611c59565b15612820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612817906141e6565b60405180910390fd5b61282c6000838361256b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287c9190613527565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293d60008383612570565b5050565b82805461294d90613180565b90600052602060002090601f01602090048101928261296f57600085556129b6565b82601f1061298857805160ff19168380011785556129b6565b828001600101855582156129b6579182015b828111156129b557825182559160200191906001019061299a565b5b5090506129c391906129c7565b5090565b5b808211156129e05760008160009055506001016129c8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a2d816129f8565b8114612a3857600080fd5b50565b600081359050612a4a81612a24565b92915050565b600060208284031215612a6657612a656129ee565b5b6000612a7484828501612a3b565b91505092915050565b60008115159050919050565b612a9281612a7d565b82525050565b6000602082019050612aad6000830184612a89565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aed578082015181840152602081019050612ad2565b83811115612afc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b1e82612ab3565b612b288185612abe565b9350612b38818560208601612acf565b612b4181612b02565b840191505092915050565b60006020820190508181036000830152612b668184612b13565b905092915050565b6000819050919050565b612b8181612b6e565b8114612b8c57600080fd5b50565b600081359050612b9e81612b78565b92915050565b600060208284031215612bba57612bb96129ee565b5b6000612bc884828501612b8f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bfc82612bd1565b9050919050565b612c0c81612bf1565b82525050565b6000602082019050612c276000830184612c03565b92915050565b612c3681612bf1565b8114612c4157600080fd5b50565b600081359050612c5381612c2d565b92915050565b60008060408385031215612c7057612c6f6129ee565b5b6000612c7e85828601612c44565b9250506020612c8f85828601612b8f565b9150509250929050565b612ca281612b6e565b82525050565b6000602082019050612cbd6000830184612c99565b92915050565b600080600060608486031215612cdc57612cdb6129ee565b5b6000612cea86828701612c44565b9350506020612cfb86828701612c44565b9250506040612d0c86828701612b8f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612d3b57612d3a612d16565b5b8235905067ffffffffffffffff811115612d5857612d57612d1b565b5b602083019150836020820283011115612d7457612d73612d20565b5b9250929050565b612d8481612a7d565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b600080600060408486031215612dc057612dbf6129ee565b5b600084013567ffffffffffffffff811115612dde57612ddd6129f3565b5b612dea86828701612d25565b93509350506020612dfd86828701612d92565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e4482612b02565b810181811067ffffffffffffffff82111715612e6357612e62612e0c565b5b80604052505050565b6000612e766129e4565b9050612e828282612e3b565b919050565b600067ffffffffffffffff821115612ea257612ea1612e0c565b5b612eab82612b02565b9050602081019050919050565b82818337600083830152505050565b6000612eda612ed584612e87565b612e6c565b905082815260208101848484011115612ef657612ef5612e07565b5b612f01848285612eb8565b509392505050565b600082601f830112612f1e57612f1d612d16565b5b8135612f2e848260208601612ec7565b91505092915050565b600060208284031215612f4d57612f4c6129ee565b5b600082013567ffffffffffffffff811115612f6b57612f6a6129f3565b5b612f7784828501612f09565b91505092915050565b600060208284031215612f9657612f956129ee565b5b6000612fa484828501612c44565b91505092915050565b60008060408385031215612fc457612fc36129ee565b5b6000612fd285828601612c44565b9250506020612fe385828601612d92565b9150509250929050565b600067ffffffffffffffff82111561300857613007612e0c565b5b61301182612b02565b9050602081019050919050565b600061303161302c84612fed565b612e6c565b90508281526020810184848401111561304d5761304c612e07565b5b613058848285612eb8565b509392505050565b600082601f83011261307557613074612d16565b5b813561308584826020860161301e565b91505092915050565b600080600080608085870312156130a8576130a76129ee565b5b60006130b687828801612c44565b94505060206130c787828801612c44565b93505060406130d887828801612b8f565b925050606085013567ffffffffffffffff8111156130f9576130f86129f3565b5b61310587828801613060565b91505092959194509250565b60008060408385031215613128576131276129ee565b5b600061313685828601612c44565b925050602061314785828601612c44565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061319857607f821691505b602082108114156131ac576131ab613151565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061320e602c83612abe565b9150613219826131b2565b604082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a0602183612abe565b91506132ab82613244565b604082019050919050565b600060208201905081810360008301526132cf81613293565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613332603883612abe565b915061333d826132d6565b604082019050919050565b6000602082019050818103600083015261336181613325565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006133c4603183612abe565b91506133cf82613368565b604082019050919050565b600060208201905081810360008301526133f3816133b7565b9050919050565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b6000613430601383612abe565b915061343b826133fa565b602082019050919050565b6000602082019050818103600083015261345f81613423565b9050919050565b7f596f752063616e206f6e6c79206d696e742061206d6178696d756d206f66203260008201527f20706572207472616e73616374696f6e2e000000000000000000000000000000602082015250565b60006134c2603183612abe565b91506134cd82613466565b604082019050919050565b600060208201905081810360008301526134f1816134b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061353282612b6e565b915061353d83612b6e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613572576135716134f8565b5b828201905092915050565b7f596f752063616e206f6e6c79206d696e742032207065722077616c6c65742e00600082015250565b60006135b3601f83612abe565b91506135be8261357d565b602082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b7f4578636565647320604d41585f544f4b454e53602e0000000000000000000000600082015250565b600061361f601583612abe565b915061362a826135e9565b602082019050919050565b6000602082019050818103600083015261364e81613612565b9050919050565b600061366082612b6e565b915061366b83612b6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136a4576136a36134f8565b5b828202905092915050565b7f496e636f7272656374204554482076616c75652e000000000000000000000000600082015250565b60006136e5601483612abe565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b600061372682612b6e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613759576137586134f8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061379a602083612abe565b91506137a582613764565b602082019050919050565b600060208201905081810360008301526137c98161378d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061385b602983612abe565b9150613866826137ff565b604082019050919050565b6000602082019050818103600083015261388a8161384e565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006138ed602a83612abe565b91506138f882613891565b604082019050919050565b6000602082019050818103600083015261391c816138e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395d82612b6e565b915061396883612b6e565b92508261397857613977613923565b5b828204905092915050565b600081905092915050565b50565b600061399e600083613983565b91506139a98261398e565b600082019050919050565b60006139bf82613991565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139ff601083612abe565b9150613a0a826139c9565b602082019050919050565b60006020820190508181036000830152613a2e816139f2565b9050919050565b7f57686974656c697374206973206e6f74206163746976652e0000000000000000600082015250565b6000613a6b601883612abe565b9150613a7682613a35565b602082019050919050565b60006020820190508181036000830152613a9a81613a5e565b9050919050565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b6000613ad7601083612abe565b9150613ae282613aa1565b602082019050919050565b60006020820190508181036000830152613b0681613aca565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b69602f83612abe565b9150613b7482613b0d565b604082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b600081905092915050565b6000613bb582612ab3565b613bbf8185613b9f565b9350613bcf818560208601612acf565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613bfd81613180565b613c078186613b9f565b94506001821660008114613c225760018114613c3357613c66565b60ff19831686528186019350613c66565b613c3c85613bdb565b60005b83811015613c5e57815481890152600182019150602081019050613c3f565b838801955050505b50505092915050565b6000613c7b8286613baa565b9150613c878285613baa565b9150613c938284613bf0565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cfc602683612abe565b9150613d0782613ca0565b604082019050919050565b60006020820190508181036000830152613d2b81613cef565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d8e602c83612abe565b9150613d9982613d32565b604082019050919050565b60006020820190508181036000830152613dbd81613d81565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613e20602583612abe565b9150613e2b82613dc4565b604082019050919050565b60006020820190508181036000830152613e4f81613e13565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613eb2602483612abe565b9150613ebd82613e56565b604082019050919050565b60006020820190508181036000830152613ee181613ea5565b9050919050565b6000613ef382612b6e565b9150613efe83612b6e565b925082821015613f1157613f106134f8565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613f52601983612abe565b9150613f5d82613f1c565b602082019050919050565b60006020820190508181036000830152613f8181613f45565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fe4603283612abe565b9150613fef82613f88565b604082019050919050565b6000602082019050818103600083015261401381613fd7565b9050919050565b600061402582612b6e565b915061403083612b6e565b9250826140405761403f613923565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140728261404b565b61407c8185614056565b935061408c818560208601612acf565b61409581612b02565b840191505092915050565b60006080820190506140b56000830187612c03565b6140c26020830186612c03565b6140cf6040830185612c99565b81810360608301526140e18184614067565b905095945050505050565b6000815190506140fb81612a24565b92915050565b600060208284031215614117576141166129ee565b5b6000614125848285016140ec565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614164602083612abe565b915061416f8261412e565b602082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006141d0601c83612abe565b91506141db8261419a565b602082019050919050565b600060208201905081810360008301526141ff816141c3565b905091905056fea264697066735822122024f9fb75db078997a30a296c8be7ce934429051f801723b15f09232b344d7e2564736f6c63430008090033697066733a2f2f516d635a696b68504e336d4154745a706844624c4d447a71395a656e3565346976725555516e4c73797a557a59792f
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063853828b611610102578063a22cb46511610095578063e985e9c511610064578063e985e9c51461067f578063ef3b2ce7146106bc578063f2fde38b146106d3578063f47c84c5146106fc576101e3565b8063a22cb465146105c5578063b88d4fde146105ee578063c668286214610617578063c87b56dd14610642576101e3565b806391b7f5ed116100d157806391b7f5ed1461051b57806395d89b41146105445780639abc83201461056f578063a035b1fe1461059a576101e3565b8063853828b61461049f578063868ff4a2146104a95780638da5cb5b146104c55780638ecad721146104f0576101e3565b8063313674111161017a578063564566a811610149578063564566a8146103e35780636352211e1461040e57806370a082311461044b578063715018a614610488576101e3565b8063313674111461035157806334918dfd1461037a57806342842e0e1461039157806355f804b3146103ba576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e157806329fc6bae1461030a5780632db1154414610335576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612a50565b610727565b60405161021c9190612a98565b60405180910390f35b34801561023157600080fd5b5061023a610809565b6040516102479190612b4c565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612ba4565b61089b565b6040516102849190612c12565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612c59565b610920565b005b3480156102c257600080fd5b506102cb610a38565b6040516102d89190612ca8565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612cc3565b610a3e565b005b34801561031657600080fd5b5061031f610a9e565b60405161032c9190612a98565b60405180910390f35b61034f600480360381019061034a9190612ba4565b610ab1565b005b34801561035d57600080fd5b5061037860048036038101906103739190612da7565b610d20565b005b34801561038657600080fd5b5061038f610e41565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612cc3565b610ee9565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612f37565b610f09565b005b3480156103ef57600080fd5b506103f8610f9f565b6040516104059190612a98565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190612ba4565b610fb2565b6040516104429190612c12565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612f80565b611064565b60405161047f9190612ca8565b60405180910390f35b34801561049457600080fd5b5061049d61111c565b005b6104a76111a4565b005b6104c360048036038101906104be9190612ba4565b611306565b005b3480156104d157600080fd5b506104da611608565b6040516104e79190612c12565b60405180910390f35b3480156104fc57600080fd5b50610505611632565b6040516105129190612ca8565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190612ba4565b611637565b005b34801561055057600080fd5b506105596116bd565b6040516105669190612b4c565b60405180910390f35b34801561057b57600080fd5b5061058461174f565b6040516105919190612b4c565b60405180910390f35b3480156105a657600080fd5b506105af6117dd565b6040516105bc9190612ca8565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190612fad565b6117e3565b005b3480156105fa57600080fd5b506106156004803603810190610610919061308e565b6117f9565b005b34801561062357600080fd5b5061062c61185b565b6040516106399190612b4c565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190612ba4565b6118e9565b6040516106769190612b4c565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613111565b611993565b6040516106b39190612a98565b60405180910390f35b3480156106c857600080fd5b506106d1611a27565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190612f80565b611acf565b005b34801561070857600080fd5b50610711611bc7565b60405161071e9190612ca8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610802575061080182611bef565b5b9050919050565b60606000805461081890613180565b80601f016020809104026020016040519081016040528092919081815260200182805461084490613180565b80156108915780601f1061086657610100808354040283529160200191610891565b820191906000526020600020905b81548152906001019060200180831161087457829003601f168201915b5050505050905090565b60006108a682611c59565b6108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90613224565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092b82610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610993906132b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109bb611cc5565b73ffffffffffffffffffffffffffffffffffffffff1614806109ea57506109e9816109e4611cc5565b611993565b5b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2090613348565b60405180910390fd5b610a338383611ccd565b505050565b60095481565b610a4f610a49611cc5565b82611d86565b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906133da565b60405180910390fd5b610a99838383611e64565b505050565b600860019054906101000a900460ff1681565b600860009054906101000a900460ff16610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790613446565b60405180910390fd5b6002811115610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b906134d8565b60405180910390fd5b600281600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b919190613527565b1115610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906135c9565b60405180910390fd5b6000600954905060fa8282610be79190613527565b1115610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90613635565b60405180910390fd5b3460075483610c379190613655565b1115610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906136fb565b60405180910390fd5b6000600190505b828111610cac57610c9b338284610c969190613527565b6120cb565b80610ca59061371b565b9050610c7f565b5081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cfc9190613527565b925050819055508160096000828254610d159190613527565b925050819055505050565b610d28611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610d46611608565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d93906137b0565b60405180910390fd5b60005b83839050811015610e3b5781600b6000868685818110610dc257610dc16137d0565b5b9050602002016020810190610dd79190612f80565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610e339061371b565b915050610d9f565b50505050565b610e49611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610e67611608565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb4906137b0565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b610f04838383604051806020016040528060008152506117f9565b505050565b610f11611cc5565b73ffffffffffffffffffffffffffffffffffffffff16610f2f611608565b73ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c906137b0565b60405180910390fd5b80600c9080519060200190610f9b929190612941565b5050565b600860009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613871565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613903565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611124611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611142611608565b73ffffffffffffffffffffffffffffffffffffffff1614611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f906137b0565b60405180910390fd5b6111a260006120e9565b565b6111ac611cc5565b73ffffffffffffffffffffffffffffffffffffffff166111ca611608565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906137b0565b60405180910390fd5b60004790506000606480836112359190613655565b61123f9190613952565b9050600073a477c13e0f86170f855d06efde32858ad9f1894173ffffffffffffffffffffffffffffffffffffffff168260405161127b906139b4565b60006040518083038185875af1925050503d80600081146112b8576040519150601f19603f3d011682016040523d82523d6000602084013e6112bd565b606091505b5050905080611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613a15565b60405180910390fd5b505050565b600860019054906101000a900460ff16611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613a81565b60405180910390fd5b60011515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df90613aed565b60405180910390fd5b600281111561142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906134d8565b60405180910390fd5b600281600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114799190613527565b11156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906135c9565b60405180910390fd5b6000600954905060fa82826114cf9190613527565b1115611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613635565b60405180910390fd5b346007548361151f9190613655565b1115611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906136fb565b60405180910390fd5b6000600190505b8281116115945761158333828461157e9190613527565b6120cb565b8061158d9061371b565b9050611567565b5081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e49190613527565b9250508190555081600960008282546115fd9190613527565b925050819055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600281565b61163f611cc5565b73ffffffffffffffffffffffffffffffffffffffff1661165d611608565b73ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa906137b0565b60405180910390fd5b8060078190555050565b6060600180546116cc90613180565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890613180565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b600c805461175c90613180565b80601f016020809104026020016040519081016040528092919081815260200182805461178890613180565b80156117d55780601f106117aa576101008083540402835291602001916117d5565b820191906000526020600020905b8154815290600101906020018083116117b857829003601f168201915b505050505081565b60075481565b6117f56117ee611cc5565b83836121af565b5050565b61180a611804611cc5565b83611d86565b611849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611840906133da565b60405180910390fd5b6118558484848461231c565b50505050565b600d805461186890613180565b80601f016020809104026020016040519081016040528092919081815260200182805461189490613180565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b505050505081565b60606118f482611c59565b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613b7f565b60405180910390fd5b600061193d612378565b9050600081511161195d576040518060200160405280600081525061198b565b806119678461240a565b600d60405160200161197b93929190613c6f565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a2f611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611a4d611608565b73ffffffffffffffffffffffffffffffffffffffff1614611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a906137b0565b60405180910390fd5b600860019054906101000a900460ff1615600860016101000a81548160ff021916908315150217905550565b611ad7611cc5565b73ffffffffffffffffffffffffffffffffffffffff16611af5611608565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906137b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290613d12565b60405180910390fd5b611bc4816120e9565b50565b60fa81565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d4083610fb2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d9182611c59565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790613da4565b60405180910390fd5b6000611ddb83610fb2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e4a57508373ffffffffffffffffffffffffffffffffffffffff16611e328461089b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e5b5750611e5a8185611993565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e8482610fb2565b73ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613e36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190613ec8565b60405180910390fd5b611f5583838361256b565b611f60600082611ccd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb09190613ee8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120079190613527565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120c6838383612570565b505050565b6120e5828260405180602001604052806000815250612575565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590613f68565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161230f9190612a98565b60405180910390a3505050565b612327848484611e64565b612333848484846125d0565b612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613ffa565b60405180910390fd5b50505050565b6060600c805461238790613180565b80601f01602080910402602001604051908101604052809291908181526020018280546123b390613180565b80156124005780601f106123d557610100808354040283529160200191612400565b820191906000526020600020905b8154815290600101906020018083116123e357829003601f168201915b5050505050905090565b60606000821415612452576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612566565b600082905060005b6000821461248457808061246d9061371b565b915050600a8261247d9190613952565b915061245a565b60008167ffffffffffffffff8111156124a05761249f612e0c565b5b6040519080825280601f01601f1916602001820160405280156124d25781602001600182028036833780820191505090505b5090505b6000851461255f576001826124eb9190613ee8565b9150600a856124fa919061401a565b60306125069190613527565b60f81b81838151811061251c5761251b6137d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125589190613952565b94506124d6565b8093505050505b919050565b505050565b505050565b61257f8383612767565b61258c60008484846125d0565b6125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c290613ffa565b60405180910390fd5b505050565b60006125f18473ffffffffffffffffffffffffffffffffffffffff16611bcc565b1561275a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261261a611cc5565b8786866040518563ffffffff1660e01b815260040161263c94939291906140a0565b602060405180830381600087803b15801561265657600080fd5b505af192505050801561268757506040513d601f19601f820116820180604052508101906126849190614101565b60015b61270a573d80600081146126b7576040519150601f19603f3d011682016040523d82523d6000602084013e6126bc565b606091505b50600081511415612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990613ffa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061275f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ce9061417a565b60405180910390fd5b6127e081611c59565b15612820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612817906141e6565b60405180910390fd5b61282c6000838361256b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461287c9190613527565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293d60008383612570565b5050565b82805461294d90613180565b90600052602060002090601f01602090048101928261296f57600085556129b6565b82601f1061298857805160ff19168380011785556129b6565b828001600101855582156129b6579182015b828111156129b557825182559160200191906001019061299a565b5b5090506129c391906129c7565b5090565b5b808211156129e05760008160009055506001016129c8565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a2d816129f8565b8114612a3857600080fd5b50565b600081359050612a4a81612a24565b92915050565b600060208284031215612a6657612a656129ee565b5b6000612a7484828501612a3b565b91505092915050565b60008115159050919050565b612a9281612a7d565b82525050565b6000602082019050612aad6000830184612a89565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aed578082015181840152602081019050612ad2565b83811115612afc576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b1e82612ab3565b612b288185612abe565b9350612b38818560208601612acf565b612b4181612b02565b840191505092915050565b60006020820190508181036000830152612b668184612b13565b905092915050565b6000819050919050565b612b8181612b6e565b8114612b8c57600080fd5b50565b600081359050612b9e81612b78565b92915050565b600060208284031215612bba57612bb96129ee565b5b6000612bc884828501612b8f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bfc82612bd1565b9050919050565b612c0c81612bf1565b82525050565b6000602082019050612c276000830184612c03565b92915050565b612c3681612bf1565b8114612c4157600080fd5b50565b600081359050612c5381612c2d565b92915050565b60008060408385031215612c7057612c6f6129ee565b5b6000612c7e85828601612c44565b9250506020612c8f85828601612b8f565b9150509250929050565b612ca281612b6e565b82525050565b6000602082019050612cbd6000830184612c99565b92915050565b600080600060608486031215612cdc57612cdb6129ee565b5b6000612cea86828701612c44565b9350506020612cfb86828701612c44565b9250506040612d0c86828701612b8f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112612d3b57612d3a612d16565b5b8235905067ffffffffffffffff811115612d5857612d57612d1b565b5b602083019150836020820283011115612d7457612d73612d20565b5b9250929050565b612d8481612a7d565b8114612d8f57600080fd5b50565b600081359050612da181612d7b565b92915050565b600080600060408486031215612dc057612dbf6129ee565b5b600084013567ffffffffffffffff811115612dde57612ddd6129f3565b5b612dea86828701612d25565b93509350506020612dfd86828701612d92565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e4482612b02565b810181811067ffffffffffffffff82111715612e6357612e62612e0c565b5b80604052505050565b6000612e766129e4565b9050612e828282612e3b565b919050565b600067ffffffffffffffff821115612ea257612ea1612e0c565b5b612eab82612b02565b9050602081019050919050565b82818337600083830152505050565b6000612eda612ed584612e87565b612e6c565b905082815260208101848484011115612ef657612ef5612e07565b5b612f01848285612eb8565b509392505050565b600082601f830112612f1e57612f1d612d16565b5b8135612f2e848260208601612ec7565b91505092915050565b600060208284031215612f4d57612f4c6129ee565b5b600082013567ffffffffffffffff811115612f6b57612f6a6129f3565b5b612f7784828501612f09565b91505092915050565b600060208284031215612f9657612f956129ee565b5b6000612fa484828501612c44565b91505092915050565b60008060408385031215612fc457612fc36129ee565b5b6000612fd285828601612c44565b9250506020612fe385828601612d92565b9150509250929050565b600067ffffffffffffffff82111561300857613007612e0c565b5b61301182612b02565b9050602081019050919050565b600061303161302c84612fed565b612e6c565b90508281526020810184848401111561304d5761304c612e07565b5b613058848285612eb8565b509392505050565b600082601f83011261307557613074612d16565b5b813561308584826020860161301e565b91505092915050565b600080600080608085870312156130a8576130a76129ee565b5b60006130b687828801612c44565b94505060206130c787828801612c44565b93505060406130d887828801612b8f565b925050606085013567ffffffffffffffff8111156130f9576130f86129f3565b5b61310587828801613060565b91505092959194509250565b60008060408385031215613128576131276129ee565b5b600061313685828601612c44565b925050602061314785828601612c44565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061319857607f821691505b602082108114156131ac576131ab613151565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061320e602c83612abe565b9150613219826131b2565b604082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a0602183612abe565b91506132ab82613244565b604082019050919050565b600060208201905081810360008301526132cf81613293565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613332603883612abe565b915061333d826132d6565b604082019050919050565b6000602082019050818103600083015261336181613325565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006133c4603183612abe565b91506133cf82613368565b604082019050919050565b600060208201905081810360008301526133f3816133b7565b9050919050565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b6000613430601383612abe565b915061343b826133fa565b602082019050919050565b6000602082019050818103600083015261345f81613423565b9050919050565b7f596f752063616e206f6e6c79206d696e742061206d6178696d756d206f66203260008201527f20706572207472616e73616374696f6e2e000000000000000000000000000000602082015250565b60006134c2603183612abe565b91506134cd82613466565b604082019050919050565b600060208201905081810360008301526134f1816134b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061353282612b6e565b915061353d83612b6e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613572576135716134f8565b5b828201905092915050565b7f596f752063616e206f6e6c79206d696e742032207065722077616c6c65742e00600082015250565b60006135b3601f83612abe565b91506135be8261357d565b602082019050919050565b600060208201905081810360008301526135e2816135a6565b9050919050565b7f4578636565647320604d41585f544f4b454e53602e0000000000000000000000600082015250565b600061361f601583612abe565b915061362a826135e9565b602082019050919050565b6000602082019050818103600083015261364e81613612565b9050919050565b600061366082612b6e565b915061366b83612b6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136a4576136a36134f8565b5b828202905092915050565b7f496e636f7272656374204554482076616c75652e000000000000000000000000600082015250565b60006136e5601483612abe565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b600061372682612b6e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613759576137586134f8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061379a602083612abe565b91506137a582613764565b602082019050919050565b600060208201905081810360008301526137c98161378d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061385b602983612abe565b9150613866826137ff565b604082019050919050565b6000602082019050818103600083015261388a8161384e565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006138ed602a83612abe565b91506138f882613891565b604082019050919050565b6000602082019050818103600083015261391c816138e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395d82612b6e565b915061396883612b6e565b92508261397857613977613923565b5b828204905092915050565b600081905092915050565b50565b600061399e600083613983565b91506139a98261398e565b600082019050919050565b60006139bf82613991565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139ff601083612abe565b9150613a0a826139c9565b602082019050919050565b60006020820190508181036000830152613a2e816139f2565b9050919050565b7f57686974656c697374206973206e6f74206163746976652e0000000000000000600082015250565b6000613a6b601883612abe565b9150613a7682613a35565b602082019050919050565b60006020820190508181036000830152613a9a81613a5e565b9050919050565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b6000613ad7601083612abe565b9150613ae282613aa1565b602082019050919050565b60006020820190508181036000830152613b0681613aca565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b69602f83612abe565b9150613b7482613b0d565b604082019050919050565b60006020820190508181036000830152613b9881613b5c565b9050919050565b600081905092915050565b6000613bb582612ab3565b613bbf8185613b9f565b9350613bcf818560208601612acf565b80840191505092915050565b60008190508160005260206000209050919050565b60008154613bfd81613180565b613c078186613b9f565b94506001821660008114613c225760018114613c3357613c66565b60ff19831686528186019350613c66565b613c3c85613bdb565b60005b83811015613c5e57815481890152600182019150602081019050613c3f565b838801955050505b50505092915050565b6000613c7b8286613baa565b9150613c878285613baa565b9150613c938284613bf0565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cfc602683612abe565b9150613d0782613ca0565b604082019050919050565b60006020820190508181036000830152613d2b81613cef565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d8e602c83612abe565b9150613d9982613d32565b604082019050919050565b60006020820190508181036000830152613dbd81613d81565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613e20602583612abe565b9150613e2b82613dc4565b604082019050919050565b60006020820190508181036000830152613e4f81613e13565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613eb2602483612abe565b9150613ebd82613e56565b604082019050919050565b60006020820190508181036000830152613ee181613ea5565b9050919050565b6000613ef382612b6e565b9150613efe83612b6e565b925082821015613f1157613f106134f8565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613f52601983612abe565b9150613f5d82613f1c565b602082019050919050565b60006020820190508181036000830152613f8181613f45565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fe4603283612abe565b9150613fef82613f88565b604082019050919050565b6000602082019050818103600083015261401381613fd7565b9050919050565b600061402582612b6e565b915061403083612b6e565b9250826140405761403f613923565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140728261404b565b61407c8185614056565b935061408c818560208601612acf565b61409581612b02565b840191505092915050565b60006080820190506140b56000830187612c03565b6140c26020830186612c03565b6140cf6040830185612c99565b81810360608301526140e18184614067565b905095945050505050565b6000815190506140fb81612a24565b92915050565b600060208284031215614117576141166129ee565b5b6000614125848285016140ec565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614164602083612abe565b915061416f8261412e565b602082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006141d0601c83612abe565b91506141db8261419a565b602082019050919050565b600060208201905081810360008301526141ff816141c3565b905091905056fea264697066735822122024f9fb75db078997a30a296c8be7ce934429051f801723b15f09232b344d7e2564736f6c63430008090033
Deployed Bytecode Sourcemap
37340:4028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21579:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22524:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23606:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37700:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24833:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37656:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39066:741;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40060:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39845:91;;;;;;;;;;;;;:::i;:::-;;25243:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40284:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37625:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22218:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21948:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36406:103;;;;;;;;;;;;;:::i;:::-;;40488:323;;;:::i;:::-;;38234:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35755:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37572:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40393:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22693:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37844:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37524:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24376:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25499:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37872:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40823:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24602:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39944:108;;;;;;;;;;;;;:::i;:::-;;36664:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37424:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21579:305;21681:4;21733:25;21718:40;;;:11;:40;;;;:105;;;;21790:33;21775:48;;;:11;:48;;;;21718:105;:158;;;;21840:36;21864:11;21840:23;:36::i;:::-;21718:158;21698:178;;21579:305;;;:::o;22524:100::-;22578:13;22611:5;22604:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22524:100;:::o;24083:221::-;24159:7;24187:16;24195:7;24187;:16::i;:::-;24179:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24272:15;:24;24288:7;24272:24;;;;;;;;;;;;;;;;;;;;;24265:31;;24083:221;;;:::o;23606:411::-;23687:13;23703:23;23718:7;23703:14;:23::i;:::-;23687:39;;23751:5;23745:11;;:2;:11;;;;23737:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23845:5;23829:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23854:37;23871:5;23878:12;:10;:12::i;:::-;23854:16;:37::i;:::-;23829:62;23807:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23988:21;23997:2;24001:7;23988:8;:21::i;:::-;23676:341;23606:411;;:::o;37700:26::-;;;;:::o;24833:339::-;25028:41;25047:12;:10;:12::i;:::-;25061:7;25028:18;:41::i;:::-;25020:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25136:28;25146:4;25152:2;25156:7;25136:9;:28::i;:::-;24833:339;;;:::o;37656:37::-;;;;;;;;;;;;;:::o;39066:741::-;39142:12;;;;;;;;;;;39134:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;37614:1;39197:10;:29;;39189:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39343:1;39329:10;39299:15;:27;39315:10;39299:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:45;;39291:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39391:22;39416:11;;39391:36;;37461:3;39463:10;39446:14;:27;;;;:::i;:::-;:41;;39438:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39554:9;39545:5;;39532:10;:18;;;;:::i;:::-;:31;;39524:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39607:9;39619:1;39607:13;;39602:110;39627:10;39622:1;:15;39602:110;;39659:41;39669:10;39698:1;39681:14;:18;;;;:::i;:::-;39659:9;:41::i;:::-;39639:3;;;;:::i;:::-;;;39602:110;;;;39753:10;39722:15;:27;39738:10;39722:27;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;39789:10;39774:11;;:25;;;;;;;:::i;:::-;;;;;;;;39123:684;39066:741;:::o;40060:215::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40163:9:::1;40158:110;40182:9;;:16;;40178:1;:20;40158:110;;;40247:9;40220:10;:24;40231:9;;40241:1;40231:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40220:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40200:3;;;;;:::i;:::-;;;;40158:110;;;;40060:215:::0;;;:::o;39845:91::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39916:12:::1;;;;;;;;;;;39915:13;39900:12;;:28;;;;;;;;;;;;;;;;;;39845:91::o:0;25243:185::-;25381:39;25398:4;25404:2;25408:7;25381:39;;;;;;;;;;;;:16;:39::i;:::-;25243:185;;;:::o;40284:100::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40368:8:::1;40358:7;:18;;;;;;;;;;;;:::i;:::-;;40284:100:::0;:::o;37625:24::-;;;;;;;;;;;;;:::o;22218:239::-;22290:7;22310:13;22326:7;:16;22334:7;22326:16;;;;;;;;;;;;;;;;;;;;;22310:32;;22378:1;22361:19;;:5;:19;;;;22353:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:5;22437:12;;;22218:239;;;:::o;21948:208::-;22020:7;22065:1;22048:19;;:5;:19;;;;22040:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:9;:16;22142:5;22132:16;;;;;;;;;;;;;;;;22125:23;;21948:208;;;:::o;36406:103::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36471:30:::1;36498:1;36471:18;:30::i;:::-;36406:103::o:0;40488:323::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40549:15:::1;40567:21;40549:39;;40599:18;40636:3;40630::::0;40620:7:::1;:13;;;;:::i;:::-;:19;;;;:::i;:::-;40599:40;;40651:16;40681:42;40673:56;;40737:10;40673:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40650:102;;;40771:11;40763:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40538:273;;;40488:323::o:0;38234:824::-;38313:17;;;;;;;;;;;38305:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38404:4;38378:30;;:10;:22;38389:10;38378:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;38370:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37614:1;38448:10;:29;;38440:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38594:1;38580:10;38550:15;:27;38566:10;38550:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:45;;38542:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:22;38667:11;;38642:36;;37461:3;38714:10;38697:14;:27;;;;:::i;:::-;:41;;38689:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38805:9;38796:5;;38783:10;:18;;;;:::i;:::-;:31;;38775:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38858:9;38870:1;38858:13;;38853:110;38878:10;38873:1;:15;38853:110;;38910:41;38920:10;38949:1;38932:14;:18;;;;:::i;:::-;38910:9;:41::i;:::-;38890:3;;;;:::i;:::-;;;38853:110;;;;39004:10;38973:15;:27;38989:10;38973:27;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;39040:10;39025:11;;:25;;;;;;;:::i;:::-;;;;;;;;38294:764;38234:824;:::o;35755:87::-;35801:7;35828:6;;;;;;;;;;;35821:13;;35755:87;:::o;37572:43::-;37614:1;37572:43;:::o;40393:86::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40465:6:::1;40457:5;:14;;;;40393:86:::0;:::o;22693:104::-;22749:13;22782:7;22775:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22693:104;:::o;37844:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37524:41::-;;;;:::o;24376:155::-;24471:52;24490:12;:10;:12::i;:::-;24504:8;24514;24471:18;:52::i;:::-;24376:155;;:::o;25499:328::-;25674:41;25693:12;:10;:12::i;:::-;25707:7;25674:18;:41::i;:::-;25666:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25780:39;25794:4;25800:2;25804:7;25813:5;25780:13;:39::i;:::-;25499:328;;;;:::o;37872:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40823:392::-;40896:13;40930:16;40938:7;40930;:16::i;:::-;40922:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41009:28;41040:10;:8;:10::i;:::-;41009:41;;41099:1;41074:14;41068:28;:32;:141;;;;;;;;;;;;;;;;;41140:14;41156:18;:7;:16;:18::i;:::-;41176:13;41123:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41068:141;41061:148;;;40823:392;;;:::o;24602:164::-;24699:4;24723:18;:25;24742:5;24723:25;;;;;;;;;;;;;;;:35;24749:8;24723:35;;;;;;;;;;;;;;;;;;;;;;;;;24716:42;;24602:164;;;;:::o;39944:108::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40027:17:::1;;;;;;;;;;;40026:18;40006:17;;:38;;;;;;;;;;;;;;;;;;39944:108::o:0;36664:201::-;35986:12;:10;:12::i;:::-;35975:23;;:7;:5;:7::i;:::-;:23;;;35967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36773:1:::1;36753:22;;:8;:22;;;;36745:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36829:28;36848:8;36829:18;:28::i;:::-;36664:201:::0;:::o;37424:40::-;37461:3;37424:40;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;13440:157::-;13525:4;13564:25;13549:40;;;:11;:40;;;;13542:47;;13440:157;;;:::o;27337:127::-;27402:4;27454:1;27426:30;;:7;:16;27434:7;27426:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27419:37;;27337:127;;;:::o;19958:98::-;20011:7;20038:10;20031:17;;19958:98;:::o;31483:174::-;31585:2;31558:15;:24;31574:7;31558:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31641:7;31637:2;31603:46;;31612:23;31627:7;31612:14;:23::i;:::-;31603:46;;;;;;;;;;;;31483:174;;:::o;27631:348::-;27724:4;27749:16;27757:7;27749;:16::i;:::-;27741:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27825:13;27841:23;27856:7;27841:14;:23::i;:::-;27825:39;;27894:5;27883:16;;:7;:16;;;:51;;;;27927:7;27903:31;;:20;27915:7;27903:11;:20::i;:::-;:31;;;27883:51;:87;;;;27938:32;27955:5;27962:7;27938:16;:32::i;:::-;27883:87;27875:96;;;27631:348;;;;:::o;30740:625::-;30899:4;30872:31;;:23;30887:7;30872:14;:23::i;:::-;:31;;;30864:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30978:1;30964:16;;:2;:16;;;;30956:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31034:39;31055:4;31061:2;31065:7;31034:20;:39::i;:::-;31138:29;31155:1;31159:7;31138:8;:29::i;:::-;31199:1;31180:9;:15;31190:4;31180:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31228:1;31211:9;:13;31221:2;31211:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31259:2;31240:7;:16;31248:7;31240:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31298:7;31294:2;31279:27;;31288:4;31279:27;;;;;;;;;;;;31319:38;31339:4;31345:2;31349:7;31319:19;:38::i;:::-;30740:625;;;:::o;28321:110::-;28397:26;28407:2;28411:7;28397:26;;;;;;;;;;;;:9;:26::i;:::-;28321:110;;:::o;37025:191::-;37099:16;37118:6;;;;;;;;;;;37099:25;;37144:8;37135:6;;:17;;;;;;;;;;;;;;;;;;37199:8;37168:40;;37189:8;37168:40;;;;;;;;;;;;37088:128;37025:191;:::o;31799:315::-;31954:8;31945:17;;:5;:17;;;;31937:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32041:8;32003:18;:25;32022:5;32003:25;;;;;;;;;;;;;;;:35;32029:8;32003:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32087:8;32065:41;;32080:5;32065:41;;;32097:8;32065:41;;;;;;:::i;:::-;;;;;;;;31799:315;;;:::o;26709:::-;26866:28;26876:4;26882:2;26886:7;26866:9;:28::i;:::-;26913:48;26936:4;26942:2;26946:7;26955:5;26913:22;:48::i;:::-;26905:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26709:315;;;;:::o;41254:108::-;41314:13;41347:7;41340:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;34050:126::-;;;;:::o;34561:125::-;;;;:::o;28658:321::-;28788:18;28794:2;28798:7;28788:5;:18::i;:::-;28839:54;28870:1;28874:2;28878:7;28887:5;28839:22;:54::i;:::-;28817:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28658:321;;;:::o;32679:799::-;32834:4;32855:15;:2;:13;;;:15::i;:::-;32851:620;;;32907:2;32891:36;;;32928:12;:10;:12::i;:::-;32942:4;32948:7;32957:5;32891:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32887:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33150:1;33133:6;:13;:18;33129:272;;;33176:60;;;;;;;;;;:::i;:::-;;;;;;;;33129:272;33351:6;33345:13;33336:6;33332:2;33328:15;33321:38;32887:529;33024:41;;;33014:51;;;:6;:51;;;;33007:58;;;;;32851:620;33455:4;33448:11;;32679:799;;;;;;;:::o;29315:439::-;29409:1;29395:16;;:2;:16;;;;29387:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29468:16;29476:7;29468;:16::i;:::-;29467:17;29459:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29530:45;29559:1;29563:2;29567:7;29530:20;:45::i;:::-;29605:1;29588:9;:13;29598:2;29588:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29636:2;29617:7;:16;29625:7;29617:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29681:7;29677:2;29656:33;;29673:1;29656:33;;;;;;;;;;;;29702:44;29730:1;29734:2;29738:7;29702:19;:44::i;:::-;29315:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6301:568;6374:8;6384:6;6434:3;6427:4;6419:6;6415:17;6411:27;6401:122;;6442:79;;:::i;:::-;6401:122;6555:6;6542:20;6532:30;;6585:18;6577:6;6574:30;6571:117;;;6607:79;;:::i;:::-;6571:117;6721:4;6713:6;6709:17;6697:29;;6775:3;6767:4;6759:6;6755:17;6745:8;6741:32;6738:41;6735:128;;;6782:79;;:::i;:::-;6735:128;6301:568;;;;;:::o;6875:116::-;6945:21;6960:5;6945:21;:::i;:::-;6938:5;6935:32;6925:60;;6981:1;6978;6971:12;6925:60;6875:116;:::o;6997:133::-;7040:5;7078:6;7065:20;7056:29;;7094:30;7118:5;7094:30;:::i;:::-;6997:133;;;;:::o;7136:698::-;7228:6;7236;7244;7293:2;7281:9;7272:7;7268:23;7264:32;7261:119;;;7299:79;;:::i;:::-;7261:119;7447:1;7436:9;7432:17;7419:31;7477:18;7469:6;7466:30;7463:117;;;7499:79;;:::i;:::-;7463:117;7612:80;7684:7;7675:6;7664:9;7660:22;7612:80;:::i;:::-;7594:98;;;;7390:312;7741:2;7767:50;7809:7;7800:6;7789:9;7785:22;7767:50;:::i;:::-;7757:60;;7712:115;7136:698;;;;;:::o;7840:117::-;7949:1;7946;7939:12;7963:180;8011:77;8008:1;8001:88;8108:4;8105:1;8098:15;8132:4;8129:1;8122:15;8149:281;8232:27;8254:4;8232:27;:::i;:::-;8224:6;8220:40;8362:6;8350:10;8347:22;8326:18;8314:10;8311:34;8308:62;8305:88;;;8373:18;;:::i;:::-;8305:88;8413:10;8409:2;8402:22;8192:238;8149:281;;:::o;8436:129::-;8470:6;8497:20;;:::i;:::-;8487:30;;8526:33;8554:4;8546:6;8526:33;:::i;:::-;8436:129;;;:::o;8571:308::-;8633:4;8723:18;8715:6;8712:30;8709:56;;;8745:18;;:::i;:::-;8709:56;8783:29;8805:6;8783:29;:::i;:::-;8775:37;;8867:4;8861;8857:15;8849:23;;8571:308;;;:::o;8885:154::-;8969:6;8964:3;8959;8946:30;9031:1;9022:6;9017:3;9013:16;9006:27;8885:154;;;:::o;9045:412::-;9123:5;9148:66;9164:49;9206:6;9164:49;:::i;:::-;9148:66;:::i;:::-;9139:75;;9237:6;9230:5;9223:21;9275:4;9268:5;9264:16;9313:3;9304:6;9299:3;9295:16;9292:25;9289:112;;;9320:79;;:::i;:::-;9289:112;9410:41;9444:6;9439:3;9434;9410:41;:::i;:::-;9129:328;9045:412;;;;;:::o;9477:340::-;9533:5;9582:3;9575:4;9567:6;9563:17;9559:27;9549:122;;9590:79;;:::i;:::-;9549:122;9707:6;9694:20;9732:79;9807:3;9799:6;9792:4;9784:6;9780:17;9732:79;:::i;:::-;9723:88;;9539:278;9477:340;;;;:::o;9823:509::-;9892:6;9941:2;9929:9;9920:7;9916:23;9912:32;9909:119;;;9947:79;;:::i;:::-;9909:119;10095:1;10084:9;10080:17;10067:31;10125:18;10117:6;10114:30;10111:117;;;10147:79;;:::i;:::-;10111:117;10252:63;10307:7;10298:6;10287:9;10283:22;10252:63;:::i;:::-;10242:73;;10038:287;9823:509;;;;:::o;10338:329::-;10397:6;10446:2;10434:9;10425:7;10421:23;10417:32;10414:119;;;10452:79;;:::i;:::-;10414:119;10572:1;10597:53;10642:7;10633:6;10622:9;10618:22;10597:53;:::i;:::-;10587:63;;10543:117;10338:329;;;;:::o;10673:468::-;10738:6;10746;10795:2;10783:9;10774:7;10770:23;10766:32;10763:119;;;10801:79;;:::i;:::-;10763:119;10921:1;10946:53;10991:7;10982:6;10971:9;10967:22;10946:53;:::i;:::-;10936:63;;10892:117;11048:2;11074:50;11116:7;11107:6;11096:9;11092:22;11074:50;:::i;:::-;11064:60;;11019:115;10673:468;;;;;:::o;11147:307::-;11208:4;11298:18;11290:6;11287:30;11284:56;;;11320:18;;:::i;:::-;11284:56;11358:29;11380:6;11358:29;:::i;:::-;11350:37;;11442:4;11436;11432:15;11424:23;;11147:307;;;:::o;11460:410::-;11537:5;11562:65;11578:48;11619:6;11578:48;:::i;:::-;11562:65;:::i;:::-;11553:74;;11650:6;11643:5;11636:21;11688:4;11681:5;11677:16;11726:3;11717:6;11712:3;11708:16;11705:25;11702:112;;;11733:79;;:::i;:::-;11702:112;11823:41;11857:6;11852:3;11847;11823:41;:::i;:::-;11543:327;11460:410;;;;;:::o;11889:338::-;11944:5;11993:3;11986:4;11978:6;11974:17;11970:27;11960:122;;12001:79;;:::i;:::-;11960:122;12118:6;12105:20;12143:78;12217:3;12209:6;12202:4;12194:6;12190:17;12143:78;:::i;:::-;12134:87;;11950:277;11889:338;;;;:::o;12233:943::-;12328:6;12336;12344;12352;12401:3;12389:9;12380:7;12376:23;12372:33;12369:120;;;12408:79;;:::i;:::-;12369:120;12528:1;12553:53;12598:7;12589:6;12578:9;12574:22;12553:53;:::i;:::-;12543:63;;12499:117;12655:2;12681:53;12726:7;12717:6;12706:9;12702:22;12681:53;:::i;:::-;12671:63;;12626:118;12783:2;12809:53;12854:7;12845:6;12834:9;12830:22;12809:53;:::i;:::-;12799:63;;12754:118;12939:2;12928:9;12924:18;12911:32;12970:18;12962:6;12959:30;12956:117;;;12992:79;;:::i;:::-;12956:117;13097:62;13151:7;13142:6;13131:9;13127:22;13097:62;:::i;:::-;13087:72;;12882:287;12233:943;;;;;;;:::o;13182:474::-;13250:6;13258;13307:2;13295:9;13286:7;13282:23;13278:32;13275:119;;;13313:79;;:::i;:::-;13275:119;13433:1;13458:53;13503:7;13494:6;13483:9;13479:22;13458:53;:::i;:::-;13448:63;;13404:117;13560:2;13586:53;13631:7;13622:6;13611:9;13607:22;13586:53;:::i;:::-;13576:63;;13531:118;13182:474;;;;;:::o;13662:180::-;13710:77;13707:1;13700:88;13807:4;13804:1;13797:15;13831:4;13828:1;13821:15;13848:320;13892:6;13929:1;13923:4;13919:12;13909:22;;13976:1;13970:4;13966:12;13997:18;13987:81;;14053:4;14045:6;14041:17;14031:27;;13987:81;14115:2;14107:6;14104:14;14084:18;14081:38;14078:84;;;14134:18;;:::i;:::-;14078:84;13899:269;13848:320;;;:::o;14174:231::-;14314:34;14310:1;14302:6;14298:14;14291:58;14383:14;14378:2;14370:6;14366:15;14359:39;14174:231;:::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;;14411:366;;;:::o;14783:419::-;14949:4;14987:2;14976:9;14972:18;14964:26;;15036:9;15030:4;15026:20;15022:1;15011:9;15007:17;15000:47;15064:131;15190:4;15064:131;:::i;:::-;15056:139;;14783:419;;;:::o;15208:220::-;15348:34;15344:1;15336:6;15332:14;15325:58;15417:3;15412:2;15404:6;15400:15;15393:28;15208:220;:::o;15434:366::-;15576:3;15597:67;15661:2;15656:3;15597:67;:::i;:::-;15590:74;;15673:93;15762:3;15673:93;:::i;:::-;15791:2;15786:3;15782:12;15775:19;;15434:366;;;:::o;15806:419::-;15972:4;16010:2;15999:9;15995:18;15987:26;;16059:9;16053:4;16049:20;16045:1;16034:9;16030:17;16023:47;16087:131;16213:4;16087:131;:::i;:::-;16079:139;;15806:419;;;:::o;16231:243::-;16371:34;16367:1;16359:6;16355:14;16348:58;16440:26;16435:2;16427:6;16423:15;16416:51;16231:243;:::o;16480:366::-;16622:3;16643:67;16707:2;16702:3;16643:67;:::i;:::-;16636:74;;16719:93;16808:3;16719:93;:::i;:::-;16837:2;16832:3;16828:12;16821:19;;16480:366;;;:::o;16852:419::-;17018:4;17056:2;17045:9;17041:18;17033:26;;17105:9;17099:4;17095:20;17091:1;17080:9;17076:17;17069:47;17133:131;17259:4;17133:131;:::i;:::-;17125:139;;16852:419;;;:::o;17277:236::-;17417:34;17413:1;17405:6;17401:14;17394:58;17486:19;17481:2;17473:6;17469:15;17462:44;17277:236;:::o;17519:366::-;17661:3;17682:67;17746:2;17741:3;17682:67;:::i;:::-;17675:74;;17758:93;17847:3;17758:93;:::i;:::-;17876:2;17871:3;17867:12;17860:19;;17519:366;;;:::o;17891:419::-;18057:4;18095:2;18084:9;18080:18;18072:26;;18144:9;18138:4;18134:20;18130:1;18119:9;18115:17;18108:47;18172:131;18298:4;18172:131;:::i;:::-;18164:139;;17891:419;;;:::o;18316:169::-;18456:21;18452:1;18444:6;18440:14;18433:45;18316:169;:::o;18491:366::-;18633:3;18654:67;18718:2;18713:3;18654:67;:::i;:::-;18647:74;;18730:93;18819:3;18730:93;:::i;:::-;18848:2;18843:3;18839:12;18832:19;;18491:366;;;:::o;18863:419::-;19029:4;19067:2;19056:9;19052:18;19044:26;;19116:9;19110:4;19106:20;19102:1;19091:9;19087:17;19080:47;19144:131;19270:4;19144:131;:::i;:::-;19136:139;;18863:419;;;:::o;19288:236::-;19428:34;19424:1;19416:6;19412:14;19405:58;19497:19;19492:2;19484:6;19480:15;19473:44;19288:236;:::o;19530:366::-;19672:3;19693:67;19757:2;19752:3;19693:67;:::i;:::-;19686:74;;19769:93;19858:3;19769:93;:::i;:::-;19887:2;19882:3;19878:12;19871:19;;19530:366;;;:::o;19902:419::-;20068:4;20106:2;20095:9;20091:18;20083:26;;20155:9;20149:4;20145:20;20141:1;20130:9;20126:17;20119:47;20183:131;20309:4;20183:131;:::i;:::-;20175:139;;19902:419;;;:::o;20327:180::-;20375:77;20372:1;20365:88;20472:4;20469:1;20462:15;20496:4;20493:1;20486:15;20513:305;20553:3;20572:20;20590:1;20572:20;:::i;:::-;20567:25;;20606:20;20624:1;20606:20;:::i;:::-;20601:25;;20760:1;20692:66;20688:74;20685:1;20682:81;20679:107;;;20766:18;;:::i;:::-;20679:107;20810:1;20807;20803:9;20796:16;;20513:305;;;;:::o;20824:181::-;20964:33;20960:1;20952:6;20948:14;20941:57;20824:181;:::o;21011:366::-;21153:3;21174:67;21238:2;21233:3;21174:67;:::i;:::-;21167:74;;21250:93;21339:3;21250:93;:::i;:::-;21368:2;21363:3;21359:12;21352:19;;21011:366;;;:::o;21383:419::-;21549:4;21587:2;21576:9;21572:18;21564:26;;21636:9;21630:4;21626:20;21622:1;21611:9;21607:17;21600:47;21664:131;21790:4;21664:131;:::i;:::-;21656:139;;21383:419;;;:::o;21808:171::-;21948:23;21944:1;21936:6;21932:14;21925:47;21808:171;:::o;21985:366::-;22127:3;22148:67;22212:2;22207:3;22148:67;:::i;:::-;22141:74;;22224:93;22313:3;22224:93;:::i;:::-;22342:2;22337:3;22333:12;22326:19;;21985:366;;;:::o;22357:419::-;22523:4;22561:2;22550:9;22546:18;22538:26;;22610:9;22604:4;22600:20;22596:1;22585:9;22581:17;22574:47;22638:131;22764:4;22638:131;:::i;:::-;22630:139;;22357:419;;;:::o;22782:348::-;22822:7;22845:20;22863:1;22845:20;:::i;:::-;22840:25;;22879:20;22897:1;22879:20;:::i;:::-;22874:25;;23067:1;22999:66;22995:74;22992:1;22989:81;22984:1;22977:9;22970:17;22966:105;22963:131;;;23074:18;;:::i;:::-;22963:131;23122:1;23119;23115:9;23104:20;;22782:348;;;;:::o;23136:170::-;23276:22;23272:1;23264:6;23260:14;23253:46;23136:170;:::o;23312:366::-;23454:3;23475:67;23539:2;23534:3;23475:67;:::i;:::-;23468:74;;23551:93;23640:3;23551:93;:::i;:::-;23669:2;23664:3;23660:12;23653:19;;23312:366;;;:::o;23684:419::-;23850:4;23888:2;23877:9;23873:18;23865:26;;23937:9;23931:4;23927:20;23923:1;23912:9;23908:17;23901:47;23965:131;24091:4;23965:131;:::i;:::-;23957:139;;23684:419;;;:::o;24109:233::-;24148:3;24171:24;24189:5;24171:24;:::i;:::-;24162:33;;24217:66;24210:5;24207:77;24204:103;;;24287:18;;:::i;:::-;24204:103;24334:1;24327:5;24323:13;24316:20;;24109:233;;;:::o;24348:182::-;24488:34;24484:1;24476:6;24472:14;24465:58;24348:182;:::o;24536:366::-;24678:3;24699:67;24763:2;24758:3;24699:67;:::i;:::-;24692:74;;24775:93;24864:3;24775:93;:::i;:::-;24893:2;24888:3;24884:12;24877:19;;24536:366;;;:::o;24908:419::-;25074:4;25112:2;25101:9;25097:18;25089:26;;25161:9;25155:4;25151:20;25147:1;25136:9;25132:17;25125:47;25189:131;25315:4;25189:131;:::i;:::-;25181:139;;24908:419;;;:::o;25333:180::-;25381:77;25378:1;25371:88;25478:4;25475:1;25468:15;25502:4;25499:1;25492:15;25519:228;25659:34;25655:1;25647:6;25643:14;25636:58;25728:11;25723:2;25715:6;25711:15;25704:36;25519:228;:::o;25753:366::-;25895:3;25916:67;25980:2;25975:3;25916:67;:::i;:::-;25909:74;;25992:93;26081:3;25992:93;:::i;:::-;26110:2;26105:3;26101:12;26094:19;;25753:366;;;:::o;26125:419::-;26291:4;26329:2;26318:9;26314:18;26306:26;;26378:9;26372:4;26368:20;26364:1;26353:9;26349:17;26342:47;26406:131;26532:4;26406:131;:::i;:::-;26398:139;;26125:419;;;:::o;26550:229::-;26690:34;26686:1;26678:6;26674:14;26667:58;26759:12;26754:2;26746:6;26742:15;26735:37;26550:229;:::o;26785:366::-;26927:3;26948:67;27012:2;27007:3;26948:67;:::i;:::-;26941:74;;27024:93;27113:3;27024:93;:::i;:::-;27142:2;27137:3;27133:12;27126:19;;26785:366;;;:::o;27157:419::-;27323:4;27361:2;27350:9;27346:18;27338:26;;27410:9;27404:4;27400:20;27396:1;27385:9;27381:17;27374:47;27438:131;27564:4;27438:131;:::i;:::-;27430:139;;27157:419;;;:::o;27582:180::-;27630:77;27627:1;27620:88;27727:4;27724:1;27717:15;27751:4;27748:1;27741:15;27768:185;27808:1;27825:20;27843:1;27825:20;:::i;:::-;27820:25;;27859:20;27877:1;27859:20;:::i;:::-;27854:25;;27898:1;27888:35;;27903:18;;:::i;:::-;27888:35;27945:1;27942;27938:9;27933:14;;27768:185;;;;:::o;27959:147::-;28060:11;28097:3;28082:18;;27959:147;;;;:::o;28112:114::-;;:::o;28232:398::-;28391:3;28412:83;28493:1;28488:3;28412:83;:::i;:::-;28405:90;;28504:93;28593:3;28504:93;:::i;:::-;28622:1;28617:3;28613:11;28606:18;;28232:398;;;:::o;28636:379::-;28820:3;28842:147;28985:3;28842:147;:::i;:::-;28835:154;;29006:3;28999:10;;28636:379;;;:::o;29021:166::-;29161:18;29157:1;29149:6;29145:14;29138:42;29021:166;:::o;29193:366::-;29335:3;29356:67;29420:2;29415:3;29356:67;:::i;:::-;29349:74;;29432:93;29521:3;29432:93;:::i;:::-;29550:2;29545:3;29541:12;29534:19;;29193:366;;;:::o;29565:419::-;29731:4;29769:2;29758:9;29754:18;29746:26;;29818:9;29812:4;29808:20;29804:1;29793:9;29789:17;29782:47;29846:131;29972:4;29846:131;:::i;:::-;29838:139;;29565:419;;;:::o;29990:174::-;30130:26;30126:1;30118:6;30114:14;30107:50;29990:174;:::o;30170:366::-;30312:3;30333:67;30397:2;30392:3;30333:67;:::i;:::-;30326:74;;30409:93;30498:3;30409:93;:::i;:::-;30527:2;30522:3;30518:12;30511:19;;30170:366;;;:::o;30542:419::-;30708:4;30746:2;30735:9;30731:18;30723:26;;30795:9;30789:4;30785:20;30781:1;30770:9;30766:17;30759:47;30823:131;30949:4;30823:131;:::i;:::-;30815:139;;30542:419;;;:::o;30967:166::-;31107:18;31103:1;31095:6;31091:14;31084:42;30967:166;:::o;31139:366::-;31281:3;31302:67;31366:2;31361:3;31302:67;:::i;:::-;31295:74;;31378:93;31467:3;31378:93;:::i;:::-;31496:2;31491:3;31487:12;31480:19;;31139:366;;;:::o;31511:419::-;31677:4;31715:2;31704:9;31700:18;31692:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31792:131;31918:4;31792:131;:::i;:::-;31784:139;;31511:419;;;:::o;31936:234::-;32076:34;32072:1;32064:6;32060:14;32053:58;32145:17;32140:2;32132:6;32128:15;32121:42;31936:234;:::o;32176:366::-;32318:3;32339:67;32403:2;32398:3;32339:67;:::i;:::-;32332:74;;32415:93;32504:3;32415:93;:::i;:::-;32533:2;32528:3;32524:12;32517:19;;32176:366;;;:::o;32548:419::-;32714:4;32752:2;32741:9;32737:18;32729:26;;32801:9;32795:4;32791:20;32787:1;32776:9;32772:17;32765:47;32829:131;32955:4;32829:131;:::i;:::-;32821:139;;32548:419;;;:::o;32973:148::-;33075:11;33112:3;33097:18;;32973:148;;;;:::o;33127:377::-;33233:3;33261:39;33294:5;33261:39;:::i;:::-;33316:89;33398:6;33393:3;33316:89;:::i;:::-;33309:96;;33414:52;33459:6;33454:3;33447:4;33440:5;33436:16;33414:52;:::i;:::-;33491:6;33486:3;33482:16;33475:23;;33237:267;33127:377;;;;:::o;33510:141::-;33559:4;33582:3;33574:11;;33605:3;33602:1;33595:14;33639:4;33636:1;33626:18;33618:26;;33510:141;;;:::o;33681:845::-;33784:3;33821:5;33815:12;33850:36;33876:9;33850:36;:::i;:::-;33902:89;33984:6;33979:3;33902:89;:::i;:::-;33895:96;;34022:1;34011:9;34007:17;34038:1;34033:137;;;;34184:1;34179:341;;;;34000:520;;34033:137;34117:4;34113:9;34102;34098:25;34093:3;34086:38;34153:6;34148:3;34144:16;34137:23;;34033:137;;34179:341;34246:38;34278:5;34246:38;:::i;:::-;34306:1;34320:154;34334:6;34331:1;34328:13;34320:154;;;34408:7;34402:14;34398:1;34393:3;34389:11;34382:35;34458:1;34449:7;34445:15;34434:26;;34356:4;34353:1;34349:12;34344:17;;34320:154;;;34503:6;34498:3;34494:16;34487:23;;34186:334;;34000:520;;33788:738;;33681:845;;;;:::o;34532:589::-;34757:3;34779:95;34870:3;34861:6;34779:95;:::i;:::-;34772:102;;34891:95;34982:3;34973:6;34891:95;:::i;:::-;34884:102;;35003:92;35091:3;35082:6;35003:92;:::i;:::-;34996:99;;35112:3;35105:10;;34532:589;;;;;;:::o;35127:225::-;35267:34;35263:1;35255:6;35251:14;35244:58;35336:8;35331:2;35323:6;35319:15;35312:33;35127:225;:::o;35358:366::-;35500:3;35521:67;35585:2;35580:3;35521:67;:::i;:::-;35514:74;;35597:93;35686:3;35597:93;:::i;:::-;35715:2;35710:3;35706:12;35699:19;;35358:366;;;:::o;35730:419::-;35896:4;35934:2;35923:9;35919:18;35911:26;;35983:9;35977:4;35973:20;35969:1;35958:9;35954:17;35947:47;36011:131;36137:4;36011:131;:::i;:::-;36003:139;;35730:419;;;:::o;36155:231::-;36295:34;36291:1;36283:6;36279:14;36272:58;36364:14;36359:2;36351:6;36347:15;36340:39;36155:231;:::o;36392:366::-;36534:3;36555:67;36619:2;36614:3;36555:67;:::i;:::-;36548:74;;36631:93;36720:3;36631:93;:::i;:::-;36749:2;36744:3;36740:12;36733:19;;36392:366;;;:::o;36764:419::-;36930:4;36968:2;36957:9;36953:18;36945:26;;37017:9;37011:4;37007:20;37003:1;36992:9;36988:17;36981:47;37045:131;37171:4;37045:131;:::i;:::-;37037:139;;36764:419;;;:::o;37189:224::-;37329:34;37325:1;37317:6;37313:14;37306:58;37398:7;37393:2;37385:6;37381:15;37374:32;37189:224;:::o;37419:366::-;37561:3;37582:67;37646:2;37641:3;37582:67;:::i;:::-;37575:74;;37658:93;37747:3;37658:93;:::i;:::-;37776:2;37771:3;37767:12;37760:19;;37419:366;;;:::o;37791:419::-;37957:4;37995:2;37984:9;37980:18;37972:26;;38044:9;38038:4;38034:20;38030:1;38019:9;38015:17;38008:47;38072:131;38198:4;38072:131;:::i;:::-;38064:139;;37791:419;;;:::o;38216:223::-;38356:34;38352:1;38344:6;38340:14;38333:58;38425:6;38420:2;38412:6;38408:15;38401:31;38216:223;:::o;38445:366::-;38587:3;38608:67;38672:2;38667:3;38608:67;:::i;:::-;38601:74;;38684:93;38773:3;38684:93;:::i;:::-;38802:2;38797:3;38793:12;38786:19;;38445:366;;;:::o;38817:419::-;38983:4;39021:2;39010:9;39006:18;38998:26;;39070:9;39064:4;39060:20;39056:1;39045:9;39041:17;39034:47;39098:131;39224:4;39098:131;:::i;:::-;39090:139;;38817:419;;;:::o;39242:191::-;39282:4;39302:20;39320:1;39302:20;:::i;:::-;39297:25;;39336:20;39354:1;39336:20;:::i;:::-;39331:25;;39375:1;39372;39369:8;39366:34;;;39380:18;;:::i;:::-;39366:34;39425:1;39422;39418:9;39410:17;;39242:191;;;;:::o;39439:175::-;39579:27;39575:1;39567:6;39563:14;39556:51;39439:175;:::o;39620:366::-;39762:3;39783:67;39847:2;39842:3;39783:67;:::i;:::-;39776:74;;39859:93;39948:3;39859:93;:::i;:::-;39977:2;39972:3;39968:12;39961:19;;39620:366;;;:::o;39992:419::-;40158:4;40196:2;40185:9;40181:18;40173:26;;40245:9;40239:4;40235:20;40231:1;40220:9;40216:17;40209:47;40273:131;40399:4;40273:131;:::i;:::-;40265:139;;39992:419;;;:::o;40417:237::-;40557:34;40553:1;40545:6;40541:14;40534:58;40626:20;40621:2;40613:6;40609:15;40602:45;40417:237;:::o;40660:366::-;40802:3;40823:67;40887:2;40882:3;40823:67;:::i;:::-;40816:74;;40899:93;40988:3;40899:93;:::i;:::-;41017:2;41012:3;41008:12;41001:19;;40660:366;;;:::o;41032:419::-;41198:4;41236:2;41225:9;41221:18;41213:26;;41285:9;41279:4;41275:20;41271:1;41260:9;41256:17;41249:47;41313:131;41439:4;41313:131;:::i;:::-;41305:139;;41032:419;;;:::o;41457:176::-;41489:1;41506:20;41524:1;41506:20;:::i;:::-;41501:25;;41540:20;41558:1;41540:20;:::i;:::-;41535:25;;41579:1;41569:35;;41584:18;;:::i;:::-;41569:35;41625:1;41622;41618:9;41613:14;;41457:176;;;;:::o;41639:98::-;41690:6;41724:5;41718:12;41708:22;;41639:98;;;:::o;41743:168::-;41826:11;41860:6;41855:3;41848:19;41900:4;41895:3;41891:14;41876:29;;41743:168;;;;:::o;41917:360::-;42003:3;42031:38;42063:5;42031:38;:::i;:::-;42085:70;42148:6;42143:3;42085:70;:::i;:::-;42078:77;;42164:52;42209:6;42204:3;42197:4;42190:5;42186:16;42164:52;:::i;:::-;42241:29;42263:6;42241:29;:::i;:::-;42236:3;42232:39;42225:46;;42007:270;41917:360;;;;:::o;42283:640::-;42478:4;42516:3;42505:9;42501:19;42493:27;;42530:71;42598:1;42587:9;42583:17;42574:6;42530:71;:::i;:::-;42611:72;42679:2;42668:9;42664:18;42655:6;42611:72;:::i;:::-;42693;42761:2;42750:9;42746:18;42737:6;42693:72;:::i;:::-;42812:9;42806:4;42802:20;42797:2;42786:9;42782:18;42775:48;42840:76;42911:4;42902:6;42840:76;:::i;:::-;42832:84;;42283:640;;;;;;;:::o;42929:141::-;42985:5;43016:6;43010:13;43001:22;;43032:32;43058:5;43032:32;:::i;:::-;42929:141;;;;:::o;43076:349::-;43145:6;43194:2;43182:9;43173:7;43169:23;43165:32;43162:119;;;43200:79;;:::i;:::-;43162:119;43320:1;43345:63;43400:7;43391:6;43380:9;43376:22;43345:63;:::i;:::-;43335:73;;43291:127;43076:349;;;;:::o;43431:182::-;43571:34;43567:1;43559:6;43555:14;43548:58;43431:182;:::o;43619:366::-;43761:3;43782:67;43846:2;43841:3;43782:67;:::i;:::-;43775:74;;43858:93;43947:3;43858:93;:::i;:::-;43976:2;43971:3;43967:12;43960:19;;43619:366;;;:::o;43991:419::-;44157:4;44195:2;44184:9;44180:18;44172:26;;44244:9;44238:4;44234:20;44230:1;44219:9;44215:17;44208:47;44272:131;44398:4;44272:131;:::i;:::-;44264:139;;43991:419;;;:::o;44416:178::-;44556:30;44552:1;44544:6;44540:14;44533:54;44416:178;:::o;44600:366::-;44742:3;44763:67;44827:2;44822:3;44763:67;:::i;:::-;44756:74;;44839:93;44928:3;44839:93;:::i;:::-;44957:2;44952:3;44948:12;44941:19;;44600:366;;;:::o;44972:419::-;45138:4;45176:2;45165:9;45161:18;45153:26;;45225:9;45219:4;45215:20;45211:1;45200:9;45196:17;45189:47;45253:131;45379:4;45253:131;:::i;:::-;45245:139;;44972:419;;;:::o
Swarm Source
ipfs://24f9fb75db078997a30a296c8be7ce934429051f801723b15f09232b344d7e25
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.