Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
888 J
Holders
220
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 JLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Jesters
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-16 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol /// @title Jesters /// @author André Costa @ Terratecc pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address user) public view override returns (uint256) { require(user != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[user].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract Jesters is ERC721A, Ownable { using Strings for uint256; //initial part of the URI for the metadata string private _currentBaseURI; //cost of mints depending on state of sale uint private mintCost_ = 0.0065 ether; //maximum amount of mints allowed per person in 1 TX uint256 public constant maxMintTX = 15; //dummy address that we use to sign the mint transaction to make sure it is valid address private dummy = 0x80E4929c869102140E69550BBECC20bEd61B080c; //marks the timestamp of when the respective sales open uint256 internal presaleLaunchTime; uint256 internal publicSaleLaunchTime; uint256 internal revealTime; //amount of mints that each address has executed mapping(address => uint256) public mintsPerAddress; mapping(address => uint256) public freeMintsPerAddress; //current state os sale enum State {NoSale, Presale, PublicSale} //Chaos Clownz NFT Collection IERC721Enumerable public ChaosClownz; //declaring initial values for variables constructor() ERC721A('Jesters', 'J', 15, 888) { _currentBaseURI = "ipfs://QmeBhzN5LbFXbTcrsy6t4dSx1JVHjt3ti8hracdYpfmpF4/"; ChaosClownz = IERC721Enumerable(0x76cab375118B27830847db42f369509872b35888); } //in case somebody accidentaly sends funds or transaction to contract receive() payable external {} fallback() payable external { revert(); } //visualize baseURI function _baseURI() internal view virtual override returns (string memory) { return _currentBaseURI; } //change baseURI in case needed for IPFS function changeBaseURI(string memory baseURI_) public onlyOwner { _currentBaseURI = baseURI_; } function switchToPresale() public onlyOwner { require(saleState() == State.NoSale, 'Sale is already Open!'); presaleLaunchTime = block.timestamp; } function switchToPublicSale() public onlyOwner { require(saleState() == State.Presale, 'Sale must be in Presale!'); publicSaleLaunchTime = block.timestamp; } modifier onlyValidAccess(uint8 _v, bytes32 _r, bytes32 _s) { require( isValidAccessMessage(msg.sender,_v,_r,_s), 'Invalid Signature' ); _; } /* * @dev Verifies if message was signed by owner to give access to _add for this contract. * Assumes Geth signature prefix. * @param _add Address of agent with access * @param _v ECDSA signature parameter v. * @param _r ECDSA signature parameters r. * @param _s ECDSA signature parameters s. * @return Validity of access message for a given address. */ function isValidAccessMessage(address _add, uint8 _v, bytes32 _r, bytes32 _s) view public returns (bool) { bytes32 hash = keccak256(abi.encodePacked(address(this), _add)); return dummy == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), _v, _r, _s); } //mint a @param number of NFTs in presale function presaleMint(uint256 number, uint8 _v, bytes32 _r, bytes32 _s) onlyValidAccess(_v, _r, _s) public payable { State saleState_ = saleState(); require(saleState_ != State.NoSale, "Sale in not open yet!"); require(saleState_ != State.PublicSale, "Presale has closed, Check out Public Sale!"); require(totalSupply() + number <= collectionSize, "Not enough NFTs left to mint.."); require(number <= maxMintTX, "Maximum Mints per TX Exceeded!"); (uint cost, uint freeMints) = mintCost(number, msg.sender); require(msg.value >= cost, "Insufficient funds to mint this amount of NFTs"); _safeMint(msg.sender, number); mintsPerAddress[msg.sender] += number; freeMintsPerAddress[msg.sender] += freeMints; } //mint a @param number of NFTs in public sale function publicSaleMint(uint256 number) public payable { State saleState_ = saleState(); require(saleState_ == State.PublicSale, "Public Sale in not open yet!"); require(totalSupply() + number <= collectionSize, "Not enough NFTs left to mint.."); require(number <= maxMintTX, "Maximum Mints per TX Exceeded!"); (uint cost, uint freeMints) = mintCost(number, msg.sender); require(msg.value >= cost, "Insufficient funds to mint this amount of NFTs"); _safeMint(msg.sender, number); mintsPerAddress[msg.sender] += number; freeMintsPerAddress[msg.sender] += freeMints; } 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(), '.json')) : ""; } //reserved NFTs for creator function reservedMint(uint number, address recipient) public onlyOwner { require(totalSupply() + number <= collectionSize, "Not enough NFTs left to mint.."); _safeMint(recipient, number); mintsPerAddress[recipient] += number; } //se the current account balance function accountBalance() public onlyOwner view returns(uint) { return address(this).balance; } //retrieve all funds recieved from minting function withdraw() public onlyOwner { uint256 balance = accountBalance(); require(balance > 0, 'No Funds to withdraw, Balance is 0'); _withdraw(payable(owner()), balance); } //send the percentage of funds to a shareholder´s wallet function _withdraw(address payable account, uint256 amount) internal { (bool sent, ) = account.call{value: amount}(""); require(sent, "Failed to send Ether"); } //change the dummy account used for signing transactions function changeDummy(address _dummy) public onlyOwner { dummy = _dummy; } function changeChaosClownz(address newAddress) public onlyOwner { ChaosClownz = IERC721Enumerable(newAddress); } //see current state of sale //see the current state of the sale function saleState() public view returns(State){ if (presaleLaunchTime == 0) { return State.NoSale; } else if (publicSaleLaunchTime == 0) { return State.Presale; } else { return State.PublicSale; } } //gets the cost of current mint function mintCost(uint256 number, address user) public view returns(uint, uint) { uint256 balance = ChaosClownz.balanceOf(user); uint mintFree; if (balance == 1) { mintFree = 1; } else if (balance % 2 == 0) { mintFree = balance / 2; } else { mintFree = (balance - 1) / 2; } if (mintFree > freeMintsPerAddress[user]) { mintFree -= freeMintsPerAddress[user]; } else { mintFree = 0; } if (mintFree >= number) { return (0, number); } else { return (mintCost_ * (number - mintFree), mintFree); } } function changeMintCost(uint256 newCost) public onlyOwner { mintCost_ = newCost; } }
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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"ChaosClownz","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountBalance","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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeChaosClownz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dummy","type":"address"}],"name":"changeDummy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"changeMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"isValidAccessMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"reservedMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum Jesters.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600080556000600755661717b72f0a4000600a557380e4929c869102140e69550bbecc20bed61b080c600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007a57600080fd5b506040518060400160405280600781526020017f4a657374657273000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f4a00000000000000000000000000000000000000000000000000000000000000815250600f6103786000811162000132576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012990620003ab565b60405180910390fd5b6000821162000178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016f9062000443565b60405180910390fd5b8360019081620001899190620006df565b5082600290816200019b9190620006df565b508160a08181525050806080818152505050505050620001d0620001c46200025660201b60201c565b6200025e60201b60201c565b604051806060016040528060368152602001620062e26036913960099081620001fa9190620006df565b507376cab375118b27830847db42f369509872b35888601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007c6565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b600062000393602e8362000324565b9150620003a08262000335565b604082019050919050565b60006020820190508181036000830152620003c68162000384565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b60006200042b60278362000324565b91506200043882620003cd565b604082019050919050565b600060208201905081810360008301526200045e816200041c565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b60805160a051615ada6200080860003960008181612d0f01528181612d3801526133bd015260008181610db001528181611b0d0152611fc60152615ada6000f3fe6080604052600436106102285760003560e01c80636352211e11610123578063b3ab66b0116100ab578063dcd4e7321161006f578063dcd4e7321461083b578063e985e9c514610857578063eab4178214610894578063f2fde38b146108ab578063ff984994146108d45761022f565b8063b3ab66b014610765578063b4bc896314610781578063b88d4fde146107aa578063c87b56dd146107d3578063d7224ba0146108105761022f565b80637f1921ef116100f25780637f1921ef146106925780638da5cb5b146106bb57806395d89b41146106e6578063a22cb46514610711578063b0a1c1c41461073a5761022f565b80636352211e146105c457806370a0823114610601578063715018a61461063e5780637b0c8b07146106555761022f565b80632d08ddb7116101b15780633ccfd60b116101755780633ccfd60b146104f157806342842e0e146105085780634f6ccce71461053157806358757add1461056e578063603f4d52146105995761022f565b80632d08ddb7146103d35780632f745c59146104115780633023eba61461044e578063326241141461048b57806339a0c6f9146104c85761022f565b8063081812fc116101f8578063081812fc146102f0578063095ea7b31461032d57806318160ddd1461035657806318df64031461038157806323b872dd146103aa5761022f565b8062b388b2146102345780630191a6571461025f57806301ffc9a71461028857806306fdde03146102c55761022f565b3661022f57005b600080fd5b34801561024057600080fd5b506102496108eb565b604051610256919061384d565b60405180910390f35b34801561026b57600080fd5b50610286600480360381019061028191906138da565b6108f0565b005b34801561029457600080fd5b506102af60048036038101906102aa919061395f565b6109b0565b6040516102bc91906139a7565b60405180910390f35b3480156102d157600080fd5b506102da610afa565b6040516102e79190613a52565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613aa0565b610b8c565b6040516103249190613adc565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190613af7565b610c11565b005b34801561036257600080fd5b5061036b610d29565b604051610378919061384d565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190613b37565b610d32565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190613b77565b610e87565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613b37565b610e97565b604051610408929190613bca565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613af7565b61106d565b604051610445919061384d565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906138da565b611269565b604051610482919061384d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613c62565b611281565b6040516104bf91906139a7565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613dfe565b61137f565b005b3480156104fd57600080fd5b5061050661140e565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613b77565b6114ed565b005b34801561053d57600080fd5b5061055860048036038101906105539190613aa0565b61150d565b604051610565919061384d565b60405180910390f35b34801561057a57600080fd5b50610583611560565b6040516105909190613ea6565b60405180910390f35b3480156105a557600080fd5b506105ae611586565b6040516105bb9190613f38565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613aa0565b6115b5565b6040516105f89190613adc565b60405180910390f35b34801561060d57600080fd5b50610628600480360381019061062391906138da565b6115cb565b604051610635919061384d565b60405180910390f35b34801561064a57600080fd5b506106536116b3565b005b34801561066157600080fd5b5061067c600480360381019061067791906138da565b61173b565b604051610689919061384d565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613aa0565b611753565b005b3480156106c757600080fd5b506106d06117d9565b6040516106dd9190613adc565b60405180910390f35b3480156106f257600080fd5b506106fb611803565b6040516107089190613a52565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613f7f565b611895565b005b34801561074657600080fd5b5061074f611a15565b60405161075c919061384d565b60405180910390f35b61077f600480360381019061077a9190613aa0565b611a99565b005b34801561078d57600080fd5b506107a860048036038101906107a391906138da565b611cd4565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614060565b611d94565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190613aa0565b611df0565b6040516108079190613a52565b60405180910390f35b34801561081c57600080fd5b50610825611e97565b604051610832919061384d565b60405180910390f35b610855600480360381019061085091906140e3565b611e9d565b005b34801561086357600080fd5b5061087e6004803603810190610879919061414a565b612193565b60405161088b91906139a7565b60405180910390f35b3480156108a057600080fd5b506108a9612227565b005b3480156108b757600080fd5b506108d260048036038101906108cd91906138da565b61231a565b005b3480156108e057600080fd5b506108e9612411565b005b600f81565b6108f8612504565b73ffffffffffffffffffffffffffffffffffffffff166109166117d9565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906141d6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af35750610af28261250c565b5b9050919050565b606060018054610b0990614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3590614225565b8015610b825780601f10610b5757610100808354040283529160200191610b82565b820191906000526020600020905b815481529060010190602001808311610b6557829003601f168201915b5050505050905090565b6000610b9782612576565b610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd906142c8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1c826115b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c839061435a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cab612504565b73ffffffffffffffffffffffffffffffffffffffff161480610cda5750610cd981610cd4612504565b612193565b5b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d10906143ec565b60405180910390fd5b610d24838383612583565b505050565b60008054905090565b610d3a612504565b73ffffffffffffffffffffffffffffffffffffffff16610d586117d9565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141d6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082610dd8610d29565b610de2919061443b565b1115610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906144bb565b60405180910390fd5b610e2d8183612635565b81600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e7c919061443b565b925050819055505050565b610e92838383612653565b505050565b6000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610ef79190613adc565b602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906144f0565b9050600060018203610f4d5760019050610f92565b6000600283610f5c919061454c565b03610f7557600282610f6e919061457d565b9050610f91565b6002600183610f8491906145ae565b610f8e919061457d565b90505b5b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561102b57601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161102491906145ae565b9050611030565b600090505b85811061104557600086935093505050611066565b808661105191906145ae565b600a5461105e91906145e2565b819350935050505b9250929050565b6000611078836115cb565b82106110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614696565b60405180910390fd5b60006110c3610d29565b905060008060005b83811015611227576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111bd57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361121357868403611204578195505050505050611263565b838061120f906146b6565b9450505b50808061121f906146b6565b9150506110cb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614770565b60405180910390fd5b92915050565b600f6020528060005260406000206000915090505481565b60008030866040516020016112979291906147d8565b6040516020818303038152906040528051906020012090506001816040516020016112c2919061487c565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112f894939291906148c0565b6020604051602081039080840390855afa15801561131a573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b611387612504565b73ffffffffffffffffffffffffffffffffffffffff166113a56117d9565b73ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906141d6565b60405180910390fd5b806009908161140a9190614aa7565b5050565b611416612504565b73ffffffffffffffffffffffffffffffffffffffff166114346117d9565b73ffffffffffffffffffffffffffffffffffffffff161461148a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611481906141d6565b60405180910390fd5b6000611494611a15565b9050600081116114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614beb565b60405180910390fd5b6114ea6114e46117d9565b82612c0a565b50565b61150883838360405180602001604052806000815250611d94565b505050565b6000611517610d29565b8210611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614c7d565b60405180910390fd5b819050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c540361159a57600090506115b2565b6000600d54036115ad57600190506115b2565b600290505b90565b60006115c082612cbb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614d0f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116bb612504565b73ffffffffffffffffffffffffffffffffffffffff166116d96117d9565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611726906141d6565b60405180910390fd5b6117396000612ebe565b565b60106020528060005260406000206000915090505481565b61175b612504565b73ffffffffffffffffffffffffffffffffffffffff166117796117d9565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906141d6565b60405180910390fd5b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461181290614225565b80601f016020809104026020016040519081016040528092919081815260200182805461183e90614225565b801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b5050505050905090565b61189d612504565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190614d7b565b60405180910390fd5b8060066000611917612504565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119c4612504565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a0991906139a7565b60405180910390a35050565b6000611a1f612504565b73ffffffffffffffffffffffffffffffffffffffff16611a3d6117d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906141d6565b60405180910390fd5b47905090565b6000611aa3611586565b9050600280811115611ab857611ab7613ec1565b5b816002811115611acb57611aca613ec1565b5b14611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614de7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082611b35610d29565b611b3f919061443b565b1115611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b77906144bb565b60405180910390fd5b600f821115611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614e53565b60405180910390fd5b600080611bd18433610e97565b9150915081341015611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614ee5565b60405180910390fd5b611c223385612635565b83600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c71919061443b565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cc7919061443b565b9250508190555050505050565b611cdc612504565b73ffffffffffffffffffffffffffffffffffffffff16611cfa6117d9565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906141d6565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9f848484612653565b611dab84848484612f84565b611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614f77565b60405180910390fd5b50505050565b6060611dfb82612576565b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190615009565b60405180910390fd5b6000611e4461310b565b90506000815111611e645760405180602001604052806000815250611e8f565b80611e6e8461319d565b604051602001611e7f9291906150a6565b6040516020818303038152906040525b915050919050565b60075481565b828282611eac33848484611281565b611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290615121565b60405180910390fd5b6000611ef5611586565b905060006002811115611f0b57611f0a613ec1565b5b816002811115611f1e57611f1d613ec1565b5b03611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f559061518d565b60405180910390fd5b600280811115611f7157611f70613ec1565b5b816002811115611f8457611f83613ec1565b5b03611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb9061521f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000088611fee610d29565b611ff8919061443b565b1115612039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612030906144bb565b60405180910390fd5b600f88111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614e53565b60405180910390fd5b60008061208a8a33610e97565b91509150813410156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c890614ee5565b60405180910390fd5b6120db338b612635565b89600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212a919061443b565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612180919061443b565b9250508190555050505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61222f612504565b73ffffffffffffffffffffffffffffffffffffffff1661224d6117d9565b73ffffffffffffffffffffffffffffffffffffffff16146122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a906141d6565b60405180910390fd5b600060028111156122b7576122b6613ec1565b5b6122bf611586565b60028111156122d1576122d0613ec1565b5b14612311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123089061528b565b60405180910390fd5b42600c81905550565b612322612504565b73ffffffffffffffffffffffffffffffffffffffff166123406117d9565b73ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906141d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc9061531d565b60405180910390fd5b61240e81612ebe565b50565b612419612504565b73ffffffffffffffffffffffffffffffffffffffff166124376117d9565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906141d6565b60405180910390fd5b600160028111156124a1576124a0613ec1565b5b6124a9611586565b60028111156124bb576124ba613ec1565b5b146124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290615389565b60405180910390fd5b42600d81905550565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61264f8282604051806020016040528060008152506132fd565b5050565b600061265e82612cbb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612685612504565b73ffffffffffffffffffffffffffffffffffffffff1614806126e157506126aa612504565b73ffffffffffffffffffffffffffffffffffffffff166126c984610b8c565b73ffffffffffffffffffffffffffffffffffffffff16145b806126fd57506126fc82600001516126f7612504565b612193565b5b90508061273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061541b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906154ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128179061553f565b60405180910390fd5b61282d85858560016137db565b61283d6000848460000151612583565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128ab919061557b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661294f91906155bf565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a55919061443b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612b9a57612aca81612576565b15612b99576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c0286868660016137e1565b505050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612c3090615634565b60006040518083038185875af1925050503d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b5050905080612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615695565b60405180910390fd5b505050565b612cc36137fa565b612ccc82612576565b612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290615727565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d6f5760017f000000000000000000000000000000000000000000000000000000000000000084612d6291906145ae565b612d6c919061443b565b90505b60008390505b818110612e7d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6957809350505050612eb9565b508080612e7590615747565b915050612d75565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb0906157e2565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fa58473ffffffffffffffffffffffffffffffffffffffff166137e7565b156130fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fce612504565b8786866040518563ffffffff1660e01b8152600401612ff09493929190615857565b6020604051808303816000875af192505050801561302c57506040513d601f19601f8201168201806040525081019061302991906158b8565b60015b6130ae573d806000811461305c576040519150601f19603f3d011682016040523d82523d6000602084013e613061565b606091505b5060008151036130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d90614f77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613103565b600190505b949350505050565b60606009805461311a90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461314690614225565b80156131935780601f1061316857610100808354040283529160200191613193565b820191906000526020600020905b81548152906001019060200180831161317657829003601f168201915b5050505050905090565b6060600082036131e4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132f8565b600082905060005b600082146132165780806131ff906146b6565b915050600a8261320f919061457d565b91506131ec565b60008167ffffffffffffffff81111561323257613231613cd3565b5b6040519080825280601f01601f1916602001820160405280156132645781602001600182028036833780820191505090505b5090505b600085146132f15760018261327d91906145ae565b9150600a8561328c919061454c565b6030613298919061443b565b60f81b8183815181106132ae576132ad6158e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132ea919061457d565b9450613268565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336990615986565b60405180910390fd5b61337b81612576565b156133bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b2906159f2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590615a84565b60405180910390fd5b61342b60008583866137db565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161352891906155bf565b6fffffffffffffffffffffffffffffffff16815260200185836020015161354f91906155bf565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137be57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375e6000888488612f84565b61379d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379490614f77565b60405180910390fd5b81806137a8906146b6565b92505080806137b6906146b6565b9150506136ed565b50806000819055506137d360008785886137e1565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000819050919050565b61384781613834565b82525050565b6000602082019050613862600083018461383e565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138a78261387c565b9050919050565b6138b78161389c565b81146138c257600080fd5b50565b6000813590506138d4816138ae565b92915050565b6000602082840312156138f0576138ef613872565b5b60006138fe848285016138c5565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61393c81613907565b811461394757600080fd5b50565b60008135905061395981613933565b92915050565b60006020828403121561397557613974613872565b5b60006139838482850161394a565b91505092915050565b60008115159050919050565b6139a18161398c565b82525050565b60006020820190506139bc6000830184613998565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139fc5780820151818401526020810190506139e1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a24826139c2565b613a2e81856139cd565b9350613a3e8185602086016139de565b613a4781613a08565b840191505092915050565b60006020820190508181036000830152613a6c8184613a19565b905092915050565b613a7d81613834565b8114613a8857600080fd5b50565b600081359050613a9a81613a74565b92915050565b600060208284031215613ab657613ab5613872565b5b6000613ac484828501613a8b565b91505092915050565b613ad68161389c565b82525050565b6000602082019050613af16000830184613acd565b92915050565b60008060408385031215613b0e57613b0d613872565b5b6000613b1c858286016138c5565b9250506020613b2d85828601613a8b565b9150509250929050565b60008060408385031215613b4e57613b4d613872565b5b6000613b5c85828601613a8b565b9250506020613b6d858286016138c5565b9150509250929050565b600080600060608486031215613b9057613b8f613872565b5b6000613b9e868287016138c5565b9350506020613baf868287016138c5565b9250506040613bc086828701613a8b565b9150509250925092565b6000604082019050613bdf600083018561383e565b613bec602083018461383e565b9392505050565b600060ff82169050919050565b613c0981613bf3565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060008060808587031215613c7c57613c7b613872565b5b6000613c8a878288016138c5565b9450506020613c9b87828801613c17565b9350506040613cac87828801613c4d565b9250506060613cbd87828801613c4d565b91505092959194509250565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d0b82613a08565b810181811067ffffffffffffffff82111715613d2a57613d29613cd3565b5b80604052505050565b6000613d3d613868565b9050613d498282613d02565b919050565b600067ffffffffffffffff821115613d6957613d68613cd3565b5b613d7282613a08565b9050602081019050919050565b82818337600083830152505050565b6000613da1613d9c84613d4e565b613d33565b905082815260208101848484011115613dbd57613dbc613cce565b5b613dc8848285613d7f565b509392505050565b600082601f830112613de557613de4613cc9565b5b8135613df5848260208601613d8e565b91505092915050565b600060208284031215613e1457613e13613872565b5b600082013567ffffffffffffffff811115613e3257613e31613877565b5b613e3e84828501613dd0565b91505092915050565b6000819050919050565b6000613e6c613e67613e628461387c565b613e47565b61387c565b9050919050565b6000613e7e82613e51565b9050919050565b6000613e9082613e73565b9050919050565b613ea081613e85565b82525050565b6000602082019050613ebb6000830184613e97565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613f0157613f00613ec1565b5b50565b6000819050613f1282613ef0565b919050565b6000613f2282613f04565b9050919050565b613f3281613f17565b82525050565b6000602082019050613f4d6000830184613f29565b92915050565b613f5c8161398c565b8114613f6757600080fd5b50565b600081359050613f7981613f53565b92915050565b60008060408385031215613f9657613f95613872565b5b6000613fa4858286016138c5565b9250506020613fb585828601613f6a565b9150509250929050565b600067ffffffffffffffff821115613fda57613fd9613cd3565b5b613fe382613a08565b9050602081019050919050565b6000614003613ffe84613fbf565b613d33565b90508281526020810184848401111561401f5761401e613cce565b5b61402a848285613d7f565b509392505050565b600082601f83011261404757614046613cc9565b5b8135614057848260208601613ff0565b91505092915050565b6000806000806080858703121561407a57614079613872565b5b6000614088878288016138c5565b9450506020614099878288016138c5565b93505060406140aa87828801613a8b565b925050606085013567ffffffffffffffff8111156140cb576140ca613877565b5b6140d787828801614032565b91505092959194509250565b600080600080608085870312156140fd576140fc613872565b5b600061410b87828801613a8b565b945050602061411c87828801613c17565b935050604061412d87828801613c4d565b925050606061413e87828801613c4d565b91505092959194509250565b6000806040838503121561416157614160613872565b5b600061416f858286016138c5565b9250506020614180858286016138c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141c06020836139cd565b91506141cb8261418a565b602082019050919050565b600060208201905081810360008301526141ef816141b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061423d57607f821691505b6020821081036142505761424f6141f6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006142b2602d836139cd565b91506142bd82614256565b604082019050919050565b600060208201905081810360008301526142e1816142a5565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006143446022836139cd565b915061434f826142e8565b604082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006143d66039836139cd565b91506143e18261437a565b604082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444682613834565b915061445183613834565b92508282019050808211156144695761446861440c565b5b92915050565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b60006144a5601e836139cd565b91506144b08261446f565b602082019050919050565b600060208201905081810360008301526144d481614498565b9050919050565b6000815190506144ea81613a74565b92915050565b60006020828403121561450657614505613872565b5b6000614514848285016144db565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061455782613834565b915061456283613834565b9250826145725761457161451d565b5b828206905092915050565b600061458882613834565b915061459383613834565b9250826145a3576145a261451d565b5b828204905092915050565b60006145b982613834565b91506145c483613834565b92508282039050818111156145dc576145db61440c565b5b92915050565b60006145ed82613834565b91506145f883613834565b925082820261460681613834565b9150828204841483151761461d5761461c61440c565b5b5092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006146806022836139cd565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b60006146c182613834565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146f3576146f261440c565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061475a602e836139cd565b9150614765826146fe565b604082019050919050565b600060208201905081810360008301526147898161474d565b9050919050565b60008160601b9050919050565b60006147a882614790565b9050919050565b60006147ba8261479d565b9050919050565b6147d26147cd8261389c565b6147af565b82525050565b60006147e482856147c1565b6014820191506147f482846147c1565b6014820191508190509392505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614845601c83614804565b91506148508261480f565b601c82019050919050565b6000819050919050565b61487661487182613c2c565b61485b565b82525050565b600061488782614838565b91506148938284614865565b60208201915081905092915050565b6148ab81613c2c565b82525050565b6148ba81613bf3565b82525050565b60006080820190506148d560008301876148a2565b6148e260208301866148b1565b6148ef60408301856148a2565b6148fc60608301846148a2565b95945050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261492a565b614971868361492a565b95508019841693508086168417925050509392505050565b60006149a461499f61499a84613834565b613e47565b613834565b9050919050565b6000819050919050565b6149be83614989565b6149d26149ca826149ab565b848454614937565b825550505050565b600090565b6149e76149da565b6149f28184846149b5565b505050565b5b81811015614a1657614a0b6000826149df565b6001810190506149f8565b5050565b601f821115614a5b57614a2c81614905565b614a358461491a565b81016020851015614a44578190505b614a58614a508561491a565b8301826149f7565b50505b505050565b600082821c905092915050565b6000614a7e60001984600802614a60565b1980831691505092915050565b6000614a978383614a6d565b9150826002028217905092915050565b614ab0826139c2565b67ffffffffffffffff811115614ac957614ac8613cd3565b5b614ad38254614225565b614ade828285614a1a565b600060209050601f831160018114614b115760008415614aff578287015190505b614b098582614a8b565b865550614b71565b601f198416614b1f86614905565b60005b82811015614b4757848901518255600182019150602085019450602081019050614b22565b86831015614b645784890151614b60601f891682614a6d565b8355505b6001600288020188555050505b505050505050565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd56022836139cd565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c676023836139cd565b9150614c7282614c0b565b604082019050919050565b60006020820190508181036000830152614c9681614c5a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614cf9602b836139cd565b9150614d0482614c9d565b604082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614d65601a836139cd565b9150614d7082614d2f565b602082019050919050565b60006020820190508181036000830152614d9481614d58565b9050919050565b7f5075626c69632053616c6520696e206e6f74206f70656e207965742100000000600082015250565b6000614dd1601c836139cd565b9150614ddc82614d9b565b602082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f4d6178696d756d204d696e747320706572205458204578636565646564210000600082015250565b6000614e3d601e836139cd565b9150614e4882614e07565b602082019050919050565b60006020820190508181036000830152614e6c81614e30565b9050919050565b7f496e73756666696369656e742066756e647320746f206d696e7420746869732060008201527f616d6f756e74206f66204e465473000000000000000000000000000000000000602082015250565b6000614ecf602e836139cd565b9150614eda82614e73565b604082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614f616033836139cd565b9150614f6c82614f05565b604082019050919050565b60006020820190508181036000830152614f9081614f54565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ff3602f836139cd565b9150614ffe82614f97565b604082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b6000615034826139c2565b61503e8185614804565b935061504e8185602086016139de565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000615090600583614804565b915061509b8261505a565b600582019050919050565b60006150b28285615029565b91506150be8284615029565b91506150c982615083565b91508190509392505050565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b600061510b6011836139cd565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b60006151776015836139cd565b915061518282615141565b602082019050919050565b600060208201905081810360008301526151a68161516a565b9050919050565b7f50726573616c652068617320636c6f7365642c20436865636b206f757420507560008201527f626c69632053616c652100000000000000000000000000000000000000000000602082015250565b6000615209602a836139cd565b9150615214826151ad565b604082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b60006152756015836139cd565b91506152808261523f565b602082019050919050565b600060208201905081810360008301526152a481615268565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153076026836139cd565b9150615312826152ab565b604082019050919050565b60006020820190508181036000830152615336816152fa565b9050919050565b7f53616c65206d75737420626520696e2050726573616c65210000000000000000600082015250565b60006153736018836139cd565b915061537e8261533d565b602082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006154056032836139cd565b9150615410826153a9565b604082019050919050565b60006020820190508181036000830152615434816153f8565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006154976026836139cd565b91506154a28261543b565b604082019050919050565b600060208201905081810360008301526154c68161548a565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155296025836139cd565b9150615534826154cd565b604082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006155868261555f565b91506155918361555f565b925082820390506fffffffffffffffffffffffffffffffff8111156155b9576155b861440c565b5b92915050565b60006155ca8261555f565b91506155d58361555f565b925082820190506fffffffffffffffffffffffffffffffff8111156155fd576155fc61440c565b5b92915050565b600081905092915050565b50565b600061561e600083615603565b91506156298261560e565b600082019050919050565b600061563f82615611565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061567f6014836139cd565b915061568a82615649565b602082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000615711602a836139cd565b915061571c826156b5565b604082019050919050565b6000602082019050818103600083015261574081615704565b9050919050565b600061575282613834565b9150600082036157655761576461440c565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006157cc602f836139cd565b91506157d782615770565b604082019050919050565b600060208201905081810360008301526157fb816157bf565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061582982615802565b615833818561580d565b93506158438185602086016139de565b61584c81613a08565b840191505092915050565b600060808201905061586c6000830187613acd565b6158796020830186613acd565b615886604083018561383e565b8181036060830152615898818461581e565b905095945050505050565b6000815190506158b281613933565b92915050565b6000602082840312156158ce576158cd613872565b5b60006158dc848285016158a3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159706021836139cd565b915061597b82615914565b604082019050919050565b6000602082019050818103600083015261599f81615963565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006159dc601d836139cd565b91506159e7826159a6565b602082019050919050565b60006020820190508181036000830152615a0b816159cf565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a6e6022836139cd565b9150615a7982615a12565b604082019050919050565b60006020820190508181036000830152615a9d81615a61565b905091905056fea2646970667358221220733caafd9575532da6e9a3c9107cc08400e822f0e7b8b8c2a797e2b118a886ec64736f6c63430008120033697066733a2f2f516d6542687a4e354c624658625463727379367434645378314a56486a743374693868726163645970666d7046342f
Deployed Bytecode
0x6080604052600436106102285760003560e01c80636352211e11610123578063b3ab66b0116100ab578063dcd4e7321161006f578063dcd4e7321461083b578063e985e9c514610857578063eab4178214610894578063f2fde38b146108ab578063ff984994146108d45761022f565b8063b3ab66b014610765578063b4bc896314610781578063b88d4fde146107aa578063c87b56dd146107d3578063d7224ba0146108105761022f565b80637f1921ef116100f25780637f1921ef146106925780638da5cb5b146106bb57806395d89b41146106e6578063a22cb46514610711578063b0a1c1c41461073a5761022f565b80636352211e146105c457806370a0823114610601578063715018a61461063e5780637b0c8b07146106555761022f565b80632d08ddb7116101b15780633ccfd60b116101755780633ccfd60b146104f157806342842e0e146105085780634f6ccce71461053157806358757add1461056e578063603f4d52146105995761022f565b80632d08ddb7146103d35780632f745c59146104115780633023eba61461044e578063326241141461048b57806339a0c6f9146104c85761022f565b8063081812fc116101f8578063081812fc146102f0578063095ea7b31461032d57806318160ddd1461035657806318df64031461038157806323b872dd146103aa5761022f565b8062b388b2146102345780630191a6571461025f57806301ffc9a71461028857806306fdde03146102c55761022f565b3661022f57005b600080fd5b34801561024057600080fd5b506102496108eb565b604051610256919061384d565b60405180910390f35b34801561026b57600080fd5b50610286600480360381019061028191906138da565b6108f0565b005b34801561029457600080fd5b506102af60048036038101906102aa919061395f565b6109b0565b6040516102bc91906139a7565b60405180910390f35b3480156102d157600080fd5b506102da610afa565b6040516102e79190613a52565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613aa0565b610b8c565b6040516103249190613adc565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190613af7565b610c11565b005b34801561036257600080fd5b5061036b610d29565b604051610378919061384d565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190613b37565b610d32565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190613b77565b610e87565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613b37565b610e97565b604051610408929190613bca565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613af7565b61106d565b604051610445919061384d565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906138da565b611269565b604051610482919061384d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613c62565b611281565b6040516104bf91906139a7565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613dfe565b61137f565b005b3480156104fd57600080fd5b5061050661140e565b005b34801561051457600080fd5b5061052f600480360381019061052a9190613b77565b6114ed565b005b34801561053d57600080fd5b5061055860048036038101906105539190613aa0565b61150d565b604051610565919061384d565b60405180910390f35b34801561057a57600080fd5b50610583611560565b6040516105909190613ea6565b60405180910390f35b3480156105a557600080fd5b506105ae611586565b6040516105bb9190613f38565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e69190613aa0565b6115b5565b6040516105f89190613adc565b60405180910390f35b34801561060d57600080fd5b50610628600480360381019061062391906138da565b6115cb565b604051610635919061384d565b60405180910390f35b34801561064a57600080fd5b506106536116b3565b005b34801561066157600080fd5b5061067c600480360381019061067791906138da565b61173b565b604051610689919061384d565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190613aa0565b611753565b005b3480156106c757600080fd5b506106d06117d9565b6040516106dd9190613adc565b60405180910390f35b3480156106f257600080fd5b506106fb611803565b6040516107089190613a52565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613f7f565b611895565b005b34801561074657600080fd5b5061074f611a15565b60405161075c919061384d565b60405180910390f35b61077f600480360381019061077a9190613aa0565b611a99565b005b34801561078d57600080fd5b506107a860048036038101906107a391906138da565b611cd4565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614060565b611d94565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190613aa0565b611df0565b6040516108079190613a52565b60405180910390f35b34801561081c57600080fd5b50610825611e97565b604051610832919061384d565b60405180910390f35b610855600480360381019061085091906140e3565b611e9d565b005b34801561086357600080fd5b5061087e6004803603810190610879919061414a565b612193565b60405161088b91906139a7565b60405180910390f35b3480156108a057600080fd5b506108a9612227565b005b3480156108b757600080fd5b506108d260048036038101906108cd91906138da565b61231a565b005b3480156108e057600080fd5b506108e9612411565b005b600f81565b6108f8612504565b73ffffffffffffffffffffffffffffffffffffffff166109166117d9565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906141d6565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af35750610af28261250c565b5b9050919050565b606060018054610b0990614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3590614225565b8015610b825780601f10610b5757610100808354040283529160200191610b82565b820191906000526020600020905b815481529060010190602001808311610b6557829003601f168201915b5050505050905090565b6000610b9782612576565b610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd906142c8565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1c826115b5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c839061435a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cab612504565b73ffffffffffffffffffffffffffffffffffffffff161480610cda5750610cd981610cd4612504565b612193565b5b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d10906143ec565b60405180910390fd5b610d24838383612583565b505050565b60008054905090565b610d3a612504565b73ffffffffffffffffffffffffffffffffffffffff16610d586117d9565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906141d6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000037882610dd8610d29565b610de2919061443b565b1115610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a906144bb565b60405180910390fd5b610e2d8183612635565b81600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e7c919061443b565b925050819055505050565b610e92838383612653565b505050565b6000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610ef79190613adc565b602060405180830381865afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3891906144f0565b9050600060018203610f4d5760019050610f92565b6000600283610f5c919061454c565b03610f7557600282610f6e919061457d565b9050610f91565b6002600183610f8491906145ae565b610f8e919061457d565b90505b5b601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561102b57601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161102491906145ae565b9050611030565b600090505b85811061104557600086935093505050611066565b808661105191906145ae565b600a5461105e91906145e2565b819350935050505b9250929050565b6000611078836115cb565b82106110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614696565b60405180910390fd5b60006110c3610d29565b905060008060005b83811015611227576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111bd57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361121357868403611204578195505050505050611263565b838061120f906146b6565b9450505b50808061121f906146b6565b9150506110cb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614770565b60405180910390fd5b92915050565b600f6020528060005260406000206000915090505481565b60008030866040516020016112979291906147d8565b6040516020818303038152906040528051906020012090506001816040516020016112c2919061487c565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112f894939291906148c0565b6020604051602081039080840390855afa15801561131a573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b611387612504565b73ffffffffffffffffffffffffffffffffffffffff166113a56117d9565b73ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906141d6565b60405180910390fd5b806009908161140a9190614aa7565b5050565b611416612504565b73ffffffffffffffffffffffffffffffffffffffff166114346117d9565b73ffffffffffffffffffffffffffffffffffffffff161461148a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611481906141d6565b60405180910390fd5b6000611494611a15565b9050600081116114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614beb565b60405180910390fd5b6114ea6114e46117d9565b82612c0a565b50565b61150883838360405180602001604052806000815250611d94565b505050565b6000611517610d29565b8210611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614c7d565b60405180910390fd5b819050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c540361159a57600090506115b2565b6000600d54036115ad57600190506115b2565b600290505b90565b60006115c082612cbb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163290614d0f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116bb612504565b73ffffffffffffffffffffffffffffffffffffffff166116d96117d9565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611726906141d6565b60405180910390fd5b6117396000612ebe565b565b60106020528060005260406000206000915090505481565b61175b612504565b73ffffffffffffffffffffffffffffffffffffffff166117796117d9565b73ffffffffffffffffffffffffffffffffffffffff16146117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906141d6565b60405180910390fd5b80600a8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461181290614225565b80601f016020809104026020016040519081016040528092919081815260200182805461183e90614225565b801561188b5780601f106118605761010080835404028352916020019161188b565b820191906000526020600020905b81548152906001019060200180831161186e57829003601f168201915b5050505050905090565b61189d612504565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190614d7b565b60405180910390fd5b8060066000611917612504565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119c4612504565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a0991906139a7565b60405180910390a35050565b6000611a1f612504565b73ffffffffffffffffffffffffffffffffffffffff16611a3d6117d9565b73ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906141d6565b60405180910390fd5b47905090565b6000611aa3611586565b9050600280811115611ab857611ab7613ec1565b5b816002811115611acb57611aca613ec1565b5b14611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614de7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000037882611b35610d29565b611b3f919061443b565b1115611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b77906144bb565b60405180910390fd5b600f821115611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614e53565b60405180910390fd5b600080611bd18433610e97565b9150915081341015611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614ee5565b60405180910390fd5b611c223385612635565b83600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c71919061443b565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cc7919061443b565b9250508190555050505050565b611cdc612504565b73ffffffffffffffffffffffffffffffffffffffff16611cfa6117d9565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906141d6565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9f848484612653565b611dab84848484612f84565b611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614f77565b60405180910390fd5b50505050565b6060611dfb82612576565b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190615009565b60405180910390fd5b6000611e4461310b565b90506000815111611e645760405180602001604052806000815250611e8f565b80611e6e8461319d565b604051602001611e7f9291906150a6565b6040516020818303038152906040525b915050919050565b60075481565b828282611eac33848484611281565b611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290615121565b60405180910390fd5b6000611ef5611586565b905060006002811115611f0b57611f0a613ec1565b5b816002811115611f1e57611f1d613ec1565b5b03611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f559061518d565b60405180910390fd5b600280811115611f7157611f70613ec1565b5b816002811115611f8457611f83613ec1565b5b03611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb9061521f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000037888611fee610d29565b611ff8919061443b565b1115612039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612030906144bb565b60405180910390fd5b600f88111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614e53565b60405180910390fd5b60008061208a8a33610e97565b91509150813410156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c890614ee5565b60405180910390fd5b6120db338b612635565b89600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212a919061443b565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612180919061443b565b9250508190555050505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61222f612504565b73ffffffffffffffffffffffffffffffffffffffff1661224d6117d9565b73ffffffffffffffffffffffffffffffffffffffff16146122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a906141d6565b60405180910390fd5b600060028111156122b7576122b6613ec1565b5b6122bf611586565b60028111156122d1576122d0613ec1565b5b14612311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123089061528b565b60405180910390fd5b42600c81905550565b612322612504565b73ffffffffffffffffffffffffffffffffffffffff166123406117d9565b73ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d906141d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc9061531d565b60405180910390fd5b61240e81612ebe565b50565b612419612504565b73ffffffffffffffffffffffffffffffffffffffff166124376117d9565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906141d6565b60405180910390fd5b600160028111156124a1576124a0613ec1565b5b6124a9611586565b60028111156124bb576124ba613ec1565b5b146124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290615389565b60405180910390fd5b42600d81905550565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61264f8282604051806020016040528060008152506132fd565b5050565b600061265e82612cbb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612685612504565b73ffffffffffffffffffffffffffffffffffffffff1614806126e157506126aa612504565b73ffffffffffffffffffffffffffffffffffffffff166126c984610b8c565b73ffffffffffffffffffffffffffffffffffffffff16145b806126fd57506126fc82600001516126f7612504565b612193565b5b90508061273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061541b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906154ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128179061553f565b60405180910390fd5b61282d85858560016137db565b61283d6000848460000151612583565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128ab919061557b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661294f91906155bf565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a55919061443b565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612b9a57612aca81612576565b15612b99576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c0286868660016137e1565b505050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612c3090615634565b60006040518083038185875af1925050503d8060008114612c6d576040519150601f19603f3d011682016040523d82523d6000602084013e612c72565b606091505b5050905080612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615695565b60405180910390fd5b505050565b612cc36137fa565b612ccc82612576565b612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290615727565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000f8310612d6f5760017f000000000000000000000000000000000000000000000000000000000000000f84612d6291906145ae565b612d6c919061443b565b90505b60008390505b818110612e7d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6957809350505050612eb9565b508080612e7590615747565b915050612d75565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb0906157e2565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612fa58473ffffffffffffffffffffffffffffffffffffffff166137e7565b156130fe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fce612504565b8786866040518563ffffffff1660e01b8152600401612ff09493929190615857565b6020604051808303816000875af192505050801561302c57506040513d601f19601f8201168201806040525081019061302991906158b8565b60015b6130ae573d806000811461305c576040519150601f19603f3d011682016040523d82523d6000602084013e613061565b606091505b5060008151036130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d90614f77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613103565b600190505b949350505050565b60606009805461311a90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461314690614225565b80156131935780601f1061316857610100808354040283529160200191613193565b820191906000526020600020905b81548152906001019060200180831161317657829003601f168201915b5050505050905090565b6060600082036131e4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132f8565b600082905060005b600082146132165780806131ff906146b6565b915050600a8261320f919061457d565b91506131ec565b60008167ffffffffffffffff81111561323257613231613cd3565b5b6040519080825280601f01601f1916602001820160405280156132645781602001600182028036833780820191505090505b5090505b600085146132f15760018261327d91906145ae565b9150600a8561328c919061454c565b6030613298919061443b565b60f81b8183815181106132ae576132ad6158e5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132ea919061457d565b9450613268565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336990615986565b60405180910390fd5b61337b81612576565b156133bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b2906159f2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000f83111561341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590615a84565b60405180910390fd5b61342b60008583866137db565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161352891906155bf565b6fffffffffffffffffffffffffffffffff16815260200185836020015161354f91906155bf565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137be57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461375e6000888488612f84565b61379d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379490614f77565b60405180910390fd5b81806137a8906146b6565b92505080806137b6906146b6565b9150506136ed565b50806000819055506137d360008785886137e1565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000819050919050565b61384781613834565b82525050565b6000602082019050613862600083018461383e565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138a78261387c565b9050919050565b6138b78161389c565b81146138c257600080fd5b50565b6000813590506138d4816138ae565b92915050565b6000602082840312156138f0576138ef613872565b5b60006138fe848285016138c5565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61393c81613907565b811461394757600080fd5b50565b60008135905061395981613933565b92915050565b60006020828403121561397557613974613872565b5b60006139838482850161394a565b91505092915050565b60008115159050919050565b6139a18161398c565b82525050565b60006020820190506139bc6000830184613998565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139fc5780820151818401526020810190506139e1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a24826139c2565b613a2e81856139cd565b9350613a3e8185602086016139de565b613a4781613a08565b840191505092915050565b60006020820190508181036000830152613a6c8184613a19565b905092915050565b613a7d81613834565b8114613a8857600080fd5b50565b600081359050613a9a81613a74565b92915050565b600060208284031215613ab657613ab5613872565b5b6000613ac484828501613a8b565b91505092915050565b613ad68161389c565b82525050565b6000602082019050613af16000830184613acd565b92915050565b60008060408385031215613b0e57613b0d613872565b5b6000613b1c858286016138c5565b9250506020613b2d85828601613a8b565b9150509250929050565b60008060408385031215613b4e57613b4d613872565b5b6000613b5c85828601613a8b565b9250506020613b6d858286016138c5565b9150509250929050565b600080600060608486031215613b9057613b8f613872565b5b6000613b9e868287016138c5565b9350506020613baf868287016138c5565b9250506040613bc086828701613a8b565b9150509250925092565b6000604082019050613bdf600083018561383e565b613bec602083018461383e565b9392505050565b600060ff82169050919050565b613c0981613bf3565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060008060808587031215613c7c57613c7b613872565b5b6000613c8a878288016138c5565b9450506020613c9b87828801613c17565b9350506040613cac87828801613c4d565b9250506060613cbd87828801613c4d565b91505092959194509250565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d0b82613a08565b810181811067ffffffffffffffff82111715613d2a57613d29613cd3565b5b80604052505050565b6000613d3d613868565b9050613d498282613d02565b919050565b600067ffffffffffffffff821115613d6957613d68613cd3565b5b613d7282613a08565b9050602081019050919050565b82818337600083830152505050565b6000613da1613d9c84613d4e565b613d33565b905082815260208101848484011115613dbd57613dbc613cce565b5b613dc8848285613d7f565b509392505050565b600082601f830112613de557613de4613cc9565b5b8135613df5848260208601613d8e565b91505092915050565b600060208284031215613e1457613e13613872565b5b600082013567ffffffffffffffff811115613e3257613e31613877565b5b613e3e84828501613dd0565b91505092915050565b6000819050919050565b6000613e6c613e67613e628461387c565b613e47565b61387c565b9050919050565b6000613e7e82613e51565b9050919050565b6000613e9082613e73565b9050919050565b613ea081613e85565b82525050565b6000602082019050613ebb6000830184613e97565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110613f0157613f00613ec1565b5b50565b6000819050613f1282613ef0565b919050565b6000613f2282613f04565b9050919050565b613f3281613f17565b82525050565b6000602082019050613f4d6000830184613f29565b92915050565b613f5c8161398c565b8114613f6757600080fd5b50565b600081359050613f7981613f53565b92915050565b60008060408385031215613f9657613f95613872565b5b6000613fa4858286016138c5565b9250506020613fb585828601613f6a565b9150509250929050565b600067ffffffffffffffff821115613fda57613fd9613cd3565b5b613fe382613a08565b9050602081019050919050565b6000614003613ffe84613fbf565b613d33565b90508281526020810184848401111561401f5761401e613cce565b5b61402a848285613d7f565b509392505050565b600082601f83011261404757614046613cc9565b5b8135614057848260208601613ff0565b91505092915050565b6000806000806080858703121561407a57614079613872565b5b6000614088878288016138c5565b9450506020614099878288016138c5565b93505060406140aa87828801613a8b565b925050606085013567ffffffffffffffff8111156140cb576140ca613877565b5b6140d787828801614032565b91505092959194509250565b600080600080608085870312156140fd576140fc613872565b5b600061410b87828801613a8b565b945050602061411c87828801613c17565b935050604061412d87828801613c4d565b925050606061413e87828801613c4d565b91505092959194509250565b6000806040838503121561416157614160613872565b5b600061416f858286016138c5565b9250506020614180858286016138c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141c06020836139cd565b91506141cb8261418a565b602082019050919050565b600060208201905081810360008301526141ef816141b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061423d57607f821691505b6020821081036142505761424f6141f6565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006142b2602d836139cd565b91506142bd82614256565b604082019050919050565b600060208201905081810360008301526142e1816142a5565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006143446022836139cd565b915061434f826142e8565b604082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006143d66039836139cd565b91506143e18261437a565b604082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444682613834565b915061445183613834565b92508282019050808211156144695761446861440c565b5b92915050565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b60006144a5601e836139cd565b91506144b08261446f565b602082019050919050565b600060208201905081810360008301526144d481614498565b9050919050565b6000815190506144ea81613a74565b92915050565b60006020828403121561450657614505613872565b5b6000614514848285016144db565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061455782613834565b915061456283613834565b9250826145725761457161451d565b5b828206905092915050565b600061458882613834565b915061459383613834565b9250826145a3576145a261451d565b5b828204905092915050565b60006145b982613834565b91506145c483613834565b92508282039050818111156145dc576145db61440c565b5b92915050565b60006145ed82613834565b91506145f883613834565b925082820261460681613834565b9150828204841483151761461d5761461c61440c565b5b5092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006146806022836139cd565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b60006146c182613834565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146f3576146f261440c565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061475a602e836139cd565b9150614765826146fe565b604082019050919050565b600060208201905081810360008301526147898161474d565b9050919050565b60008160601b9050919050565b60006147a882614790565b9050919050565b60006147ba8261479d565b9050919050565b6147d26147cd8261389c565b6147af565b82525050565b60006147e482856147c1565b6014820191506147f482846147c1565b6014820191508190509392505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614845601c83614804565b91506148508261480f565b601c82019050919050565b6000819050919050565b61487661487182613c2c565b61485b565b82525050565b600061488782614838565b91506148938284614865565b60208201915081905092915050565b6148ab81613c2c565b82525050565b6148ba81613bf3565b82525050565b60006080820190506148d560008301876148a2565b6148e260208301866148b1565b6148ef60408301856148a2565b6148fc60608301846148a2565b95945050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261492a565b614971868361492a565b95508019841693508086168417925050509392505050565b60006149a461499f61499a84613834565b613e47565b613834565b9050919050565b6000819050919050565b6149be83614989565b6149d26149ca826149ab565b848454614937565b825550505050565b600090565b6149e76149da565b6149f28184846149b5565b505050565b5b81811015614a1657614a0b6000826149df565b6001810190506149f8565b5050565b601f821115614a5b57614a2c81614905565b614a358461491a565b81016020851015614a44578190505b614a58614a508561491a565b8301826149f7565b50505b505050565b600082821c905092915050565b6000614a7e60001984600802614a60565b1980831691505092915050565b6000614a978383614a6d565b9150826002028217905092915050565b614ab0826139c2565b67ffffffffffffffff811115614ac957614ac8613cd3565b5b614ad38254614225565b614ade828285614a1a565b600060209050601f831160018114614b115760008415614aff578287015190505b614b098582614a8b565b865550614b71565b601f198416614b1f86614905565b60005b82811015614b4757848901518255600182019150602085019450602081019050614b22565b86831015614b645784890151614b60601f891682614a6d565b8355505b6001600288020188555050505b505050505050565b7f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd56022836139cd565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c676023836139cd565b9150614c7282614c0b565b604082019050919050565b60006020820190508181036000830152614c9681614c5a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614cf9602b836139cd565b9150614d0482614c9d565b604082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614d65601a836139cd565b9150614d7082614d2f565b602082019050919050565b60006020820190508181036000830152614d9481614d58565b9050919050565b7f5075626c69632053616c6520696e206e6f74206f70656e207965742100000000600082015250565b6000614dd1601c836139cd565b9150614ddc82614d9b565b602082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f4d6178696d756d204d696e747320706572205458204578636565646564210000600082015250565b6000614e3d601e836139cd565b9150614e4882614e07565b602082019050919050565b60006020820190508181036000830152614e6c81614e30565b9050919050565b7f496e73756666696369656e742066756e647320746f206d696e7420746869732060008201527f616d6f756e74206f66204e465473000000000000000000000000000000000000602082015250565b6000614ecf602e836139cd565b9150614eda82614e73565b604082019050919050565b60006020820190508181036000830152614efe81614ec2565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614f616033836139cd565b9150614f6c82614f05565b604082019050919050565b60006020820190508181036000830152614f9081614f54565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ff3602f836139cd565b9150614ffe82614f97565b604082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b6000615034826139c2565b61503e8185614804565b935061504e8185602086016139de565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000615090600583614804565b915061509b8261505a565b600582019050919050565b60006150b28285615029565b91506150be8284615029565b91506150c982615083565b91508190509392505050565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b600061510b6011836139cd565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b60006151776015836139cd565b915061518282615141565b602082019050919050565b600060208201905081810360008301526151a68161516a565b9050919050565b7f50726573616c652068617320636c6f7365642c20436865636b206f757420507560008201527f626c69632053616c652100000000000000000000000000000000000000000000602082015250565b6000615209602a836139cd565b9150615214826151ad565b604082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f53616c6520697320616c7265616479204f70656e210000000000000000000000600082015250565b60006152756015836139cd565b91506152808261523f565b602082019050919050565b600060208201905081810360008301526152a481615268565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006153076026836139cd565b9150615312826152ab565b604082019050919050565b60006020820190508181036000830152615336816152fa565b9050919050565b7f53616c65206d75737420626520696e2050726573616c65210000000000000000600082015250565b60006153736018836139cd565b915061537e8261533d565b602082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006154056032836139cd565b9150615410826153a9565b604082019050919050565b60006020820190508181036000830152615434816153f8565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006154976026836139cd565b91506154a28261543b565b604082019050919050565b600060208201905081810360008301526154c68161548a565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155296025836139cd565b9150615534826154cd565b604082019050919050565b600060208201905081810360008301526155588161551c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006155868261555f565b91506155918361555f565b925082820390506fffffffffffffffffffffffffffffffff8111156155b9576155b861440c565b5b92915050565b60006155ca8261555f565b91506155d58361555f565b925082820190506fffffffffffffffffffffffffffffffff8111156155fd576155fc61440c565b5b92915050565b600081905092915050565b50565b600061561e600083615603565b91506156298261560e565b600082019050919050565b600061563f82615611565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061567f6014836139cd565b915061568a82615649565b602082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000615711602a836139cd565b915061571c826156b5565b604082019050919050565b6000602082019050818103600083015261574081615704565b9050919050565b600061575282613834565b9150600082036157655761576461440c565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006157cc602f836139cd565b91506157d782615770565b604082019050919050565b600060208201905081810360008301526157fb816157bf565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061582982615802565b615833818561580d565b93506158438185602086016139de565b61584c81613a08565b840191505092915050565b600060808201905061586c6000830187613acd565b6158796020830186613acd565b615886604083018561383e565b8181036060830152615898818461581e565b905095945050505050565b6000815190506158b281613933565b92915050565b6000602082840312156158ce576158cd613872565b5b60006158dc848285016158a3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159706021836139cd565b915061597b82615914565b604082019050919050565b6000602082019050818103600083015261599f81615963565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b60006159dc601d836139cd565b91506159e7826159a6565b602082019050919050565b60006020820190508181036000830152615a0b816159cf565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a6e6022836139cd565b9150615a7982615a12565b604082019050919050565b60006020820190508181036000830152615a9d81615a61565b905091905056fea2646970667358221220733caafd9575532da6e9a3c9107cc08400e822f0e7b8b8c2a797e2b118a886ec64736f6c63430008120033
Deployed Bytecode Sourcemap
38082:7657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39594:8;;;38419:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44224:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25781:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27504:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29029:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28592:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24342:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43185:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29879:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44877:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24973;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38872:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40887:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39821:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43683:209;;;;;;;;;;;;;:::i;:::-;;30084:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24505:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39108:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44531:297;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27327:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26207:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4651:94;;;;;;;;;;;;;:::i;:::-;;38929:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45629:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4000:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27659:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29297:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43514:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42112:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44319:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30304:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42780:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34719:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41252:801;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29634:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39940:170;;;;;;;;;;;;;:::i;:::-;;4900:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40118:180;;;;;;;;;;;;;:::i;:::-;;38419:38;38455:2;38419:38;:::o;44224:87::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44297:6:::1;44289:5;;:14;;;;;;;;;;;;;;;;;;44224:87:::0;:::o;25781:370::-;25908:4;25953:25;25938:40;;;:11;:40;;;;:99;;;;26004:33;25989:48;;;:11;:48;;;;25938:99;:160;;;;26063:35;26048:50;;;:11;:50;;;;25938:160;:207;;;;26109:36;26133:11;26109:23;:36::i;:::-;25938:207;25924:221;;25781:370;;;:::o;27504:94::-;27558:13;27587:5;27580:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27504:94;:::o;29029:204::-;29097:7;29121:16;29129:7;29121;:16::i;:::-;29113:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29203:15;:24;29219:7;29203:24;;;;;;;;;;;;;;;;;;;;;29196:31;;29029:204;;;:::o;28592:379::-;28661:13;28677:24;28693:7;28677:15;:24::i;:::-;28661:40;;28722:5;28716:11;;:2;:11;;;28708:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28807:5;28791:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28816:37;28833:5;28840:12;:10;:12::i;:::-;28816:16;:37::i;:::-;28791:62;28775:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28937:28;28946:2;28950:7;28959:5;28937:8;:28::i;:::-;28654:317;28592:379;;:::o;24342:94::-;24395:7;24418:12;;24411:19;;24342:94;:::o;43185:279::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43301:14:::1;43291:6;43275:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;43267:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;43371:28;43381:9;43392:6;43371:9;:28::i;:::-;43440:6;43410:15;:26;43426:9;43410:26;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;43185:279:::0;;:::o;29879:142::-;29987:28;29997:4;30003:2;30007:7;29987:9;:28::i;:::-;29879:142;;;:::o;44877:744::-;44945:4;44951;44968:15;44986:11;;;;;;;;;;;:21;;;45008:4;44986:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44968:45;;45026:13;45065:1;45054:7;:12;45050:207;;45092:1;45081:12;;45050:207;;;45139:1;45134;45124:7;:11;;;;:::i;:::-;:16;45120:137;;45176:1;45166:7;:11;;;;:::i;:::-;45155:22;;45120:137;;;45244:1;45239;45229:7;:11;;;;:::i;:::-;45228:17;;;;:::i;:::-;45217:28;;45120:137;45050:207;45284:19;:25;45304:4;45284:25;;;;;;;;;;;;;;;;45273:8;:36;45269:156;;;45336:19;:25;45356:4;45336:25;;;;;;;;;;;;;;;;45324:37;;;;;:::i;:::-;;;45269:156;;;45412:1;45401:12;;45269:156;45453:6;45441:8;:18;45437:161;;45484:1;45487:6;45476:18;;;;;;;;45437:161;45566:8;45557:6;:17;;;;:::i;:::-;45544:9;;:31;;;;:::i;:::-;45577:8;45536:50;;;;;;44877:744;;;;;;:::o;24973:::-;25082:7;25117:16;25127:5;25117:9;:16::i;:::-;25109:5;:24;25101:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25179:22;25204:13;:11;:13::i;:::-;25179:38;;25224:19;25254:25;25304:9;25299:350;25323:14;25319:1;:18;25299:350;;;25353:31;25387:11;:14;25399:1;25387:14;;;;;;;;;;;25353:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25440:1;25414:28;;:9;:14;;;:28;;;25410:89;;25475:9;:14;;;25455:34;;25410:89;25532:5;25511:26;;:17;:26;;;25507:135;;25569:5;25554:11;:20;25550:59;;25596:1;25589:8;;;;;;;;;25550:59;25619:13;;;;;:::i;:::-;;;;25507:135;25344:305;25339:3;;;;;:::i;:::-;;;;25299:350;;;;25655:56;;;;;;;;;;:::i;:::-;;;;;;;;24973:744;;;;;:::o;38872:50::-;;;;;;;;;;;;;;;;;:::o;40887:306::-;40986:4;41003:12;41053:4;41060;41028:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41018:48;;;;;;41003:63;;41093:92;41166:4;41113:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;41103:69;;;;;;41174:2;41178;41182;41093:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41084:101;;:5;;;;;;;;;;;:101;;;41077:108;;;40887:306;;;;;;:::o;39821:109::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39914:8:::1;39896:15;:26;;;;;;:::i;:::-;;39821:109:::0;:::o;43683:209::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43731:15:::1;43749:16;:14;:16::i;:::-;43731:34;;43794:1;43784:7;:11;43776:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43847:36;43865:7;:5;:7::i;:::-;43875;43847:9;:36::i;:::-;43720:172;43683:209::o:0;30084:157::-;30196:39;30213:4;30219:2;30223:7;30196:39;;;;;;;;;;;;:16;:39::i;:::-;30084:157;;;:::o;24505:177::-;24572:7;24604:13;:11;:13::i;:::-;24596:5;:21;24588:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24671:5;24664:12;;24505:177;;;:::o;39108:36::-;;;;;;;;;;;;;:::o;44531:297::-;44572:5;44614:1;44593:17;;:22;44589:232;;44639:12;44632:19;;;;44589:232;44706:1;44682:20;;:25;44678:143;;44731:13;44724:20;;;;44678:143;44793:16;44786:23;;44531:297;;:::o;27327:118::-;27391:7;27414:20;27426:7;27414:11;:20::i;:::-;:25;;;27407:32;;27327:118;;;:::o;26207:208::-;26270:7;26310:1;26294:18;;:4;:18;;;26286:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26382:12;:18;26395:4;26382:18;;;;;;;;;;;;;;;:26;;;;;;;;;;;;26374:35;;26367:42;;26207:208;;;:::o;4651:94::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4716:21:::1;4734:1;4716:9;:21::i;:::-;4651:94::o:0;38929:54::-;;;;;;;;;;;;;;;;;:::o;45629:96::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45710:7:::1;45698:9;:19;;;;45629:96:::0;:::o;4000:87::-;4046:7;4073:6;;;;;;;;;;;4066:13;;4000:87;:::o;27659:98::-;27715:13;27744:7;27737:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27659:98;:::o;29297:274::-;29400:12;:10;:12::i;:::-;29388:24;;:8;:24;;;29380:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29497:8;29452:18;:32;29471:12;:10;:12::i;:::-;29452:32;;;;;;;;;;;;;;;:42;29485:8;29452:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29546:8;29517:48;;29532:12;:10;:12::i;:::-;29517:48;;;29556:8;29517:48;;;;;;:::i;:::-;;;;;;;;29297:274;;:::o;43514:109::-;43570:4;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43594:21:::1;43587:28;;43514:109:::0;:::o;42112:656::-;42178:16;42197:11;:9;:11::i;:::-;42178:30;;42241:16;42227:30;;;;;;;;:::i;:::-;;:10;:30;;;;;;;;:::i;:::-;;;42219:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42335:14;42325:6;42309:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;42301:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38455:2;42403:6;:19;;42395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42469:9;42480:14;42498:28;42507:6;42515:10;42498:8;:28::i;:::-;42468:58;;;;42558:4;42545:9;:17;;42537:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42628:29;42638:10;42650:6;42628:9;:29::i;:::-;42699:6;42668:15;:27;42684:10;42668:27;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;42751:9;42716:19;:31;42736:10;42716:31;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;42167:601;;;42112:656;:::o;44319:126::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44426:10:::1;44394:11;;:43;;;;;;;;;;;;;;;;;;44319:126:::0;:::o;30304:311::-;30441:28;30451:4;30457:2;30461:7;30441:9;:28::i;:::-;30492:48;30515:4;30521:2;30525:7;30534:5;30492:22;:48::i;:::-;30476:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;30304:311;;;;:::o;42780:360::-;42854:13;42888:17;42896:8;42888:7;:17::i;:::-;42880:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42970:21;42994:10;:8;:10::i;:::-;42970:34;;43046:1;43028:7;43022:21;:25;:96;;;;;;;;;;;;;;;;;43074:7;43083:19;:8;:17;:19::i;:::-;43057:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43022:96;43015:103;;;42780:360;;;:::o;34719:43::-;;;;:::o;41252:801::-;41339:2;41344;41348;40389:41;40410:10;40421:2;40424;40427;40389:20;:41::i;:::-;40380:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41378:16:::1;41397:11;:9;:11::i;:::-;41378:30;;41441:12;41427:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;::::0;41419:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41512:16;41498:30:::0;::::1;;;;;;;:::i;:::-;;:10;:30;;;;;;;;:::i;:::-;;::::0;41490:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41620:14;41610:6;41594:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;41586:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38455:2;41688:6;:19;;41680:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41754:9;41765:14:::0;41783:28:::1;41792:6;41800:10;41783:8;:28::i;:::-;41753:58;;;;41843:4;41830:9;:17;;41822:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41911:29;41921:10;41933:6;41911:9;:29::i;:::-;41982:6;41951:15;:27;41967:10;41951:27;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;42034:9;41999:19;:31;42019:10;41999:31;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;41367:686;;;41252:801:::0;;;;;;;:::o;29634:186::-;29756:4;29779:18;:25;29798:5;29779:25;;;;;;;;;;;;;;;:35;29805:8;29779:35;;;;;;;;;;;;;;;;;;;;;;;;;29772:42;;29634:186;;;;:::o;39940:170::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40018:12:::1;40003:27;;;;;;;;:::i;:::-;;:11;:9;:11::i;:::-;:27;;;;;;;;:::i;:::-;;;39995:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40087:15;40067:17;:35;;;;39940:170::o:0;4900:192::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5009:1:::1;4989:22;;:8;:22;;::::0;4981:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5065:19;5075:8;5065:9;:19::i;:::-;4900:192:::0;:::o;40118:180::-;4231:12;:10;:12::i;:::-;4220:23;;:7;:5;:7::i;:::-;:23;;;4212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40199:13:::1;40184:28;;;;;;;;:::i;:::-;;:11;:9;:11::i;:::-;:28;;;;;;;;:::i;:::-;;;40176:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40275:15;40252:20;:38;;;;40118:180::o:0;2788:98::-;2841:7;2868:10;2861:17;;2788:98;:::o;15986:157::-;16071:4;16110:25;16095:40;;;:11;:40;;;;16088:47;;15986:157;;;:::o;30854:105::-;30911:4;30941:12;;30931:7;:22;30924:29;;30854:105;;;:::o;34541:172::-;34665:2;34638:15;:24;34654:7;34638:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34699:7;34695:2;34679:28;;34688:5;34679:28;;;;;;;;;;;;34541:172;;;:::o;30965:98::-;31030:27;31040:2;31044:8;31030:27;;;;;;;;;;;;:9;:27::i;:::-;30965:98;;:::o;32906:1529::-;33003:35;33041:20;33053:7;33041:11;:20::i;:::-;33003:58;;33070:22;33112:13;:18;;;33096:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;33165:12;:10;:12::i;:::-;33141:36;;:20;33153:7;33141:11;:20::i;:::-;:36;;;33096:81;:142;;;;33188:50;33205:13;:18;;;33225:12;:10;:12::i;:::-;33188:16;:50::i;:::-;33096:142;33070:169;;33264:17;33248:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:4;33374:26;;:13;:18;;;:26;;;33358:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;33485:1;33471:16;;:2;:16;;;33463:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33538:43;33560:4;33566:2;33570:7;33579:1;33538:21;:43::i;:::-;33638:49;33655:1;33659:7;33668:13;:18;;;33638:8;:49::i;:::-;33726:1;33696:12;:18;33709:4;33696:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33762:1;33734:12;:16;33747:2;33734:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33793:43;;;;;;;;33808:2;33793:43;;;;;;33819:15;33793:43;;;;;33770:11;:20;33782:7;33770:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34064:19;34096:1;34086:7;:11;;;;:::i;:::-;34064:33;;34149:1;34108:43;;:11;:24;34120:11;34108:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34104:236;;34166:20;34174:11;34166:7;:20::i;:::-;34162:171;;;34226:97;;;;;;;;34253:13;:18;;;34226:97;;;;;;34284:13;:28;;;34226:97;;;;;34199:11;:24;34211:11;34199:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34162:171;34104:236;34372:7;34368:2;34353:27;;34362:4;34353:27;;;;;;;;;;;;34387:42;34408:4;34414:2;34418:7;34427:1;34387:20;:42::i;:::-;32996:1439;;;32906:1529;;;:::o;43967:183::-;44048:9;44063:7;:12;;44083:6;44063:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44047:47;;;44113:4;44105:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;44036:114;43967:183;;:::o;26667:606::-;26743:21;;:::i;:::-;26784:16;26792:7;26784;:16::i;:::-;26776:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26856:26;26904:12;26893:7;:23;26889:93;;26973:1;26958:12;26948:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;26927:47;;26889:93;26995:12;27010:7;26995:22;;26990:212;27027:18;27019:4;:26;26990:212;;27064:31;27098:11;:17;27110:4;27098:17;;;;;;;;;;;27064:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:1;27128:28;;:9;:14;;;:28;;;27124:71;;27176:9;27169:16;;;;;;;27124:71;27055:147;27047:6;;;;;:::i;:::-;;;;26990:212;;;;27210:57;;;;;;;;;;:::i;:::-;;;;;;;;26667:606;;;;:::o;5100:173::-;5156:16;5175:6;;;;;;;;;;;5156:25;;5201:8;5192:6;;:17;;;;;;;;;;;;;;;;;;5256:8;5225:40;;5246:8;5225:40;;;;;;;;;;;;5145:128;5100:173;:::o;36256:690::-;36393:4;36410:15;:2;:13;;;:15::i;:::-;36406:535;;;36465:2;36449:36;;;36486:12;:10;:12::i;:::-;36500:4;36506:7;36515:5;36449:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36436:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36697:1;36680:6;:13;:18;36676:215;;36713:61;;;;;;;;;;:::i;:::-;;;;;;;;36676:215;36859:6;36853:13;36844:6;36840:2;36836:15;36829:38;36436:464;36581:45;;;36571:55;;;:6;:55;;;;36564:62;;;;;36406:535;36929:4;36922:11;;36256:690;;;;;;;:::o;39647:116::-;39707:13;39740:15;39733:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39647:116;:::o;404:723::-;460:13;690:1;681:5;:10;677:53;;708:10;;;;;;;;;;;;;;;;;;;;;677:53;740:12;755:5;740:20;;771:14;796:78;811:1;803:4;:9;796:78;;829:8;;;;;:::i;:::-;;;;860:2;852:10;;;;;:::i;:::-;;;796:78;;;884:19;916:6;906:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;884:39;;934:154;950:1;941:5;:10;934:154;;978:1;968:11;;;;;:::i;:::-;;;1045:2;1037:5;:10;;;;:::i;:::-;1024:2;:24;;;;:::i;:::-;1011:39;;994:6;1001;994:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1074:2;1065:11;;;;;:::i;:::-;;;934:154;;;1112:6;1098:21;;;;;404:723;;;;:::o;31402:1272::-;31507:20;31530:12;;31507:35;;31571:1;31557:16;;:2;:16;;;31549:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31748:21;31756:12;31748:7;:21::i;:::-;31747:22;31739:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31830:12;31818:8;:24;;31810:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31890:61;31920:1;31924:2;31928:12;31942:8;31890:21;:61::i;:::-;31960:30;31993:12;:16;32006:2;31993:16;;;;;;;;;;;;;;;31960:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32035:119;;;;;;;;32085:8;32055:11;:19;;;:39;;;;:::i;:::-;32035:119;;;;;;32138:8;32103:11;:24;;;:44;;;;:::i;:::-;32035:119;;;;;32016:12;:16;32029:2;32016:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32189:43;;;;;;;;32204:2;32189:43;;;;;;32215:15;32189:43;;;;;32161:11;:25;32173:12;32161:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32241:20;32264:12;32241:35;;32290:9;32285:281;32309:8;32305:1;:12;32285:281;;;32363:12;32359:2;32338:38;;32355:1;32338:38;;;;;;;;;;;;32403:59;32434:1;32438:2;32442:12;32456:5;32403:22;:59::i;:::-;32385:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;32544:14;;;;;:::i;:::-;;;;32319:3;;;;;:::i;:::-;;;;32285:281;;;;32589:12;32574;:27;;;;32608:60;32637:1;32641:2;32645:12;32659:8;32608:20;:60::i;:::-;31500:1174;;;31402:1272;;;:::o;37408:141::-;;;;;:::o;37935:140::-;;;;;:::o;6046:387::-;6106:4;6314:12;6381:7;6369:20;6361:28;;6424:1;6417:4;:8;6410:15;;;6046:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:149::-;1647:7;1687:66;1680:5;1676:78;1665:89;;1611:149;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:327::-;2093:6;2142:2;2130:9;2121:7;2117:23;2113:32;2110:119;;;2148:79;;:::i;:::-;2110:119;2268:1;2293:52;2337:7;2328:6;2317:9;2313:22;2293:52;:::i;:::-;2283:62;;2239:116;2035:327;;;;:::o;2368:90::-;2402:7;2445:5;2438:13;2431:21;2420:32;;2368:90;;;:::o;2464:109::-;2545:21;2560:5;2545:21;:::i;:::-;2540:3;2533:34;2464:109;;:::o;2579:210::-;2666:4;2704:2;2693:9;2689:18;2681:26;;2717:65;2779:1;2768:9;2764:17;2755:6;2717:65;:::i;:::-;2579:210;;;;:::o;2795:99::-;2847:6;2881:5;2875:12;2865:22;;2795:99;;;:::o;2900:169::-;2984:11;3018:6;3013:3;3006:19;3058:4;3053:3;3049:14;3034:29;;2900:169;;;;:::o;3075:246::-;3156:1;3166:113;3180:6;3177:1;3174:13;3166:113;;;3265:1;3260:3;3256:11;3250:18;3246:1;3241:3;3237:11;3230:39;3202:2;3199:1;3195:10;3190:15;;3166:113;;;3313:1;3304:6;3299:3;3295:16;3288:27;3137:184;3075:246;;;:::o;3327:102::-;3368:6;3419:2;3415:7;3410:2;3403:5;3399:14;3395:28;3385:38;;3327:102;;;:::o;3435:377::-;3523:3;3551:39;3584:5;3551:39;:::i;:::-;3606:71;3670:6;3665:3;3606:71;:::i;:::-;3599:78;;3686:65;3744:6;3739:3;3732:4;3725:5;3721:16;3686:65;:::i;:::-;3776:29;3798:6;3776:29;:::i;:::-;3771:3;3767:39;3760:46;;3527:285;3435:377;;;;:::o;3818:313::-;3931:4;3969:2;3958:9;3954:18;3946:26;;4018:9;4012:4;4008:20;4004:1;3993:9;3989:17;3982:47;4046:78;4119:4;4110:6;4046:78;:::i;:::-;4038:86;;3818:313;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:329::-;4469:6;4518:2;4506:9;4497:7;4493:23;4489:32;4486:119;;;4524:79;;:::i;:::-;4486:119;4644:1;4669:53;4714:7;4705:6;4694:9;4690:22;4669:53;:::i;:::-;4659:63;;4615:117;4410:329;;;;:::o;4745:118::-;4832:24;4850:5;4832:24;:::i;:::-;4827:3;4820:37;4745:118;;:::o;4869:222::-;4962:4;5000:2;4989:9;4985:18;4977:26;;5013:71;5081:1;5070:9;5066:17;5057:6;5013:71;:::i;:::-;4869:222;;;;:::o;5097:474::-;5165:6;5173;5222:2;5210:9;5201:7;5197:23;5193:32;5190:119;;;5228:79;;:::i;:::-;5190:119;5348:1;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5319:117;5475:2;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5446:118;5097:474;;;;;:::o;5577:::-;5645:6;5653;5702:2;5690:9;5681:7;5677:23;5673:32;5670:119;;;5708:79;;:::i;:::-;5670:119;5828:1;5853:53;5898:7;5889:6;5878:9;5874:22;5853:53;:::i;:::-;5843:63;;5799:117;5955:2;5981:53;6026:7;6017:6;6006:9;6002:22;5981:53;:::i;:::-;5971:63;;5926:118;5577:474;;;;;:::o;6057:619::-;6134:6;6142;6150;6199:2;6187:9;6178:7;6174:23;6170:32;6167:119;;;6205:79;;:::i;:::-;6167:119;6325:1;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6296:117;6452:2;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6423:118;6580:2;6606:53;6651:7;6642:6;6631:9;6627:22;6606:53;:::i;:::-;6596:63;;6551:118;6057:619;;;;;:::o;6682:332::-;6803:4;6841:2;6830:9;6826:18;6818:26;;6854:71;6922:1;6911:9;6907:17;6898:6;6854:71;:::i;:::-;6935:72;7003:2;6992:9;6988:18;6979:6;6935:72;:::i;:::-;6682:332;;;;;:::o;7020:86::-;7055:7;7095:4;7088:5;7084:16;7073:27;;7020:86;;;:::o;7112:118::-;7183:22;7199:5;7183:22;:::i;:::-;7176:5;7173:33;7163:61;;7220:1;7217;7210:12;7163:61;7112:118;:::o;7236:135::-;7280:5;7318:6;7305:20;7296:29;;7334:31;7359:5;7334:31;:::i;:::-;7236:135;;;;:::o;7377:77::-;7414:7;7443:5;7432:16;;7377:77;;;:::o;7460:122::-;7533:24;7551:5;7533:24;:::i;:::-;7526:5;7523:35;7513:63;;7572:1;7569;7562:12;7513:63;7460:122;:::o;7588:139::-;7634:5;7672:6;7659:20;7650:29;;7688:33;7715:5;7688:33;:::i;:::-;7588:139;;;;:::o;7733:761::-;7817:6;7825;7833;7841;7890:3;7878:9;7869:7;7865:23;7861:33;7858:120;;;7897:79;;:::i;:::-;7858:120;8017:1;8042:53;8087:7;8078:6;8067:9;8063:22;8042:53;:::i;:::-;8032:63;;7988:117;8144:2;8170:51;8213:7;8204:6;8193:9;8189:22;8170:51;:::i;:::-;8160:61;;8115:116;8270:2;8296:53;8341:7;8332:6;8321:9;8317:22;8296:53;:::i;:::-;8286:63;;8241:118;8398:2;8424:53;8469:7;8460:6;8449:9;8445:22;8424:53;:::i;:::-;8414:63;;8369:118;7733:761;;;;;;;:::o;8500:117::-;8609:1;8606;8599:12;8623:117;8732:1;8729;8722:12;8746:180;8794:77;8791:1;8784:88;8891:4;8888:1;8881:15;8915:4;8912:1;8905:15;8932:281;9015:27;9037:4;9015:27;:::i;:::-;9007:6;9003:40;9145:6;9133:10;9130:22;9109:18;9097:10;9094:34;9091:62;9088:88;;;9156:18;;:::i;:::-;9088:88;9196:10;9192:2;9185:22;8975:238;8932:281;;:::o;9219:129::-;9253:6;9280:20;;:::i;:::-;9270:30;;9309:33;9337:4;9329:6;9309:33;:::i;:::-;9219:129;;;:::o;9354:308::-;9416:4;9506:18;9498:6;9495:30;9492:56;;;9528:18;;:::i;:::-;9492:56;9566:29;9588:6;9566:29;:::i;:::-;9558:37;;9650:4;9644;9640:15;9632:23;;9354:308;;;:::o;9668:146::-;9765:6;9760:3;9755;9742:30;9806:1;9797:6;9792:3;9788:16;9781:27;9668:146;;;:::o;9820:425::-;9898:5;9923:66;9939:49;9981:6;9939:49;:::i;:::-;9923:66;:::i;:::-;9914:75;;10012:6;10005:5;9998:21;10050:4;10043:5;10039:16;10088:3;10079:6;10074:3;10070:16;10067:25;10064:112;;;10095:79;;:::i;:::-;10064:112;10185:54;10232:6;10227:3;10222;10185:54;:::i;:::-;9904:341;9820:425;;;;;:::o;10265:340::-;10321:5;10370:3;10363:4;10355:6;10351:17;10347:27;10337:122;;10378:79;;:::i;:::-;10337:122;10495:6;10482:20;10520:79;10595:3;10587:6;10580:4;10572:6;10568:17;10520:79;:::i;:::-;10511:88;;10327:278;10265:340;;;;:::o;10611:509::-;10680:6;10729:2;10717:9;10708:7;10704:23;10700:32;10697:119;;;10735:79;;:::i;:::-;10697:119;10883:1;10872:9;10868:17;10855:31;10913:18;10905:6;10902:30;10899:117;;;10935:79;;:::i;:::-;10899:117;11040:63;11095:7;11086:6;11075:9;11071:22;11040:63;:::i;:::-;11030:73;;10826:287;10611:509;;;;:::o;11126:60::-;11154:3;11175:5;11168:12;;11126:60;;;:::o;11192:142::-;11242:9;11275:53;11293:34;11302:24;11320:5;11302:24;:::i;:::-;11293:34;:::i;:::-;11275:53;:::i;:::-;11262:66;;11192:142;;;:::o;11340:126::-;11390:9;11423:37;11454:5;11423:37;:::i;:::-;11410:50;;11340:126;;;:::o;11472:151::-;11547:9;11580:37;11611:5;11580:37;:::i;:::-;11567:50;;11472:151;;;:::o;11629:181::-;11741:62;11797:5;11741:62;:::i;:::-;11736:3;11729:75;11629:181;;:::o;11816:272::-;11934:4;11972:2;11961:9;11957:18;11949:26;;11985:96;12078:1;12067:9;12063:17;12054:6;11985:96;:::i;:::-;11816:272;;;;:::o;12094:180::-;12142:77;12139:1;12132:88;12239:4;12236:1;12229:15;12263:4;12260:1;12253:15;12280:115;12363:1;12356:5;12353:12;12343:46;;12369:18;;:::i;:::-;12343:46;12280:115;:::o;12401:131::-;12448:7;12477:5;12466:16;;12483:43;12520:5;12483:43;:::i;:::-;12401:131;;;:::o;12538:::-;12596:9;12629:34;12657:5;12629:34;:::i;:::-;12616:47;;12538:131;;;:::o;12675:147::-;12770:45;12809:5;12770:45;:::i;:::-;12765:3;12758:58;12675:147;;:::o;12828:238::-;12929:4;12967:2;12956:9;12952:18;12944:26;;12980:79;13056:1;13045:9;13041:17;13032:6;12980:79;:::i;:::-;12828:238;;;;:::o;13072:116::-;13142:21;13157:5;13142:21;:::i;:::-;13135:5;13132:32;13122:60;;13178:1;13175;13168:12;13122:60;13072:116;:::o;13194:133::-;13237:5;13275:6;13262:20;13253:29;;13291:30;13315:5;13291:30;:::i;:::-;13194:133;;;;:::o;13333:468::-;13398:6;13406;13455:2;13443:9;13434:7;13430:23;13426:32;13423:119;;;13461:79;;:::i;:::-;13423:119;13581:1;13606:53;13651:7;13642:6;13631:9;13627:22;13606:53;:::i;:::-;13596:63;;13552:117;13708:2;13734:50;13776:7;13767:6;13756:9;13752:22;13734:50;:::i;:::-;13724:60;;13679:115;13333:468;;;;;:::o;13807:307::-;13868:4;13958:18;13950:6;13947:30;13944:56;;;13980:18;;:::i;:::-;13944:56;14018:29;14040:6;14018:29;:::i;:::-;14010:37;;14102:4;14096;14092:15;14084:23;;13807:307;;;:::o;14120:423::-;14197:5;14222:65;14238:48;14279:6;14238:48;:::i;:::-;14222:65;:::i;:::-;14213:74;;14310:6;14303:5;14296:21;14348:4;14341:5;14337:16;14386:3;14377:6;14372:3;14368:16;14365:25;14362:112;;;14393:79;;:::i;:::-;14362:112;14483:54;14530:6;14525:3;14520;14483:54;:::i;:::-;14203:340;14120:423;;;;;:::o;14562:338::-;14617:5;14666:3;14659:4;14651:6;14647:17;14643:27;14633:122;;14674:79;;:::i;:::-;14633:122;14791:6;14778:20;14816:78;14890:3;14882:6;14875:4;14867:6;14863:17;14816:78;:::i;:::-;14807:87;;14623:277;14562:338;;;;:::o;14906:943::-;15001:6;15009;15017;15025;15074:3;15062:9;15053:7;15049:23;15045:33;15042:120;;;15081:79;;:::i;:::-;15042:120;15201:1;15226:53;15271:7;15262:6;15251:9;15247:22;15226:53;:::i;:::-;15216:63;;15172:117;15328:2;15354:53;15399:7;15390:6;15379:9;15375:22;15354:53;:::i;:::-;15344:63;;15299:118;15456:2;15482:53;15527:7;15518:6;15507:9;15503:22;15482:53;:::i;:::-;15472:63;;15427:118;15612:2;15601:9;15597:18;15584:32;15643:18;15635:6;15632:30;15629:117;;;15665:79;;:::i;:::-;15629:117;15770:62;15824:7;15815:6;15804:9;15800:22;15770:62;:::i;:::-;15760:72;;15555:287;14906:943;;;;;;;:::o;15855:761::-;15939:6;15947;15955;15963;16012:3;16000:9;15991:7;15987:23;15983:33;15980:120;;;16019:79;;:::i;:::-;15980:120;16139:1;16164:53;16209:7;16200:6;16189:9;16185:22;16164:53;:::i;:::-;16154:63;;16110:117;16266:2;16292:51;16335:7;16326:6;16315:9;16311:22;16292:51;:::i;:::-;16282:61;;16237:116;16392:2;16418:53;16463:7;16454:6;16443:9;16439:22;16418:53;:::i;:::-;16408:63;;16363:118;16520:2;16546:53;16591:7;16582:6;16571:9;16567:22;16546:53;:::i;:::-;16536:63;;16491:118;15855:761;;;;;;;:::o;16622:474::-;16690:6;16698;16747:2;16735:9;16726:7;16722:23;16718:32;16715:119;;;16753:79;;:::i;:::-;16715:119;16873:1;16898:53;16943:7;16934:6;16923:9;16919:22;16898:53;:::i;:::-;16888:63;;16844:117;17000:2;17026:53;17071:7;17062:6;17051:9;17047:22;17026:53;:::i;:::-;17016:63;;16971:118;16622:474;;;;;:::o;17102:182::-;17242:34;17238:1;17230:6;17226:14;17219:58;17102:182;:::o;17290:366::-;17432:3;17453:67;17517:2;17512:3;17453:67;:::i;:::-;17446:74;;17529:93;17618:3;17529:93;:::i;:::-;17647:2;17642:3;17638:12;17631:19;;17290:366;;;:::o;17662:419::-;17828:4;17866:2;17855:9;17851:18;17843:26;;17915:9;17909:4;17905:20;17901:1;17890:9;17886:17;17879:47;17943:131;18069:4;17943:131;:::i;:::-;17935:139;;17662:419;;;:::o;18087:180::-;18135:77;18132:1;18125:88;18232:4;18229:1;18222:15;18256:4;18253:1;18246:15;18273:320;18317:6;18354:1;18348:4;18344:12;18334:22;;18401:1;18395:4;18391:12;18422:18;18412:81;;18478:4;18470:6;18466:17;18456:27;;18412:81;18540:2;18532:6;18529:14;18509:18;18506:38;18503:84;;18559:18;;:::i;:::-;18503:84;18324:269;18273:320;;;:::o;18599:232::-;18739:34;18735:1;18727:6;18723:14;18716:58;18808:15;18803:2;18795:6;18791:15;18784:40;18599:232;:::o;18837:366::-;18979:3;19000:67;19064:2;19059:3;19000:67;:::i;:::-;18993:74;;19076:93;19165:3;19076:93;:::i;:::-;19194:2;19189:3;19185:12;19178:19;;18837:366;;;:::o;19209:419::-;19375:4;19413:2;19402:9;19398:18;19390:26;;19462:9;19456:4;19452:20;19448:1;19437:9;19433:17;19426:47;19490:131;19616:4;19490:131;:::i;:::-;19482:139;;19209:419;;;:::o;19634:221::-;19774:34;19770:1;19762:6;19758:14;19751:58;19843:4;19838:2;19830:6;19826:15;19819:29;19634:221;:::o;19861:366::-;20003:3;20024:67;20088:2;20083:3;20024:67;:::i;:::-;20017:74;;20100:93;20189:3;20100:93;:::i;:::-;20218:2;20213:3;20209:12;20202:19;;19861:366;;;:::o;20233:419::-;20399:4;20437:2;20426:9;20422:18;20414:26;;20486:9;20480:4;20476:20;20472:1;20461:9;20457:17;20450:47;20514:131;20640:4;20514:131;:::i;:::-;20506:139;;20233:419;;;:::o;20658:244::-;20798:34;20794:1;20786:6;20782:14;20775:58;20867:27;20862:2;20854:6;20850:15;20843:52;20658:244;:::o;20908:366::-;21050:3;21071:67;21135:2;21130:3;21071:67;:::i;:::-;21064:74;;21147:93;21236:3;21147:93;:::i;:::-;21265:2;21260:3;21256:12;21249:19;;20908:366;;;:::o;21280:419::-;21446:4;21484:2;21473:9;21469:18;21461:26;;21533:9;21527:4;21523:20;21519:1;21508:9;21504:17;21497:47;21561:131;21687:4;21561:131;:::i;:::-;21553:139;;21280:419;;;:::o;21705:180::-;21753:77;21750:1;21743:88;21850:4;21847:1;21840:15;21874:4;21871:1;21864:15;21891:191;21931:3;21950:20;21968:1;21950:20;:::i;:::-;21945:25;;21984:20;22002:1;21984:20;:::i;:::-;21979:25;;22027:1;22024;22020:9;22013:16;;22048:3;22045:1;22042:10;22039:36;;;22055:18;;:::i;:::-;22039:36;21891:191;;;;:::o;22088:180::-;22228:32;22224:1;22216:6;22212:14;22205:56;22088:180;:::o;22274:366::-;22416:3;22437:67;22501:2;22496:3;22437:67;:::i;:::-;22430:74;;22513:93;22602:3;22513:93;:::i;:::-;22631:2;22626:3;22622:12;22615:19;;22274:366;;;:::o;22646:419::-;22812:4;22850:2;22839:9;22835:18;22827:26;;22899:9;22893:4;22889:20;22885:1;22874:9;22870:17;22863:47;22927:131;23053:4;22927:131;:::i;:::-;22919:139;;22646:419;;;:::o;23071:143::-;23128:5;23159:6;23153:13;23144:22;;23175:33;23202:5;23175:33;:::i;:::-;23071:143;;;;:::o;23220:351::-;23290:6;23339:2;23327:9;23318:7;23314:23;23310:32;23307:119;;;23345:79;;:::i;:::-;23307:119;23465:1;23490:64;23546:7;23537:6;23526:9;23522:22;23490:64;:::i;:::-;23480:74;;23436:128;23220:351;;;;:::o;23577:180::-;23625:77;23622:1;23615:88;23722:4;23719:1;23712:15;23746:4;23743:1;23736:15;23763:176;23795:1;23812:20;23830:1;23812:20;:::i;:::-;23807:25;;23846:20;23864:1;23846:20;:::i;:::-;23841:25;;23885:1;23875:35;;23890:18;;:::i;:::-;23875:35;23931:1;23928;23924:9;23919:14;;23763:176;;;;:::o;23945:185::-;23985:1;24002:20;24020:1;24002:20;:::i;:::-;23997:25;;24036:20;24054:1;24036:20;:::i;:::-;24031:25;;24075:1;24065:35;;24080:18;;:::i;:::-;24065:35;24122:1;24119;24115:9;24110:14;;23945:185;;;;:::o;24136:194::-;24176:4;24196:20;24214:1;24196:20;:::i;:::-;24191:25;;24230:20;24248:1;24230:20;:::i;:::-;24225:25;;24274:1;24271;24267:9;24259:17;;24298:1;24292:4;24289:11;24286:37;;;24303:18;;:::i;:::-;24286:37;24136:194;;;;:::o;24336:410::-;24376:7;24399:20;24417:1;24399:20;:::i;:::-;24394:25;;24433:20;24451:1;24433:20;:::i;:::-;24428:25;;24488:1;24485;24481:9;24510:30;24528:11;24510:30;:::i;:::-;24499:41;;24689:1;24680:7;24676:15;24673:1;24670:22;24650:1;24643:9;24623:83;24600:139;;24719:18;;:::i;:::-;24600:139;24384:362;24336:410;;;;:::o;24752:221::-;24892:34;24888:1;24880:6;24876:14;24869:58;24961:4;24956:2;24948:6;24944:15;24937:29;24752:221;:::o;24979:366::-;25121:3;25142:67;25206:2;25201:3;25142:67;:::i;:::-;25135:74;;25218:93;25307:3;25218:93;:::i;:::-;25336:2;25331:3;25327:12;25320:19;;24979:366;;;:::o;25351:419::-;25517:4;25555:2;25544:9;25540:18;25532:26;;25604:9;25598:4;25594:20;25590:1;25579:9;25575:17;25568:47;25632:131;25758:4;25632:131;:::i;:::-;25624:139;;25351:419;;;:::o;25776:233::-;25815:3;25838:24;25856:5;25838:24;:::i;:::-;25829:33;;25884:66;25877:5;25874:77;25871:103;;25954:18;;:::i;:::-;25871:103;26001:1;25994:5;25990:13;25983:20;;25776:233;;;:::o;26015:::-;26155:34;26151:1;26143:6;26139:14;26132:58;26224:16;26219:2;26211:6;26207:15;26200:41;26015:233;:::o;26254:366::-;26396:3;26417:67;26481:2;26476:3;26417:67;:::i;:::-;26410:74;;26493:93;26582:3;26493:93;:::i;:::-;26611:2;26606:3;26602:12;26595:19;;26254:366;;;:::o;26626:419::-;26792:4;26830:2;26819:9;26815:18;26807:26;;26879:9;26873:4;26869:20;26865:1;26854:9;26850:17;26843:47;26907:131;27033:4;26907:131;:::i;:::-;26899:139;;26626:419;;;:::o;27051:94::-;27084:8;27132:5;27128:2;27124:14;27103:35;;27051:94;;;:::o;27151:::-;27190:7;27219:20;27233:5;27219:20;:::i;:::-;27208:31;;27151:94;;;:::o;27251:100::-;27290:7;27319:26;27339:5;27319:26;:::i;:::-;27308:37;;27251:100;;;:::o;27357:157::-;27462:45;27482:24;27500:5;27482:24;:::i;:::-;27462:45;:::i;:::-;27457:3;27450:58;27357:157;;:::o;27520:397::-;27660:3;27675:75;27746:3;27737:6;27675:75;:::i;:::-;27775:2;27770:3;27766:12;27759:19;;27788:75;27859:3;27850:6;27788:75;:::i;:::-;27888:2;27883:3;27879:12;27872:19;;27908:3;27901:10;;27520:397;;;;;:::o;27923:148::-;28025:11;28062:3;28047:18;;27923:148;;;;:::o;28077:214::-;28217:66;28213:1;28205:6;28201:14;28194:90;28077:214;:::o;28297:402::-;28457:3;28478:85;28560:2;28555:3;28478:85;:::i;:::-;28471:92;;28572:93;28661:3;28572:93;:::i;:::-;28690:2;28685:3;28681:12;28674:19;;28297:402;;;:::o;28705:79::-;28744:7;28773:5;28762:16;;28705:79;;;:::o;28790:157::-;28895:45;28915:24;28933:5;28915:24;:::i;:::-;28895:45;:::i;:::-;28890:3;28883:58;28790:157;;:::o;28953:522::-;29166:3;29188:148;29332:3;29188:148;:::i;:::-;29181:155;;29346:75;29417:3;29408:6;29346:75;:::i;:::-;29446:2;29441:3;29437:12;29430:19;;29466:3;29459:10;;28953:522;;;;:::o;29481:118::-;29568:24;29586:5;29568:24;:::i;:::-;29563:3;29556:37;29481:118;;:::o;29605:112::-;29688:22;29704:5;29688:22;:::i;:::-;29683:3;29676:35;29605:112;;:::o;29723:545::-;29896:4;29934:3;29923:9;29919:19;29911:27;;29948:71;30016:1;30005:9;30001:17;29992:6;29948:71;:::i;:::-;30029:68;30093:2;30082:9;30078:18;30069:6;30029:68;:::i;:::-;30107:72;30175:2;30164:9;30160:18;30151:6;30107:72;:::i;:::-;30189;30257:2;30246:9;30242:18;30233:6;30189:72;:::i;:::-;29723:545;;;;;;;:::o;30274:141::-;30323:4;30346:3;30338:11;;30369:3;30366:1;30359:14;30403:4;30400:1;30390:18;30382:26;;30274:141;;;:::o;30421:93::-;30458:6;30505:2;30500;30493:5;30489:14;30485:23;30475:33;;30421:93;;;:::o;30520:107::-;30564:8;30614:5;30608:4;30604:16;30583:37;;30520:107;;;;:::o;30633:393::-;30702:6;30752:1;30740:10;30736:18;30775:97;30805:66;30794:9;30775:97;:::i;:::-;30893:39;30923:8;30912:9;30893:39;:::i;:::-;30881:51;;30965:4;30961:9;30954:5;30950:21;30941:30;;31014:4;31004:8;31000:19;30993:5;30990:30;30980:40;;30709:317;;30633:393;;;;;:::o;31032:142::-;31082:9;31115:53;31133:34;31142:24;31160:5;31142:24;:::i;:::-;31133:34;:::i;:::-;31115:53;:::i;:::-;31102:66;;31032:142;;;:::o;31180:75::-;31223:3;31244:5;31237:12;;31180:75;;;:::o;31261:269::-;31371:39;31402:7;31371:39;:::i;:::-;31432:91;31481:41;31505:16;31481:41;:::i;:::-;31473:6;31466:4;31460:11;31432:91;:::i;:::-;31426:4;31419:105;31337:193;31261:269;;;:::o;31536:73::-;31581:3;31536:73;:::o;31615:189::-;31692:32;;:::i;:::-;31733:65;31791:6;31783;31777:4;31733:65;:::i;:::-;31668:136;31615:189;;:::o;31810:186::-;31870:120;31887:3;31880:5;31877:14;31870:120;;;31941:39;31978:1;31971:5;31941:39;:::i;:::-;31914:1;31907:5;31903:13;31894:22;;31870:120;;;31810:186;;:::o;32002:543::-;32103:2;32098:3;32095:11;32092:446;;;32137:38;32169:5;32137:38;:::i;:::-;32221:29;32239:10;32221:29;:::i;:::-;32211:8;32207:44;32404:2;32392:10;32389:18;32386:49;;;32425:8;32410:23;;32386:49;32448:80;32504:22;32522:3;32504:22;:::i;:::-;32494:8;32490:37;32477:11;32448:80;:::i;:::-;32107:431;;32092:446;32002:543;;;:::o;32551:117::-;32605:8;32655:5;32649:4;32645:16;32624:37;;32551:117;;;;:::o;32674:169::-;32718:6;32751:51;32799:1;32795:6;32787:5;32784:1;32780:13;32751:51;:::i;:::-;32747:56;32832:4;32826;32822:15;32812:25;;32725:118;32674:169;;;;:::o;32848:295::-;32924:4;33070:29;33095:3;33089:4;33070:29;:::i;:::-;33062:37;;33132:3;33129:1;33125:11;33119:4;33116:21;33108:29;;32848:295;;;;:::o;33148:1395::-;33265:37;33298:3;33265:37;:::i;:::-;33367:18;33359:6;33356:30;33353:56;;;33389:18;;:::i;:::-;33353:56;33433:38;33465:4;33459:11;33433:38;:::i;:::-;33518:67;33578:6;33570;33564:4;33518:67;:::i;:::-;33612:1;33636:4;33623:17;;33668:2;33660:6;33657:14;33685:1;33680:618;;;;34342:1;34359:6;34356:77;;;34408:9;34403:3;34399:19;34393:26;34384:35;;34356:77;34459:67;34519:6;34512:5;34459:67;:::i;:::-;34453:4;34446:81;34315:222;33650:887;;33680:618;33732:4;33728:9;33720:6;33716:22;33766:37;33798:4;33766:37;:::i;:::-;33825:1;33839:208;33853:7;33850:1;33847:14;33839:208;;;33932:9;33927:3;33923:19;33917:26;33909:6;33902:42;33983:1;33975:6;33971:14;33961:24;;34030:2;34019:9;34015:18;34002:31;;33876:4;33873:1;33869:12;33864:17;;33839:208;;;34075:6;34066:7;34063:19;34060:179;;;34133:9;34128:3;34124:19;34118:26;34176:48;34218:4;34210:6;34206:17;34195:9;34176:48;:::i;:::-;34168:6;34161:64;34083:156;34060:179;34285:1;34281;34273:6;34269:14;34265:22;34259:4;34252:36;33687:611;;;33650:887;;33240:1303;;;33148:1395;;:::o;34549:221::-;34689:34;34685:1;34677:6;34673:14;34666:58;34758:4;34753:2;34745:6;34741:15;34734:29;34549:221;:::o;34776:366::-;34918:3;34939:67;35003:2;34998:3;34939:67;:::i;:::-;34932:74;;35015:93;35104:3;35015:93;:::i;:::-;35133:2;35128:3;35124:12;35117:19;;34776:366;;;:::o;35148:419::-;35314:4;35352:2;35341:9;35337:18;35329:26;;35401:9;35395:4;35391:20;35387:1;35376:9;35372:17;35365:47;35429:131;35555:4;35429:131;:::i;:::-;35421:139;;35148:419;;;:::o;35573:222::-;35713:34;35709:1;35701:6;35697:14;35690:58;35782:5;35777:2;35769:6;35765:15;35758:30;35573:222;:::o;35801:366::-;35943:3;35964:67;36028:2;36023:3;35964:67;:::i;:::-;35957:74;;36040:93;36129:3;36040:93;:::i;:::-;36158:2;36153:3;36149:12;36142:19;;35801:366;;;:::o;36173:419::-;36339:4;36377:2;36366:9;36362:18;36354:26;;36426:9;36420:4;36416:20;36412:1;36401:9;36397:17;36390:47;36454:131;36580:4;36454:131;:::i;:::-;36446:139;;36173:419;;;:::o;36598:230::-;36738:34;36734:1;36726:6;36722:14;36715:58;36807:13;36802:2;36794:6;36790:15;36783:38;36598:230;:::o;36834:366::-;36976:3;36997:67;37061:2;37056:3;36997:67;:::i;:::-;36990:74;;37073:93;37162:3;37073:93;:::i;:::-;37191:2;37186:3;37182:12;37175:19;;36834:366;;;:::o;37206:419::-;37372:4;37410:2;37399:9;37395:18;37387:26;;37459:9;37453:4;37449:20;37445:1;37434:9;37430:17;37423:47;37487:131;37613:4;37487:131;:::i;:::-;37479:139;;37206:419;;;:::o;37631:176::-;37771:28;37767:1;37759:6;37755:14;37748:52;37631:176;:::o;37813:366::-;37955:3;37976:67;38040:2;38035:3;37976:67;:::i;:::-;37969:74;;38052:93;38141:3;38052:93;:::i;:::-;38170:2;38165:3;38161:12;38154:19;;37813:366;;;:::o;38185:419::-;38351:4;38389:2;38378:9;38374:18;38366:26;;38438:9;38432:4;38428:20;38424:1;38413:9;38409:17;38402:47;38466:131;38592:4;38466:131;:::i;:::-;38458:139;;38185:419;;;:::o;38610:178::-;38750:30;38746:1;38738:6;38734:14;38727:54;38610:178;:::o;38794:366::-;38936:3;38957:67;39021:2;39016:3;38957:67;:::i;:::-;38950:74;;39033:93;39122:3;39033:93;:::i;:::-;39151:2;39146:3;39142:12;39135:19;;38794:366;;;:::o;39166:419::-;39332:4;39370:2;39359:9;39355:18;39347:26;;39419:9;39413:4;39409:20;39405:1;39394:9;39390:17;39383:47;39447:131;39573:4;39447:131;:::i;:::-;39439:139;;39166:419;;;:::o;39591:180::-;39731:32;39727:1;39719:6;39715:14;39708:56;39591:180;:::o;39777:366::-;39919:3;39940:67;40004:2;39999:3;39940:67;:::i;:::-;39933:74;;40016:93;40105:3;40016:93;:::i;:::-;40134:2;40129:3;40125:12;40118:19;;39777:366;;;:::o;40149:419::-;40315:4;40353:2;40342:9;40338:18;40330:26;;40402:9;40396:4;40392:20;40388:1;40377:9;40373:17;40366:47;40430:131;40556:4;40430:131;:::i;:::-;40422:139;;40149:419;;;:::o;40574:233::-;40714:34;40710:1;40702:6;40698:14;40691:58;40783:16;40778:2;40770:6;40766:15;40759:41;40574:233;:::o;40813:366::-;40955:3;40976:67;41040:2;41035:3;40976:67;:::i;:::-;40969:74;;41052:93;41141:3;41052:93;:::i;:::-;41170:2;41165:3;41161:12;41154:19;;40813:366;;;:::o;41185:419::-;41351:4;41389:2;41378:9;41374:18;41366:26;;41438:9;41432:4;41428:20;41424:1;41413:9;41409:17;41402:47;41466:131;41592:4;41466:131;:::i;:::-;41458:139;;41185:419;;;:::o;41610:238::-;41750:34;41746:1;41738:6;41734:14;41727:58;41819:21;41814:2;41806:6;41802:15;41795:46;41610:238;:::o;41854:366::-;41996:3;42017:67;42081:2;42076:3;42017:67;:::i;:::-;42010:74;;42093:93;42182:3;42093:93;:::i;:::-;42211:2;42206:3;42202:12;42195:19;;41854:366;;;:::o;42226:419::-;42392:4;42430:2;42419:9;42415:18;42407:26;;42479:9;42473:4;42469:20;42465:1;42454:9;42450:17;42443:47;42507:131;42633:4;42507:131;:::i;:::-;42499:139;;42226:419;;;:::o;42651:234::-;42791:34;42787:1;42779:6;42775:14;42768:58;42860:17;42855:2;42847:6;42843:15;42836:42;42651:234;:::o;42891:366::-;43033:3;43054:67;43118:2;43113:3;43054:67;:::i;:::-;43047:74;;43130:93;43219:3;43130:93;:::i;:::-;43248:2;43243:3;43239:12;43232:19;;42891:366;;;:::o;43263:419::-;43429:4;43467:2;43456:9;43452:18;43444:26;;43516:9;43510:4;43506:20;43502:1;43491:9;43487:17;43480:47;43544:131;43670:4;43544:131;:::i;:::-;43536:139;;43263:419;;;:::o;43688:390::-;43794:3;43822:39;43855:5;43822:39;:::i;:::-;43877:89;43959:6;43954:3;43877:89;:::i;:::-;43870:96;;43975:65;44033:6;44028:3;44021:4;44014:5;44010:16;43975:65;:::i;:::-;44065:6;44060:3;44056:16;44049:23;;43798:280;43688:390;;;;:::o;44084:155::-;44224:7;44220:1;44212:6;44208:14;44201:31;44084:155;:::o;44245:400::-;44405:3;44426:84;44508:1;44503:3;44426:84;:::i;:::-;44419:91;;44519:93;44608:3;44519:93;:::i;:::-;44637:1;44632:3;44628:11;44621:18;;44245:400;;;:::o;44651:701::-;44932:3;44954:95;45045:3;45036:6;44954:95;:::i;:::-;44947:102;;45066:95;45157:3;45148:6;45066:95;:::i;:::-;45059:102;;45178:148;45322:3;45178:148;:::i;:::-;45171:155;;45343:3;45336:10;;44651:701;;;;;:::o;45358:167::-;45498:19;45494:1;45486:6;45482:14;45475:43;45358:167;:::o;45531:366::-;45673:3;45694:67;45758:2;45753:3;45694:67;:::i;:::-;45687:74;;45770:93;45859:3;45770:93;:::i;:::-;45888:2;45883:3;45879:12;45872:19;;45531:366;;;:::o;45903:419::-;46069:4;46107:2;46096:9;46092:18;46084:26;;46156:9;46150:4;46146:20;46142:1;46131:9;46127:17;46120:47;46184:131;46310:4;46184:131;:::i;:::-;46176:139;;45903:419;;;:::o;46328:171::-;46468:23;46464:1;46456:6;46452:14;46445:47;46328:171;:::o;46505:366::-;46647:3;46668:67;46732:2;46727:3;46668:67;:::i;:::-;46661:74;;46744:93;46833:3;46744:93;:::i;:::-;46862:2;46857:3;46853:12;46846:19;;46505:366;;;:::o;46877:419::-;47043:4;47081:2;47070:9;47066:18;47058:26;;47130:9;47124:4;47120:20;47116:1;47105:9;47101:17;47094:47;47158:131;47284:4;47158:131;:::i;:::-;47150:139;;46877:419;;;:::o;47302:229::-;47442:34;47438:1;47430:6;47426:14;47419:58;47511:12;47506:2;47498:6;47494:15;47487:37;47302:229;:::o;47537:366::-;47679:3;47700:67;47764:2;47759:3;47700:67;:::i;:::-;47693:74;;47776:93;47865:3;47776:93;:::i;:::-;47894:2;47889:3;47885:12;47878:19;;47537:366;;;:::o;47909:419::-;48075:4;48113:2;48102:9;48098:18;48090:26;;48162:9;48156:4;48152:20;48148:1;48137:9;48133:17;48126:47;48190:131;48316:4;48190:131;:::i;:::-;48182:139;;47909:419;;;:::o;48334:171::-;48474:23;48470:1;48462:6;48458:14;48451:47;48334:171;:::o;48511:366::-;48653:3;48674:67;48738:2;48733:3;48674:67;:::i;:::-;48667:74;;48750:93;48839:3;48750:93;:::i;:::-;48868:2;48863:3;48859:12;48852:19;;48511:366;;;:::o;48883:419::-;49049:4;49087:2;49076:9;49072:18;49064:26;;49136:9;49130:4;49126:20;49122:1;49111:9;49107:17;49100:47;49164:131;49290:4;49164:131;:::i;:::-;49156:139;;48883:419;;;:::o;49308:225::-;49448:34;49444:1;49436:6;49432:14;49425:58;49517:8;49512:2;49504:6;49500:15;49493:33;49308:225;:::o;49539:366::-;49681:3;49702:67;49766:2;49761:3;49702:67;:::i;:::-;49695:74;;49778:93;49867:3;49778:93;:::i;:::-;49896:2;49891:3;49887:12;49880:19;;49539:366;;;:::o;49911:419::-;50077:4;50115:2;50104:9;50100:18;50092:26;;50164:9;50158:4;50154:20;50150:1;50139:9;50135:17;50128:47;50192:131;50318:4;50192:131;:::i;:::-;50184:139;;49911:419;;;:::o;50336:174::-;50476:26;50472:1;50464:6;50460:14;50453:50;50336:174;:::o;50516:366::-;50658:3;50679:67;50743:2;50738:3;50679:67;:::i;:::-;50672:74;;50755:93;50844:3;50755:93;:::i;:::-;50873:2;50868:3;50864:12;50857:19;;50516:366;;;:::o;50888:419::-;51054:4;51092:2;51081:9;51077:18;51069:26;;51141:9;51135:4;51131:20;51127:1;51116:9;51112:17;51105:47;51169:131;51295:4;51169:131;:::i;:::-;51161:139;;50888:419;;;:::o;51313:237::-;51453:34;51449:1;51441:6;51437:14;51430:58;51522:20;51517:2;51509:6;51505:15;51498:45;51313:237;:::o;51556:366::-;51698:3;51719:67;51783:2;51778:3;51719:67;:::i;:::-;51712:74;;51795:93;51884:3;51795:93;:::i;:::-;51913:2;51908:3;51904:12;51897:19;;51556:366;;;:::o;51928:419::-;52094:4;52132:2;52121:9;52117:18;52109:26;;52181:9;52175:4;52171:20;52167:1;52156:9;52152:17;52145:47;52209:131;52335:4;52209:131;:::i;:::-;52201:139;;51928:419;;;:::o;52353:225::-;52493:34;52489:1;52481:6;52477:14;52470:58;52562:8;52557:2;52549:6;52545:15;52538:33;52353:225;:::o;52584:366::-;52726:3;52747:67;52811:2;52806:3;52747:67;:::i;:::-;52740:74;;52823:93;52912:3;52823:93;:::i;:::-;52941:2;52936:3;52932:12;52925:19;;52584:366;;;:::o;52956:419::-;53122:4;53160:2;53149:9;53145:18;53137:26;;53209:9;53203:4;53199:20;53195:1;53184:9;53180:17;53173:47;53237:131;53363:4;53237:131;:::i;:::-;53229:139;;52956:419;;;:::o;53381:224::-;53521:34;53517:1;53509:6;53505:14;53498:58;53590:7;53585:2;53577:6;53573:15;53566:32;53381:224;:::o;53611:366::-;53753:3;53774:67;53838:2;53833:3;53774:67;:::i;:::-;53767:74;;53850:93;53939:3;53850:93;:::i;:::-;53968:2;53963:3;53959:12;53952:19;;53611:366;;;:::o;53983:419::-;54149:4;54187:2;54176:9;54172:18;54164:26;;54236:9;54230:4;54226:20;54222:1;54211:9;54207:17;54200:47;54264:131;54390:4;54264:131;:::i;:::-;54256:139;;53983:419;;;:::o;54408:118::-;54445:7;54485:34;54478:5;54474:46;54463:57;;54408:118;;;:::o;54532:227::-;54572:4;54592:20;54610:1;54592:20;:::i;:::-;54587:25;;54626:20;54644:1;54626:20;:::i;:::-;54621:25;;54670:1;54667;54663:9;54655:17;;54694:34;54688:4;54685:44;54682:70;;;54732:18;;:::i;:::-;54682:70;54532:227;;;;:::o;54765:224::-;54805:3;54824:20;54842:1;54824:20;:::i;:::-;54819:25;;54858:20;54876:1;54858:20;:::i;:::-;54853:25;;54901:1;54898;54894:9;54887:16;;54924:34;54919:3;54916:43;54913:69;;;54962:18;;:::i;:::-;54913:69;54765:224;;;;:::o;54995:147::-;55096:11;55133:3;55118:18;;54995:147;;;;:::o;55148:114::-;;:::o;55268:398::-;55427:3;55448:83;55529:1;55524:3;55448:83;:::i;:::-;55441:90;;55540:93;55629:3;55540:93;:::i;:::-;55658:1;55653:3;55649:11;55642:18;;55268:398;;;:::o;55672:379::-;55856:3;55878:147;56021:3;55878:147;:::i;:::-;55871:154;;56042:3;56035:10;;55672:379;;;:::o;56057:170::-;56197:22;56193:1;56185:6;56181:14;56174:46;56057:170;:::o;56233:366::-;56375:3;56396:67;56460:2;56455:3;56396:67;:::i;:::-;56389:74;;56472:93;56561:3;56472:93;:::i;:::-;56590:2;56585:3;56581:12;56574:19;;56233:366;;;:::o;56605:419::-;56771:4;56809:2;56798:9;56794:18;56786:26;;56858:9;56852:4;56848:20;56844:1;56833:9;56829:17;56822:47;56886:131;57012:4;56886:131;:::i;:::-;56878:139;;56605:419;;;:::o;57030:229::-;57170:34;57166:1;57158:6;57154:14;57147:58;57239:12;57234:2;57226:6;57222:15;57215:37;57030:229;:::o;57265:366::-;57407:3;57428:67;57492:2;57487:3;57428:67;:::i;:::-;57421:74;;57504:93;57593:3;57504:93;:::i;:::-;57622:2;57617:3;57613:12;57606:19;;57265:366;;;:::o;57637:419::-;57803:4;57841:2;57830:9;57826:18;57818:26;;57890:9;57884:4;57880:20;57876:1;57865:9;57861:17;57854:47;57918:131;58044:4;57918:131;:::i;:::-;57910:139;;57637:419;;;:::o;58062:171::-;58101:3;58124:24;58142:5;58124:24;:::i;:::-;58115:33;;58170:4;58163:5;58160:15;58157:41;;58178:18;;:::i;:::-;58157:41;58225:1;58218:5;58214:13;58207:20;;58062:171;;;:::o;58239:234::-;58379:34;58375:1;58367:6;58363:14;58356:58;58448:17;58443:2;58435:6;58431:15;58424:42;58239:234;:::o;58479:366::-;58621:3;58642:67;58706:2;58701:3;58642:67;:::i;:::-;58635:74;;58718:93;58807:3;58718:93;:::i;:::-;58836:2;58831:3;58827:12;58820:19;;58479:366;;;:::o;58851:419::-;59017:4;59055:2;59044:9;59040:18;59032:26;;59104:9;59098:4;59094:20;59090:1;59079:9;59075:17;59068:47;59132:131;59258:4;59132:131;:::i;:::-;59124:139;;58851:419;;;:::o;59276:98::-;59327:6;59361:5;59355:12;59345:22;;59276:98;;;:::o;59380:168::-;59463:11;59497:6;59492:3;59485:19;59537:4;59532:3;59528:14;59513:29;;59380:168;;;;:::o;59554:373::-;59640:3;59668:38;59700:5;59668:38;:::i;:::-;59722:70;59785:6;59780:3;59722:70;:::i;:::-;59715:77;;59801:65;59859:6;59854:3;59847:4;59840:5;59836:16;59801:65;:::i;:::-;59891:29;59913:6;59891:29;:::i;:::-;59886:3;59882:39;59875:46;;59644:283;59554:373;;;;:::o;59933:640::-;60128:4;60166:3;60155:9;60151:19;60143:27;;60180:71;60248:1;60237:9;60233:17;60224:6;60180:71;:::i;:::-;60261:72;60329:2;60318:9;60314:18;60305:6;60261:72;:::i;:::-;60343;60411:2;60400:9;60396:18;60387:6;60343:72;:::i;:::-;60462:9;60456:4;60452:20;60447:2;60436:9;60432:18;60425:48;60490:76;60561:4;60552:6;60490:76;:::i;:::-;60482:84;;59933:640;;;;;;;:::o;60579:141::-;60635:5;60666:6;60660:13;60651:22;;60682:32;60708:5;60682:32;:::i;:::-;60579:141;;;;:::o;60726:349::-;60795:6;60844:2;60832:9;60823:7;60819:23;60815:32;60812:119;;;60850:79;;:::i;:::-;60812:119;60970:1;60995:63;61050:7;61041:6;61030:9;61026:22;60995:63;:::i;:::-;60985:73;;60941:127;60726:349;;;;:::o;61081:180::-;61129:77;61126:1;61119:88;61226:4;61223:1;61216:15;61250:4;61247:1;61240:15;61267:220;61407:34;61403:1;61395:6;61391:14;61384:58;61476:3;61471:2;61463:6;61459:15;61452:28;61267:220;:::o;61493:366::-;61635:3;61656:67;61720:2;61715:3;61656:67;:::i;:::-;61649:74;;61732:93;61821:3;61732:93;:::i;:::-;61850:2;61845:3;61841:12;61834:19;;61493:366;;;:::o;61865:419::-;62031:4;62069:2;62058:9;62054:18;62046:26;;62118:9;62112:4;62108:20;62104:1;62093:9;62089:17;62082:47;62146:131;62272:4;62146:131;:::i;:::-;62138:139;;61865:419;;;:::o;62290:179::-;62430:31;62426:1;62418:6;62414:14;62407:55;62290:179;:::o;62475:366::-;62617:3;62638:67;62702:2;62697:3;62638:67;:::i;:::-;62631:74;;62714:93;62803:3;62714:93;:::i;:::-;62832:2;62827:3;62823:12;62816:19;;62475:366;;;:::o;62847:419::-;63013:4;63051:2;63040:9;63036:18;63028:26;;63100:9;63094:4;63090:20;63086:1;63075:9;63071:17;63064:47;63128:131;63254:4;63128:131;:::i;:::-;63120:139;;62847:419;;;:::o;63272:221::-;63412:34;63408:1;63400:6;63396:14;63389:58;63481:4;63476:2;63468:6;63464:15;63457:29;63272:221;:::o;63499:366::-;63641:3;63662:67;63726:2;63721:3;63662:67;:::i;:::-;63655:74;;63738:93;63827:3;63738:93;:::i;:::-;63856:2;63851:3;63847:12;63840:19;;63499:366;;;:::o;63871:419::-;64037:4;64075:2;64064:9;64060:18;64052:26;;64124:9;64118:4;64114:20;64110:1;64099:9;64095:17;64088:47;64152:131;64278:4;64152:131;:::i;:::-;64144:139;;63871:419;;;:::o
Swarm Source
ipfs://733caafd9575532da6e9a3c9107cc08400e822f0e7b8b8c2a797e2b118a886ec
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.