Token Degen Ape Cronos Club
Overview CRC721
Total Supply:
7,777 DACC
Holders:
501 addresses
Contract:
Balance
0 DACC
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DegenApeCronosClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-11-22 */ // SPDX-License-Identifier: MIT /** ____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ __ _____ _____ | \| __| __| __| | | | _ | _ | __| | | __ | | | | | __| | | | | | | __ | | | | __| | | __| | | | | | __| __| | --| -| | | | | | | |__ | | --| |__| | | __ -| |____/|_____|_____|_____|_|___| |__|__|__| |_____| |_____|__|__|_____|_|___|_____|_____| |_____|_____|_____|_____| **/ 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); } /** * @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; } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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); } } /** * @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; } } /** * @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); } } /** * @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); } /** * @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); } /** * @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); } } } } /** * @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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } library BatchCounters { struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter, uint256 amount) internal returns (uint256 start, uint256 end) { start = counter._value + 1; unchecked { counter._value += amount; } end = counter._value; } } contract DegenApeCronosClub is ERC721Enumerable, Ownable { using Strings for uint256; event BaseURIUpdated(string baseURI); string private baseURI_; string private contractURI_; address public TREASURY; uint256 public mintFee0to1000 = 25 ether; uint256 public mintFee1001to2000 = 25 ether; uint256 public mintFee2001to3000 = 35 ether; uint256 public mintFee3001to4000 = 35 ether; uint256 public mintFee4001to5000 = 45 ether; uint256 public mintFee5001to6000 = 45 ether; uint256 public mintFee6001to7777 = 55 ether; uint256 public nftPerAddressLimit = 2; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; mapping(address => uint256) public addressMintedBalanceWL; uint256 public maxDACCsupply = 7777; uint256 private _numAvailableTokens = 7777; uint256[7777] private _availableTokens; bool public paused = true; bool public WLpaused = true; constructor(address _TREASURY) ERC721("Degen Ape Cronos Club", "DACC") { TREASURY = _TREASURY; } function flipPause() external onlyOwner { paused = !paused; } function flipWLPause() external onlyOwner { WLpaused = !WLpaused; } function setMintFee(uint256 _mintFee) external onlyOwner { mintFee0to1000 = _mintFee; } function setMintFee1(uint256 _mintFee) external onlyOwner { mintFee1001to2000 = _mintFee; } function setMintFee2(uint256 _mintFee) external onlyOwner { mintFee2001to3000 = _mintFee; } function setMintFee3(uint256 _mintFee) external onlyOwner { mintFee3001to4000 = _mintFee; } function setMintFee4(uint256 _mintFee) external onlyOwner { mintFee4001to5000 = _mintFee; } function setMintFee5(uint256 _mintFee) external onlyOwner { mintFee5001to6000 = _mintFee; } function setMintFee6(uint256 _mintFee) external onlyOwner { mintFee6001to7777 = _mintFee; } function setMaxSupply(uint256 _newSupply) external onlyOwner { maxDACCsupply = _newSupply; } function setNftAddressLimitWL(uint256 _newlimit) external onlyOwner{ nftPerAddressLimit = _newlimit; } function setBaseURI(string memory _baseURI) external onlyOwner { baseURI_ = _baseURI; emit BaseURIUpdated(_baseURI); } function setOnlyWhitelisted(bool _state) external onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) external onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function newTreasury(address _treasury) external onlyOwner { TREASURY = _treasury; } function baseURI() external view returns (string memory) { return baseURI_; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(baseURI_, tokenId.toString(), ".json")); } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function mintFee() public view returns (uint256) { uint currentSupply = totalSupply(); if (currentSupply >= 6000) { return mintFee6001to7777; } else if (currentSupply >= 5000) { return mintFee5001to6000; } else if (currentSupply >= 4000) { return mintFee4001to5000; } else if (currentSupply >= 3000) { return mintFee3001to4000; } else if (currentSupply >= 2000) { return mintFee2001to3000; } else if (currentSupply >= 1000) { return mintFee1001to2000; } else { return mintFee0to1000; } } function mint(uint256 amount) public payable { require(!paused, "Sale is paused"); require(totalSupply() + amount <= maxDACCsupply, "DACC is sold out"); require(amount <= 50, "50 per transaction is the max"); require(msg.value >= mintFee() * amount, "Incorrect CRO amount"); _mint(amount); } function mintWL(uint256 amount) public { require(!WLpaused, "Free mint not enabled yet."); require(totalSupply() + amount <= maxDACCsupply, "DACC is sold out"); require(isWhitelisted(msg.sender), "Address not found on free mint list"); uint256 ownerMintedCount = addressMintedBalanceWL[msg.sender]; require(ownerMintedCount + amount <= nftPerAddressLimit, "Max free mints per address exceeded"); for (uint256 i = 0; i < amount; i++) { addressMintedBalanceWL[msg.sender]++; } _mint(amount); } function _mint(uint256 amount) internal { for (uint256 i = 0; i < amount; i++) { addressMintedBalance[msg.sender]++; uint256 newTokenId = useRandomAvailableToken(amount, i); _safeMint(msg.sender, newTokenId); } } function airdropMint(address[] calldata airdropAddrs) external onlyOwner { uint256 amount = airdropAddrs.length; for (uint256 i = 0; i < amount; i++) { addressMintedBalance[airdropAddrs[i]]++; uint256 newTokenId = useRandomAvailableToken(amount, i); _safeMint(airdropAddrs[i], newTokenId); } } function withdraw() public onlyOwner { (bool os, ) = payable(TREASURY).call{value: address(this).balance}(""); require(os); } function useRandomAvailableToken(uint256 _numToFetch, uint256 _i) internal returns (uint256) { uint256 randomNum = uint256( keccak256( abi.encode( msg.sender, tx.gasprice, block.number, block.timestamp, blockhash(block.number - 1), _numToFetch, _i ) ) ); uint256 randomIndex = randomNum % _numAvailableTokens; return useAvailableTokenAtIndex(randomIndex); } function useAvailableTokenAtIndex(uint256 indexToUse) internal returns (uint256) { uint256 valAtIndex = _availableTokens[indexToUse]; uint256 result; if (valAtIndex == 0) { result = indexToUse; } else { result = valAtIndex; } uint256 lastIndex = _numAvailableTokens - 1; if (indexToUse != lastIndex) { uint256 lastValInArray = _availableTokens[lastIndex]; if (lastValInArray == 0) { _availableTokens[indexToUse] = lastIndex; } else { _availableTokens[indexToUse] = lastValInArray; } } _numAvailableTokens--; return result; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_TREASURY","type":"address"}],"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":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TREASURY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalanceWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropAddrs","type":"address[]"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWLPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDACCsupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee0to1000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee1001to2000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee2001to3000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee3001to4000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee4001to5000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee5001to6000","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFee6001to7777","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"newTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee6","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newlimit","type":"uint256"}],"name":"setNftAddressLimitWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405268015af1d78b58c40000600e5568015af1d78b58c40000600f556801e5b8fa8fe2ac00006010556801e5b8fa8fe2ac0000601155680270801d946c940000601255680270801d946c9400006013556802fb474098f67c000060145560026015556001601660006101000a81548160ff021916908315150217905550611e61601a55611e61601b556001611e7d60006101000a81548160ff0219169083151502179055506001611e7d60016101000a81548160ff021916908315150217905550348015620000d057600080fd5b5060405162005b5b38038062005b5b8339818101604052810190620000f6919062000393565b6040518060400160405280601581526020017f446567656e204170652043726f6e6f7320436c756200000000000000000000008152506040518060400160405280600481526020017f444143430000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017a929190620002cc565b50806001908051906020019062000193929190620002cc565b505050620001b6620001aa620001fe60201b60201c565b6200020660201b60201c565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200047d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002da90620003f9565b90600052602060002090601f016020900481019282620002fe57600085556200034a565b82601f106200031957805160ff19168380011785556200034a565b828001600101855582156200034a579182015b82811115620003495782518255916020019190600101906200032c565b5b5090506200035991906200035d565b5090565b5b80821115620003785760008160009055506001016200035e565b5090565b6000815190506200038d8162000463565b92915050565b600060208284031215620003ac57620003ab6200045e565b5b6000620003bc848285016200037c565b91505092915050565b6000620003d282620003d9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200041257607f821691505b602082108114156200042957620004286200042f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200046e81620003c5565b81146200047a57600080fd5b50565b6156ce806200048d6000396000f3fe6080604052600436106103765760003560e01c8063715018a6116101d1578063ba419de011610102578063db8ac989116100a0578063edec5f271161006f578063edec5f2714610cb7578063efeff5f514610ce0578063f2fde38b14610d09578063f843bd1514610d3257610376565b8063db8ac98914610c0f578063e985e9c514610c3a578063ea2f07b314610c77578063eddd0d9c14610c8e57610376565b8063c0818bfa116100dc578063c0818bfa14610b55578063c377c40514610b80578063c87b56dd14610ba9578063ca20014514610be657610376565b8063ba419de014610ac4578063ba4e5c4914610aed578063ba7d2c7614610b2a57610376565b80639c70b5121161016f578063a22cb46511610149578063a22cb46514610a1e578063a7d8d08a14610a47578063aeecdf3114610a70578063b88d4fde14610a9b57610376565b80639c70b512146109ac578063a0712d68146109d7578063a15a662c146109f357610376565b80638da5cb5b116101ab5780638da5cb5b1461090457806395d89b411461092f5780639718b5241461095a5780639b876c491461098357610376565b8063715018a6146108975780637f6e9093146108ae57806380b7ee19146108d957610376565b80633af32abf116102ab57806355f804b3116102495780636352211e116102235780636352211e146107c95780636c0360eb146108065780636f8b44b01461083157806370a082311461085a57610376565b806355f804b31461074c5780635c975abb146107755780635fba6a98146107a057610376565b806342842e0e1161028557806342842e0e14610692578063430837d1146106bb57806346d36211146106e65780634f6ccce71461070f57610376565b80633af32abf146106155780633c952764146106525780633ccfd60b1461067b57610376565b806318cae269116103185780632f745c59116102f25780632f745c591461055b57806335b77b7e1461059857806337546c67146105c1578063385df649146105fe57610376565b806318cae269146104ca57806323b872dd146105075780632d2c55651461053057610376565b8063081812fc11610354578063081812fc1461040e578063095ea7b31461044b57806313966db51461047457806318160ddd1461049f57610376565b806301ffc9a71461037b57806305837d76146103b857806306fdde03146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906140c1565b610d5d565b6040516103af9190614797565b60405180910390f35b3480156103c457600080fd5b506103cd610dd7565b6040516103da9190614ad4565b60405180910390f35b3480156103ef57600080fd5b506103f8610ddd565b60405161040591906147b2565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614164565b610e6f565b60405161044291906146c1565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190614007565b610ef4565b005b34801561048057600080fd5b5061048961100c565b6040516104969190614ad4565b60405180910390f35b3480156104ab57600080fd5b506104b461109b565b6040516104c19190614ad4565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613e84565b6110a8565b6040516104fe9190614ad4565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613ef1565b6110c0565b005b34801561053c57600080fd5b50610545611120565b60405161055291906146c1565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190614007565b611146565b60405161058f9190614ad4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190614164565b6111eb565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190613e84565b611271565b6040516105f59190614ad4565b60405180910390f35b34801561060a57600080fd5b50610613611289565b005b34801561062157600080fd5b5061063c60048036038101906106379190613e84565b611333565b6040516106499190614797565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190614094565b6113e2565b005b34801561068757600080fd5b5061069061147b565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613ef1565b611592565b005b3480156106c757600080fd5b506106d06115b2565b6040516106dd9190614ad4565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190614047565b6115b8565b005b34801561071b57600080fd5b5061073660048036038101906107319190614164565b61171c565b6040516107439190614ad4565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e919061411b565b61178d565b005b34801561078157600080fd5b5061078a61185a565b6040516107979190614797565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190614164565b61186e565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190614164565b6118f4565b6040516107fd91906146c1565b60405180910390f35b34801561081257600080fd5b5061081b6119a6565b60405161082891906147b2565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614164565b611a38565b005b34801561086657600080fd5b50610881600480360381019061087c9190613e84565b611abe565b60405161088e9190614ad4565b60405180910390f35b3480156108a357600080fd5b506108ac611b76565b005b3480156108ba57600080fd5b506108c3611bfe565b6040516108d09190614797565b60405180910390f35b3480156108e557600080fd5b506108ee611c12565b6040516108fb9190614ad4565b60405180910390f35b34801561091057600080fd5b50610919611c18565b60405161092691906146c1565b60405180910390f35b34801561093b57600080fd5b50610944611c42565b60405161095191906147b2565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190613e84565b611cd4565b005b34801561098f57600080fd5b506109aa60048036038101906109a59190614164565b611d94565b005b3480156109b857600080fd5b506109c1611e1a565b6040516109ce9190614797565b60405180910390f35b6109f160048036038101906109ec9190614164565b611e2d565b005b3480156109ff57600080fd5b50610a08611f7a565b604051610a159190614ad4565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613fc7565b611f80565b005b348015610a5357600080fd5b50610a6e6004803603810190610a699190614164565b612101565b005b348015610a7c57600080fd5b50610a85612187565b604051610a929190614ad4565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd9190613f44565b61218d565b005b348015610ad057600080fd5b50610aeb6004803603810190610ae69190614164565b6121ef565b005b348015610af957600080fd5b50610b146004803603810190610b0f9190614164565b6123f4565b604051610b2191906146c1565b60405180910390f35b348015610b3657600080fd5b50610b3f612433565b604051610b4c9190614ad4565b60405180910390f35b348015610b6157600080fd5b50610b6a612439565b604051610b779190614ad4565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614164565b61243f565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190614164565b6124c5565b604051610bdd91906147b2565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c089190614164565b6124f9565b005b348015610c1b57600080fd5b50610c2461257f565b604051610c319190614ad4565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190613eb1565b612585565b604051610c6e9190614797565b60405180910390f35b348015610c8357600080fd5b50610c8c612619565b005b348015610c9a57600080fd5b50610cb56004803603810190610cb09190614164565b6126c3565b005b348015610cc357600080fd5b50610cde6004803603810190610cd99190614047565b612749565b005b348015610cec57600080fd5b50610d076004803603810190610d029190614164565b6127e9565b005b348015610d1557600080fd5b50610d306004803603810190610d2b9190613e84565b61286f565b005b348015610d3e57600080fd5b50610d47612967565b604051610d549190614ad4565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dd05750610dcf8261296d565b5b9050919050565b600e5481565b606060008054610dec90614dd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1890614dd8565b8015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b5050505050905090565b6000610e7a82612a4f565b610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090614974565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eff826118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906149f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f8f612abb565b73ffffffffffffffffffffffffffffffffffffffff161480610fbe5750610fbd81610fb8612abb565b612585565b5b610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff4906148f4565b60405180910390fd5b6110078383612ac3565b505050565b60008061101761109b565b9050611770811061102d57601454915050611098565b611388811061104157601354915050611098565b610fa0811061105557601254915050611098565b610bb8811061106957601154915050611098565b6107d0811061107d57601054915050611098565b6103e8811061109157600f54915050611098565b600e549150505b90565b6000600880549050905090565b60186020528060005260406000206000915090505481565b6110d16110cb612abb565b82612b7c565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614a34565b60405180910390fd5b61111b838383612c5a565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061115183611abe565b8210611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906147f4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111f3612abb565b73ffffffffffffffffffffffffffffffffffffffff16611211611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90614994565b60405180910390fd5b8060128190555050565b60196020528060005260406000206000915090505481565b611291612abb565b73ffffffffffffffffffffffffffffffffffffffff166112af611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90614994565b60405180910390fd5b611e7d60009054906101000a900460ff1615611e7d60006101000a81548160ff021916908315150217905550565b600080600090505b6017805490508110156113d7578273ffffffffffffffffffffffffffffffffffffffff166017828154811061137357611372614f71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113c45760019150506113dd565b80806113cf90614e3b565b91505061133b565b50600090505b919050565b6113ea612abb565b73ffffffffffffffffffffffffffffffffffffffff16611408611c18565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590614994565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b611483612abb565b73ffffffffffffffffffffffffffffffffffffffff166114a1611c18565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614994565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161153f906146ac565b60006040518083038185875af1925050503d806000811461157c576040519150601f19603f3d011682016040523d82523d6000602084013e611581565b606091505b505090508061158f57600080fd5b50565b6115ad8383836040518060200160405280600081525061218d565b505050565b601a5481565b6115c0612abb565b73ffffffffffffffffffffffffffffffffffffffff166115de611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614994565b60405180910390fd5b600082829050905060005b81811015611716576018600085858481811061165e5761165d614f71565b5b90506020020160208101906116739190613e84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116be90614e3b565b919050555060006116cf8383612eb6565b90506117028585848181106116e7576116e6614f71565b5b90506020020160208101906116fc9190613e84565b82612f23565b50808061170e90614e3b565b91505061163f565b50505050565b600061172661109b565b8210611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614a54565b60405180910390fd5b6008828154811061177b5761177a614f71565b5b90600052602060002001549050919050565b611795612abb565b73ffffffffffffffffffffffffffffffffffffffff166117b3611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614994565b60405180910390fd5b80600b908051906020019061181f929190613b81565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8160405161184f91906147b2565b60405180910390a150565b611e7d60009054906101000a900460ff1681565b611876612abb565b73ffffffffffffffffffffffffffffffffffffffff16611894611c18565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614994565b60405180910390fd5b8060108190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614934565b60405180910390fd5b80915050919050565b6060600b80546119b590614dd8565b80601f01602080910402602001604051908101604052809291908181526020018280546119e190614dd8565b8015611a2e5780601f10611a0357610100808354040283529160200191611a2e565b820191906000526020600020905b815481529060010190602001808311611a1157829003601f168201915b5050505050905090565b611a40612abb565b73ffffffffffffffffffffffffffffffffffffffff16611a5e611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90614994565b60405180910390fd5b80601a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690614914565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b7e612abb565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614994565b60405180910390fd5b611bfc6000612f41565b565b611e7d60019054906101000a900460ff1681565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611c5190614dd8565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7d90614dd8565b8015611cca5780601f10611c9f57610100808354040283529160200191611cca565b820191906000526020600020905b815481529060010190602001808311611cad57829003601f168201915b5050505050905090565b611cdc612abb565b73ffffffffffffffffffffffffffffffffffffffff16611cfa611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614994565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9c612abb565b73ffffffffffffffffffffffffffffffffffffffff16611dba611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790614994565b60405180910390fd5b80600f8190555050565b601660009054906101000a900460ff1681565b611e7d60009054906101000a900460ff1615611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614a74565b60405180910390fd5b601a5481611e8a61109b565b611e949190614bd9565b1115611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614a94565b60405180910390fd5b6032811115611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149d4565b60405180910390fd5b80611f2261100c565b611f2c9190614c60565b341015611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590614a14565b60405180910390fd5b611f7781613007565b50565b60125481565b611f88612abb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614894565b60405180910390fd5b8060056000612003612abb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120b0612abb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120f59190614797565b60405180910390a35050565b612109612abb565b73ffffffffffffffffffffffffffffffffffffffff16612127611c18565b73ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217490614994565b60405180910390fd5b8060148190555050565b60145481565b61219e612198612abb565b83612b7c565b6121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614a34565b60405180910390fd5b6121e984848484613097565b50505050565b611e7d60019054906101000a900460ff1615612240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612237906148d4565b60405180910390fd5b601a548161224c61109b565b6122569190614bd9565b1115612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90614a94565b60405180910390fd5b6122a033611333565b6122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690614ab4565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060155482826123329190614bd9565b1115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906147d4565b60405180910390fd5b60005b828110156123e657601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123ce90614e3b565b919050555080806123de90614e3b565b915050612376565b506123f082613007565b5050565b6017818154811061240457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60135481565b612447612abb565b73ffffffffffffffffffffffffffffffffffffffff16612465611c18565b73ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614994565b60405180910390fd5b8060158190555050565b6060600b6124d2836130f3565b6040516020016124e392919061467d565b6040516020818303038152906040529050919050565b612501612abb565b73ffffffffffffffffffffffffffffffffffffffff1661251f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c90614994565b60405180910390fd5b8060118190555050565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612621612abb565b73ffffffffffffffffffffffffffffffffffffffff1661263f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614994565b60405180910390fd5b611e7d60019054906101000a900460ff1615611e7d60016101000a81548160ff021916908315150217905550565b6126cb612abb565b73ffffffffffffffffffffffffffffffffffffffff166126e9611c18565b73ffffffffffffffffffffffffffffffffffffffff161461273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614994565b60405180910390fd5b80600e8190555050565b612751612abb565b73ffffffffffffffffffffffffffffffffffffffff1661276f611c18565b73ffffffffffffffffffffffffffffffffffffffff16146127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614994565b60405180910390fd5b601760006127d39190613c07565b8181601791906127e4929190613c28565b505050565b6127f1612abb565b73ffffffffffffffffffffffffffffffffffffffff1661280f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614994565b60405180910390fd5b8060138190555050565b612877612abb565b73ffffffffffffffffffffffffffffffffffffffff16612895611c18565b73ffffffffffffffffffffffffffffffffffffffff16146128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290614994565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561295b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295290614834565b60405180910390fd5b61296481612f41565b50565b60115481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a485750612a4782613254565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b36836118f4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b8782612a4f565b612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd906148b4565b60405180910390fd5b6000612bd1836118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c4057508373ffffffffffffffffffffffffffffffffffffffff16612c2884610e6f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c515750612c508185612585565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c7a826118f4565b73ffffffffffffffffffffffffffffffffffffffff1614612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc7906149b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790614874565b60405180910390fd5b612d4b8383836132be565b612d56600082612ac3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da69190614cba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dfd9190614bd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080333a4342600143612eca9190614cba565b408888604051602001612ee39796959493929190614728565b6040516020818303038152906040528051906020012060001c90506000601b5482612f0e9190614e84565b9050612f19816133d2565b9250505092915050565b612f3d8282604051806020016040528060008152506134a3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561309357601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061306290614e3b565b919050555060006130738383612eb6565b905061307f3382612f23565b50808061308b90614e3b565b91505061300a565b5050565b6130a2848484612c5a565b6130ae848484846134fe565b6130ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e490614814565b60405180910390fd5b50505050565b6060600082141561313b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061324f565b600082905060005b6000821461316d57808061315690614e3b565b915050600a826131669190614c2f565b9150613143565b60008167ffffffffffffffff81111561318957613188614fa0565b5b6040519080825280601f01601f1916602001820160405280156131bb5781602001600182028036833780820191505090505b5090505b60008514613248576001826131d49190614cba565b9150600a856131e39190614e84565b60306131ef9190614bd9565b60f81b81838151811061320557613204614f71565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132419190614c2f565b94506131bf565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132c9838383613695565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330c576133078161369a565b61334b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461334a5761334983826136e3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338e5761338981613850565b6133cd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133cc576133cb8282613921565b5b5b505050565b600080601c83611e6181106133ea576133e9614f71565b5b0154905060008082141561340057839050613404565b8190505b60006001601b546134159190614cba565b9050808514613480576000601c82611e61811061343557613434614f71565b5b0154905060008114156134625781601c87611e61811061345857613457614f71565b5b018190555061347e565b80601c87611e61811061347857613477614f71565b5b01819055505b505b601b600081548092919061349390614dae565b9190505550819350505050919050565b6134ad83836139a0565b6134ba60008484846134fe565b6134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614814565b60405180910390fd5b505050565b600061351f8473ffffffffffffffffffffffffffffffffffffffff16613b6e565b15613688578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613548612abb565b8786866040518563ffffffff1660e01b815260040161356a94939291906146dc565b602060405180830381600087803b15801561358457600080fd5b505af19250505080156135b557506040513d601f19601f820116820180604052508101906135b291906140ee565b60015b613638573d80600081146135e5576040519150601f19603f3d011682016040523d82523d6000602084013e6135ea565b606091505b50600081511415613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614814565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061368d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136f084611abe565b6136fa9190614cba565b90506000600760008481526020019081526020016000205490508181146137df576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138649190614cba565b905060006009600084815260200190815260200160002054905060006008838154811061389457613893614f71565b5b9060005260206000200154905080600883815481106138b6576138b5614f71565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061390557613904614f42565b5b6001900381819060005260206000200160009055905550505050565b600061392c83611abe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0790614954565b60405180910390fd5b613a1981612a4f565b15613a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5090614854565b60405180910390fd5b613a65600083836132be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ab59190614bd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613b8d90614dd8565b90600052602060002090601f016020900481019282613baf5760008555613bf6565b82601f10613bc857805160ff1916838001178555613bf6565b82800160010185558215613bf6579182015b82811115613bf5578251825591602001919060010190613bda565b5b509050613c039190613cc8565b5090565b5080546000825590600052602060002090810190613c259190613cc8565b50565b828054828255906000526020600020908101928215613cb7579160200282015b82811115613cb657823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613c48565b5b509050613cc49190613cc8565b5090565b5b80821115613ce1576000816000905550600101613cc9565b5090565b6000613cf8613cf384614b14565b614aef565b905082815260208101848484011115613d1457613d13614fde565b5b613d1f848285614d6c565b509392505050565b6000613d3a613d3584614b45565b614aef565b905082815260208101848484011115613d5657613d55614fde565b5b613d61848285614d6c565b509392505050565b600081359050613d788161563c565b92915050565b60008083601f840112613d9457613d93614fd4565b5b8235905067ffffffffffffffff811115613db157613db0614fcf565b5b602083019150836020820283011115613dcd57613dcc614fd9565b5b9250929050565b600081359050613de381615653565b92915050565b600081359050613df88161566a565b92915050565b600081519050613e0d8161566a565b92915050565b600082601f830112613e2857613e27614fd4565b5b8135613e38848260208601613ce5565b91505092915050565b600082601f830112613e5657613e55614fd4565b5b8135613e66848260208601613d27565b91505092915050565b600081359050613e7e81615681565b92915050565b600060208284031215613e9a57613e99614fe8565b5b6000613ea884828501613d69565b91505092915050565b60008060408385031215613ec857613ec7614fe8565b5b6000613ed685828601613d69565b9250506020613ee785828601613d69565b9150509250929050565b600080600060608486031215613f0a57613f09614fe8565b5b6000613f1886828701613d69565b9350506020613f2986828701613d69565b9250506040613f3a86828701613e6f565b9150509250925092565b60008060008060808587031215613f5e57613f5d614fe8565b5b6000613f6c87828801613d69565b9450506020613f7d87828801613d69565b9350506040613f8e87828801613e6f565b925050606085013567ffffffffffffffff811115613faf57613fae614fe3565b5b613fbb87828801613e13565b91505092959194509250565b60008060408385031215613fde57613fdd614fe8565b5b6000613fec85828601613d69565b9250506020613ffd85828601613dd4565b9150509250929050565b6000806040838503121561401e5761401d614fe8565b5b600061402c85828601613d69565b925050602061403d85828601613e6f565b9150509250929050565b6000806020838503121561405e5761405d614fe8565b5b600083013567ffffffffffffffff81111561407c5761407b614fe3565b5b61408885828601613d7e565b92509250509250929050565b6000602082840312156140aa576140a9614fe8565b5b60006140b884828501613dd4565b91505092915050565b6000602082840312156140d7576140d6614fe8565b5b60006140e584828501613de9565b91505092915050565b60006020828403121561410457614103614fe8565b5b600061411284828501613dfe565b91505092915050565b60006020828403121561413157614130614fe8565b5b600082013567ffffffffffffffff81111561414f5761414e614fe3565b5b61415b84828501613e41565b91505092915050565b60006020828403121561417a57614179614fe8565b5b600061418884828501613e6f565b91505092915050565b61419a81614cee565b82525050565b6141a981614d00565b82525050565b6141b881614d0c565b82525050565b60006141c982614b8b565b6141d38185614ba1565b93506141e3818560208601614d7b565b6141ec81614fed565b840191505092915050565b600061420282614b96565b61420c8185614bbd565b935061421c818560208601614d7b565b61422581614fed565b840191505092915050565b600061423b82614b96565b6142458185614bce565b9350614255818560208601614d7b565b80840191505092915050565b6000815461426e81614dd8565b6142788186614bce565b9450600182166000811461429357600181146142a4576142d7565b60ff198316865281860193506142d7565b6142ad85614b76565b60005b838110156142cf578154818901526001820191506020810190506142b0565b838801955050505b50505092915050565b60006142ed602383614bbd565b91506142f882614ffe565b604082019050919050565b6000614310602b83614bbd565b915061431b8261504d565b604082019050919050565b6000614333603283614bbd565b915061433e8261509c565b604082019050919050565b6000614356602683614bbd565b9150614361826150eb565b604082019050919050565b6000614379601c83614bbd565b91506143848261513a565b602082019050919050565b600061439c602483614bbd565b91506143a782615163565b604082019050919050565b60006143bf601983614bbd565b91506143ca826151b2565b602082019050919050565b60006143e2602c83614bbd565b91506143ed826151db565b604082019050919050565b6000614405601a83614bbd565b91506144108261522a565b602082019050919050565b6000614428603883614bbd565b915061443382615253565b604082019050919050565b600061444b602a83614bbd565b9150614456826152a2565b604082019050919050565b600061446e602983614bbd565b9150614479826152f1565b604082019050919050565b6000614491602083614bbd565b915061449c82615340565b602082019050919050565b60006144b4602c83614bbd565b91506144bf82615369565b604082019050919050565b60006144d7600583614bce565b91506144e2826153b8565b600582019050919050565b60006144fa602083614bbd565b9150614505826153e1565b602082019050919050565b600061451d602983614bbd565b91506145288261540a565b604082019050919050565b6000614540601d83614bbd565b915061454b82615459565b602082019050919050565b6000614563602183614bbd565b915061456e82615482565b604082019050919050565b6000614586601483614bbd565b9150614591826154d1565b602082019050919050565b60006145a9600083614bb2565b91506145b4826154fa565b600082019050919050565b60006145cc603183614bbd565b91506145d7826154fd565b604082019050919050565b60006145ef602c83614bbd565b91506145fa8261554c565b604082019050919050565b6000614612600e83614bbd565b915061461d8261559b565b602082019050919050565b6000614635601083614bbd565b9150614640826155c4565b602082019050919050565b6000614658602383614bbd565b9150614663826155ed565b604082019050919050565b61467781614d62565b82525050565b60006146898285614261565b91506146958284614230565b91506146a0826144ca565b91508190509392505050565b60006146b78261459c565b9150819050919050565b60006020820190506146d66000830184614191565b92915050565b60006080820190506146f16000830187614191565b6146fe6020830186614191565b61470b604083018561466e565b818103606083015261471d81846141be565b905095945050505050565b600060e08201905061473d600083018a614191565b61474a602083018961466e565b614757604083018861466e565b614764606083018761466e565b61477160808301866141af565b61477e60a083018561466e565b61478b60c083018461466e565b98975050505050505050565b60006020820190506147ac60008301846141a0565b92915050565b600060208201905081810360008301526147cc81846141f7565b905092915050565b600060208201905081810360008301526147ed816142e0565b9050919050565b6000602082019050818103600083015261480d81614303565b9050919050565b6000602082019050818103600083015261482d81614326565b9050919050565b6000602082019050818103600083015261484d81614349565b9050919050565b6000602082019050818103600083015261486d8161436c565b9050919050565b6000602082019050818103600083015261488d8161438f565b9050919050565b600060208201905081810360008301526148ad816143b2565b9050919050565b600060208201905081810360008301526148cd816143d5565b9050919050565b600060208201905081810360008301526148ed816143f8565b9050919050565b6000602082019050818103600083015261490d8161441b565b9050919050565b6000602082019050818103600083015261492d8161443e565b9050919050565b6000602082019050818103600083015261494d81614461565b9050919050565b6000602082019050818103600083015261496d81614484565b9050919050565b6000602082019050818103600083015261498d816144a7565b9050919050565b600060208201905081810360008301526149ad816144ed565b9050919050565b600060208201905081810360008301526149cd81614510565b9050919050565b600060208201905081810360008301526149ed81614533565b9050919050565b60006020820190508181036000830152614a0d81614556565b9050919050565b60006020820190508181036000830152614a2d81614579565b9050919050565b60006020820190508181036000830152614a4d816145bf565b9050919050565b60006020820190508181036000830152614a6d816145e2565b9050919050565b60006020820190508181036000830152614a8d81614605565b9050919050565b60006020820190508181036000830152614aad81614628565b9050919050565b60006020820190508181036000830152614acd8161464b565b9050919050565b6000602082019050614ae9600083018461466e565b92915050565b6000614af9614b0a565b9050614b058282614e0a565b919050565b6000604051905090565b600067ffffffffffffffff821115614b2f57614b2e614fa0565b5b614b3882614fed565b9050602081019050919050565b600067ffffffffffffffff821115614b6057614b5f614fa0565b5b614b6982614fed565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614be482614d62565b9150614bef83614d62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2457614c23614eb5565b5b828201905092915050565b6000614c3a82614d62565b9150614c4583614d62565b925082614c5557614c54614ee4565b5b828204905092915050565b6000614c6b82614d62565b9150614c7683614d62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614caf57614cae614eb5565b5b828202905092915050565b6000614cc582614d62565b9150614cd083614d62565b925082821015614ce357614ce2614eb5565b5b828203905092915050565b6000614cf982614d42565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d99578082015181840152602081019050614d7e565b83811115614da8576000848401525b50505050565b6000614db982614d62565b91506000821415614dcd57614dcc614eb5565b5b600182039050919050565b60006002820490506001821680614df057607f821691505b60208210811415614e0457614e03614f13565b5b50919050565b614e1382614fed565b810181811067ffffffffffffffff82111715614e3257614e31614fa0565b5b80604052505050565b6000614e4682614d62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7957614e78614eb5565b5b600182019050919050565b6000614e8f82614d62565b9150614e9a83614d62565b925082614eaa57614ea9614ee4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d61782066726565206d696e747320706572206164647265737320657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f46726565206d696e74206e6f7420656e61626c6564207965742e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f353020706572207472616e73616374696f6e20697320746865206d6178000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742043524f20616d6f756e74000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4441434320697320736f6c64206f757400000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e64206f6e2066726565206d696e74206c60008201527f6973740000000000000000000000000000000000000000000000000000000000602082015250565b61564581614cee565b811461565057600080fd5b50565b61565c81614d00565b811461566757600080fd5b50565b61567381614d16565b811461567e57600080fd5b50565b61568a81614d62565b811461569557600080fd5b5056fea26469706673582212207035f078d6cc96c2686aaa738f49b2532cbc3a69da7256cf3d5dfd026728d80f64736f6c634300080700330000000000000000000000005220e69de3e7b5d6a9d4646cef85372f3b534810
Deployed Bytecode
0x6080604052600436106103765760003560e01c8063715018a6116101d1578063ba419de011610102578063db8ac989116100a0578063edec5f271161006f578063edec5f2714610cb7578063efeff5f514610ce0578063f2fde38b14610d09578063f843bd1514610d3257610376565b8063db8ac98914610c0f578063e985e9c514610c3a578063ea2f07b314610c77578063eddd0d9c14610c8e57610376565b8063c0818bfa116100dc578063c0818bfa14610b55578063c377c40514610b80578063c87b56dd14610ba9578063ca20014514610be657610376565b8063ba419de014610ac4578063ba4e5c4914610aed578063ba7d2c7614610b2a57610376565b80639c70b5121161016f578063a22cb46511610149578063a22cb46514610a1e578063a7d8d08a14610a47578063aeecdf3114610a70578063b88d4fde14610a9b57610376565b80639c70b512146109ac578063a0712d68146109d7578063a15a662c146109f357610376565b80638da5cb5b116101ab5780638da5cb5b1461090457806395d89b411461092f5780639718b5241461095a5780639b876c491461098357610376565b8063715018a6146108975780637f6e9093146108ae57806380b7ee19146108d957610376565b80633af32abf116102ab57806355f804b3116102495780636352211e116102235780636352211e146107c95780636c0360eb146108065780636f8b44b01461083157806370a082311461085a57610376565b806355f804b31461074c5780635c975abb146107755780635fba6a98146107a057610376565b806342842e0e1161028557806342842e0e14610692578063430837d1146106bb57806346d36211146106e65780634f6ccce71461070f57610376565b80633af32abf146106155780633c952764146106525780633ccfd60b1461067b57610376565b806318cae269116103185780632f745c59116102f25780632f745c591461055b57806335b77b7e1461059857806337546c67146105c1578063385df649146105fe57610376565b806318cae269146104ca57806323b872dd146105075780632d2c55651461053057610376565b8063081812fc11610354578063081812fc1461040e578063095ea7b31461044b57806313966db51461047457806318160ddd1461049f57610376565b806301ffc9a71461037b57806305837d76146103b857806306fdde03146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906140c1565b610d5d565b6040516103af9190614797565b60405180910390f35b3480156103c457600080fd5b506103cd610dd7565b6040516103da9190614ad4565b60405180910390f35b3480156103ef57600080fd5b506103f8610ddd565b60405161040591906147b2565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190614164565b610e6f565b60405161044291906146c1565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190614007565b610ef4565b005b34801561048057600080fd5b5061048961100c565b6040516104969190614ad4565b60405180910390f35b3480156104ab57600080fd5b506104b461109b565b6040516104c19190614ad4565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613e84565b6110a8565b6040516104fe9190614ad4565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190613ef1565b6110c0565b005b34801561053c57600080fd5b50610545611120565b60405161055291906146c1565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190614007565b611146565b60405161058f9190614ad4565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190614164565b6111eb565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190613e84565b611271565b6040516105f59190614ad4565b60405180910390f35b34801561060a57600080fd5b50610613611289565b005b34801561062157600080fd5b5061063c60048036038101906106379190613e84565b611333565b6040516106499190614797565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190614094565b6113e2565b005b34801561068757600080fd5b5061069061147b565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613ef1565b611592565b005b3480156106c757600080fd5b506106d06115b2565b6040516106dd9190614ad4565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190614047565b6115b8565b005b34801561071b57600080fd5b5061073660048036038101906107319190614164565b61171c565b6040516107439190614ad4565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e919061411b565b61178d565b005b34801561078157600080fd5b5061078a61185a565b6040516107979190614797565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190614164565b61186e565b005b3480156107d557600080fd5b506107f060048036038101906107eb9190614164565b6118f4565b6040516107fd91906146c1565b60405180910390f35b34801561081257600080fd5b5061081b6119a6565b60405161082891906147b2565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614164565b611a38565b005b34801561086657600080fd5b50610881600480360381019061087c9190613e84565b611abe565b60405161088e9190614ad4565b60405180910390f35b3480156108a357600080fd5b506108ac611b76565b005b3480156108ba57600080fd5b506108c3611bfe565b6040516108d09190614797565b60405180910390f35b3480156108e557600080fd5b506108ee611c12565b6040516108fb9190614ad4565b60405180910390f35b34801561091057600080fd5b50610919611c18565b60405161092691906146c1565b60405180910390f35b34801561093b57600080fd5b50610944611c42565b60405161095191906147b2565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190613e84565b611cd4565b005b34801561098f57600080fd5b506109aa60048036038101906109a59190614164565b611d94565b005b3480156109b857600080fd5b506109c1611e1a565b6040516109ce9190614797565b60405180910390f35b6109f160048036038101906109ec9190614164565b611e2d565b005b3480156109ff57600080fd5b50610a08611f7a565b604051610a159190614ad4565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613fc7565b611f80565b005b348015610a5357600080fd5b50610a6e6004803603810190610a699190614164565b612101565b005b348015610a7c57600080fd5b50610a85612187565b604051610a929190614ad4565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd9190613f44565b61218d565b005b348015610ad057600080fd5b50610aeb6004803603810190610ae69190614164565b6121ef565b005b348015610af957600080fd5b50610b146004803603810190610b0f9190614164565b6123f4565b604051610b2191906146c1565b60405180910390f35b348015610b3657600080fd5b50610b3f612433565b604051610b4c9190614ad4565b60405180910390f35b348015610b6157600080fd5b50610b6a612439565b604051610b779190614ad4565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190614164565b61243f565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190614164565b6124c5565b604051610bdd91906147b2565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c089190614164565b6124f9565b005b348015610c1b57600080fd5b50610c2461257f565b604051610c319190614ad4565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190613eb1565b612585565b604051610c6e9190614797565b60405180910390f35b348015610c8357600080fd5b50610c8c612619565b005b348015610c9a57600080fd5b50610cb56004803603810190610cb09190614164565b6126c3565b005b348015610cc357600080fd5b50610cde6004803603810190610cd99190614047565b612749565b005b348015610cec57600080fd5b50610d076004803603810190610d029190614164565b6127e9565b005b348015610d1557600080fd5b50610d306004803603810190610d2b9190613e84565b61286f565b005b348015610d3e57600080fd5b50610d47612967565b604051610d549190614ad4565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dd05750610dcf8261296d565b5b9050919050565b600e5481565b606060008054610dec90614dd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1890614dd8565b8015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b5050505050905090565b6000610e7a82612a4f565b610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb090614974565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eff826118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906149f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f8f612abb565b73ffffffffffffffffffffffffffffffffffffffff161480610fbe5750610fbd81610fb8612abb565b612585565b5b610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff4906148f4565b60405180910390fd5b6110078383612ac3565b505050565b60008061101761109b565b9050611770811061102d57601454915050611098565b611388811061104157601354915050611098565b610fa0811061105557601254915050611098565b610bb8811061106957601154915050611098565b6107d0811061107d57601054915050611098565b6103e8811061109157600f54915050611098565b600e549150505b90565b6000600880549050905090565b60186020528060005260406000206000915090505481565b6110d16110cb612abb565b82612b7c565b611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614a34565b60405180910390fd5b61111b838383612c5a565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061115183611abe565b8210611192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611189906147f4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111f3612abb565b73ffffffffffffffffffffffffffffffffffffffff16611211611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90614994565b60405180910390fd5b8060128190555050565b60196020528060005260406000206000915090505481565b611291612abb565b73ffffffffffffffffffffffffffffffffffffffff166112af611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90614994565b60405180910390fd5b611e7d60009054906101000a900460ff1615611e7d60006101000a81548160ff021916908315150217905550565b600080600090505b6017805490508110156113d7578273ffffffffffffffffffffffffffffffffffffffff166017828154811061137357611372614f71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113c45760019150506113dd565b80806113cf90614e3b565b91505061133b565b50600090505b919050565b6113ea612abb565b73ffffffffffffffffffffffffffffffffffffffff16611408611c18565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145590614994565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b611483612abb565b73ffffffffffffffffffffffffffffffffffffffff166114a1611c18565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614994565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161153f906146ac565b60006040518083038185875af1925050503d806000811461157c576040519150601f19603f3d011682016040523d82523d6000602084013e611581565b606091505b505090508061158f57600080fd5b50565b6115ad8383836040518060200160405280600081525061218d565b505050565b601a5481565b6115c0612abb565b73ffffffffffffffffffffffffffffffffffffffff166115de611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614994565b60405180910390fd5b600082829050905060005b81811015611716576018600085858481811061165e5761165d614f71565b5b90506020020160208101906116739190613e84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116be90614e3b565b919050555060006116cf8383612eb6565b90506117028585848181106116e7576116e6614f71565b5b90506020020160208101906116fc9190613e84565b82612f23565b50808061170e90614e3b565b91505061163f565b50505050565b600061172661109b565b8210611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614a54565b60405180910390fd5b6008828154811061177b5761177a614f71565b5b90600052602060002001549050919050565b611795612abb565b73ffffffffffffffffffffffffffffffffffffffff166117b3611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614994565b60405180910390fd5b80600b908051906020019061181f929190613b81565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad8160405161184f91906147b2565b60405180910390a150565b611e7d60009054906101000a900460ff1681565b611876612abb565b73ffffffffffffffffffffffffffffffffffffffff16611894611c18565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614994565b60405180910390fd5b8060108190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490614934565b60405180910390fd5b80915050919050565b6060600b80546119b590614dd8565b80601f01602080910402602001604051908101604052809291908181526020018280546119e190614dd8565b8015611a2e5780601f10611a0357610100808354040283529160200191611a2e565b820191906000526020600020905b815481529060010190602001808311611a1157829003601f168201915b5050505050905090565b611a40612abb565b73ffffffffffffffffffffffffffffffffffffffff16611a5e611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90614994565b60405180910390fd5b80601a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2690614914565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b7e612abb565b73ffffffffffffffffffffffffffffffffffffffff16611b9c611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614994565b60405180910390fd5b611bfc6000612f41565b565b611e7d60019054906101000a900460ff1681565b600f5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611c5190614dd8565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7d90614dd8565b8015611cca5780601f10611c9f57610100808354040283529160200191611cca565b820191906000526020600020905b815481529060010190602001808311611cad57829003601f168201915b5050505050905090565b611cdc612abb565b73ffffffffffffffffffffffffffffffffffffffff16611cfa611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614994565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d9c612abb565b73ffffffffffffffffffffffffffffffffffffffff16611dba611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0790614994565b60405180910390fd5b80600f8190555050565b601660009054906101000a900460ff1681565b611e7d60009054906101000a900460ff1615611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614a74565b60405180910390fd5b601a5481611e8a61109b565b611e949190614bd9565b1115611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614a94565b60405180910390fd5b6032811115611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149d4565b60405180910390fd5b80611f2261100c565b611f2c9190614c60565b341015611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590614a14565b60405180910390fd5b611f7781613007565b50565b60125481565b611f88612abb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614894565b60405180910390fd5b8060056000612003612abb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120b0612abb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120f59190614797565b60405180910390a35050565b612109612abb565b73ffffffffffffffffffffffffffffffffffffffff16612127611c18565b73ffffffffffffffffffffffffffffffffffffffff161461217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217490614994565b60405180910390fd5b8060148190555050565b60145481565b61219e612198612abb565b83612b7c565b6121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614a34565b60405180910390fd5b6121e984848484613097565b50505050565b611e7d60019054906101000a900460ff1615612240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612237906148d4565b60405180910390fd5b601a548161224c61109b565b6122569190614bd9565b1115612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90614a94565b60405180910390fd5b6122a033611333565b6122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690614ab4565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060155482826123329190614bd9565b1115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a906147d4565b60405180910390fd5b60005b828110156123e657601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906123ce90614e3b565b919050555080806123de90614e3b565b915050612376565b506123f082613007565b5050565b6017818154811061240457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60135481565b612447612abb565b73ffffffffffffffffffffffffffffffffffffffff16612465611c18565b73ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614994565b60405180910390fd5b8060158190555050565b6060600b6124d2836130f3565b6040516020016124e392919061467d565b6040516020818303038152906040529050919050565b612501612abb565b73ffffffffffffffffffffffffffffffffffffffff1661251f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c90614994565b60405180910390fd5b8060118190555050565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612621612abb565b73ffffffffffffffffffffffffffffffffffffffff1661263f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614994565b60405180910390fd5b611e7d60019054906101000a900460ff1615611e7d60016101000a81548160ff021916908315150217905550565b6126cb612abb565b73ffffffffffffffffffffffffffffffffffffffff166126e9611c18565b73ffffffffffffffffffffffffffffffffffffffff161461273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614994565b60405180910390fd5b80600e8190555050565b612751612abb565b73ffffffffffffffffffffffffffffffffffffffff1661276f611c18565b73ffffffffffffffffffffffffffffffffffffffff16146127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614994565b60405180910390fd5b601760006127d39190613c07565b8181601791906127e4929190613c28565b505050565b6127f1612abb565b73ffffffffffffffffffffffffffffffffffffffff1661280f611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90614994565b60405180910390fd5b8060138190555050565b612877612abb565b73ffffffffffffffffffffffffffffffffffffffff16612895611c18565b73ffffffffffffffffffffffffffffffffffffffff16146128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290614994565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561295b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295290614834565b60405180910390fd5b61296481612f41565b50565b60115481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a3857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a485750612a4782613254565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b36836118f4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612b8782612a4f565b612bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbd906148b4565b60405180910390fd5b6000612bd1836118f4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c4057508373ffffffffffffffffffffffffffffffffffffffff16612c2884610e6f565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c515750612c508185612585565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c7a826118f4565b73ffffffffffffffffffffffffffffffffffffffff1614612cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc7906149b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790614874565b60405180910390fd5b612d4b8383836132be565b612d56600082612ac3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da69190614cba565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dfd9190614bd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080333a4342600143612eca9190614cba565b408888604051602001612ee39796959493929190614728565b6040516020818303038152906040528051906020012060001c90506000601b5482612f0e9190614e84565b9050612f19816133d2565b9250505092915050565b612f3d8282604051806020016040528060008152506134a3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561309357601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061306290614e3b565b919050555060006130738383612eb6565b905061307f3382612f23565b50808061308b90614e3b565b91505061300a565b5050565b6130a2848484612c5a565b6130ae848484846134fe565b6130ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e490614814565b60405180910390fd5b50505050565b6060600082141561313b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061324f565b600082905060005b6000821461316d57808061315690614e3b565b915050600a826131669190614c2f565b9150613143565b60008167ffffffffffffffff81111561318957613188614fa0565b5b6040519080825280601f01601f1916602001820160405280156131bb5781602001600182028036833780820191505090505b5090505b60008514613248576001826131d49190614cba565b9150600a856131e39190614e84565b60306131ef9190614bd9565b60f81b81838151811061320557613204614f71565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132419190614c2f565b94506131bf565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132c9838383613695565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330c576133078161369a565b61334b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461334a5761334983826136e3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561338e5761338981613850565b6133cd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133cc576133cb8282613921565b5b5b505050565b600080601c83611e6181106133ea576133e9614f71565b5b0154905060008082141561340057839050613404565b8190505b60006001601b546134159190614cba565b9050808514613480576000601c82611e61811061343557613434614f71565b5b0154905060008114156134625781601c87611e61811061345857613457614f71565b5b018190555061347e565b80601c87611e61811061347857613477614f71565b5b01819055505b505b601b600081548092919061349390614dae565b9190505550819350505050919050565b6134ad83836139a0565b6134ba60008484846134fe565b6134f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f090614814565b60405180910390fd5b505050565b600061351f8473ffffffffffffffffffffffffffffffffffffffff16613b6e565b15613688578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613548612abb565b8786866040518563ffffffff1660e01b815260040161356a94939291906146dc565b602060405180830381600087803b15801561358457600080fd5b505af19250505080156135b557506040513d601f19601f820116820180604052508101906135b291906140ee565b60015b613638573d80600081146135e5576040519150601f19603f3d011682016040523d82523d6000602084013e6135ea565b606091505b50600081511415613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362790614814565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061368d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136f084611abe565b6136fa9190614cba565b90506000600760008481526020019081526020016000205490508181146137df576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138649190614cba565b905060006009600084815260200190815260200160002054905060006008838154811061389457613893614f71565b5b9060005260206000200154905080600883815481106138b6576138b5614f71565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061390557613904614f42565b5b6001900381819060005260206000200160009055905550505050565b600061392c83611abe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0790614954565b60405180910390fd5b613a1981612a4f565b15613a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5090614854565b60405180910390fd5b613a65600083836132be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ab59190614bd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613b8d90614dd8565b90600052602060002090601f016020900481019282613baf5760008555613bf6565b82601f10613bc857805160ff1916838001178555613bf6565b82800160010185558215613bf6579182015b82811115613bf5578251825591602001919060010190613bda565b5b509050613c039190613cc8565b5090565b5080546000825590600052602060002090810190613c259190613cc8565b50565b828054828255906000526020600020908101928215613cb7579160200282015b82811115613cb657823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613c48565b5b509050613cc49190613cc8565b5090565b5b80821115613ce1576000816000905550600101613cc9565b5090565b6000613cf8613cf384614b14565b614aef565b905082815260208101848484011115613d1457613d13614fde565b5b613d1f848285614d6c565b509392505050565b6000613d3a613d3584614b45565b614aef565b905082815260208101848484011115613d5657613d55614fde565b5b613d61848285614d6c565b509392505050565b600081359050613d788161563c565b92915050565b60008083601f840112613d9457613d93614fd4565b5b8235905067ffffffffffffffff811115613db157613db0614fcf565b5b602083019150836020820283011115613dcd57613dcc614fd9565b5b9250929050565b600081359050613de381615653565b92915050565b600081359050613df88161566a565b92915050565b600081519050613e0d8161566a565b92915050565b600082601f830112613e2857613e27614fd4565b5b8135613e38848260208601613ce5565b91505092915050565b600082601f830112613e5657613e55614fd4565b5b8135613e66848260208601613d27565b91505092915050565b600081359050613e7e81615681565b92915050565b600060208284031215613e9a57613e99614fe8565b5b6000613ea884828501613d69565b91505092915050565b60008060408385031215613ec857613ec7614fe8565b5b6000613ed685828601613d69565b9250506020613ee785828601613d69565b9150509250929050565b600080600060608486031215613f0a57613f09614fe8565b5b6000613f1886828701613d69565b9350506020613f2986828701613d69565b9250506040613f3a86828701613e6f565b9150509250925092565b60008060008060808587031215613f5e57613f5d614fe8565b5b6000613f6c87828801613d69565b9450506020613f7d87828801613d69565b9350506040613f8e87828801613e6f565b925050606085013567ffffffffffffffff811115613faf57613fae614fe3565b5b613fbb87828801613e13565b91505092959194509250565b60008060408385031215613fde57613fdd614fe8565b5b6000613fec85828601613d69565b9250506020613ffd85828601613dd4565b9150509250929050565b6000806040838503121561401e5761401d614fe8565b5b600061402c85828601613d69565b925050602061403d85828601613e6f565b9150509250929050565b6000806020838503121561405e5761405d614fe8565b5b600083013567ffffffffffffffff81111561407c5761407b614fe3565b5b61408885828601613d7e565b92509250509250929050565b6000602082840312156140aa576140a9614fe8565b5b60006140b884828501613dd4565b91505092915050565b6000602082840312156140d7576140d6614fe8565b5b60006140e584828501613de9565b91505092915050565b60006020828403121561410457614103614fe8565b5b600061411284828501613dfe565b91505092915050565b60006020828403121561413157614130614fe8565b5b600082013567ffffffffffffffff81111561414f5761414e614fe3565b5b61415b84828501613e41565b91505092915050565b60006020828403121561417a57614179614fe8565b5b600061418884828501613e6f565b91505092915050565b61419a81614cee565b82525050565b6141a981614d00565b82525050565b6141b881614d0c565b82525050565b60006141c982614b8b565b6141d38185614ba1565b93506141e3818560208601614d7b565b6141ec81614fed565b840191505092915050565b600061420282614b96565b61420c8185614bbd565b935061421c818560208601614d7b565b61422581614fed565b840191505092915050565b600061423b82614b96565b6142458185614bce565b9350614255818560208601614d7b565b80840191505092915050565b6000815461426e81614dd8565b6142788186614bce565b9450600182166000811461429357600181146142a4576142d7565b60ff198316865281860193506142d7565b6142ad85614b76565b60005b838110156142cf578154818901526001820191506020810190506142b0565b838801955050505b50505092915050565b60006142ed602383614bbd565b91506142f882614ffe565b604082019050919050565b6000614310602b83614bbd565b915061431b8261504d565b604082019050919050565b6000614333603283614bbd565b915061433e8261509c565b604082019050919050565b6000614356602683614bbd565b9150614361826150eb565b604082019050919050565b6000614379601c83614bbd565b91506143848261513a565b602082019050919050565b600061439c602483614bbd565b91506143a782615163565b604082019050919050565b60006143bf601983614bbd565b91506143ca826151b2565b602082019050919050565b60006143e2602c83614bbd565b91506143ed826151db565b604082019050919050565b6000614405601a83614bbd565b91506144108261522a565b602082019050919050565b6000614428603883614bbd565b915061443382615253565b604082019050919050565b600061444b602a83614bbd565b9150614456826152a2565b604082019050919050565b600061446e602983614bbd565b9150614479826152f1565b604082019050919050565b6000614491602083614bbd565b915061449c82615340565b602082019050919050565b60006144b4602c83614bbd565b91506144bf82615369565b604082019050919050565b60006144d7600583614bce565b91506144e2826153b8565b600582019050919050565b60006144fa602083614bbd565b9150614505826153e1565b602082019050919050565b600061451d602983614bbd565b91506145288261540a565b604082019050919050565b6000614540601d83614bbd565b915061454b82615459565b602082019050919050565b6000614563602183614bbd565b915061456e82615482565b604082019050919050565b6000614586601483614bbd565b9150614591826154d1565b602082019050919050565b60006145a9600083614bb2565b91506145b4826154fa565b600082019050919050565b60006145cc603183614bbd565b91506145d7826154fd565b604082019050919050565b60006145ef602c83614bbd565b91506145fa8261554c565b604082019050919050565b6000614612600e83614bbd565b915061461d8261559b565b602082019050919050565b6000614635601083614bbd565b9150614640826155c4565b602082019050919050565b6000614658602383614bbd565b9150614663826155ed565b604082019050919050565b61467781614d62565b82525050565b60006146898285614261565b91506146958284614230565b91506146a0826144ca565b91508190509392505050565b60006146b78261459c565b9150819050919050565b60006020820190506146d66000830184614191565b92915050565b60006080820190506146f16000830187614191565b6146fe6020830186614191565b61470b604083018561466e565b818103606083015261471d81846141be565b905095945050505050565b600060e08201905061473d600083018a614191565b61474a602083018961466e565b614757604083018861466e565b614764606083018761466e565b61477160808301866141af565b61477e60a083018561466e565b61478b60c083018461466e565b98975050505050505050565b60006020820190506147ac60008301846141a0565b92915050565b600060208201905081810360008301526147cc81846141f7565b905092915050565b600060208201905081810360008301526147ed816142e0565b9050919050565b6000602082019050818103600083015261480d81614303565b9050919050565b6000602082019050818103600083015261482d81614326565b9050919050565b6000602082019050818103600083015261484d81614349565b9050919050565b6000602082019050818103600083015261486d8161436c565b9050919050565b6000602082019050818103600083015261488d8161438f565b9050919050565b600060208201905081810360008301526148ad816143b2565b9050919050565b600060208201905081810360008301526148cd816143d5565b9050919050565b600060208201905081810360008301526148ed816143f8565b9050919050565b6000602082019050818103600083015261490d8161441b565b9050919050565b6000602082019050818103600083015261492d8161443e565b9050919050565b6000602082019050818103600083015261494d81614461565b9050919050565b6000602082019050818103600083015261496d81614484565b9050919050565b6000602082019050818103600083015261498d816144a7565b9050919050565b600060208201905081810360008301526149ad816144ed565b9050919050565b600060208201905081810360008301526149cd81614510565b9050919050565b600060208201905081810360008301526149ed81614533565b9050919050565b60006020820190508181036000830152614a0d81614556565b9050919050565b60006020820190508181036000830152614a2d81614579565b9050919050565b60006020820190508181036000830152614a4d816145bf565b9050919050565b60006020820190508181036000830152614a6d816145e2565b9050919050565b60006020820190508181036000830152614a8d81614605565b9050919050565b60006020820190508181036000830152614aad81614628565b9050919050565b60006020820190508181036000830152614acd8161464b565b9050919050565b6000602082019050614ae9600083018461466e565b92915050565b6000614af9614b0a565b9050614b058282614e0a565b919050565b6000604051905090565b600067ffffffffffffffff821115614b2f57614b2e614fa0565b5b614b3882614fed565b9050602081019050919050565b600067ffffffffffffffff821115614b6057614b5f614fa0565b5b614b6982614fed565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614be482614d62565b9150614bef83614d62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2457614c23614eb5565b5b828201905092915050565b6000614c3a82614d62565b9150614c4583614d62565b925082614c5557614c54614ee4565b5b828204905092915050565b6000614c6b82614d62565b9150614c7683614d62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614caf57614cae614eb5565b5b828202905092915050565b6000614cc582614d62565b9150614cd083614d62565b925082821015614ce357614ce2614eb5565b5b828203905092915050565b6000614cf982614d42565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d99578082015181840152602081019050614d7e565b83811115614da8576000848401525b50505050565b6000614db982614d62565b91506000821415614dcd57614dcc614eb5565b5b600182039050919050565b60006002820490506001821680614df057607f821691505b60208210811415614e0457614e03614f13565b5b50919050565b614e1382614fed565b810181811067ffffffffffffffff82111715614e3257614e31614fa0565b5b80604052505050565b6000614e4682614d62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7957614e78614eb5565b5b600182019050919050565b6000614e8f82614d62565b9150614e9a83614d62565b925082614eaa57614ea9614ee4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d61782066726565206d696e747320706572206164647265737320657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f46726565206d696e74206e6f7420656e61626c6564207965742e000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f353020706572207472616e73616374696f6e20697320746865206d6178000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742043524f20616d6f756e74000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4441434320697320736f6c64206f757400000000000000000000000000000000600082015250565b7f41646472657373206e6f7420666f756e64206f6e2066726565206d696e74206c60008201527f6973740000000000000000000000000000000000000000000000000000000000602082015250565b61564581614cee565b811461565057600080fd5b50565b61565c81614d00565b811461566757600080fd5b50565b61567381614d16565b811461567e57600080fd5b50565b61568a81614d62565b811461569557600080fd5b5056fea26469706673582212207035f078d6cc96c2686aaa738f49b2532cbc3a69da7256cf3d5dfd026728d80f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005220e69de3e7b5d6a9d4646cef85372f3b534810
-----Decoded View---------------
Arg [0] : _TREASURY (address): 0x5220e69de3e7b5d6a9d4646cef85372f3b534810
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005220e69de3e7b5d6a9d4646cef85372f3b534810
Deployed ByteCode Sourcemap
44080:6631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37678:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44309:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25414:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26937:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26502:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47297:662;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38377:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44771:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27847:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44279:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38014:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45761:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44831:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45201:69;;;;;;;;;;;;;:::i;:::-;;47052:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46429:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49428:138;;;;;;;;;;;;;:::i;:::-;;28242:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44895:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49091:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46292:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45027:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45555:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25102:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46784:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46070:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24822:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12741:88;;;;;;;;;;;;;:::i;:::-;;45057:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44354:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12130:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25569:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46686:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45452:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44690:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47965:319;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44498:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27240:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45967:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44594:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28470:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48290:543;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44729:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44646;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44546:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46176:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46875:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45658:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44402:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27602:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45274:75;;;;;;;;;;;;;:::i;:::-;;45353:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46534:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45864:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12974:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44450:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37678:260;37805:4;37850:35;37835:50;;;:11;:50;;;;:97;;;;37896:36;37920:11;37896:23;:36::i;:::-;37835:97;37821:111;;37678:260;;;:::o;44309:40::-;;;;:::o;25414:94::-;25468:13;25497:5;25490:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25414:94;:::o;26937:239::-;27038:7;27065:16;27073:7;27065;:16::i;:::-;27057:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:15;:24;27162:7;27146:24;;;;;;;;;;;;;;;;;;;;;27139:31;;26937:239;;;:::o;26502:377::-;26579:13;26595:23;26610:7;26595:14;:23::i;:::-;26579:39;;26639:5;26633:11;;:2;:11;;;;26625:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26723:5;26707:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26732:37;26749:5;26756:12;:10;:12::i;:::-;26732:16;:37::i;:::-;26707:62;26691:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;26852:21;26861:2;26865:7;26852:8;:21::i;:::-;26572:307;26502:377;;:::o;47297:662::-;47337:7;47357:18;47378:13;:11;:13::i;:::-;47357:34;;47423:4;47406:13;:21;47402:552;;47451:17;;47444:24;;;;;47402:552;47507:4;47490:13;:21;47486:468;;47535:17;;47528:24;;;;;47486:468;47591:4;47574:13;:21;47570:384;;47619:17;;47612:24;;;;;47570:384;47675:4;47658:13;:21;47654:300;;47703:17;;47696:24;;;;;47654:300;47759:4;47742:13;:21;47738:216;;47787:17;;47780:24;;;;;47738:216;47843:4;47826:13;:21;47822:132;;47871:17;;47864:24;;;;;47822:132;47928:14;;47921:21;;;47297:662;;:::o;38377:107::-;38438:7;38461:10;:17;;;;38454:24;;38377:107;:::o;44771:55::-;;;;;;;;;;;;;;;;;:::o;27847:332::-;28028:41;28047:12;:10;:12::i;:::-;28061:7;28028:18;:41::i;:::-;28012:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;28145:28;28155:4;28161:2;28165:7;28145:9;:28::i;:::-;27847:332;;;:::o;44279:23::-;;;;;;;;;;;;;:::o;38014:295::-;38136:7;38179:23;38196:5;38179:16;:23::i;:::-;38171:5;:31;38155:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;38277:12;:19;38290:5;38277:19;;;;;;;;;;;;;;;:26;38297:5;38277:26;;;;;;;;;;;;38270:33;;38014:295;;;;:::o;45761:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45846:8:::1;45826:17;:28;;;;45761:99:::0;:::o;44831:57::-;;;;;;;;;;;;;;;;;:::o;45201:69::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45258:6:::1;;;;;;;;;;;45257:7;45248:6;;:16;;;;;;;;;;;;;;;;;;45201:69::o:0;47052:239::-;47111:4;47129:6;47138:1;47129:10;;47124:143;47145:20;:27;;;;47141:1;:31;47124:143;;;47219:5;47192:32;;:20;47213:1;47192:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;47188:72;;;47246:4;47239:11;;;;;47188:72;47174:3;;;;;:::i;:::-;;;;47124:143;;;;47280:5;47273:12;;47052:239;;;;:::o;46429:97::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46514:6:::1;46496:15;;:24;;;;;;;;;;;;;;;;;;46429:97:::0;:::o;49428:138::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49473:7:::1;49494:8;;;;;;;;;;;49486:22;;49516:21;49486:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49472:70;;;49557:2;49549:11;;;::::0;::::1;;49465:101;49428:138::o:0;28242:165::-;28362:39;28379:4;28385:2;28389:7;28362:39;;;;;;;;;;;;:16;:39::i;:::-;28242:165;;;:::o;44895:35::-;;;;:::o;49091:331::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49171:14:::1;49188:12;;:19;;49171:36;;49219:9;49214:203;49238:6;49234:1;:10;49214:203;;;49260:20;:37;49281:12;;49294:1;49281:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49260:37;;;;;;;;;;;;;;;;:39;;;;;;;;;:::i;:::-;;;;;;49308:18;49329:34;49353:6;49361:1;49329:23;:34::i;:::-;49308:55;;49372:38;49382:12;;49395:1;49382:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49399:10;49372:9;:38::i;:::-;49251:166;49246:3;;;;;:::i;:::-;;;;49214:203;;;;49164:258;49091:331:::0;;:::o;38553:272::-;38653:7;38696:30;:28;:30::i;:::-;38688:5;:38;38672:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;38802:10;38813:5;38802:17;;;;;;;;:::i;:::-;;;;;;;;;;38795:24;;38553:272;;;:::o;46292:131::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46373:8:::1;46362;:19;;;;;;;;;;;;:::i;:::-;;46393:24;46408:8;46393:24;;;;;;:::i;:::-;;;;;;;;46292:131:::0;:::o;45027:25::-;;;;;;;;;;;;;:::o;45555:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45640:8:::1;45620:17;:28;;;;45555:99:::0;:::o;25102:253::-;25199:7;25218:13;25234:7;:16;25242:7;25234:16;;;;;;;;;;;;;;;;;;;;;25218:32;;25282:1;25265:19;;:5;:19;;;;25257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25344:5;25337:12;;;25102:253;;;:::o;46784:85::-;46826:13;46855:8;46848:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46784:85;:::o;46070:102::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46156:10:::1;46140:13;:26;;;;46070:102:::0;:::o;24822:226::-;24919:7;24963:1;24946:19;;:5;:19;;;;24938:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25026:9;:16;25036:5;25026:16;;;;;;;;;;;;;;;;25019:23;;24822:226;;;:::o;12741:88::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12802:21:::1;12820:1;12802:9;:21::i;:::-;12741:88::o:0;45057:27::-;;;;;;;;;;;;;:::o;44354:43::-;;;;:::o;12130:81::-;12176:7;12199:6;;;;;;;;;;;12192:13;;12130:81;:::o;25569:98::-;25625:13;25654:7;25647:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25569:98;:::o;46686:92::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46763:9:::1;46752:8;;:20;;;;;;;;;;;;;;;;;;46686:92:::0;:::o;45452:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45537:8:::1;45517:17;:28;;;;45452:99:::0;:::o;44690:34::-;;;;;;;;;;;;;:::o;47965:319::-;48026:6;;;;;;;;;;;48025:7;48017:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;48092:13;;48082:6;48066:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:39;;48058:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48151:2;48141:6;:12;;48133:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;48227:6;48215:9;:7;:9::i;:::-;:18;;;;:::i;:::-;48202:9;:31;;48194:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48265:13;48271:6;48265:5;:13::i;:::-;47965:319;:::o;44498:43::-;;;;:::o;27240:299::-;27369:12;:10;:12::i;:::-;27357:24;;:8;:24;;;;27349:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27465:8;27420:18;:32;27439:12;:10;:12::i;:::-;27420:32;;;;;;;;;;;;;;;:42;27453:8;27420:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27514:8;27485:48;;27500:12;:10;:12::i;:::-;27485:48;;;27524:8;27485:48;;;;;;:::i;:::-;;;;;;;;27240:299;;:::o;45967:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46052:8:::1;46032:17;:28;;;;45967:99:::0;:::o;44594:43::-;;;;:::o;28470:321::-;28631:41;28650:12;:10;:12::i;:::-;28664:7;28631:18;:41::i;:::-;28615:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;28746:39;28760:4;28766:2;28770:7;28779:5;28746:13;:39::i;:::-;28470:321;;;;:::o;48290:543::-;48345:8;;;;;;;;;;;48344:9;48336:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;48425:13;;48415:6;48399:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:39;;48391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48474:25;48488:10;48474:13;:25::i;:::-;48466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48546:24;48573:22;:34;48596:10;48573:34;;;;;;;;;;;;;;;;48546:61;;48651:18;;48641:6;48622:16;:25;;;;:::i;:::-;:47;;48614:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48721:9;48716:92;48740:6;48736:1;:10;48716:92;;;48764:22;:34;48787:10;48764:34;;;;;;;;;;;;;;;;:36;;;;;;;;;:::i;:::-;;;;;;48748:3;;;;;:::i;:::-;;;;48716:92;;;;48814:13;48820:6;48814:5;:13::i;:::-;48329:504;48290:543;:::o;44729:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44646:::-;;;;:::o;44546:43::-;;;;:::o;46176:110::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46271:9:::1;46250:18;:30;;;;46176:110:::0;:::o;46875:171::-;46948:13;47001:8;47011:18;:7;:16;:18::i;:::-;46984:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46970:70;;46875:171;;;:::o;45658:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45743:8:::1;45723:17;:28;;;;45658:99:::0;:::o;44402:43::-;;;;:::o;27602:186::-;27724:4;27747:18;:25;27766:5;27747:25;;;;;;;;;;;;;;;:35;27773:8;27747:35;;;;;;;;;;;;;;;;;;;;;;;;;27740:42;;27602:186;;;;:::o;45274:75::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45335:8:::1;;;;;;;;;;;45334:9;45323:8;;:20;;;;;;;;;;;;;;;;;;45274:75::o:0;45353:95::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45434:8:::1;45417:14;:25;;;;45353:95:::0;:::o;46534:146::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46618:20:::1;;46611:27;;;;:::i;:::-;46668:6;;46645:20;:29;;;;;;;:::i;:::-;;46534:146:::0;;:::o;45864:99::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45949:8:::1;45929:17;:28;;;;45864:99:::0;:::o;12974:182::-;12343:12;:10;:12::i;:::-;12332:23;;:7;:5;:7::i;:::-;:23;;;12324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13079:1:::1;13059:22;;:8;:22;;;;13051:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13131:19;13141:8;13131:9;:19::i;:::-;12974:182:::0;:::o;44450:43::-;;;;:::o;24457:309::-;24584:4;24629:25;24614:40;;;:11;:40;;;;:99;;;;24680:33;24665:48;;;:11;:48;;;;24614:99;:146;;;;24724:36;24748:11;24724:23;:36::i;:::-;24614:146;24600:160;;24457:309;;;:::o;30238:121::-;30303:4;30351:1;30323:30;;:7;:16;30331:7;30323:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30316:37;;30238:121;;;:::o;11031:92::-;11084:7;11107:10;11100:17;;11031:92;:::o;33972:164::-;34070:2;34043:15;:24;34059:7;34043:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34122:7;34118:2;34084:46;;34093:23;34108:7;34093:14;:23::i;:::-;34084:46;;;;;;;;;;;;33972:164;;:::o;30510:371::-;30623:4;30647:16;30655:7;30647;:16::i;:::-;30639:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30719:13;30735:23;30750:7;30735:14;:23::i;:::-;30719:39;;30784:5;30773:16;;:7;:16;;;:58;;;;30824:7;30800:31;;:20;30812:7;30800:11;:20::i;:::-;:31;;;30773:58;:101;;;;30842:32;30859:5;30866:7;30842:16;:32::i;:::-;30773:101;30765:110;;;30510:371;;;;:::o;33319:547::-;33468:4;33441:31;;:23;33456:7;33441:14;:23::i;:::-;:31;;;33425:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;33560:1;33546:16;;:2;:16;;;;33538:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33612:39;33633:4;33639:2;33643:7;33612:20;:39::i;:::-;33708:29;33725:1;33729:7;33708:8;:29::i;:::-;33765:1;33746:9;:15;33756:4;33746:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33790:1;33773:9;:13;33783:2;33773:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33817:2;33798:7;:16;33806:7;33798:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33852:7;33848:2;33833:27;;33842:4;33833:27;;;;;;;;;;;;33319:547;;;:::o;49572:489::-;49656:7;49672:17;49751:10;49774:11;49798:12;49823:15;49876:1;49861:12;:16;;;;:::i;:::-;49851:27;49891:11;49915:2;49728:200;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49708:229;;;;;;49692:252;;49672:272;;49951:19;49985;;49973:9;:31;;;;:::i;:::-;49951:53;;50018:37;50043:11;50018:24;:37::i;:::-;50011:44;;;;49572:489;;;;:::o;31201:104::-;31273:26;31283:2;31287:7;31273:26;;;;;;;;;;;;:9;:26::i;:::-;31201:104;;:::o;13162:159::-;13214:16;13233:6;;;;;;;;;;;13214:25;;13255:8;13246:6;;:17;;;;;;;;;;;;;;;;;;13306:8;13275:40;;13296:8;13275:40;;;;;;;;;;;;13207:114;13162:159;:::o;48839:245::-;48891:9;48886:193;48910:6;48906:1;:10;48886:193;;;48932:20;:32;48953:10;48932:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48975:18;48996:34;49020:6;49028:1;48996:23;:34::i;:::-;48975:55;;49039:33;49049:10;49061;49039:9;:33::i;:::-;48923:156;48918:3;;;;;:::i;:::-;;;;48886:193;;;;48839:245;:::o;29635:308::-;29770:28;29780:4;29786:2;29790:7;29770:9;:28::i;:::-;29821:48;29844:4;29850:2;29854:7;29863:5;29821:22;:48::i;:::-;29805:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;29635:308;;;;:::o;8908:637::-;8964:13;9182:1;9173:5;:10;9169:43;;;9194:10;;;;;;;;;;;;;;;;;;;;;9169:43;9218:12;9233:5;9218:20;;9245:14;9266:62;9281:1;9273:4;:9;9266:62;;9293:8;;;;;:::i;:::-;;;;9318:2;9310:10;;;;;:::i;:::-;;;9266:62;;;9334:19;9366:6;9356:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9334:39;;9380:132;9396:1;9387:5;:10;9380:132;;9418:1;9408:11;;;;;:::i;:::-;;;9479:2;9471:5;:10;;;;:::i;:::-;9458:2;:24;;;;:::i;:::-;9445:39;;9428:6;9435;9428:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9502:2;9493:11;;;;;:::i;:::-;;;9380:132;;;9532:6;9518:21;;;;;8908:637;;;;:::o;23098:179::-;23208:4;23246:25;23231:40;;;:11;:40;;;;23224:47;;23098:179;;;:::o;39406:521::-;39532:45;39559:4;39565:2;39569:7;39532:26;:45::i;:::-;39606:1;39590:18;;:4;:18;;;39586:167;;;39619:40;39651:7;39619:31;:40::i;:::-;39586:167;;;39685:2;39677:10;;:4;:10;;;39673:80;;39698:47;39731:4;39737:7;39698:32;:47::i;:::-;39673:80;39586:167;39777:1;39763:16;;:2;:16;;;39759:163;;;39790:45;39827:7;39790:36;:45::i;:::-;39759:163;;;39859:4;39853:10;;:2;:10;;;39849:73;;39874:40;39902:2;39906:7;39874:27;:40::i;:::-;39849:73;39759:163;39406:521;;;:::o;50067:641::-;50139:7;50155:18;50176:16;50193:10;50176:28;;;;;;;:::i;:::-;;;;50155:49;;50211:14;50250:1;50236:10;:15;50232:99;;;50271:10;50262:19;;50232:99;;;50313:10;50304:19;;50232:99;50339:17;50381:1;50359:19;;:23;;;;:::i;:::-;50339:43;;50407:9;50393:10;:23;50389:264;;50427:22;50452:16;50469:9;50452:27;;;;;;;:::i;:::-;;;;50427:52;;50510:1;50492:14;:19;50488:158;;;50555:9;50524:16;50541:10;50524:28;;;;;;;:::i;:::-;;;:40;;;;50488:158;;;50622:14;50591:16;50608:10;50591:28;;;;;;;:::i;:::-;;;:45;;;;50488:158;50418:235;50389:264;50661:19;;:21;;;;;;;;;:::i;:::-;;;;;;50696:6;50689:13;;;;;50067:641;;;:::o;31522:281::-;31634:18;31640:2;31644:7;31634:5;:18::i;:::-;31675:54;31706:1;31710:2;31714:7;31723:5;31675:22;:54::i;:::-;31659:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;31522:281;;;:::o;34679:685::-;34816:4;34833:15;:2;:13;;;:15::i;:::-;34829:530;;;34888:2;34872:36;;;34909:12;:10;:12::i;:::-;34923:4;34929:7;34938:5;34872:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34859:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35116:1;35099:6;:13;:18;35095:214;;;35132:60;;;;;;;;;;:::i;:::-;;;;;;;;35095:214;35277:6;35271:13;35262:6;35258:2;35254:15;35247:38;34859:459;35004:41;;;34994:51;;;:6;:51;;;;34987:58;;;;;34829:530;35347:4;35340:11;;34679:685;;;;;;;:::o;35906:112::-;;;;:::o;40614:154::-;40714:10;:17;;;;40687:15;:24;40703:7;40687:24;;;;;;;;;;;:44;;;;40738:10;40754:7;40738:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40614:154;:::o;41377:936::-;41639:22;41689:1;41664:22;41681:4;41664:16;:22::i;:::-;:26;;;;:::i;:::-;41639:51;;41697:18;41718:17;:26;41736:7;41718:26;;;;;;;;;;;;41697:47;;41857:14;41843:10;:28;41839:306;;41882:19;41904:12;:18;41917:4;41904:18;;;;;;;;;;;;;;;:34;41923:14;41904:34;;;;;;;;;;;;41882:56;;41982:11;41949:12;:18;41962:4;41949:18;;;;;;;;;;;;;;;:30;41968:10;41949:30;;;;;;;;;;;:44;;;;42093:10;42060:17;:30;42078:11;42060:30;;;;;;;;;;;:43;;;;41873:272;41839:306;42233:17;:26;42251:7;42233:26;;;;;;;;;;;42226:33;;;42273:12;:18;42286:4;42273:18;;;;;;;;;;;;;;;:34;42292:14;42273:34;;;;;;;;;;;42266:41;;;41466:847;;41377:936;;:::o;42596:1025::-;42837:22;42882:1;42862:10;:17;;;;:21;;;;:::i;:::-;42837:46;;42890:18;42911:15;:24;42927:7;42911:24;;;;;;;;;;;;42890:45;;43246:19;43268:10;43279:14;43268:26;;;;;;;;:::i;:::-;;;;;;;;;;43246:48;;43328:11;43303:10;43314;43303:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43435:10;43404:15;:28;43420:11;43404:28;;;;;;;;;;;:41;;;;43568:15;:24;43584:7;43568:24;;;;;;;;;;;43561:31;;;43599:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42667:954;;;42596:1025;:::o;40216:207::-;40297:14;40314:20;40331:2;40314:16;:20::i;:::-;40297:37;;40368:7;40341:12;:16;40354:2;40341:16;;;;;;;;;;;;;;;:24;40358:6;40341:24;;;;;;;;;;;:34;;;;40411:6;40382:17;:26;40400:7;40382:26;;;;;;;;;;;:35;;;;40290:133;40216:207;;:::o;32113:356::-;32203:1;32189:16;;:2;:16;;;;32181:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32258:16;32266:7;32258;:16::i;:::-;32257:17;32249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32316:45;32345:1;32349:2;32353:7;32316:20;:45::i;:::-;32387:1;32370:9;:13;32380:2;32370:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32414:2;32395:7;:16;32403:7;32395:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32455:7;32451:2;32430:33;;32447:1;32430:33;;;;;;;;;;;;32113:356;;:::o;15393:351::-;15453:4;15645:12;15702:7;15690:20;15682:28;;15737:1;15730:4;:8;15723:15;;;15393:351;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:118::-;8730:24;8748:5;8730:24;:::i;:::-;8725:3;8718:37;8643:118;;:::o;8767:109::-;8848:21;8863:5;8848:21;:::i;:::-;8843:3;8836:34;8767:109;;:::o;8882:118::-;8969:24;8987:5;8969:24;:::i;:::-;8964:3;8957:37;8882:118;;:::o;9006:360::-;9092:3;9120:38;9152:5;9120:38;:::i;:::-;9174:70;9237:6;9232:3;9174:70;:::i;:::-;9167:77;;9253:52;9298:6;9293:3;9286:4;9279:5;9275:16;9253:52;:::i;:::-;9330:29;9352:6;9330:29;:::i;:::-;9325:3;9321:39;9314:46;;9096:270;9006:360;;;;:::o;9372:364::-;9460:3;9488:39;9521:5;9488:39;:::i;:::-;9543:71;9607:6;9602:3;9543:71;:::i;:::-;9536:78;;9623:52;9668:6;9663:3;9656:4;9649:5;9645:16;9623:52;:::i;:::-;9700:29;9722:6;9700:29;:::i;:::-;9695:3;9691:39;9684:46;;9464:272;9372:364;;;;:::o;9742:377::-;9848:3;9876:39;9909:5;9876:39;:::i;:::-;9931:89;10013:6;10008:3;9931:89;:::i;:::-;9924:96;;10029:52;10074:6;10069:3;10062:4;10055:5;10051:16;10029:52;:::i;:::-;10106:6;10101:3;10097:16;10090:23;;9852:267;9742:377;;;;:::o;10149:845::-;10252:3;10289:5;10283:12;10318:36;10344:9;10318:36;:::i;:::-;10370:89;10452:6;10447:3;10370:89;:::i;:::-;10363:96;;10490:1;10479:9;10475:17;10506:1;10501:137;;;;10652:1;10647:341;;;;10468:520;;10501:137;10585:4;10581:9;10570;10566:25;10561:3;10554:38;10621:6;10616:3;10612:16;10605:23;;10501:137;;10647:341;10714:38;10746:5;10714:38;:::i;:::-;10774:1;10788:154;10802:6;10799:1;10796:13;10788:154;;;10876:7;10870:14;10866:1;10861:3;10857:11;10850:35;10926:1;10917:7;10913:15;10902:26;;10824:4;10821:1;10817:12;10812:17;;10788:154;;;10971:6;10966:3;10962:16;10955:23;;10654:334;;10468:520;;10256:738;;10149:845;;;;:::o;11000:366::-;11142:3;11163:67;11227:2;11222:3;11163:67;:::i;:::-;11156:74;;11239:93;11328:3;11239:93;:::i;:::-;11357:2;11352:3;11348:12;11341:19;;11000:366;;;:::o;11372:::-;11514:3;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11611:93;11700:3;11611:93;:::i;:::-;11729:2;11724:3;11720:12;11713:19;;11372:366;;;:::o;11744:::-;11886:3;11907:67;11971:2;11966:3;11907:67;:::i;:::-;11900:74;;11983:93;12072:3;11983:93;:::i;:::-;12101:2;12096:3;12092:12;12085:19;;11744:366;;;:::o;12116:::-;12258:3;12279:67;12343:2;12338:3;12279:67;:::i;:::-;12272:74;;12355:93;12444:3;12355:93;:::i;:::-;12473:2;12468:3;12464:12;12457:19;;12116:366;;;:::o;12488:::-;12630:3;12651:67;12715:2;12710:3;12651:67;:::i;:::-;12644:74;;12727:93;12816:3;12727:93;:::i;:::-;12845:2;12840:3;12836:12;12829:19;;12488:366;;;:::o;12860:::-;13002:3;13023:67;13087:2;13082:3;13023:67;:::i;:::-;13016:74;;13099:93;13188:3;13099:93;:::i;:::-;13217:2;13212:3;13208:12;13201:19;;12860:366;;;:::o;13232:::-;13374:3;13395:67;13459:2;13454:3;13395:67;:::i;:::-;13388:74;;13471:93;13560:3;13471:93;:::i;:::-;13589:2;13584:3;13580:12;13573:19;;13232:366;;;:::o;13604:::-;13746:3;13767:67;13831:2;13826:3;13767:67;:::i;:::-;13760:74;;13843:93;13932:3;13843:93;:::i;:::-;13961:2;13956:3;13952:12;13945:19;;13604:366;;;:::o;13976:::-;14118:3;14139:67;14203:2;14198:3;14139:67;:::i;:::-;14132:74;;14215:93;14304:3;14215:93;:::i;:::-;14333:2;14328:3;14324:12;14317:19;;13976:366;;;:::o;14348:::-;14490:3;14511:67;14575:2;14570:3;14511:67;:::i;:::-;14504:74;;14587:93;14676:3;14587:93;:::i;:::-;14705:2;14700:3;14696:12;14689:19;;14348:366;;;:::o;14720:::-;14862:3;14883:67;14947:2;14942:3;14883:67;:::i;:::-;14876:74;;14959:93;15048:3;14959:93;:::i;:::-;15077:2;15072:3;15068:12;15061:19;;14720:366;;;:::o;15092:::-;15234:3;15255:67;15319:2;15314:3;15255:67;:::i;:::-;15248:74;;15331:93;15420:3;15331:93;:::i;:::-;15449:2;15444:3;15440:12;15433:19;;15092:366;;;:::o;15464:::-;15606:3;15627:67;15691:2;15686:3;15627:67;:::i;:::-;15620:74;;15703:93;15792:3;15703:93;:::i;:::-;15821:2;15816:3;15812:12;15805:19;;15464:366;;;:::o;15836:::-;15978:3;15999:67;16063:2;16058:3;15999:67;:::i;:::-;15992:74;;16075:93;16164:3;16075:93;:::i;:::-;16193:2;16188:3;16184:12;16177:19;;15836:366;;;:::o;16208:400::-;16368:3;16389:84;16471:1;16466:3;16389:84;:::i;:::-;16382:91;;16482:93;16571:3;16482:93;:::i;:::-;16600:1;16595:3;16591:11;16584:18;;16208:400;;;:::o;16614:366::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:398::-;18633:3;18654:83;18735:1;18730:3;18654:83;:::i;:::-;18647:90;;18746:93;18835:3;18746:93;:::i;:::-;18864:1;18859:3;18855:11;18848:18;;18474:398;;;:::o;18878:366::-;19020:3;19041:67;19105:2;19100:3;19041:67;:::i;:::-;19034:74;;19117:93;19206:3;19117:93;:::i;:::-;19235:2;19230:3;19226:12;19219:19;;18878:366;;;:::o;19250:::-;19392:3;19413:67;19477:2;19472:3;19413:67;:::i;:::-;19406:74;;19489:93;19578:3;19489:93;:::i;:::-;19607:2;19602:3;19598:12;19591:19;;19250:366;;;:::o;19622:::-;19764:3;19785:67;19849:2;19844:3;19785:67;:::i;:::-;19778:74;;19861:93;19950:3;19861:93;:::i;:::-;19979:2;19974:3;19970:12;19963:19;;19622:366;;;:::o;19994:::-;20136:3;20157:67;20221:2;20216:3;20157:67;:::i;:::-;20150:74;;20233:93;20322:3;20233:93;:::i;:::-;20351:2;20346:3;20342:12;20335:19;;19994:366;;;:::o;20366:::-;20508:3;20529:67;20593:2;20588:3;20529:67;:::i;:::-;20522:74;;20605:93;20694:3;20605:93;:::i;:::-;20723:2;20718:3;20714:12;20707:19;;20366:366;;;:::o;20738:118::-;20825:24;20843:5;20825:24;:::i;:::-;20820:3;20813:37;20738:118;;:::o;20862:695::-;21140:3;21162:92;21250:3;21241:6;21162:92;:::i;:::-;21155:99;;21271:95;21362:3;21353:6;21271:95;:::i;:::-;21264:102;;21383:148;21527:3;21383:148;:::i;:::-;21376:155;;21548:3;21541:10;;20862:695;;;;;:::o;21563:379::-;21747:3;21769:147;21912:3;21769:147;:::i;:::-;21762:154;;21933:3;21926:10;;21563:379;;;:::o;21948:222::-;22041:4;22079:2;22068:9;22064:18;22056:26;;22092:71;22160:1;22149:9;22145:17;22136:6;22092:71;:::i;:::-;21948:222;;;;:::o;22176:640::-;22371:4;22409:3;22398:9;22394:19;22386:27;;22423:71;22491:1;22480:9;22476:17;22467:6;22423:71;:::i;:::-;22504:72;22572:2;22561:9;22557:18;22548:6;22504:72;:::i;:::-;22586;22654:2;22643:9;22639:18;22630:6;22586:72;:::i;:::-;22705:9;22699:4;22695:20;22690:2;22679:9;22675:18;22668:48;22733:76;22804:4;22795:6;22733:76;:::i;:::-;22725:84;;22176:640;;;;;;;:::o;22822:886::-;23083:4;23121:3;23110:9;23106:19;23098:27;;23135:71;23203:1;23192:9;23188:17;23179:6;23135:71;:::i;:::-;23216:72;23284:2;23273:9;23269:18;23260:6;23216:72;:::i;:::-;23298;23366:2;23355:9;23351:18;23342:6;23298:72;:::i;:::-;23380;23448:2;23437:9;23433:18;23424:6;23380:72;:::i;:::-;23462:73;23530:3;23519:9;23515:19;23506:6;23462:73;:::i;:::-;23545;23613:3;23602:9;23598:19;23589:6;23545:73;:::i;:::-;23628;23696:3;23685:9;23681:19;23672:6;23628:73;:::i;:::-;22822:886;;;;;;;;;;:::o;23714:210::-;23801:4;23839:2;23828:9;23824:18;23816:26;;23852:65;23914:1;23903:9;23899:17;23890:6;23852:65;:::i;:::-;23714:210;;;;:::o;23930:313::-;24043:4;24081:2;24070:9;24066:18;24058:26;;24130:9;24124:4;24120:20;24116:1;24105:9;24101:17;24094:47;24158:78;24231:4;24222:6;24158:78;:::i;:::-;24150:86;;23930:313;;;;:::o;24249:419::-;24415:4;24453:2;24442:9;24438:18;24430:26;;24502:9;24496:4;24492:20;24488:1;24477:9;24473:17;24466:47;24530:131;24656:4;24530:131;:::i;:::-;24522:139;;24249:419;;;:::o;24674:::-;24840:4;24878:2;24867:9;24863:18;24855:26;;24927:9;24921:4;24917:20;24913:1;24902:9;24898:17;24891:47;24955:131;25081:4;24955:131;:::i;:::-;24947:139;;24674:419;;;:::o;25099:::-;25265:4;25303:2;25292:9;25288:18;25280:26;;25352:9;25346:4;25342:20;25338:1;25327:9;25323:17;25316:47;25380:131;25506:4;25380:131;:::i;:::-;25372:139;;25099:419;;;:::o;25524:::-;25690:4;25728:2;25717:9;25713:18;25705:26;;25777:9;25771:4;25767:20;25763:1;25752:9;25748:17;25741:47;25805:131;25931:4;25805:131;:::i;:::-;25797:139;;25524:419;;;:::o;25949:::-;26115:4;26153:2;26142:9;26138:18;26130:26;;26202:9;26196:4;26192:20;26188:1;26177:9;26173:17;26166:47;26230:131;26356:4;26230:131;:::i;:::-;26222:139;;25949:419;;;:::o;26374:::-;26540:4;26578:2;26567:9;26563:18;26555:26;;26627:9;26621:4;26617:20;26613:1;26602:9;26598:17;26591:47;26655:131;26781:4;26655:131;:::i;:::-;26647:139;;26374:419;;;:::o;26799:::-;26965:4;27003:2;26992:9;26988:18;26980:26;;27052:9;27046:4;27042:20;27038:1;27027:9;27023:17;27016:47;27080:131;27206:4;27080:131;:::i;:::-;27072:139;;26799:419;;;:::o;27224:::-;27390:4;27428:2;27417:9;27413:18;27405:26;;27477:9;27471:4;27467:20;27463:1;27452:9;27448:17;27441:47;27505:131;27631:4;27505:131;:::i;:::-;27497:139;;27224:419;;;:::o;27649:::-;27815:4;27853:2;27842:9;27838:18;27830:26;;27902:9;27896:4;27892:20;27888:1;27877:9;27873:17;27866:47;27930:131;28056:4;27930:131;:::i;:::-;27922:139;;27649:419;;;:::o;28074:::-;28240:4;28278:2;28267:9;28263:18;28255:26;;28327:9;28321:4;28317:20;28313:1;28302:9;28298:17;28291:47;28355:131;28481:4;28355:131;:::i;:::-;28347:139;;28074:419;;;:::o;28499:::-;28665:4;28703:2;28692:9;28688:18;28680:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28780:131;28906:4;28780:131;:::i;:::-;28772:139;;28499:419;;;:::o;28924:::-;29090:4;29128:2;29117:9;29113:18;29105:26;;29177:9;29171:4;29167:20;29163:1;29152:9;29148:17;29141:47;29205:131;29331:4;29205:131;:::i;:::-;29197:139;;28924:419;;;:::o;29349:::-;29515:4;29553:2;29542:9;29538:18;29530:26;;29602:9;29596:4;29592:20;29588:1;29577:9;29573:17;29566:47;29630:131;29756:4;29630:131;:::i;:::-;29622:139;;29349:419;;;:::o;29774:::-;29940:4;29978:2;29967:9;29963:18;29955:26;;30027:9;30021:4;30017:20;30013:1;30002:9;29998:17;29991:47;30055:131;30181:4;30055:131;:::i;:::-;30047:139;;29774:419;;;:::o;30199:::-;30365:4;30403:2;30392:9;30388:18;30380:26;;30452:9;30446:4;30442:20;30438:1;30427:9;30423:17;30416:47;30480:131;30606:4;30480:131;:::i;:::-;30472:139;;30199:419;;;:::o;30624:::-;30790:4;30828:2;30817:9;30813:18;30805:26;;30877:9;30871:4;30867:20;30863:1;30852:9;30848:17;30841:47;30905:131;31031:4;30905:131;:::i;:::-;30897:139;;30624:419;;;:::o;31049:::-;31215:4;31253:2;31242:9;31238:18;31230:26;;31302:9;31296:4;31292:20;31288:1;31277:9;31273:17;31266:47;31330:131;31456:4;31330:131;:::i;:::-;31322:139;;31049:419;;;:::o;31474:::-;31640:4;31678:2;31667:9;31663:18;31655:26;;31727:9;31721:4;31717:20;31713:1;31702:9;31698:17;31691:47;31755:131;31881:4;31755:131;:::i;:::-;31747:139;;31474:419;;;:::o;31899:::-;32065:4;32103:2;32092:9;32088:18;32080:26;;32152:9;32146:4;32142:20;32138:1;32127:9;32123:17;32116:47;32180:131;32306:4;32180:131;:::i;:::-;32172:139;;31899:419;;;:::o;32324:::-;32490:4;32528:2;32517:9;32513:18;32505:26;;32577:9;32571:4;32567:20;32563:1;32552:9;32548:17;32541:47;32605:131;32731:4;32605:131;:::i;:::-;32597:139;;32324:419;;;:::o;32749:::-;32915:4;32953:2;32942:9;32938:18;32930:26;;33002:9;32996:4;32992:20;32988:1;32977:9;32973:17;32966:47;33030:131;33156:4;33030:131;:::i;:::-;33022:139;;32749:419;;;:::o;33174:::-;33340:4;33378:2;33367:9;33363:18;33355:26;;33427:9;33421:4;33417:20;33413:1;33402:9;33398:17;33391:47;33455:131;33581:4;33455:131;:::i;:::-;33447:139;;33174:419;;;:::o;33599:::-;33765:4;33803:2;33792:9;33788:18;33780:26;;33852:9;33846:4;33842:20;33838:1;33827:9;33823:17;33816:47;33880:131;34006:4;33880:131;:::i;:::-;33872:139;;33599:419;;;:::o;34024:::-;34190:4;34228:2;34217:9;34213:18;34205:26;;34277:9;34271:4;34267:20;34263:1;34252:9;34248:17;34241:47;34305:131;34431:4;34305:131;:::i;:::-;34297:139;;34024:419;;;:::o;34449:222::-;34542:4;34580:2;34569:9;34565:18;34557:26;;34593:71;34661:1;34650:9;34646:17;34637:6;34593:71;:::i;:::-;34449:222;;;;:::o;34677:129::-;34711:6;34738:20;;:::i;:::-;34728:30;;34767:33;34795:4;34787:6;34767:33;:::i;:::-;34677:129;;;:::o;34812:75::-;34845:6;34878:2;34872:9;34862:19;;34812:75;:::o;34893:307::-;34954:4;35044:18;35036:6;35033:30;35030:56;;;35066:18;;:::i;:::-;35030:56;35104:29;35126:6;35104:29;:::i;:::-;35096:37;;35188:4;35182;35178:15;35170:23;;34893:307;;;:::o;35206:308::-;35268:4;35358:18;35350:6;35347:30;35344:56;;;35380:18;;:::i;:::-;35344:56;35418:29;35440:6;35418:29;:::i;:::-;35410:37;;35502:4;35496;35492:15;35484:23;;35206:308;;;:::o;35520:141::-;35569:4;35592:3;35584:11;;35615:3;35612:1;35605:14;35649:4;35646:1;35636:18;35628:26;;35520:141;;;:::o;35667:98::-;35718:6;35752:5;35746:12;35736:22;;35667:98;;;:::o;35771:99::-;35823:6;35857:5;35851:12;35841:22;;35771:99;;;:::o;35876:168::-;35959:11;35993:6;35988:3;35981:19;36033:4;36028:3;36024:14;36009:29;;35876:168;;;;:::o;36050:147::-;36151:11;36188:3;36173:18;;36050:147;;;;:::o;36203:169::-;36287:11;36321:6;36316:3;36309:19;36361:4;36356:3;36352:14;36337:29;;36203:169;;;;:::o;36378:148::-;36480:11;36517:3;36502:18;;36378:148;;;;:::o;36532:305::-;36572:3;36591:20;36609:1;36591:20;:::i;:::-;36586:25;;36625:20;36643:1;36625:20;:::i;:::-;36620:25;;36779:1;36711:66;36707:74;36704:1;36701:81;36698:107;;;36785:18;;:::i;:::-;36698:107;36829:1;36826;36822:9;36815:16;;36532:305;;;;:::o;36843:185::-;36883:1;36900:20;36918:1;36900:20;:::i;:::-;36895:25;;36934:20;36952:1;36934:20;:::i;:::-;36929:25;;36973:1;36963:35;;36978:18;;:::i;:::-;36963:35;37020:1;37017;37013:9;37008:14;;36843:185;;;;:::o;37034:348::-;37074:7;37097:20;37115:1;37097:20;:::i;:::-;37092:25;;37131:20;37149:1;37131:20;:::i;:::-;37126:25;;37319:1;37251:66;37247:74;37244:1;37241:81;37236:1;37229:9;37222:17;37218:105;37215:131;;;37326:18;;:::i;:::-;37215:131;37374:1;37371;37367:9;37356:20;;37034:348;;;;:::o;37388:191::-;37428:4;37448:20;37466:1;37448:20;:::i;:::-;37443:25;;37482:20;37500:1;37482:20;:::i;:::-;37477:25;;37521:1;37518;37515:8;37512:34;;;37526:18;;:::i;:::-;37512:34;37571:1;37568;37564:9;37556:17;;37388:191;;;;:::o;37585:96::-;37622:7;37651:24;37669:5;37651:24;:::i;:::-;37640:35;;37585:96;;;:::o;37687:90::-;37721:7;37764:5;37757:13;37750:21;37739:32;;37687:90;;;:::o;37783:77::-;37820:7;37849:5;37838:16;;37783:77;;;:::o;37866:149::-;37902:7;37942:66;37935:5;37931:78;37920:89;;37866:149;;;:::o;38021:126::-;38058:7;38098:42;38091:5;38087:54;38076:65;;38021:126;;;:::o;38153:77::-;38190:7;38219:5;38208:16;;38153:77;;;:::o;38236:154::-;38320:6;38315:3;38310;38297:30;38382:1;38373:6;38368:3;38364:16;38357:27;38236:154;;;:::o;38396:307::-;38464:1;38474:113;38488:6;38485:1;38482:13;38474:113;;;38573:1;38568:3;38564:11;38558:18;38554:1;38549:3;38545:11;38538:39;38510:2;38507:1;38503:10;38498:15;;38474:113;;;38605:6;38602:1;38599:13;38596:101;;;38685:1;38676:6;38671:3;38667:16;38660:27;38596:101;38445:258;38396:307;;;:::o;38709:171::-;38748:3;38771:24;38789:5;38771:24;:::i;:::-;38762:33;;38817:4;38810:5;38807:15;38804:41;;;38825:18;;:::i;:::-;38804:41;38872:1;38865:5;38861:13;38854:20;;38709:171;;;:::o;38886:320::-;38930:6;38967:1;38961:4;38957:12;38947:22;;39014:1;39008:4;39004:12;39035:18;39025:81;;39091:4;39083:6;39079:17;39069:27;;39025:81;39153:2;39145:6;39142:14;39122:18;39119:38;39116:84;;;39172:18;;:::i;:::-;39116:84;38937:269;38886:320;;;:::o;39212:281::-;39295:27;39317:4;39295:27;:::i;:::-;39287:6;39283:40;39425:6;39413:10;39410:22;39389:18;39377:10;39374:34;39371:62;39368:88;;;39436:18;;:::i;:::-;39368:88;39476:10;39472:2;39465:22;39255:238;39212:281;;:::o;39499:233::-;39538:3;39561:24;39579:5;39561:24;:::i;:::-;39552:33;;39607:66;39600:5;39597:77;39594:103;;;39677:18;;:::i;:::-;39594:103;39724:1;39717:5;39713:13;39706:20;;39499:233;;;:::o;39738:176::-;39770:1;39787:20;39805:1;39787:20;:::i;:::-;39782:25;;39821:20;39839:1;39821:20;:::i;:::-;39816:25;;39860:1;39850:35;;39865:18;;:::i;:::-;39850:35;39906:1;39903;39899:9;39894:14;;39738:176;;;;:::o;39920:180::-;39968:77;39965:1;39958:88;40065:4;40062:1;40055:15;40089:4;40086:1;40079:15;40106:180;40154:77;40151:1;40144:88;40251:4;40248:1;40241:15;40275:4;40272:1;40265:15;40292:180;40340:77;40337:1;40330:88;40437:4;40434:1;40427:15;40461:4;40458:1;40451:15;40478:180;40526:77;40523:1;40516:88;40623:4;40620:1;40613:15;40647:4;40644:1;40637:15;40664:180;40712:77;40709:1;40702:88;40809:4;40806:1;40799:15;40833:4;40830:1;40823:15;40850:180;40898:77;40895:1;40888:88;40995:4;40992:1;40985:15;41019:4;41016:1;41009:15;41036:117;41145:1;41142;41135:12;41159:117;41268:1;41265;41258:12;41282:117;41391:1;41388;41381:12;41405:117;41514:1;41511;41504:12;41528:117;41637:1;41634;41627:12;41651:117;41760:1;41757;41750:12;41774:102;41815:6;41866:2;41862:7;41857:2;41850:5;41846:14;41842:28;41832:38;;41774:102;;;:::o;41882:222::-;42022:34;42018:1;42010:6;42006:14;41999:58;42091:5;42086:2;42078:6;42074:15;42067:30;41882:222;:::o;42110:230::-;42250:34;42246:1;42238:6;42234:14;42227:58;42319:13;42314:2;42306:6;42302:15;42295:38;42110:230;:::o;42346:237::-;42486:34;42482:1;42474:6;42470:14;42463:58;42555:20;42550:2;42542:6;42538:15;42531:45;42346:237;:::o;42589:225::-;42729:34;42725:1;42717:6;42713:14;42706:58;42798:8;42793:2;42785:6;42781:15;42774:33;42589:225;:::o;42820:178::-;42960:30;42956:1;42948:6;42944:14;42937:54;42820:178;:::o;43004:223::-;43144:34;43140:1;43132:6;43128:14;43121:58;43213:6;43208:2;43200:6;43196:15;43189:31;43004:223;:::o;43233:175::-;43373:27;43369:1;43361:6;43357:14;43350:51;43233:175;:::o;43414:231::-;43554:34;43550:1;43542:6;43538:14;43531:58;43623:14;43618:2;43610:6;43606:15;43599:39;43414:231;:::o;43651:176::-;43791:28;43787:1;43779:6;43775:14;43768:52;43651:176;:::o;43833:243::-;43973:34;43969:1;43961:6;43957:14;43950:58;44042:26;44037:2;44029:6;44025:15;44018:51;43833:243;:::o;44082:229::-;44222:34;44218:1;44210:6;44206:14;44199:58;44291:12;44286:2;44278:6;44274:15;44267:37;44082:229;:::o;44317:228::-;44457:34;44453:1;44445:6;44441:14;44434:58;44526:11;44521:2;44513:6;44509:15;44502:36;44317:228;:::o;44551:182::-;44691:34;44687:1;44679:6;44675:14;44668:58;44551:182;:::o;44739:231::-;44879:34;44875:1;44867:6;44863:14;44856:58;44948:14;44943:2;44935:6;44931:15;44924:39;44739:231;:::o;44976:155::-;45116:7;45112:1;45104:6;45100:14;45093:31;44976:155;:::o;45137:182::-;45277:34;45273:1;45265:6;45261:14;45254:58;45137:182;:::o;45325:228::-;45465:34;45461:1;45453:6;45449:14;45442:58;45534:11;45529:2;45521:6;45517:15;45510:36;45325:228;:::o;45559:179::-;45699:31;45695:1;45687:6;45683:14;45676:55;45559:179;:::o;45744:220::-;45884:34;45880:1;45872:6;45868:14;45861:58;45953:3;45948:2;45940:6;45936:15;45929:28;45744:220;:::o;45970:170::-;46110:22;46106:1;46098:6;46094:14;46087:46;45970:170;:::o;46146:114::-;;:::o;46266:236::-;46406:34;46402:1;46394:6;46390:14;46383:58;46475:19;46470:2;46462:6;46458:15;46451:44;46266:236;:::o;46508:231::-;46648:34;46644:1;46636:6;46632:14;46625:58;46717:14;46712:2;46704:6;46700:15;46693:39;46508:231;:::o;46745:164::-;46885:16;46881:1;46873:6;46869:14;46862:40;46745:164;:::o;46915:166::-;47055:18;47051:1;47043:6;47039:14;47032:42;46915:166;:::o;47087:222::-;47227:34;47223:1;47215:6;47211:14;47204:58;47296:5;47291:2;47283:6;47279:15;47272:30;47087:222;:::o;47315:122::-;47388:24;47406:5;47388:24;:::i;:::-;47381:5;47378:35;47368:63;;47427:1;47424;47417:12;47368:63;47315:122;:::o;47443:116::-;47513:21;47528:5;47513:21;:::i;:::-;47506:5;47503:32;47493:60;;47549:1;47546;47539:12;47493:60;47443:116;:::o;47565:120::-;47637:23;47654:5;47637:23;:::i;:::-;47630:5;47627:34;47617:62;;47675:1;47672;47665:12;47617:62;47565:120;:::o;47691:122::-;47764:24;47782:5;47764:24;:::i;:::-;47757:5;47754:35;47744:63;;47803:1;47800;47793:12;47744:63;47691:122;:::o
Swarm Source
ipfs://7035f078d6cc96c2686aaa738f49b2532cbc3a69da7256cf3d5dfd026728d80f