ERC-721
Overview
Max Total Supply
3,323 BABYMOOSE
Holders
705
Market
Volume (24H)
0.0882 ETH
Min Price (24H)
$53.42 @ 0.015900 ETH
Max Price (24H)
$59.36 @ 0.017665 ETH
Other Info
Token Contract
Balance
1 BABYMOOSELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BabyMoose
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-13 */ pragma solidity ^0.8.0; //SPDX-License-Identifier: MIT interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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`. 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; } 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); } 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); } 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, "Addr: cant send val, rcpt revert"); } /** * @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, "Addr: low-level call value fail"); } /** * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail"); } /** * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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 0x address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Functional { function toString(uint256 value) internal pure returns (string memory) { 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); } bool private _reentryKey = false; modifier reentryLock { require(!_reentryKey, "attempt reenter locked function"); _reentryKey = true; _; _reentryKey = false; } } // ****************************************************************************************************************************** // ************************************************** Start of Main Contract *************************************************** // ****************************************************************************************************************************** contract BabyMoose is IERC721, Ownable, Functional { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // URI Root Location for Json Files string private _baseURI; // 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; // Specific Functionality bool private _hideTokens; //logic toggle uint256 public price; uint256 public numberMinted; uint256 public maxPerWallet; uint256 public stateMachine; mapping(address => uint256) public mintTracker; mapping(address => bool) private _allowlist; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor() { _name = "Baby Moose"; _symbol = "BABYMOOSE"; _baseURI = "https://doyoumoose.com/babymoose/metadata/"; _hideTokens = true; price = 25 * (10 ** 15); // 0.025 maxPerWallet = 3; stateMachine = 0; // WL1=1, Public=2 } //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId || interfaceId == BabyMoose.onERC721Received.selector; } // Standard Withdraw function for the owner to pull the contract function withdraw() external onlyOwner { bool success; (success, ) = owner().call{value: address(this).balance}(""); require(success, "Transaction Unsuccessful"); } function airdrop(address[] memory batch) public onlyOwner { for (uint256 i = 0; i < batch.length; i++) { uint256 mintSeedValue = numberMinted + 1; _safeMint(batch[i], mintSeedValue + i); numberMinted += 1; } } function preMint(uint256 qty) external payable reentryLock { address _to = _msgSender(); require(msg.value == qty * price, "Mint: Wrong Purchase Price"); require(qty + mintTracker[_to] <= maxPerWallet, "Can't mint more"); require(stateMachine == 1, "Allowlist not open"); require(numberMinted + qty <= 3173, "Allowlist minted out"); require(_allowlist[msg.sender] == true, "Not on Allowlist"); uint256 mintSeedValue = numberMinted + 1; //Store the starting value of the mint batch, begins at 1 and goes to 3223 mintTracker[_to] += qty; numberMinted += qty; //send tokens for(uint256 i = 0; i < qty; i++) { _safeMint(_to, mintSeedValue + i); } } function mint(uint256 qty) external payable reentryLock { address _to = _msgSender(); require(msg.value == qty * price, "Mint: Wrong Purchase Price"); require(qty + mintTracker[_to] <= maxPerWallet, "Can't mint more"); require(stateMachine == 2, "Mint not open"); require(numberMinted + qty <= 3223, "Allowlist minted out"); uint256 mintSeedValue = numberMinted + 1; mintTracker[_to] += qty; numberMinted += qty; //send tokens for(uint256 i = 0; i < qty; i++) { _safeMint(_to, mintSeedValue + i); } } // allows holders to burn their own tokens if desired function burn(uint256 tokenID) external { require(_msgSender() == ownerOf(tokenID)); _burn(tokenID); } ////////////////////////////////////////////////////////////// //////////////////// Setters and Getters ///////////////////// ////////////////////////////////////////////////////////////// function setStateMachine(uint256 newstate) external onlyOwner { stateMachine = newstate; } function allowList(address[] memory accounts) external onlyOwner { for (uint256 i; i < accounts.length; i++) { _allowlist[accounts[i]] = true; } } function checkAllowlist(address testAddress) external view returns (bool) { if (_allowlist[testAddress] == true) { return true; } return false; } function setMaxPerWallet(uint256 newmax) external onlyOwner { maxPerWallet = newmax; } function setBaseURI(string memory newURI) public onlyOwner { _baseURI = newURI; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function totalSupply() external view returns (uint256) { return numberMinted; //stupid bs for etherscan's call } function hideTokens() external onlyOwner { _hideTokens = true; } function revealTokens() external onlyOwner { _hideTokens = false; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: bal qry for 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: own query nonexist tkn"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: caller !owner/!approved" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved nonexistent tkn"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, 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(msg.sender, tokenId), "ERC721: txfr !owner/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(msg.sender, tokenId), "ERC721: txfr !owner/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), "txfr to non ERC721Reciever"); } /** * @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: op query nonexistent tkn"); address owner = 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), "txfr to non ERC721Reciever" ); } /** * @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 = 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(ownerOf(tokenId) == from, "ERC721: txfr token not owned"); require(to != address(0), "ERC721: txfr to 0x0 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(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(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("txfr to non ERC721Reciever"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } // *********************** ERC721 Token Receiver ********************** /** * @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) { //InterfaceID=0x150b7a02 return this.onERC721Received.selector; } /** * @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 {} // **************************************** Metadata Standard Functions ********** //@dev Returns the token collection name. function name() external view returns (string memory){ return _name; } //@dev Returns the token collection symbol. function symbol() external view returns (string memory){ return _symbol; } //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory){ require(_exists(tokenId), "ERC721Metadata: URI 0x0 token"); string memory tokenuri; if (_hideTokens) { //redirect to mystery box tokenuri = string(abi.encodePacked(_baseURI, "mystery.json")); } else { //Input flag data here to send to reveal URI tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json")); } return tokenuri; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI,"contract.json")); } // ******************************************************************************* receive() external payable {} fallback() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"batch","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"allowList","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":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkAllowlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealTokens","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newmax","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newstate","type":"uint256"}],"name":"setStateMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateMachine","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040525f8060146101000a81548160ff021916908315150217905550348015610028575f80fd5b5061004561003a61013360201b60201c565b61013a60201b60201c565b6040518060400160405280600a81526020017f42616279204d6f6f736500000000000000000000000000000000000000000000815250600190816100899190610435565b506040518060400160405280600981526020017f424142594d4f4f53450000000000000000000000000000000000000000000000815250600290816100ce9190610435565b506040518060600160405280602a8152602001614b62602a9139600390816100f69190610435565b50600160085f6101000a81548160ff0219169083151502179055506658d15e176280006009819055506003600b819055505f600c81905550610504565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061027657607f821691505b60208210810361028957610288610232565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102b0565b6102f586836102b0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61033961033461032f8461030d565b610316565b61030d565b9050919050565b5f819050919050565b6103528361031f565b61036661035e82610340565b8484546102bc565b825550505050565b5f90565b61037a61036e565b610385818484610349565b505050565b5b818110156103a85761039d5f82610372565b60018101905061038b565b5050565b601f8211156103ed576103be8161028f565b6103c7846102a1565b810160208510156103d6578190505b6103ea6103e2856102a1565b83018261038a565b50505b505050565b5f82821c905092915050565b5f61040d5f19846008026103f2565b1980831691505092915050565b5f61042583836103fe565b9150826002028217905092915050565b61043e826101fb565b67ffffffffffffffff81111561045757610456610205565b5b610461825461025f565b61046c8282856103ac565b5f60209050601f83116001811461049d575f841561048b578287015190505b610495858261041a565b8655506104fc565b601f1984166104ab8661028f565b5f5b828110156104d2578489015182556001820191506020850194506020810190506104ad565b868310156104ef57848901516104eb601f8916826103fe565b8355505b6001600288020188555050505b505050505050565b614651806105115f395ff3fe60806040526004361061021d575f3560e01c8063715018a611610122578063b5b3e214116100aa578063e268e4d31161006e578063e268e4d314610776578063e3c8cff51461079e578063e8a3d485146107c6578063e985e9c5146107f0578063f2fde38b1461082c57610224565b8063b5b3e21414610698578063b88d4fde146106ae578063bd5946d0146106d6578063c87b56dd146106fe578063e0b1f68c1461073a57610224565b806391b7f5ed116100f157806391b7f5ed146105d857806395d89b4114610600578063a035b1fe1461062a578063a0712d6814610654578063a22cb4651461067057610224565b8063715018a614610554578063729ad39e1461056a5780638ad433ac146105925780638da5cb5b146105ae57610224565b80633ba5939d116101a5578063453c231011610174578063453c23101461046057806349a772b51461048a57806355f804b3146104b45780636352211e146104dc57806370a082311461051857610224565b80633ba5939d146103e45780633ccfd60b146103fa57806342842e0e1461041057806342966c681461043857610224565b8063150b7a02116101ec578063150b7a02146102f057806318160ddd1461032c57806323b872dd1461035657806327eb70991461037e57806337b416d8146103ba57610224565b806301ffc9a71461022657806306fdde0314610262578063081812fc1461028c578063095ea7b3146102c857610224565b3661022457005b005b348015610231575f80fd5b5061024c60048036038101906102479190612ca3565b610854565b6040516102599190612ce8565b60405180910390f35b34801561026d575f80fd5b506102766109dc565b6040516102839190612d71565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612dc4565b610a6c565b6040516102bf9190612e2e565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612e71565b610aed565b005b3480156102fb575f80fd5b5061031660048036038101906103119190612f10565b610bf5565b6040516103239190612fa3565b60405180910390f35b348015610337575f80fd5b50610340610c09565b60405161034d9190612fcb565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612fe4565b610c12565b005b348015610389575f80fd5b506103a4600480360381019061039f9190613034565b610c6b565b6040516103b19190612ce8565b60405180910390f35b3480156103c5575f80fd5b506103ce610cd3565b6040516103db9190612fcb565b60405180910390f35b3480156103ef575f80fd5b506103f8610cd9565b005b348015610405575f80fd5b5061040e610d70565b005b34801561041b575f80fd5b5061043660048036038101906104319190612fe4565b610ea0565b005b348015610443575f80fd5b5061045e60048036038101906104599190612dc4565b610ebf565b005b34801561046b575f80fd5b50610474610f11565b6040516104819190612fcb565b60405180910390f35b348015610495575f80fd5b5061049e610f17565b6040516104ab9190612fcb565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190613187565b610f1d565b005b3480156104e7575f80fd5b5061050260048036038101906104fd9190612dc4565b610fac565b60405161050f9190612e2e565b60405180910390f35b348015610523575f80fd5b5061053e60048036038101906105399190613034565b611058565b60405161054b9190612fcb565b60405180910390f35b34801561055f575f80fd5b5061056861110c565b005b348015610575575f80fd5b50610590600480360381019061058b919061328e565b611193565b005b6105ac60048036038101906105a79190612dc4565b611286565b005b3480156105b9575f80fd5b506105c26115c5565b6040516105cf9190612e2e565b60405180910390f35b3480156105e3575f80fd5b506105fe60048036038101906105f99190612dc4565b6115ec565b005b34801561060b575f80fd5b50610614611672565b6040516106219190612d71565b60405180910390f35b348015610635575f80fd5b5061063e611702565b60405161064b9190612fcb565b60405180910390f35b61066e60048036038101906106699190612dc4565b611708565b005b34801561067b575f80fd5b50610696600480360381019061069191906132ff565b6119b7565b005b3480156106a3575f80fd5b506106ac611b1d565b005b3480156106b9575f80fd5b506106d460048036038101906106cf91906133db565b611bb5565b005b3480156106e1575f80fd5b506106fc60048036038101906106f79190612dc4565b611c10565b005b348015610709575f80fd5b50610724600480360381019061071f9190612dc4565b611c96565b6040516107319190612d71565b60405180910390f35b348015610745575f80fd5b50610760600480360381019061075b9190613034565b611d55565b60405161076d9190612fcb565b60405180910390f35b348015610781575f80fd5b5061079c60048036038101906107979190612dc4565b611d6a565b005b3480156107a9575f80fd5b506107c460048036038101906107bf919061328e565b611df0565b005b3480156107d1575f80fd5b506107da611ef7565b6040516107e79190612d71565b60405180910390f35b3480156107fb575f80fd5b506108166004803603810190610811919061345b565b611f1f565b6040516108239190612ce8565b60405180910390f35b348015610837575f80fd5b50610852600480360381019061084d9190613034565b611fad565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098657507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d5575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546109eb906134c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a17906134c6565b8015610a625780601f10610a3957610100808354040283529160200191610a62565b820191905f5260205f20905b815481529060010190602001808311610a4557829003601f168201915b5050505050905090565b5f610a76826120a3565b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac90613540565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610af782610fac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e906135a8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ba75750610ba68133611f1f565b5b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613610565b60405180910390fd5b610bf0838361210b565b505050565b5f63150b7a0260e01b905095945050505050565b5f600a54905090565b610c1c33826121c1565b610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290613678565b60405180910390fd5b610c6683838361229d565b505050565b5f60011515600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610cca5760019050610cce565b5f90505b919050565b600c5481565b610ce16124ed565b73ffffffffffffffffffffffffffffffffffffffff16610cff6115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c906136e0565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b610d786124ed565b73ffffffffffffffffffffffffffffffffffffffff16610d966115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de3906136e0565b60405180910390fd5b5f610df56115c5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e189061372b565b5f6040518083038185875af1925050503d805f8114610e52576040519150601f19603f3d011682016040523d82523d5f602084013e610e57565b606091505b50508091505080610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490613789565b60405180910390fd5b50565b610eba83838360405180602001604052805f815250611bb5565b505050565b610ec881610fac565b73ffffffffffffffffffffffffffffffffffffffff16610ee66124ed565b73ffffffffffffffffffffffffffffffffffffffff1614610f05575f80fd5b610f0e816124f4565b50565b600b5481565b600a5481565b610f256124ed565b73ffffffffffffffffffffffffffffffffffffffff16610f436115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906136e0565b60405180910390fd5b8060039081610fa89190613944565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613a5d565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613ac5565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111146124ed565b73ffffffffffffffffffffffffffffffffffffffff166111326115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906136e0565b60405180910390fd5b6111915f6125fb565b565b61119b6124ed565b73ffffffffffffffffffffffffffffffffffffffff166111b96115c5565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906136e0565b60405180910390fd5b5f5b8151811015611282575f6001600a5461122a9190613b10565b905061125b83838151811061124257611241613b43565b5b602002602001015183836112569190613b10565b6126bc565b6001600a5f82825461126d9190613b10565b92505081905550508080600101915050611211565b5050565b5f60149054906101000a900460ff16156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613bba565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f6112f86124ed565b9050600954826113089190613bd8565b3414611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090613c63565b60405180910390fd5b600b54600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836113959190613b10565b11156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613ccb565b60405180910390fd5b6001600c541461141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290613d33565b60405180910390fd5b610c6582600a5461142c9190613b10565b111561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490613d9b565b60405180910390fd5b60011515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490613e03565b60405180910390fd5b5f6001600a5461150d9190613b10565b905082600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461155b9190613b10565b9250508190555082600a5f8282546115739190613b10565b925050819055505f5b838110156115a6576115998382846115949190613b10565b6126bc565b808060010191505061157c565b5050505f8060146101000a81548160ff02191690831515021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46124ed565b73ffffffffffffffffffffffffffffffffffffffff166116126115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f906136e0565b60405180910390fd5b8060098190555050565b606060028054611681906134c6565b80601f01602080910402602001604051908101604052809291908181526020018280546116ad906134c6565b80156116f85780601f106116cf576101008083540402835291602001916116f8565b820191905f5260205f20905b8154815290600101906020018083116116db57829003601f168201915b5050505050905090565b60095481565b5f60149054906101000a900460ff1615611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613bba565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61177a6124ed565b90506009548261178a9190613bd8565b34146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613c63565b60405180910390fd5b600b54600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836118179190613b10565b1115611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613ccb565b60405180910390fd5b6002600c541461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613e6b565b60405180910390fd5b610c9782600a546118ae9190613b10565b11156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613d9b565b60405180910390fd5b5f6001600a546118ff9190613b10565b905082600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461194d9190613b10565b9250508190555082600a5f8282546119659190613b10565b925050819055505f5b838110156119985761198b8382846119869190613b10565b6126bc565b808060010191505061196e565b5050505f8060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613ed3565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b119190612ce8565b60405180910390a35050565b611b256124ed565b73ffffffffffffffffffffffffffffffffffffffff16611b436115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b90906136e0565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611bbf33836121c1565b611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613678565b60405180910390fd5b611c0a848484846126d9565b50505050565b611c186124ed565b73ffffffffffffffffffffffffffffffffffffffff16611c366115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906136e0565b60405180910390fd5b80600c8190555050565b6060611ca1826120a3565b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790613f3b565b60405180910390fd5b606060085f9054906101000a900460ff1615611d1e576003604051602001611d08919061402d565b6040516020818303038152906040529050611d4c565b6003611d2984612735565b604051602001611d3a9291906140c8565b60405160208183030381529060405290505b80915050919050565b600d602052805f5260405f205f915090505481565b611d726124ed565b73ffffffffffffffffffffffffffffffffffffffff16611d906115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906136e0565b60405180910390fd5b80600b8190555050565b611df86124ed565b73ffffffffffffffffffffffffffffffffffffffff16611e166115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906136e0565b60405180910390fd5b5f5b8151811015611ef3576001600e5f848481518110611e8f57611e8e613b43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611e6e565b5050565b60606003604051602001611f0b9190614140565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611fb56124ed565b73ffffffffffffffffffffffffffffffffffffffff16611fd36115c5565b73ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612020906136e0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e906141ab565b60405180910390fd5b6120a0816125fb565b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661217b83610fac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f6121cb826120a3565b61220a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220190614213565b60405180910390fd5b5f61221483610fac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061228357508373ffffffffffffffffffffffffffffffffffffffff1661226b84610a6c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061229457506122938185611f1f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122bd82610fac565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a9061427b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906142e3565b60405180910390fd5b61238c83838361288e565b6123965f8261210b565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123e39190614301565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124379190613b10565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f6124fe82610fac565b905061250b815f8461288e565b6125155f8361210b565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546125629190614301565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126d5828260405180602001604052805f815250612893565b5050565b6126e484848461229d565b6126f0848484846128ed565b61272f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127269061437e565b60405180910390fd5b50505050565b60605f820361277b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612889565b5f8290505f5b5f82146127aa5780806127939061439c565b915050600a826127a39190614410565b9150612781565b5f8167ffffffffffffffff8111156127c5576127c4613063565b5b6040519080825280601f01601f1916602001820160405280156127f75781602001600182028036833780820191505090505b5090505b5f85146128825760018261280f9190614301565b9150600a8561281e9190614440565b603061282a9190613b10565b60f81b8183815181106128405761283f613b43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561287b9190614410565b94506127fb565b8093505050505b919050565b505050565b61289d8383612a68565b6128a95f8484846128ed565b6128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df9061437e565b60405180910390fd5b505050565b5f61290d8473ffffffffffffffffffffffffffffffffffffffff16612c2c565b15612a5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b815260040161295194939291906144c2565b6020604051808303815f875af192505050801561298c57506040513d601f19601f820116820180604052508101906129899190614520565b60015b612a0b573d805f81146129ba576040519150601f19603f3d011682016040523d82523d5f602084013e6129bf565b606091505b505f815103612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa9061437e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a60565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614595565b60405180910390fd5b612adf816120a3565b15612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b16906145fd565b60405180910390fd5b612b2a5f838361288e565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612b779190613b10565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c8281612c4e565b8114612c8c575f80fd5b50565b5f81359050612c9d81612c79565b92915050565b5f60208284031215612cb857612cb7612c46565b5b5f612cc584828501612c8f565b91505092915050565b5f8115159050919050565b612ce281612cce565b82525050565b5f602082019050612cfb5f830184612cd9565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d4382612d01565b612d4d8185612d0b565b9350612d5d818560208601612d1b565b612d6681612d29565b840191505092915050565b5f6020820190508181035f830152612d898184612d39565b905092915050565b5f819050919050565b612da381612d91565b8114612dad575f80fd5b50565b5f81359050612dbe81612d9a565b92915050565b5f60208284031215612dd957612dd8612c46565b5b5f612de684828501612db0565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e1882612def565b9050919050565b612e2881612e0e565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b612e5081612e0e565b8114612e5a575f80fd5b50565b5f81359050612e6b81612e47565b92915050565b5f8060408385031215612e8757612e86612c46565b5b5f612e9485828601612e5d565b9250506020612ea585828601612db0565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ed057612ecf612eaf565b5b8235905067ffffffffffffffff811115612eed57612eec612eb3565b5b602083019150836001820283011115612f0957612f08612eb7565b5b9250929050565b5f805f805f60808688031215612f2957612f28612c46565b5b5f612f3688828901612e5d565b9550506020612f4788828901612e5d565b9450506040612f5888828901612db0565b935050606086013567ffffffffffffffff811115612f7957612f78612c4a565b5b612f8588828901612ebb565b92509250509295509295909350565b612f9d81612c4e565b82525050565b5f602082019050612fb65f830184612f94565b92915050565b612fc581612d91565b82525050565b5f602082019050612fde5f830184612fbc565b92915050565b5f805f60608486031215612ffb57612ffa612c46565b5b5f61300886828701612e5d565b935050602061301986828701612e5d565b925050604061302a86828701612db0565b9150509250925092565b5f6020828403121561304957613048612c46565b5b5f61305684828501612e5d565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61309982612d29565b810181811067ffffffffffffffff821117156130b8576130b7613063565b5b80604052505050565b5f6130ca612c3d565b90506130d68282613090565b919050565b5f67ffffffffffffffff8211156130f5576130f4613063565b5b6130fe82612d29565b9050602081019050919050565b828183375f83830152505050565b5f61312b613126846130db565b6130c1565b9050828152602081018484840111156131475761314661305f565b5b61315284828561310b565b509392505050565b5f82601f83011261316e5761316d612eaf565b5b813561317e848260208601613119565b91505092915050565b5f6020828403121561319c5761319b612c46565b5b5f82013567ffffffffffffffff8111156131b9576131b8612c4a565b5b6131c58482850161315a565b91505092915050565b5f67ffffffffffffffff8211156131e8576131e7613063565b5b602082029050602081019050919050565b5f61320b613206846131ce565b6130c1565b9050808382526020820190506020840283018581111561322e5761322d612eb7565b5b835b8181101561325757806132438882612e5d565b845260208401935050602081019050613230565b5050509392505050565b5f82601f83011261327557613274612eaf565b5b81356132858482602086016131f9565b91505092915050565b5f602082840312156132a3576132a2612c46565b5b5f82013567ffffffffffffffff8111156132c0576132bf612c4a565b5b6132cc84828501613261565b91505092915050565b6132de81612cce565b81146132e8575f80fd5b50565b5f813590506132f9816132d5565b92915050565b5f806040838503121561331557613314612c46565b5b5f61332285828601612e5d565b9250506020613333858286016132eb565b9150509250929050565b5f67ffffffffffffffff82111561335757613356613063565b5b61336082612d29565b9050602081019050919050565b5f61337f61337a8461333d565b6130c1565b90508281526020810184848401111561339b5761339a61305f565b5b6133a684828561310b565b509392505050565b5f82601f8301126133c2576133c1612eaf565b5b81356133d284826020860161336d565b91505092915050565b5f805f80608085870312156133f3576133f2612c46565b5b5f61340087828801612e5d565b945050602061341187828801612e5d565b935050604061342287828801612db0565b925050606085013567ffffffffffffffff81111561344357613442612c4a565b5b61344f878288016133ae565b91505092959194509250565b5f806040838503121561347157613470612c46565b5b5f61347e85828601612e5d565b925050602061348f85828601612e5d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134dd57607f821691505b6020821081036134f0576134ef613499565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f61352a602083612d0b565b9150613535826134f6565b602082019050919050565b5f6020820190508181035f8301526135578161351e565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f613592601e83612d0b565b915061359d8261355e565b602082019050919050565b5f6020820190508181035f8301526135bf81613586565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f6135fa601f83612d0b565b9150613605826135c6565b602082019050919050565b5f6020820190508181035f830152613627816135ee565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f613662601c83612d0b565b915061366d8261362e565b602082019050919050565b5f6020820190508181035f83015261368f81613656565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136ca602083612d0b565b91506136d582613696565b602082019050919050565b5f6020820190508181035f8301526136f7816136be565b9050919050565b5f81905092915050565b50565b5f6137165f836136fe565b915061372182613708565b5f82019050919050565b5f6137358261370b565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f613773601883612d0b565b915061377e8261373f565b602082019050919050565b5f6020820190508181035f8301526137a081613767565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026138037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137c8565b61380d86836137c8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61384861384361383e84612d91565b613825565b612d91565b9050919050565b5f819050919050565b6138618361382e565b61387561386d8261384f565b8484546137d4565b825550505050565b5f90565b61388961387d565b613894818484613858565b505050565b5b818110156138b7576138ac5f82613881565b60018101905061389a565b5050565b601f8211156138fc576138cd816137a7565b6138d6846137b9565b810160208510156138e5578190505b6138f96138f1856137b9565b830182613899565b50505b505050565b5f82821c905092915050565b5f61391c5f1984600802613901565b1980831691505092915050565b5f613934838361390d565b9150826002028217905092915050565b61394d82612d01565b67ffffffffffffffff81111561396657613965613063565b5b61397082546134c6565b61397b8282856138bb565b5f60209050601f8311600181146139ac575f841561399a578287015190505b6139a48582613929565b865550613a0b565b601f1984166139ba866137a7565b5f5b828110156139e1578489015182556001820191506020850194506020810190506139bc565b868310156139fe57848901516139fa601f89168261390d565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f613a47601e83612d0b565b9150613a5282613a13565b602082019050919050565b5f6020820190508181035f830152613a7481613a3b565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f613aaf602083612d0b565b9150613aba82613a7b565b602082019050919050565b5f6020820190508181035f830152613adc81613aa3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b1a82612d91565b9150613b2583612d91565b9250828201905080821115613b3d57613b3c613ae3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e005f82015250565b5f613ba4601f83612d0b565b9150613baf82613b70565b602082019050919050565b5f6020820190508181035f830152613bd181613b98565b9050919050565b5f613be282612d91565b9150613bed83612d91565b9250828202613bfb81612d91565b91508282048414831517613c1257613c11613ae3565b5b5092915050565b7f4d696e743a2057726f6e672050757263686173652050726963650000000000005f82015250565b5f613c4d601a83612d0b565b9150613c5882613c19565b602082019050919050565b5f6020820190508181035f830152613c7a81613c41565b9050919050565b7f43616e2774206d696e74206d6f726500000000000000000000000000000000005f82015250565b5f613cb5600f83612d0b565b9150613cc082613c81565b602082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b7f416c6c6f776c697374206e6f74206f70656e00000000000000000000000000005f82015250565b5f613d1d601283612d0b565b9150613d2882613ce9565b602082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f416c6c6f776c697374206d696e746564206f75740000000000000000000000005f82015250565b5f613d85601483612d0b565b9150613d9082613d51565b602082019050919050565b5f6020820190508181035f830152613db281613d79565b9050919050565b7f4e6f74206f6e20416c6c6f776c697374000000000000000000000000000000005f82015250565b5f613ded601083612d0b565b9150613df882613db9565b602082019050919050565b5f6020820190508181035f830152613e1a81613de1565b9050919050565b7f4d696e74206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f613e55600d83612d0b565b9150613e6082613e21565b602082019050919050565b5f6020820190508181035f830152613e8281613e49565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f613ebd601983612d0b565b9150613ec882613e89565b602082019050919050565b5f6020820190508181035f830152613eea81613eb1565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f613f25601d83612d0b565b9150613f3082613ef1565b602082019050919050565b5f6020820190508181035f830152613f5281613f19565b9050919050565b5f81905092915050565b5f8154613f6f816134c6565b613f798186613f59565b9450600182165f8114613f935760018114613fa857613fda565b60ff1983168652811515820286019350613fda565b613fb1856137a7565b5f5b83811015613fd257815481890152600182019150602081019050613fb3565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f614017600c83613f59565b915061402282613fe3565b600c82019050919050565b5f6140388284613f63565b91506140438261400b565b915081905092915050565b5f61405882612d01565b6140628185613f59565b9350614072818560208601612d1b565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6140b2600583613f59565b91506140bd8261407e565b600582019050919050565b5f6140d38285613f63565b91506140df828461404e565b91506140ea826140a6565b91508190509392505050565b7f636f6e74726163742e6a736f6e000000000000000000000000000000000000005f82015250565b5f61412a600d83613f59565b9150614135826140f6565b600d82019050919050565b5f61414b8284613f63565b91506141568261411e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f614195602083612d0b565b91506141a082614161565b602082019050919050565b5f6020820190508181035f8301526141c281614189565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f6141fd602083612d0b565b9150614208826141c9565b602082019050919050565b5f6020820190508181035f83015261422a816141f1565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f614265601c83612d0b565b915061427082614231565b602082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f6142cd601b83612d0b565b91506142d882614299565b602082019050919050565b5f6020820190508181035f8301526142fa816142c1565b9050919050565b5f61430b82612d91565b915061431683612d91565b925082820390508181111561432e5761432d613ae3565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f614368601a83612d0b565b915061437382614334565b602082019050919050565b5f6020820190508181035f8301526143958161435c565b9050919050565b5f6143a682612d91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143d8576143d7613ae3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61441a82612d91565b915061442583612d91565b925082614435576144346143e3565b5b828204905092915050565b5f61444a82612d91565b915061445583612d91565b925082614465576144646143e3565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61449482614470565b61449e818561447a565b93506144ae818560208601612d1b565b6144b781612d29565b840191505092915050565b5f6080820190506144d55f830187612e1f565b6144e26020830186612e1f565b6144ef6040830185612fbc565b8181036060830152614501818461448a565b905095945050505050565b5f8151905061451a81612c79565b92915050565b5f6020828403121561453557614534612c46565b5b5f6145428482850161450c565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61457f602083612d0b565b915061458a8261454b565b602082019050919050565b5f6020820190508181035f8301526145ac81614573565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6145e7601c83612d0b565b91506145f2826145b3565b602082019050919050565b5f6020820190508181035f830152614614816145db565b905091905056fea264697066735822122084584bb4ad7f4c7f7cb68a89e4ef63893e8b16a0f0eb4a75bfb10856144e274e64736f6c634300081a003368747470733a2f2f646f796f756d6f6f73652e636f6d2f626162796d6f6f73652f6d657461646174612f
Deployed Bytecode
0x60806040526004361061021d575f3560e01c8063715018a611610122578063b5b3e214116100aa578063e268e4d31161006e578063e268e4d314610776578063e3c8cff51461079e578063e8a3d485146107c6578063e985e9c5146107f0578063f2fde38b1461082c57610224565b8063b5b3e21414610698578063b88d4fde146106ae578063bd5946d0146106d6578063c87b56dd146106fe578063e0b1f68c1461073a57610224565b806391b7f5ed116100f157806391b7f5ed146105d857806395d89b4114610600578063a035b1fe1461062a578063a0712d6814610654578063a22cb4651461067057610224565b8063715018a614610554578063729ad39e1461056a5780638ad433ac146105925780638da5cb5b146105ae57610224565b80633ba5939d116101a5578063453c231011610174578063453c23101461046057806349a772b51461048a57806355f804b3146104b45780636352211e146104dc57806370a082311461051857610224565b80633ba5939d146103e45780633ccfd60b146103fa57806342842e0e1461041057806342966c681461043857610224565b8063150b7a02116101ec578063150b7a02146102f057806318160ddd1461032c57806323b872dd1461035657806327eb70991461037e57806337b416d8146103ba57610224565b806301ffc9a71461022657806306fdde0314610262578063081812fc1461028c578063095ea7b3146102c857610224565b3661022457005b005b348015610231575f80fd5b5061024c60048036038101906102479190612ca3565b610854565b6040516102599190612ce8565b60405180910390f35b34801561026d575f80fd5b506102766109dc565b6040516102839190612d71565b60405180910390f35b348015610297575f80fd5b506102b260048036038101906102ad9190612dc4565b610a6c565b6040516102bf9190612e2e565b60405180910390f35b3480156102d3575f80fd5b506102ee60048036038101906102e99190612e71565b610aed565b005b3480156102fb575f80fd5b5061031660048036038101906103119190612f10565b610bf5565b6040516103239190612fa3565b60405180910390f35b348015610337575f80fd5b50610340610c09565b60405161034d9190612fcb565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612fe4565b610c12565b005b348015610389575f80fd5b506103a4600480360381019061039f9190613034565b610c6b565b6040516103b19190612ce8565b60405180910390f35b3480156103c5575f80fd5b506103ce610cd3565b6040516103db9190612fcb565b60405180910390f35b3480156103ef575f80fd5b506103f8610cd9565b005b348015610405575f80fd5b5061040e610d70565b005b34801561041b575f80fd5b5061043660048036038101906104319190612fe4565b610ea0565b005b348015610443575f80fd5b5061045e60048036038101906104599190612dc4565b610ebf565b005b34801561046b575f80fd5b50610474610f11565b6040516104819190612fcb565b60405180910390f35b348015610495575f80fd5b5061049e610f17565b6040516104ab9190612fcb565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190613187565b610f1d565b005b3480156104e7575f80fd5b5061050260048036038101906104fd9190612dc4565b610fac565b60405161050f9190612e2e565b60405180910390f35b348015610523575f80fd5b5061053e60048036038101906105399190613034565b611058565b60405161054b9190612fcb565b60405180910390f35b34801561055f575f80fd5b5061056861110c565b005b348015610575575f80fd5b50610590600480360381019061058b919061328e565b611193565b005b6105ac60048036038101906105a79190612dc4565b611286565b005b3480156105b9575f80fd5b506105c26115c5565b6040516105cf9190612e2e565b60405180910390f35b3480156105e3575f80fd5b506105fe60048036038101906105f99190612dc4565b6115ec565b005b34801561060b575f80fd5b50610614611672565b6040516106219190612d71565b60405180910390f35b348015610635575f80fd5b5061063e611702565b60405161064b9190612fcb565b60405180910390f35b61066e60048036038101906106699190612dc4565b611708565b005b34801561067b575f80fd5b50610696600480360381019061069191906132ff565b6119b7565b005b3480156106a3575f80fd5b506106ac611b1d565b005b3480156106b9575f80fd5b506106d460048036038101906106cf91906133db565b611bb5565b005b3480156106e1575f80fd5b506106fc60048036038101906106f79190612dc4565b611c10565b005b348015610709575f80fd5b50610724600480360381019061071f9190612dc4565b611c96565b6040516107319190612d71565b60405180910390f35b348015610745575f80fd5b50610760600480360381019061075b9190613034565b611d55565b60405161076d9190612fcb565b60405180910390f35b348015610781575f80fd5b5061079c60048036038101906107979190612dc4565b611d6a565b005b3480156107a9575f80fd5b506107c460048036038101906107bf919061328e565b611df0565b005b3480156107d1575f80fd5b506107da611ef7565b6040516107e79190612d71565b60405180910390f35b3480156107fb575f80fd5b506108166004803603810190610811919061345b565b611f1f565b6040516108239190612ce8565b60405180910390f35b348015610837575f80fd5b50610852600480360381019061084d9190613034565b611fad565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098657507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d5575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600180546109eb906134c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a17906134c6565b8015610a625780601f10610a3957610100808354040283529160200191610a62565b820191905f5260205f20905b815481529060010190602001808311610a4557829003601f168201915b5050505050905090565b5f610a76826120a3565b610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac90613540565b60405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610af782610fac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e906135a8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ba75750610ba68133611f1f565b5b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613610565b60405180910390fd5b610bf0838361210b565b505050565b5f63150b7a0260e01b905095945050505050565b5f600a54905090565b610c1c33826121c1565b610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290613678565b60405180910390fd5b610c6683838361229d565b505050565b5f60011515600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610cca5760019050610cce565b5f90505b919050565b600c5481565b610ce16124ed565b73ffffffffffffffffffffffffffffffffffffffff16610cff6115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c906136e0565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b610d786124ed565b73ffffffffffffffffffffffffffffffffffffffff16610d966115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de3906136e0565b60405180910390fd5b5f610df56115c5565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e189061372b565b5f6040518083038185875af1925050503d805f8114610e52576040519150601f19603f3d011682016040523d82523d5f602084013e610e57565b606091505b50508091505080610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490613789565b60405180910390fd5b50565b610eba83838360405180602001604052805f815250611bb5565b505050565b610ec881610fac565b73ffffffffffffffffffffffffffffffffffffffff16610ee66124ed565b73ffffffffffffffffffffffffffffffffffffffff1614610f05575f80fd5b610f0e816124f4565b50565b600b5481565b600a5481565b610f256124ed565b73ffffffffffffffffffffffffffffffffffffffff16610f436115c5565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906136e0565b60405180910390fd5b8060039081610fa89190613944565b5050565b5f8060045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613a5d565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613ac5565b60405180910390fd5b60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111146124ed565b73ffffffffffffffffffffffffffffffffffffffff166111326115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906136e0565b60405180910390fd5b6111915f6125fb565b565b61119b6124ed565b73ffffffffffffffffffffffffffffffffffffffff166111b96115c5565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906136e0565b60405180910390fd5b5f5b8151811015611282575f6001600a5461122a9190613b10565b905061125b83838151811061124257611241613b43565b5b602002602001015183836112569190613b10565b6126bc565b6001600a5f82825461126d9190613b10565b92505081905550508080600101915050611211565b5050565b5f60149054906101000a900460ff16156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613bba565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f6112f86124ed565b9050600954826113089190613bd8565b3414611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134090613c63565b60405180910390fd5b600b54600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836113959190613b10565b11156113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613ccb565b60405180910390fd5b6001600c541461141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290613d33565b60405180910390fd5b610c6582600a5461142c9190613b10565b111561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490613d9b565b60405180910390fd5b60011515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490613e03565b60405180910390fd5b5f6001600a5461150d9190613b10565b905082600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461155b9190613b10565b9250508190555082600a5f8282546115739190613b10565b925050819055505f5b838110156115a6576115998382846115949190613b10565b6126bc565b808060010191505061157c565b5050505f8060146101000a81548160ff02191690831515021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115f46124ed565b73ffffffffffffffffffffffffffffffffffffffff166116126115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f906136e0565b60405180910390fd5b8060098190555050565b606060028054611681906134c6565b80601f01602080910402602001604051908101604052809291908181526020018280546116ad906134c6565b80156116f85780601f106116cf576101008083540402835291602001916116f8565b820191905f5260205f20905b8154815290600101906020018083116116db57829003601f168201915b5050505050905090565b60095481565b5f60149054906101000a900460ff1615611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e90613bba565b60405180910390fd5b60015f60146101000a81548160ff0219169083151502179055505f61177a6124ed565b90506009548261178a9190613bd8565b34146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613c63565b60405180910390fd5b600b54600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836118179190613b10565b1115611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613ccb565b60405180910390fd5b6002600c541461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613e6b565b60405180910390fd5b610c9782600a546118ae9190613b10565b11156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613d9b565b60405180910390fd5b5f6001600a546118ff9190613b10565b905082600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461194d9190613b10565b9250508190555082600a5f8282546119659190613b10565b925050819055505f5b838110156119985761198b8382846119869190613b10565b6126bc565b808060010191505061196e565b5050505f8060146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90613ed3565b60405180910390fd5b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b119190612ce8565b60405180910390a35050565b611b256124ed565b73ffffffffffffffffffffffffffffffffffffffff16611b436115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b90906136e0565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b611bbf33836121c1565b611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613678565b60405180910390fd5b611c0a848484846126d9565b50505050565b611c186124ed565b73ffffffffffffffffffffffffffffffffffffffff16611c366115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906136e0565b60405180910390fd5b80600c8190555050565b6060611ca1826120a3565b611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790613f3b565b60405180910390fd5b606060085f9054906101000a900460ff1615611d1e576003604051602001611d08919061402d565b6040516020818303038152906040529050611d4c565b6003611d2984612735565b604051602001611d3a9291906140c8565b60405160208183030381529060405290505b80915050919050565b600d602052805f5260405f205f915090505481565b611d726124ed565b73ffffffffffffffffffffffffffffffffffffffff16611d906115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906136e0565b60405180910390fd5b80600b8190555050565b611df86124ed565b73ffffffffffffffffffffffffffffffffffffffff16611e166115c5565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906136e0565b60405180910390fd5b5f5b8151811015611ef3576001600e5f848481518110611e8f57611e8e613b43565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611e6e565b5050565b60606003604051602001611f0b9190614140565b604051602081830303815290604052905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611fb56124ed565b73ffffffffffffffffffffffffffffffffffffffff16611fd36115c5565b73ffffffffffffffffffffffffffffffffffffffff1614612029576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612020906136e0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e906141ab565b60405180910390fd5b6120a0816125fb565b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660045f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160065f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661217b83610fac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f6121cb826120a3565b61220a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220190614213565b60405180910390fd5b5f61221483610fac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061228357508373ffffffffffffffffffffffffffffffffffffffff1661226b84610a6c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061229457506122938185611f1f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122bd82610fac565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a9061427b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612378906142e3565b60405180910390fd5b61238c83838361288e565b6123965f8261210b565b600160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546123e39190614301565b92505081905550600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124379190613b10565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f33905090565b5f6124fe82610fac565b905061250b815f8461288e565b6125155f8361210b565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546125629190614301565b9250508190555060045f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126d5828260405180602001604052805f815250612893565b5050565b6126e484848461229d565b6126f0848484846128ed565b61272f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127269061437e565b60405180910390fd5b50505050565b60605f820361277b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612889565b5f8290505f5b5f82146127aa5780806127939061439c565b915050600a826127a39190614410565b9150612781565b5f8167ffffffffffffffff8111156127c5576127c4613063565b5b6040519080825280601f01601f1916602001820160405280156127f75781602001600182028036833780820191505090505b5090505b5f85146128825760018261280f9190614301565b9150600a8561281e9190614440565b603061282a9190613b10565b60f81b8183815181106128405761283f613b43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561287b9190614410565b94506127fb565b8093505050505b919050565b505050565b61289d8383612a68565b6128a95f8484846128ed565b6128e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128df9061437e565b60405180910390fd5b505050565b5f61290d8473ffffffffffffffffffffffffffffffffffffffff16612c2c565b15612a5b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b815260040161295194939291906144c2565b6020604051808303815f875af192505050801561298c57506040513d601f19601f820116820180604052508101906129899190614520565b60015b612a0b573d805f81146129ba576040519150601f19603f3d011682016040523d82523d5f602084013e6129bf565b606091505b505f815103612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa9061437e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a60565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614595565b60405180910390fd5b612adf816120a3565b15612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b16906145fd565b60405180910390fd5b612b2a5f838361288e565b600160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612b779190613b10565b925050819055508160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c8281612c4e565b8114612c8c575f80fd5b50565b5f81359050612c9d81612c79565b92915050565b5f60208284031215612cb857612cb7612c46565b5b5f612cc584828501612c8f565b91505092915050565b5f8115159050919050565b612ce281612cce565b82525050565b5f602082019050612cfb5f830184612cd9565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d4382612d01565b612d4d8185612d0b565b9350612d5d818560208601612d1b565b612d6681612d29565b840191505092915050565b5f6020820190508181035f830152612d898184612d39565b905092915050565b5f819050919050565b612da381612d91565b8114612dad575f80fd5b50565b5f81359050612dbe81612d9a565b92915050565b5f60208284031215612dd957612dd8612c46565b5b5f612de684828501612db0565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e1882612def565b9050919050565b612e2881612e0e565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b612e5081612e0e565b8114612e5a575f80fd5b50565b5f81359050612e6b81612e47565b92915050565b5f8060408385031215612e8757612e86612c46565b5b5f612e9485828601612e5d565b9250506020612ea585828601612db0565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ed057612ecf612eaf565b5b8235905067ffffffffffffffff811115612eed57612eec612eb3565b5b602083019150836001820283011115612f0957612f08612eb7565b5b9250929050565b5f805f805f60808688031215612f2957612f28612c46565b5b5f612f3688828901612e5d565b9550506020612f4788828901612e5d565b9450506040612f5888828901612db0565b935050606086013567ffffffffffffffff811115612f7957612f78612c4a565b5b612f8588828901612ebb565b92509250509295509295909350565b612f9d81612c4e565b82525050565b5f602082019050612fb65f830184612f94565b92915050565b612fc581612d91565b82525050565b5f602082019050612fde5f830184612fbc565b92915050565b5f805f60608486031215612ffb57612ffa612c46565b5b5f61300886828701612e5d565b935050602061301986828701612e5d565b925050604061302a86828701612db0565b9150509250925092565b5f6020828403121561304957613048612c46565b5b5f61305684828501612e5d565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61309982612d29565b810181811067ffffffffffffffff821117156130b8576130b7613063565b5b80604052505050565b5f6130ca612c3d565b90506130d68282613090565b919050565b5f67ffffffffffffffff8211156130f5576130f4613063565b5b6130fe82612d29565b9050602081019050919050565b828183375f83830152505050565b5f61312b613126846130db565b6130c1565b9050828152602081018484840111156131475761314661305f565b5b61315284828561310b565b509392505050565b5f82601f83011261316e5761316d612eaf565b5b813561317e848260208601613119565b91505092915050565b5f6020828403121561319c5761319b612c46565b5b5f82013567ffffffffffffffff8111156131b9576131b8612c4a565b5b6131c58482850161315a565b91505092915050565b5f67ffffffffffffffff8211156131e8576131e7613063565b5b602082029050602081019050919050565b5f61320b613206846131ce565b6130c1565b9050808382526020820190506020840283018581111561322e5761322d612eb7565b5b835b8181101561325757806132438882612e5d565b845260208401935050602081019050613230565b5050509392505050565b5f82601f83011261327557613274612eaf565b5b81356132858482602086016131f9565b91505092915050565b5f602082840312156132a3576132a2612c46565b5b5f82013567ffffffffffffffff8111156132c0576132bf612c4a565b5b6132cc84828501613261565b91505092915050565b6132de81612cce565b81146132e8575f80fd5b50565b5f813590506132f9816132d5565b92915050565b5f806040838503121561331557613314612c46565b5b5f61332285828601612e5d565b9250506020613333858286016132eb565b9150509250929050565b5f67ffffffffffffffff82111561335757613356613063565b5b61336082612d29565b9050602081019050919050565b5f61337f61337a8461333d565b6130c1565b90508281526020810184848401111561339b5761339a61305f565b5b6133a684828561310b565b509392505050565b5f82601f8301126133c2576133c1612eaf565b5b81356133d284826020860161336d565b91505092915050565b5f805f80608085870312156133f3576133f2612c46565b5b5f61340087828801612e5d565b945050602061341187828801612e5d565b935050604061342287828801612db0565b925050606085013567ffffffffffffffff81111561344357613442612c4a565b5b61344f878288016133ae565b91505092959194509250565b5f806040838503121561347157613470612c46565b5b5f61347e85828601612e5d565b925050602061348f85828601612e5d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134dd57607f821691505b6020821081036134f0576134ef613499565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e5f82015250565b5f61352a602083612d0b565b9150613535826134f6565b602082019050919050565b5f6020820190508181035f8301526135578161351e565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e657200005f82015250565b5f613592601e83612d0b565b915061359d8261355e565b602082019050919050565b5f6020820190508181035f8301526135bf81613586565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f766564005f82015250565b5f6135fa601f83612d0b565b9150613605826135c6565b602082019050919050565b5f6020820190508181035f830152613627816135ee565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f766564000000005f82015250565b5f613662601c83612d0b565b915061366d8261362e565b602082019050919050565b5f6020820190508181035f83015261368f81613656565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136ca602083612d0b565b91506136d582613696565b602082019050919050565b5f6020820190508181035f8301526136f7816136be565b9050919050565b5f81905092915050565b50565b5f6137165f836136fe565b915061372182613708565b5f82019050919050565b5f6137358261370b565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c00000000000000005f82015250565b5f613773601883612d0b565b915061377e8261373f565b602082019050919050565b5f6020820190508181035f8301526137a081613767565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026138037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826137c8565b61380d86836137c8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61384861384361383e84612d91565b613825565b612d91565b9050919050565b5f819050919050565b6138618361382e565b61387561386d8261384f565b8484546137d4565b825550505050565b5f90565b61388961387d565b613894818484613858565b505050565b5b818110156138b7576138ac5f82613881565b60018101905061389a565b5050565b601f8211156138fc576138cd816137a7565b6138d6846137b9565b810160208510156138e5578190505b6138f96138f1856137b9565b830182613899565b50505b505050565b5f82821c905092915050565b5f61391c5f1984600802613901565b1980831691505092915050565b5f613934838361390d565b9150826002028217905092915050565b61394d82612d01565b67ffffffffffffffff81111561396657613965613063565b5b61397082546134c6565b61397b8282856138bb565b5f60209050601f8311600181146139ac575f841561399a578287015190505b6139a48582613929565b865550613a0b565b601f1984166139ba866137a7565b5f5b828110156139e1578489015182556001820191506020850194506020810190506139bc565b868310156139fe57848901516139fa601f89168261390d565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e00005f82015250565b5f613a47601e83612d0b565b9150613a5282613a13565b602082019050919050565b5f6020820190508181035f830152613a7481613a3b565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f20616464726573735f82015250565b5f613aaf602083612d0b565b9150613aba82613a7b565b602082019050919050565b5f6020820190508181035f830152613adc81613aa3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b1a82612d91565b9150613b2583612d91565b9250828201905080821115613b3d57613b3c613ae3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e005f82015250565b5f613ba4601f83612d0b565b9150613baf82613b70565b602082019050919050565b5f6020820190508181035f830152613bd181613b98565b9050919050565b5f613be282612d91565b9150613bed83612d91565b9250828202613bfb81612d91565b91508282048414831517613c1257613c11613ae3565b5b5092915050565b7f4d696e743a2057726f6e672050757263686173652050726963650000000000005f82015250565b5f613c4d601a83612d0b565b9150613c5882613c19565b602082019050919050565b5f6020820190508181035f830152613c7a81613c41565b9050919050565b7f43616e2774206d696e74206d6f726500000000000000000000000000000000005f82015250565b5f613cb5600f83612d0b565b9150613cc082613c81565b602082019050919050565b5f6020820190508181035f830152613ce281613ca9565b9050919050565b7f416c6c6f776c697374206e6f74206f70656e00000000000000000000000000005f82015250565b5f613d1d601283612d0b565b9150613d2882613ce9565b602082019050919050565b5f6020820190508181035f830152613d4a81613d11565b9050919050565b7f416c6c6f776c697374206d696e746564206f75740000000000000000000000005f82015250565b5f613d85601483612d0b565b9150613d9082613d51565b602082019050919050565b5f6020820190508181035f830152613db281613d79565b9050919050565b7f4e6f74206f6e20416c6c6f776c697374000000000000000000000000000000005f82015250565b5f613ded601083612d0b565b9150613df882613db9565b602082019050919050565b5f6020820190508181035f830152613e1a81613de1565b9050919050565b7f4d696e74206e6f74206f70656e000000000000000000000000000000000000005f82015250565b5f613e55600d83612d0b565b9150613e6082613e21565b602082019050919050565b5f6020820190508181035f830152613e8281613e49565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f613ebd601983612d0b565b9150613ec882613e89565b602082019050919050565b5f6020820190508181035f830152613eea81613eb1565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e0000005f82015250565b5f613f25601d83612d0b565b9150613f3082613ef1565b602082019050919050565b5f6020820190508181035f830152613f5281613f19565b9050919050565b5f81905092915050565b5f8154613f6f816134c6565b613f798186613f59565b9450600182165f8114613f935760018114613fa857613fda565b60ff1983168652811515820286019350613fda565b613fb1856137a7565b5f5b83811015613fd257815481890152600182019150602081019050613fb3565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e00000000000000000000000000000000000000005f82015250565b5f614017600c83613f59565b915061402282613fe3565b600c82019050919050565b5f6140388284613f63565b91506140438261400b565b915081905092915050565b5f61405882612d01565b6140628185613f59565b9350614072818560208601612d1b565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6140b2600583613f59565b91506140bd8261407e565b600582019050919050565b5f6140d38285613f63565b91506140df828461404e565b91506140ea826140a6565b91508190509392505050565b7f636f6e74726163742e6a736f6e000000000000000000000000000000000000005f82015250565b5f61412a600d83613f59565b9150614135826140f6565b600d82019050919050565b5f61414b8284613f63565b91506141568261411e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320307820616464726573735f82015250565b5f614195602083612d0b565b91506141a082614161565b602082019050919050565b5f6020820190508181035f8301526141c281614189565b9050919050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e5f82015250565b5f6141fd602083612d0b565b9150614208826141c9565b602082019050919050565b5f6020820190508181035f83015261422a816141f1565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e6564000000005f82015250565b5f614265601c83612d0b565b915061427082614231565b602082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f4552433732313a207478667220746f20307830206164647265737300000000005f82015250565b5f6142cd601b83612d0b565b91506142d882614299565b602082019050919050565b5f6020820190508181035f8301526142fa816142c1565b9050919050565b5f61430b82612d91565b915061431683612d91565b925082820390508181111561432e5761432d613ae3565b5b92915050565b7f7478667220746f206e6f6e2045524337323152656369657665720000000000005f82015250565b5f614368601a83612d0b565b915061437382614334565b602082019050919050565b5f6020820190508181035f8301526143958161435c565b9050919050565b5f6143a682612d91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143d8576143d7613ae3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61441a82612d91565b915061442583612d91565b925082614435576144346143e3565b5b828204905092915050565b5f61444a82612d91565b915061445583612d91565b925082614465576144646143e3565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61449482614470565b61449e818561447a565b93506144ae818560208601612d1b565b6144b781612d29565b840191505092915050565b5f6080820190506144d55f830187612e1f565b6144e26020830186612e1f565b6144ef6040830185612fbc565b8181036060830152614501818461448a565b905095945050505050565b5f8151905061451a81612c79565b92915050565b5f6020828403121561453557614534612c46565b5b5f6145428482850161450c565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61457f602083612d0b565b915061458a8261454b565b602082019050919050565b5f6020820190508181035f8301526145ac81614573565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6145e7601c83612d0b565b91506145f2826145b3565b602082019050919050565b5f6020820190508181035f830152614614816145db565b905091905056fea264697066735822122084584bb4ad7f4c7f7cb68a89e4ef63893e8b16a0f0eb4a75bfb10856144e274e64736f6c634300081a0033
Deployed Bytecode Sourcemap
16401:18017:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17960:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33235:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22879:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22441:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32179:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21518:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23749:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21027:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17290:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21746:81;;;;;;;;;;;;;:::i;:::-;;18401:196;;;;;;;;;;;;;:::i;:::-;;24134:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20382:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17256:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17222;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21315:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22151:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21891:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14590:94;;;;;;;;;;;;;:::i;:::-;;18609:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18892:782;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13939:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21422:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33376;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17195:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19682:629;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23158:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21656:78;;;;;;;;;;;;;:::i;:::-;;24390:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20725:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33551:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17330:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21203:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20837:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34109:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23518:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14839:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17960:359;18045:4;18085:25;18070:40;;;:11;:40;;;;:109;;;;18146:33;18131:48;;;:11;:48;;;;18070:109;:170;;;;18215:25;18200:40;;;:11;:40;;;;18070:170;:241;;;;18276:35;;;18261:50;;;:11;:50;;;;18070:241;18062:249;;17960:359;;;:::o;33235:84::-;33274:13;33306:5;33299:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33235:84;:::o;22879:207::-;22955:7;22983:16;22991:7;22983;:16::i;:::-;22975:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23054:15;:24;23070:7;23054:24;;;;;;;;;;;;;;;;;;;;;23047:31;;22879:207;;;:::o;22441:372::-;22522:13;22538:16;22546:7;22538;:16::i;:::-;22522:32;;22579:5;22573:11;;:2;:11;;;22565:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22668:5;22654:19;;:10;:19;;;:58;;;;22677:35;22694:5;22701:10;22677:16;:35::i;:::-;22654:58;22632:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;22784:21;22793:2;22797:7;22784:8;:21::i;:::-;22511:302;22441:372;;:::o;32179:215::-;32296:6;32356:30;;;32349:37;;32179:215;;;;;;;:::o;21518:126::-;21564:7;21591:12;;21584:19;;21518:126;:::o;23749:314::-;23944:39;23963:10;23975:7;23944:18;:39::i;:::-;23936:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24027:28;24037:4;24043:2;24047:7;24027:9;:28::i;:::-;23749:314;;;:::o;21027:168::-;21095:4;21143;21116:31;;:10;:23;21127:11;21116:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;21112:53;;21158:4;21151:11;;;;21112:53;21182:5;21175:12;;21027:168;;;;:::o;17290:27::-;;;;:::o;21746:81::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21814:5:::1;21800:11;;:19;;;;;;;;;;;;;;;;;;21746:81::o:0;18401:196::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18451:12:::1;18488:7;:5;:7::i;:::-;:12;;18508:21;18488:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18474:60;;;;;18553:7;18545:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18440:157;18401:196::o:0;24134:185::-;24272:39;24289:4;24295:2;24299:7;24272:39;;;;;;;;;;;;:16;:39::i;:::-;24134:185;;;:::o;20382:125::-;20457:16;20465:7;20457;:16::i;:::-;20441:32;;:12;:10;:12::i;:::-;:32;;;20433:41;;;;;;20485:14;20491:7;20485:5;:14::i;:::-;20382:125;:::o;17256:27::-;;;;:::o;17222:::-;;;;:::o;21315:95::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21396:6:::1;21385:8;:17;;;;;;:::i;:::-;;21315:95:::0;:::o;22151:228::-;22223:7;22243:13;22259:7;:16;22267:7;22259:16;;;;;;;;;;;;;;;;;;;;;22243:32;;22311:1;22294:19;;:5;:19;;;22286:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22366:5;22359:12;;;22151:228;;;:::o;21891:198::-;21963:7;22008:1;21991:19;;:5;:19;;;21983:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22065:9;:16;22075:5;22065:16;;;;;;;;;;;;;;;;22058:23;;21891:198;;;:::o;14590:94::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14655:21:::1;14673:1;14655:9;:21::i;:::-;14590:94::o:0;18609:271::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18683:9:::1;18678:195;18702:5;:12;18698:1;:16;18678:195;;;18736:21;18775:1;18760:12;;:16;;;;:::i;:::-;18736:40;;18791:38;18801:5;18807:1;18801:8;;;;;;;;:::i;:::-;;;;;;;;18827:1;18811:13;:17;;;;:::i;:::-;18791:9;:38::i;:::-;18860:1;18844:12;;:17;;;;;;;:::i;:::-;;;;;;;;18721:152;18716:3;;;;;;;18678:195;;;;18609:271:::0;:::o;18892:782::-;15873:11;;;;;;;;;;;15872:12;15864:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15945:4;15931:11;;:18;;;;;;;;;;;;;;;;;;18962:11:::1;18976:12;:10;:12::i;:::-;18962:26;;19026:5;;19020:3;:11;;;;:::i;:::-;19007:9;:24;18999:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19107:12;;19087:11;:16;19099:3;19087:16;;;;;;;;;;;;;;;;19081:3;:22;;;;:::i;:::-;:38;;19073:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19174:1;19158:12;;:17;19150:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19239:4;19232:3;19217:12;;:18;;;;:::i;:::-;:26;;19209:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19313:4;19287:30;;:10;:22;19298:10;19287:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;19279:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19351:21;19390:1;19375:12;;:16;;;;:::i;:::-;19351:40;;19497:3;19477:11;:16;19489:3;19477:16;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;19527:3;19511:12;;:19;;;;;;;:::i;:::-;;;;;;;;19578:9;19574:93;19597:3;19593:1;:7;19574:93;;;19622:33;19632:3;19653:1;19637:13;:17;;;;:::i;:::-;19622:9;:33::i;:::-;19602:3;;;;;;;19574:93;;;;18951:723;;15986:5:::0;15972:11;;:19;;;;;;;;;;;;;;;;;;18892:782;:::o;13939:87::-;13985:7;14012:6;;;;;;;;;;;14005:13;;13939:87;:::o;21422:88::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21494:8:::1;21486:5;:16;;;;21422:88:::0;:::o;33376:::-;33417:13;33449:7;33442:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33376:88;:::o;17195:20::-;;;;:::o;19682:629::-;15873:11;;;;;;;;;;;15872:12;15864:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15945:4;15931:11;;:18;;;;;;;;;;;;;;;;;;19749:11:::1;19763:12;:10;:12::i;:::-;19749:26;;19813:5;;19807:3;:11;;;;:::i;:::-;19794:9;:24;19786:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19894:12;;19874:11;:16;19886:3;19874:16;;;;;;;;;;;;;;;;19868:3;:22;;;;:::i;:::-;:38;;19860:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19961:1;19945:12;;:17;19937:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20021:4;20014:3;19999:12;;:18;;;;:::i;:::-;:26;;19991:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20063:21;20102:1;20087:12;;:16;;;;:::i;:::-;20063:40;;20134:3;20114:11;:16;20126:3;20114:16;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;20164:3;20148:12;;:19;;;;;;;:::i;:::-;;;;;;;;20215:9;20211:93;20234:3;20230:1;:7;20211:93;;;20259:33;20269:3;20290:1;20274:13;:17;;;;:::i;:::-;20259:9;:33::i;:::-;20239:3;;;;;;;20211:93;;;;19738:573;;15986:5:::0;15972:11;;:19;;;;;;;;;;;;;;;;;;19682:629;:::o;23158:289::-;23273:10;23261:22;;:8;:22;;;23253:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23369:8;23326:18;:30;23345:10;23326:30;;;;;;;;;;;;;;;:40;23357:8;23326:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;23420:8;23393:46;;23408:10;23393:46;;;23430:8;23393:46;;;;;;:::i;:::-;;;;;;;;23158:289;;:::o;21656:78::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21722:4:::1;21708:11;;:18;;;;;;;;;;;;;;;;;;21656:78::o:0;24390:305::-;24565:39;24584:10;24596:7;24565:18;:39::i;:::-;24557:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24648:39;24662:4;24668:2;24672:7;24681:5;24648:13;:39::i;:::-;24390:305;;;;:::o;20725:104::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20813:8:::1;20798:12;:23;;;;20725:104:::0;:::o;33551:546::-;33609:13;33642:16;33650:7;33642;:16::i;:::-;33634:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33703:22;33750:11;;;;;;;;;;;33746:308;;;33852:8;33835:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;33817:61;;33746:308;;;34004:8;34014:17;34023:7;34014:8;:17::i;:::-;33987:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33969:73;;33746:308;34081:8;34074:15;;;33551:546;;;:::o;17330:46::-;;;;;;;;;;;;;;;;;:::o;21203:100::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21289:6:::1;21274:12;:21;;;;21203:100:::0;:::o;20837:182::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20918:9:::1;20913:99;20933:8;:15;20929:1;:19;20913:99;;;20996:4;20970:10;:23;20981:8;20990:1;20981:11;;;;;;;;:::i;:::-;;;;;;;;20970:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;20950:3;;;;;;;20913:99;;;;20837:182:::0;:::o;34109:139::-;34153:13;34214:8;34197:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;34183:57;;34109:139;:::o;23518:164::-;23615:4;23639:18;:25;23658:5;23639:25;;;;;;;;;;;;;;;:35;23665:8;23639:35;;;;;;;;;;;;;;;;;;;;;;;;;23632:42;;23518:164;;;;:::o;14839:186::-;14170:12;:10;:12::i;:::-;14159:23;;:7;:5;:7::i;:::-;:23;;;14151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14948:1:::1;14928:22;;:8;:22;;::::0;14920:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14998:19;15008:8;14998:9;:19::i;:::-;14839:186:::0;:::o;26181:127::-;26246:4;26298:1;26270:30;;:7;:16;26278:7;26270:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26263:37;;26181:127;;;:::o;30082:167::-;30184:2;30157:15;:24;30173:7;30157:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30233:7;30229:2;30202:39;;30211:16;30219:7;30211;:16::i;:::-;30202:39;;;;;;;;;;;;30082:167;;:::o;26475:329::-;26568:4;26593:16;26601:7;26593;:16::i;:::-;26585:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26657:13;26673:16;26681:7;26673;:16::i;:::-;26657:32;;26719:5;26708:16;;:7;:16;;;:51;;;;26752:7;26728:31;;:20;26740:7;26728:11;:20::i;:::-;:31;;;26708:51;:87;;;;26763:32;26780:5;26787:7;26763:16;:32::i;:::-;26708:87;26700:96;;;26475:329;;;;:::o;29417:547::-;29569:4;29549:24;;:16;29557:7;29549;:16::i;:::-;:24;;;29541:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29639:1;29625:16;;:2;:16;;;29617:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:39;29705:4;29711:2;29715:7;29684:20;:39::i;:::-;29788:29;29805:1;29809:7;29788:8;:29::i;:::-;29849:1;29830:9;:15;29840:4;29830:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29878:1;29861:9;:13;29871:2;29861:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29909:2;29890:7;:16;29898:7;29890:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29948:7;29944:2;29929:27;;29938:4;29929:27;;;;;;;;;;;;29417:547;;;:::o;13322:98::-;13375:7;13402:10;13395:17;;13322:98;:::o;28727:353::-;28787:13;28803:16;28811:7;28803;:16::i;:::-;28787:32;;28832:48;28853:5;28868:1;28872:7;28832:20;:48::i;:::-;28921:29;28938:1;28942:7;28921:8;:29::i;:::-;28983:1;28963:9;:16;28973:5;28963:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29002:7;:16;29010:7;29002:16;;;;;;;;;;;;28995:23;;;;;;;;;;;29064:7;29060:1;29036:36;;29045:5;29036:36;;;;;;;;;;;;28776:304;28727:353;:::o;15033:173::-;15089:16;15108:6;;;;;;;;;;;15089:25;;15134:8;15125:6;;:17;;;;;;;;;;;;;;;;;;15189:8;15158:40;;15179:8;15158:40;;;;;;;;;;;;15078:128;15033:173;:::o;27146:110::-;27222:26;27232:2;27236:7;27222:26;;;;;;;;;;;;:9;:26::i;:::-;27146:110;;:::o;25577:291::-;25734:28;25744:4;25750:2;25754:7;25734:9;:28::i;:::-;25781:48;25804:4;25810:2;25814:7;25823:5;25781:22;:48::i;:::-;25773:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25577:291;;;;:::o;15249:532::-;15305:13;15344:1;15335:5;:10;15331:53;;15362:10;;;;;;;;;;;;;;;;;;;;;15331:53;15394:12;15409:5;15394:20;;15425:14;15450:78;15465:1;15457:4;:9;15450:78;;15483:8;;;;;:::i;:::-;;;;15514:2;15506:10;;;;;:::i;:::-;;;15450:78;;;15538:19;15570:6;15560:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15538:39;;15588:154;15604:1;15595:5;:10;15588:154;;15632:1;15622:11;;;;;:::i;:::-;;;15699:2;15691:5;:10;;;;:::i;:::-;15678:2;:24;;;;:::i;:::-;15665:39;;15648:6;15655;15648:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15728:2;15719:11;;;;;:::i;:::-;;;15588:154;;;15766:6;15752:21;;;;;15249:532;;;;:::o;32966:126::-;;;;:::o;27483:297::-;27613:18;27619:2;27623:7;27613:5;:18::i;:::-;27664:54;27695:1;27699:2;27703:7;27712:5;27664:22;:54::i;:::-;27642:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;27483:297;;;:::o;30814:777::-;30969:4;30990:15;:2;:13;;;:15::i;:::-;30986:598;;;31042:2;31026:36;;;31063:10;31075:4;31081:7;31090:5;31026:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31022:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31287:1;31270:6;:13;:18;31266:248;;31313:36;;;;;;;;;;:::i;:::-;;;;;;;;31266:248;31464:6;31458:13;31449:6;31445:2;31441:15;31434:38;31022:507;31157:45;;;31147:55;;;:6;:55;;;;31140:62;;;;;30986:598;31568:4;31561:11;;30814:777;;;;;;;:::o;28116:382::-;28210:1;28196:16;;:2;:16;;;28188:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28269:16;28277:7;28269;:16::i;:::-;28268:17;28260:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28331:45;28360:1;28364:2;28368:7;28331:20;:45::i;:::-;28406:1;28389:9;:13;28399:2;28389:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28437:2;28418:7;:16;28426:7;28418:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28482:7;28478:2;28457:33;;28474:1;28457:33;;;;;;;;;;;;28116:382;;:::o;6243:387::-;6303:4;6511:12;6578:7;6566:20;6558:28;;6621:1;6614:4;:8;6607:15;;;6243:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:77::-;2790:7;2819:5;2808:16;;2753:77;;;:::o;2836:122::-;2909:24;2927:5;2909:24;:::i;:::-;2902:5;2899:35;2889:63;;2948:1;2945;2938:12;2889:63;2836:122;:::o;2964:139::-;3010:5;3048:6;3035:20;3026:29;;3064:33;3091:5;3064:33;:::i;:::-;2964:139;;;;:::o;3109:329::-;3168:6;3217:2;3205:9;3196:7;3192:23;3188:32;3185:119;;;3223:79;;:::i;:::-;3185:119;3343:1;3368:53;3413:7;3404:6;3393:9;3389:22;3368:53;:::i;:::-;3358:63;;3314:117;3109:329;;;;:::o;3444:126::-;3481:7;3521:42;3514:5;3510:54;3499:65;;3444:126;;;:::o;3576:96::-;3613:7;3642:24;3660:5;3642:24;:::i;:::-;3631:35;;3576:96;;;:::o;3678:118::-;3765:24;3783:5;3765:24;:::i;:::-;3760:3;3753:37;3678:118;;:::o;3802:222::-;3895:4;3933:2;3922:9;3918:18;3910:26;;3946:71;4014:1;4003:9;3999:17;3990:6;3946:71;:::i;:::-;3802:222;;;;:::o;4030:122::-;4103:24;4121:5;4103:24;:::i;:::-;4096:5;4093:35;4083:63;;4142:1;4139;4132:12;4083:63;4030:122;:::o;4158:139::-;4204:5;4242:6;4229:20;4220:29;;4258:33;4285:5;4258:33;:::i;:::-;4158:139;;;;:::o;4303:474::-;4371:6;4379;4428:2;4416:9;4407:7;4403:23;4399:32;4396:119;;;4434:79;;:::i;:::-;4396:119;4554:1;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4525:117;4681:2;4707:53;4752:7;4743:6;4732:9;4728:22;4707:53;:::i;:::-;4697:63;;4652:118;4303:474;;;;;:::o;4783:117::-;4892:1;4889;4882:12;4906:117;5015:1;5012;5005:12;5029:117;5138:1;5135;5128:12;5165:552;5222:8;5232:6;5282:3;5275:4;5267:6;5263:17;5259:27;5249:122;;5290:79;;:::i;:::-;5249:122;5403:6;5390:20;5380:30;;5433:18;5425:6;5422:30;5419:117;;;5455:79;;:::i;:::-;5419:117;5569:4;5561:6;5557:17;5545:29;;5623:3;5615:4;5607:6;5603:17;5593:8;5589:32;5586:41;5583:128;;;5630:79;;:::i;:::-;5583:128;5165:552;;;;;:::o;5723:963::-;5820:6;5828;5836;5844;5852;5901:3;5889:9;5880:7;5876:23;5872:33;5869:120;;;5908:79;;:::i;:::-;5869:120;6028:1;6053:53;6098:7;6089:6;6078:9;6074:22;6053:53;:::i;:::-;6043:63;;5999:117;6155:2;6181:53;6226:7;6217:6;6206:9;6202:22;6181:53;:::i;:::-;6171:63;;6126:118;6283:2;6309:53;6354:7;6345:6;6334:9;6330:22;6309:53;:::i;:::-;6299:63;;6254:118;6439:2;6428:9;6424:18;6411:32;6470:18;6462:6;6459:30;6456:117;;;6492:79;;:::i;:::-;6456:117;6605:64;6661:7;6652:6;6641:9;6637:22;6605:64;:::i;:::-;6587:82;;;;6382:297;5723:963;;;;;;;;:::o;6692:115::-;6777:23;6794:5;6777:23;:::i;:::-;6772:3;6765:36;6692:115;;:::o;6813:218::-;6904:4;6942:2;6931:9;6927:18;6919:26;;6955:69;7021:1;7010:9;7006:17;6997:6;6955:69;:::i;:::-;6813:218;;;;:::o;7037:118::-;7124:24;7142:5;7124:24;:::i;:::-;7119:3;7112:37;7037:118;;:::o;7161:222::-;7254:4;7292:2;7281:9;7277:18;7269:26;;7305:71;7373:1;7362:9;7358:17;7349:6;7305:71;:::i;:::-;7161:222;;;;:::o;7389:619::-;7466:6;7474;7482;7531:2;7519:9;7510:7;7506:23;7502:32;7499:119;;;7537:79;;:::i;:::-;7499:119;7657:1;7682:53;7727:7;7718:6;7707:9;7703:22;7682:53;:::i;:::-;7672:63;;7628:117;7784:2;7810:53;7855:7;7846:6;7835:9;7831:22;7810:53;:::i;:::-;7800:63;;7755:118;7912:2;7938:53;7983:7;7974:6;7963:9;7959:22;7938:53;:::i;:::-;7928:63;;7883:118;7389:619;;;;;:::o;8014:329::-;8073:6;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:53;8318:7;8309:6;8298:9;8294:22;8273:53;:::i;:::-;8263:63;;8219:117;8014:329;;;;:::o;8349:117::-;8458:1;8455;8448:12;8472:180;8520:77;8517:1;8510:88;8617:4;8614:1;8607:15;8641:4;8638:1;8631:15;8658:281;8741:27;8763:4;8741:27;:::i;:::-;8733:6;8729:40;8871:6;8859:10;8856:22;8835:18;8823:10;8820:34;8817:62;8814:88;;;8882:18;;:::i;:::-;8814:88;8922:10;8918:2;8911:22;8701:238;8658:281;;:::o;8945:129::-;8979:6;9006:20;;:::i;:::-;8996:30;;9035:33;9063:4;9055:6;9035:33;:::i;:::-;8945:129;;;:::o;9080:308::-;9142:4;9232:18;9224:6;9221:30;9218:56;;;9254:18;;:::i;:::-;9218:56;9292:29;9314:6;9292:29;:::i;:::-;9284:37;;9376:4;9370;9366:15;9358:23;;9080:308;;;:::o;9394:148::-;9492:6;9487:3;9482;9469:30;9533:1;9524:6;9519:3;9515:16;9508:27;9394:148;;;:::o;9548:425::-;9626:5;9651:66;9667:49;9709:6;9667:49;:::i;:::-;9651:66;:::i;:::-;9642:75;;9740:6;9733:5;9726:21;9778:4;9771:5;9767:16;9816:3;9807:6;9802:3;9798:16;9795:25;9792:112;;;9823:79;;:::i;:::-;9792:112;9913:54;9960:6;9955:3;9950;9913:54;:::i;:::-;9632:341;9548:425;;;;;:::o;9993:340::-;10049:5;10098:3;10091:4;10083:6;10079:17;10075:27;10065:122;;10106:79;;:::i;:::-;10065:122;10223:6;10210:20;10248:79;10323:3;10315:6;10308:4;10300:6;10296:17;10248:79;:::i;:::-;10239:88;;10055:278;9993:340;;;;:::o;10339:509::-;10408:6;10457:2;10445:9;10436:7;10432:23;10428:32;10425:119;;;10463:79;;:::i;:::-;10425:119;10611:1;10600:9;10596:17;10583:31;10641:18;10633:6;10630:30;10627:117;;;10663:79;;:::i;:::-;10627:117;10768:63;10823:7;10814:6;10803:9;10799:22;10768:63;:::i;:::-;10758:73;;10554:287;10339:509;;;;:::o;10854:311::-;10931:4;11021:18;11013:6;11010:30;11007:56;;;11043:18;;:::i;:::-;11007:56;11093:4;11085:6;11081:17;11073:25;;11153:4;11147;11143:15;11135:23;;10854:311;;;:::o;11188:710::-;11284:5;11309:81;11325:64;11382:6;11325:64;:::i;:::-;11309:81;:::i;:::-;11300:90;;11410:5;11439:6;11432:5;11425:21;11473:4;11466:5;11462:16;11455:23;;11526:4;11518:6;11514:17;11506:6;11502:30;11555:3;11547:6;11544:15;11541:122;;;11574:79;;:::i;:::-;11541:122;11689:6;11672:220;11706:6;11701:3;11698:15;11672:220;;;11781:3;11810:37;11843:3;11831:10;11810:37;:::i;:::-;11805:3;11798:50;11877:4;11872:3;11868:14;11861:21;;11748:144;11732:4;11727:3;11723:14;11716:21;;11672:220;;;11676:21;11290:608;;11188:710;;;;;:::o;11921:370::-;11992:5;12041:3;12034:4;12026:6;12022:17;12018:27;12008:122;;12049:79;;:::i;:::-;12008:122;12166:6;12153:20;12191:94;12281:3;12273:6;12266:4;12258:6;12254:17;12191:94;:::i;:::-;12182:103;;11998:293;11921:370;;;;:::o;12297:539::-;12381:6;12430:2;12418:9;12409:7;12405:23;12401:32;12398:119;;;12436:79;;:::i;:::-;12398:119;12584:1;12573:9;12569:17;12556:31;12614:18;12606:6;12603:30;12600:117;;;12636:79;;:::i;:::-;12600:117;12741:78;12811:7;12802:6;12791:9;12787:22;12741:78;:::i;:::-;12731:88;;12527:302;12297:539;;;;:::o;12842:116::-;12912:21;12927:5;12912:21;:::i;:::-;12905:5;12902:32;12892:60;;12948:1;12945;12938:12;12892:60;12842:116;:::o;12964:133::-;13007:5;13045:6;13032:20;13023:29;;13061:30;13085:5;13061:30;:::i;:::-;12964:133;;;;:::o;13103:468::-;13168:6;13176;13225:2;13213:9;13204:7;13200:23;13196:32;13193:119;;;13231:79;;:::i;:::-;13193:119;13351:1;13376:53;13421:7;13412:6;13401:9;13397:22;13376:53;:::i;:::-;13366:63;;13322:117;13478:2;13504:50;13546:7;13537:6;13526:9;13522:22;13504:50;:::i;:::-;13494:60;;13449:115;13103:468;;;;;:::o;13577:307::-;13638:4;13728:18;13720:6;13717:30;13714:56;;;13750:18;;:::i;:::-;13714:56;13788:29;13810:6;13788:29;:::i;:::-;13780:37;;13872:4;13866;13862:15;13854:23;;13577:307;;;:::o;13890:423::-;13967:5;13992:65;14008:48;14049:6;14008:48;:::i;:::-;13992:65;:::i;:::-;13983:74;;14080:6;14073:5;14066:21;14118:4;14111:5;14107:16;14156:3;14147:6;14142:3;14138:16;14135:25;14132:112;;;14163:79;;:::i;:::-;14132:112;14253:54;14300:6;14295:3;14290;14253:54;:::i;:::-;13973:340;13890:423;;;;;:::o;14332:338::-;14387:5;14436:3;14429:4;14421:6;14417:17;14413:27;14403:122;;14444:79;;:::i;:::-;14403:122;14561:6;14548:20;14586:78;14660:3;14652:6;14645:4;14637:6;14633:17;14586:78;:::i;:::-;14577:87;;14393:277;14332:338;;;;:::o;14676:943::-;14771:6;14779;14787;14795;14844:3;14832:9;14823:7;14819:23;14815:33;14812:120;;;14851:79;;:::i;:::-;14812:120;14971:1;14996:53;15041:7;15032:6;15021:9;15017:22;14996:53;:::i;:::-;14986:63;;14942:117;15098:2;15124:53;15169:7;15160:6;15149:9;15145:22;15124:53;:::i;:::-;15114:63;;15069:118;15226:2;15252:53;15297:7;15288:6;15277:9;15273:22;15252:53;:::i;:::-;15242:63;;15197:118;15382:2;15371:9;15367:18;15354:32;15413:18;15405:6;15402:30;15399:117;;;15435:79;;:::i;:::-;15399:117;15540:62;15594:7;15585:6;15574:9;15570:22;15540:62;:::i;:::-;15530:72;;15325:287;14676:943;;;;;;;:::o;15625:474::-;15693:6;15701;15750:2;15738:9;15729:7;15725:23;15721:32;15718:119;;;15756:79;;:::i;:::-;15718:119;15876:1;15901:53;15946:7;15937:6;15926:9;15922:22;15901:53;:::i;:::-;15891:63;;15847:117;16003:2;16029:53;16074:7;16065:6;16054:9;16050:22;16029:53;:::i;:::-;16019:63;;15974:118;15625:474;;;;;:::o;16105:180::-;16153:77;16150:1;16143:88;16250:4;16247:1;16240:15;16274:4;16271:1;16264:15;16291:320;16335:6;16372:1;16366:4;16362:12;16352:22;;16419:1;16413:4;16409:12;16440:18;16430:81;;16496:4;16488:6;16484:17;16474:27;;16430:81;16558:2;16550:6;16547:14;16527:18;16524:38;16521:84;;16577:18;;:::i;:::-;16521:84;16342:269;16291:320;;;:::o;16617:182::-;16757:34;16753:1;16745:6;16741:14;16734:58;16617:182;:::o;16805:366::-;16947:3;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17044:93;17133:3;17044:93;:::i;:::-;17162:2;17157:3;17153:12;17146:19;;16805:366;;;:::o;17177:419::-;17343:4;17381:2;17370:9;17366:18;17358:26;;17430:9;17424:4;17420:20;17416:1;17405:9;17401:17;17394:47;17458:131;17584:4;17458:131;:::i;:::-;17450:139;;17177:419;;;:::o;17602:180::-;17742:32;17738:1;17730:6;17726:14;17719:56;17602:180;:::o;17788:366::-;17930:3;17951:67;18015:2;18010:3;17951:67;:::i;:::-;17944:74;;18027:93;18116:3;18027:93;:::i;:::-;18145:2;18140:3;18136:12;18129:19;;17788:366;;;:::o;18160:419::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18413:9;18407:4;18403:20;18399:1;18388:9;18384:17;18377:47;18441:131;18567:4;18441:131;:::i;:::-;18433:139;;18160:419;;;:::o;18585:181::-;18725:33;18721:1;18713:6;18709:14;18702:57;18585:181;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:419::-;19310:4;19348:2;19337:9;19333:18;19325:26;;19397:9;19391:4;19387:20;19383:1;19372:9;19368:17;19361:47;19425:131;19551:4;19425:131;:::i;:::-;19417:139;;19144:419;;;:::o;19569:178::-;19709:30;19705:1;19697:6;19693:14;19686:54;19569:178;:::o;19753:366::-;19895:3;19916:67;19980:2;19975:3;19916:67;:::i;:::-;19909:74;;19992:93;20081:3;19992:93;:::i;:::-;20110:2;20105:3;20101:12;20094:19;;19753:366;;;:::o;20125:419::-;20291:4;20329:2;20318:9;20314:18;20306:26;;20378:9;20372:4;20368:20;20364:1;20353:9;20349:17;20342:47;20406:131;20532:4;20406:131;:::i;:::-;20398:139;;20125:419;;;:::o;20550:182::-;20690:34;20686:1;20678:6;20674:14;20667:58;20550:182;:::o;20738:366::-;20880:3;20901:67;20965:2;20960:3;20901:67;:::i;:::-;20894:74;;20977:93;21066:3;20977:93;:::i;:::-;21095:2;21090:3;21086:12;21079:19;;20738:366;;;:::o;21110:419::-;21276:4;21314:2;21303:9;21299:18;21291:26;;21363:9;21357:4;21353:20;21349:1;21338:9;21334:17;21327:47;21391:131;21517:4;21391:131;:::i;:::-;21383:139;;21110:419;;;:::o;21535:147::-;21636:11;21673:3;21658:18;;21535:147;;;;:::o;21688:114::-;;:::o;21808:398::-;21967:3;21988:83;22069:1;22064:3;21988:83;:::i;:::-;21981:90;;22080:93;22169:3;22080:93;:::i;:::-;22198:1;22193:3;22189:11;22182:18;;21808:398;;;:::o;22212:379::-;22396:3;22418:147;22561:3;22418:147;:::i;:::-;22411:154;;22582:3;22575:10;;22212:379;;;:::o;22597:174::-;22737:26;22733:1;22725:6;22721:14;22714:50;22597:174;:::o;22777:366::-;22919:3;22940:67;23004:2;22999:3;22940:67;:::i;:::-;22933:74;;23016:93;23105:3;23016:93;:::i;:::-;23134:2;23129:3;23125:12;23118:19;;22777:366;;;:::o;23149:419::-;23315:4;23353:2;23342:9;23338:18;23330:26;;23402:9;23396:4;23392:20;23388:1;23377:9;23373:17;23366:47;23430:131;23556:4;23430:131;:::i;:::-;23422:139;;23149:419;;;:::o;23574:141::-;23623:4;23646:3;23638:11;;23669:3;23666:1;23659:14;23703:4;23700:1;23690:18;23682:26;;23574:141;;;:::o;23721:93::-;23758:6;23805:2;23800;23793:5;23789:14;23785:23;23775:33;;23721:93;;;:::o;23820:107::-;23864:8;23914:5;23908:4;23904:16;23883:37;;23820:107;;;;:::o;23933:393::-;24002:6;24052:1;24040:10;24036:18;24075:97;24105:66;24094:9;24075:97;:::i;:::-;24193:39;24223:8;24212:9;24193:39;:::i;:::-;24181:51;;24265:4;24261:9;24254:5;24250:21;24241:30;;24314:4;24304:8;24300:19;24293:5;24290:30;24280:40;;24009:317;;23933:393;;;;;:::o;24332:60::-;24360:3;24381:5;24374:12;;24332:60;;;:::o;24398:142::-;24448:9;24481:53;24499:34;24508:24;24526:5;24508:24;:::i;:::-;24499:34;:::i;:::-;24481:53;:::i;:::-;24468:66;;24398:142;;;:::o;24546:75::-;24589:3;24610:5;24603:12;;24546:75;;;:::o;24627:269::-;24737:39;24768:7;24737:39;:::i;:::-;24798:91;24847:41;24871:16;24847:41;:::i;:::-;24839:6;24832:4;24826:11;24798:91;:::i;:::-;24792:4;24785:105;24703:193;24627:269;;;:::o;24902:73::-;24947:3;24902:73;:::o;24981:189::-;25058:32;;:::i;:::-;25099:65;25157:6;25149;25143:4;25099:65;:::i;:::-;25034:136;24981:189;;:::o;25176:186::-;25236:120;25253:3;25246:5;25243:14;25236:120;;;25307:39;25344:1;25337:5;25307:39;:::i;:::-;25280:1;25273:5;25269:13;25260:22;;25236:120;;;25176:186;;:::o;25368:543::-;25469:2;25464:3;25461:11;25458:446;;;25503:38;25535:5;25503:38;:::i;:::-;25587:29;25605:10;25587:29;:::i;:::-;25577:8;25573:44;25770:2;25758:10;25755:18;25752:49;;;25791:8;25776:23;;25752:49;25814:80;25870:22;25888:3;25870:22;:::i;:::-;25860:8;25856:37;25843:11;25814:80;:::i;:::-;25473:431;;25458:446;25368:543;;;:::o;25917:117::-;25971:8;26021:5;26015:4;26011:16;25990:37;;25917:117;;;;:::o;26040:169::-;26084:6;26117:51;26165:1;26161:6;26153:5;26150:1;26146:13;26117:51;:::i;:::-;26113:56;26198:4;26192;26188:15;26178:25;;26091:118;26040:169;;;;:::o;26214:295::-;26290:4;26436:29;26461:3;26455:4;26436:29;:::i;:::-;26428:37;;26498:3;26495:1;26491:11;26485:4;26482:21;26474:29;;26214:295;;;;:::o;26514:1395::-;26631:37;26664:3;26631:37;:::i;:::-;26733:18;26725:6;26722:30;26719:56;;;26755:18;;:::i;:::-;26719:56;26799:38;26831:4;26825:11;26799:38;:::i;:::-;26884:67;26944:6;26936;26930:4;26884:67;:::i;:::-;26978:1;27002:4;26989:17;;27034:2;27026:6;27023:14;27051:1;27046:618;;;;27708:1;27725:6;27722:77;;;27774:9;27769:3;27765:19;27759:26;27750:35;;27722:77;27825:67;27885:6;27878:5;27825:67;:::i;:::-;27819:4;27812:81;27681:222;27016:887;;27046:618;27098:4;27094:9;27086:6;27082:22;27132:37;27164:4;27132:37;:::i;:::-;27191:1;27205:208;27219:7;27216:1;27213:14;27205:208;;;27298:9;27293:3;27289:19;27283:26;27275:6;27268:42;27349:1;27341:6;27337:14;27327:24;;27396:2;27385:9;27381:18;27368:31;;27242:4;27239:1;27235:12;27230:17;;27205:208;;;27441:6;27432:7;27429:19;27426:179;;;27499:9;27494:3;27490:19;27484:26;27542:48;27584:4;27576:6;27572:17;27561:9;27542:48;:::i;:::-;27534:6;27527:64;27449:156;27426:179;27651:1;27647;27639:6;27635:14;27631:22;27625:4;27618:36;27053:611;;;27016:887;;26606:1303;;;26514:1395;;:::o;27915:180::-;28055:32;28051:1;28043:6;28039:14;28032:56;27915:180;:::o;28101:366::-;28243:3;28264:67;28328:2;28323:3;28264:67;:::i;:::-;28257:74;;28340:93;28429:3;28340:93;:::i;:::-;28458:2;28453:3;28449:12;28442:19;;28101:366;;;:::o;28473:419::-;28639:4;28677:2;28666:9;28662:18;28654:26;;28726:9;28720:4;28716:20;28712:1;28701:9;28697:17;28690:47;28754:131;28880:4;28754:131;:::i;:::-;28746:139;;28473:419;;;:::o;28898:182::-;29038:34;29034:1;29026:6;29022:14;29015:58;28898:182;:::o;29086:366::-;29228:3;29249:67;29313:2;29308:3;29249:67;:::i;:::-;29242:74;;29325:93;29414:3;29325:93;:::i;:::-;29443:2;29438:3;29434:12;29427:19;;29086:366;;;:::o;29458:419::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:180::-;29931:77;29928:1;29921:88;30028:4;30025:1;30018:15;30052:4;30049:1;30042:15;30069:191;30109:3;30128:20;30146:1;30128:20;:::i;:::-;30123:25;;30162:20;30180:1;30162:20;:::i;:::-;30157:25;;30205:1;30202;30198:9;30191:16;;30226:3;30223:1;30220:10;30217:36;;;30233:18;;:::i;:::-;30217:36;30069:191;;;;:::o;30266:180::-;30314:77;30311:1;30304:88;30411:4;30408:1;30401:15;30435:4;30432:1;30425:15;30452:181;30592:33;30588:1;30580:6;30576:14;30569:57;30452:181;:::o;30639:366::-;30781:3;30802:67;30866:2;30861:3;30802:67;:::i;:::-;30795:74;;30878:93;30967:3;30878:93;:::i;:::-;30996:2;30991:3;30987:12;30980:19;;30639:366;;;:::o;31011:419::-;31177:4;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31011:419;;;:::o;31436:410::-;31476:7;31499:20;31517:1;31499:20;:::i;:::-;31494:25;;31533:20;31551:1;31533:20;:::i;:::-;31528:25;;31588:1;31585;31581:9;31610:30;31628:11;31610:30;:::i;:::-;31599:41;;31789:1;31780:7;31776:15;31773:1;31770:22;31750:1;31743:9;31723:83;31700:139;;31819:18;;:::i;:::-;31700:139;31484:362;31436:410;;;;:::o;31852:176::-;31992:28;31988:1;31980:6;31976:14;31969:52;31852:176;:::o;32034:366::-;32176:3;32197:67;32261:2;32256:3;32197:67;:::i;:::-;32190:74;;32273:93;32362:3;32273:93;:::i;:::-;32391:2;32386:3;32382:12;32375:19;;32034:366;;;:::o;32406:419::-;32572:4;32610:2;32599:9;32595:18;32587:26;;32659:9;32653:4;32649:20;32645:1;32634:9;32630:17;32623:47;32687:131;32813:4;32687:131;:::i;:::-;32679:139;;32406:419;;;:::o;32831:165::-;32971:17;32967:1;32959:6;32955:14;32948:41;32831:165;:::o;33002:366::-;33144:3;33165:67;33229:2;33224:3;33165:67;:::i;:::-;33158:74;;33241:93;33330:3;33241:93;:::i;:::-;33359:2;33354:3;33350:12;33343:19;;33002:366;;;:::o;33374:419::-;33540:4;33578:2;33567:9;33563:18;33555:26;;33627:9;33621:4;33617:20;33613:1;33602:9;33598:17;33591:47;33655:131;33781:4;33655:131;:::i;:::-;33647:139;;33374:419;;;:::o;33799:168::-;33939:20;33935:1;33927:6;33923:14;33916:44;33799:168;:::o;33973:366::-;34115:3;34136:67;34200:2;34195:3;34136:67;:::i;:::-;34129:74;;34212:93;34301:3;34212:93;:::i;:::-;34330:2;34325:3;34321:12;34314:19;;33973:366;;;:::o;34345:419::-;34511:4;34549:2;34538:9;34534:18;34526:26;;34598:9;34592:4;34588:20;34584:1;34573:9;34569:17;34562:47;34626:131;34752:4;34626:131;:::i;:::-;34618:139;;34345:419;;;:::o;34770:170::-;34910:22;34906:1;34898:6;34894:14;34887:46;34770:170;:::o;34946:366::-;35088:3;35109:67;35173:2;35168:3;35109:67;:::i;:::-;35102:74;;35185:93;35274:3;35185:93;:::i;:::-;35303:2;35298:3;35294:12;35287:19;;34946:366;;;:::o;35318:419::-;35484:4;35522:2;35511:9;35507:18;35499:26;;35571:9;35565:4;35561:20;35557:1;35546:9;35542:17;35535:47;35599:131;35725:4;35599:131;:::i;:::-;35591:139;;35318:419;;;:::o;35743:166::-;35883:18;35879:1;35871:6;35867:14;35860:42;35743:166;:::o;35915:366::-;36057:3;36078:67;36142:2;36137:3;36078:67;:::i;:::-;36071:74;;36154:93;36243:3;36154:93;:::i;:::-;36272:2;36267:3;36263:12;36256:19;;35915:366;;;:::o;36287:419::-;36453:4;36491:2;36480:9;36476:18;36468:26;;36540:9;36534:4;36530:20;36526:1;36515:9;36511:17;36504:47;36568:131;36694:4;36568:131;:::i;:::-;36560:139;;36287:419;;;:::o;36712:163::-;36852:15;36848:1;36840:6;36836:14;36829:39;36712:163;:::o;36881:366::-;37023:3;37044:67;37108:2;37103:3;37044:67;:::i;:::-;37037:74;;37120:93;37209:3;37120:93;:::i;:::-;37238:2;37233:3;37229:12;37222:19;;36881:366;;;:::o;37253:419::-;37419:4;37457:2;37446:9;37442:18;37434:26;;37506:9;37500:4;37496:20;37492:1;37481:9;37477:17;37470:47;37534:131;37660:4;37534:131;:::i;:::-;37526:139;;37253:419;;;:::o;37678:175::-;37818:27;37814:1;37806:6;37802:14;37795:51;37678:175;:::o;37859:366::-;38001:3;38022:67;38086:2;38081:3;38022:67;:::i;:::-;38015:74;;38098:93;38187:3;38098:93;:::i;:::-;38216:2;38211:3;38207:12;38200:19;;37859:366;;;:::o;38231:419::-;38397:4;38435:2;38424:9;38420:18;38412:26;;38484:9;38478:4;38474:20;38470:1;38459:9;38455:17;38448:47;38512:131;38638:4;38512:131;:::i;:::-;38504:139;;38231:419;;;:::o;38656:179::-;38796:31;38792:1;38784:6;38780:14;38773:55;38656:179;:::o;38841:366::-;38983:3;39004:67;39068:2;39063:3;39004:67;:::i;:::-;38997:74;;39080:93;39169:3;39080:93;:::i;:::-;39198:2;39193:3;39189:12;39182:19;;38841:366;;;:::o;39213:419::-;39379:4;39417:2;39406:9;39402:18;39394:26;;39466:9;39460:4;39456:20;39452:1;39441:9;39437:17;39430:47;39494:131;39620:4;39494:131;:::i;:::-;39486:139;;39213:419;;;:::o;39638:148::-;39740:11;39777:3;39762:18;;39638:148;;;;:::o;39816:874::-;39919:3;39956:5;39950:12;39985:36;40011:9;39985:36;:::i;:::-;40037:89;40119:6;40114:3;40037:89;:::i;:::-;40030:96;;40157:1;40146:9;40142:17;40173:1;40168:166;;;;40348:1;40343:341;;;;40135:549;;40168:166;40252:4;40248:9;40237;40233:25;40228:3;40221:38;40314:6;40307:14;40300:22;40292:6;40288:35;40283:3;40279:45;40272:52;;40168:166;;40343:341;40410:38;40442:5;40410:38;:::i;:::-;40470:1;40484:154;40498:6;40495:1;40492:13;40484:154;;;40572:7;40566:14;40562:1;40557:3;40553:11;40546:35;40622:1;40613:7;40609:15;40598:26;;40520:4;40517:1;40513:12;40508:17;;40484:154;;;40667:6;40662:3;40658:16;40651:23;;40350:334;;40135:549;;39923:767;;39816:874;;;;:::o;40696:162::-;40836:14;40832:1;40824:6;40820:14;40813:38;40696:162;:::o;40864:402::-;41024:3;41045:85;41127:2;41122:3;41045:85;:::i;:::-;41038:92;;41139:93;41228:3;41139:93;:::i;:::-;41257:2;41252:3;41248:12;41241:19;;40864:402;;;:::o;41272:535::-;41502:3;41524:92;41612:3;41603:6;41524:92;:::i;:::-;41517:99;;41633:148;41777:3;41633:148;:::i;:::-;41626:155;;41798:3;41791:10;;41272:535;;;;:::o;41813:390::-;41919:3;41947:39;41980:5;41947:39;:::i;:::-;42002:89;42084:6;42079:3;42002:89;:::i;:::-;41995:96;;42100:65;42158:6;42153:3;42146:4;42139:5;42135:16;42100:65;:::i;:::-;42190:6;42185:3;42181:16;42174:23;;41923:280;41813:390;;;;:::o;42209:155::-;42349:7;42345:1;42337:6;42333:14;42326:31;42209:155;:::o;42370:400::-;42530:3;42551:84;42633:1;42628:3;42551:84;:::i;:::-;42544:91;;42644:93;42733:3;42644:93;:::i;:::-;42762:1;42757:3;42753:11;42746:18;;42370:400;;;:::o;42776:695::-;43054:3;43076:92;43164:3;43155:6;43076:92;:::i;:::-;43069:99;;43185:95;43276:3;43267:6;43185:95;:::i;:::-;43178:102;;43297:148;43441:3;43297:148;:::i;:::-;43290:155;;43462:3;43455:10;;42776:695;;;;;:::o;43477:163::-;43617:15;43613:1;43605:6;43601:14;43594:39;43477:163;:::o;43646:402::-;43806:3;43827:85;43909:2;43904:3;43827:85;:::i;:::-;43820:92;;43921:93;44010:3;43921:93;:::i;:::-;44039:2;44034:3;44030:12;44023:19;;43646:402;;;:::o;44054:535::-;44284:3;44306:92;44394:3;44385:6;44306:92;:::i;:::-;44299:99;;44415:148;44559:3;44415:148;:::i;:::-;44408:155;;44580:3;44573:10;;44054:535;;;;:::o;44595:182::-;44735:34;44731:1;44723:6;44719:14;44712:58;44595:182;:::o;44783:366::-;44925:3;44946:67;45010:2;45005:3;44946:67;:::i;:::-;44939:74;;45022:93;45111:3;45022:93;:::i;:::-;45140:2;45135:3;45131:12;45124:19;;44783:366;;;:::o;45155:419::-;45321:4;45359:2;45348:9;45344:18;45336:26;;45408:9;45402:4;45398:20;45394:1;45383:9;45379:17;45372:47;45436:131;45562:4;45436:131;:::i;:::-;45428:139;;45155:419;;;:::o;45580:182::-;45720:34;45716:1;45708:6;45704:14;45697:58;45580:182;:::o;45768:366::-;45910:3;45931:67;45995:2;45990:3;45931:67;:::i;:::-;45924:74;;46007:93;46096:3;46007:93;:::i;:::-;46125:2;46120:3;46116:12;46109:19;;45768:366;;;:::o;46140:419::-;46306:4;46344:2;46333:9;46329:18;46321:26;;46393:9;46387:4;46383:20;46379:1;46368:9;46364:17;46357:47;46421:131;46547:4;46421:131;:::i;:::-;46413:139;;46140:419;;;:::o;46565:178::-;46705:30;46701:1;46693:6;46689:14;46682:54;46565:178;:::o;46749:366::-;46891:3;46912:67;46976:2;46971:3;46912:67;:::i;:::-;46905:74;;46988:93;47077:3;46988:93;:::i;:::-;47106:2;47101:3;47097:12;47090:19;;46749:366;;;:::o;47121:419::-;47287:4;47325:2;47314:9;47310:18;47302:26;;47374:9;47368:4;47364:20;47360:1;47349:9;47345:17;47338:47;47402:131;47528:4;47402:131;:::i;:::-;47394:139;;47121:419;;;:::o;47546:177::-;47686:29;47682:1;47674:6;47670:14;47663:53;47546:177;:::o;47729:366::-;47871:3;47892:67;47956:2;47951:3;47892:67;:::i;:::-;47885:74;;47968:93;48057:3;47968:93;:::i;:::-;48086:2;48081:3;48077:12;48070:19;;47729:366;;;:::o;48101:419::-;48267:4;48305:2;48294:9;48290:18;48282:26;;48354:9;48348:4;48344:20;48340:1;48329:9;48325:17;48318:47;48382:131;48508:4;48382:131;:::i;:::-;48374:139;;48101:419;;;:::o;48526:194::-;48566:4;48586:20;48604:1;48586:20;:::i;:::-;48581:25;;48620:20;48638:1;48620:20;:::i;:::-;48615:25;;48664:1;48661;48657:9;48649:17;;48688:1;48682:4;48679:11;48676:37;;;48693:18;;:::i;:::-;48676:37;48526:194;;;;:::o;48726:176::-;48866:28;48862:1;48854:6;48850:14;48843:52;48726:176;:::o;48908:366::-;49050:3;49071:67;49135:2;49130:3;49071:67;:::i;:::-;49064:74;;49147:93;49236:3;49147:93;:::i;:::-;49265:2;49260:3;49256:12;49249:19;;48908:366;;;:::o;49280:419::-;49446:4;49484:2;49473:9;49469:18;49461:26;;49533:9;49527:4;49523:20;49519:1;49508:9;49504:17;49497:47;49561:131;49687:4;49561:131;:::i;:::-;49553:139;;49280:419;;;:::o;49705:233::-;49744:3;49767:24;49785:5;49767:24;:::i;:::-;49758:33;;49813:66;49806:5;49803:77;49800:103;;49883:18;;:::i;:::-;49800:103;49930:1;49923:5;49919:13;49912:20;;49705:233;;;:::o;49944:180::-;49992:77;49989:1;49982:88;50089:4;50086:1;50079:15;50113:4;50110:1;50103:15;50130:185;50170:1;50187:20;50205:1;50187:20;:::i;:::-;50182:25;;50221:20;50239:1;50221:20;:::i;:::-;50216:25;;50260:1;50250:35;;50265:18;;:::i;:::-;50250:35;50307:1;50304;50300:9;50295:14;;50130:185;;;;:::o;50321:176::-;50353:1;50370:20;50388:1;50370:20;:::i;:::-;50365:25;;50404:20;50422:1;50404:20;:::i;:::-;50399:25;;50443:1;50433:35;;50448:18;;:::i;:::-;50433:35;50489:1;50486;50482:9;50477:14;;50321:176;;;;:::o;50503:98::-;50554:6;50588:5;50582:12;50572:22;;50503:98;;;:::o;50607:168::-;50690:11;50724:6;50719:3;50712:19;50764:4;50759:3;50755:14;50740:29;;50607:168;;;;:::o;50781:373::-;50867:3;50895:38;50927:5;50895:38;:::i;:::-;50949:70;51012:6;51007:3;50949:70;:::i;:::-;50942:77;;51028:65;51086:6;51081:3;51074:4;51067:5;51063:16;51028:65;:::i;:::-;51118:29;51140:6;51118:29;:::i;:::-;51113:3;51109:39;51102:46;;50871:283;50781:373;;;;:::o;51160:640::-;51355:4;51393:3;51382:9;51378:19;51370:27;;51407:71;51475:1;51464:9;51460:17;51451:6;51407:71;:::i;:::-;51488:72;51556:2;51545:9;51541:18;51532:6;51488:72;:::i;:::-;51570;51638:2;51627:9;51623:18;51614:6;51570:72;:::i;:::-;51689:9;51683:4;51679:20;51674:2;51663:9;51659:18;51652:48;51717:76;51788:4;51779:6;51717:76;:::i;:::-;51709:84;;51160:640;;;;;;;:::o;51806:141::-;51862:5;51893:6;51887:13;51878:22;;51909:32;51935:5;51909:32;:::i;:::-;51806:141;;;;:::o;51953:349::-;52022:6;52071:2;52059:9;52050:7;52046:23;52042:32;52039:119;;;52077:79;;:::i;:::-;52039:119;52197:1;52222:63;52277:7;52268:6;52257:9;52253:22;52222:63;:::i;:::-;52212:73;;52168:127;51953:349;;;;:::o;52308:182::-;52448:34;52444:1;52436:6;52432:14;52425:58;52308:182;:::o;52496:366::-;52638:3;52659:67;52723:2;52718:3;52659:67;:::i;:::-;52652:74;;52735:93;52824:3;52735:93;:::i;:::-;52853:2;52848:3;52844:12;52837:19;;52496:366;;;:::o;52868:419::-;53034:4;53072:2;53061:9;53057:18;53049:26;;53121:9;53115:4;53111:20;53107:1;53096:9;53092:17;53085:47;53149:131;53275:4;53149:131;:::i;:::-;53141:139;;52868:419;;;:::o;53293:178::-;53433:30;53429:1;53421:6;53417:14;53410:54;53293:178;:::o;53477:366::-;53619:3;53640:67;53704:2;53699:3;53640:67;:::i;:::-;53633:74;;53716:93;53805:3;53716:93;:::i;:::-;53834:2;53829:3;53825:12;53818:19;;53477:366;;;:::o;53849:419::-;54015:4;54053:2;54042:9;54038:18;54030:26;;54102:9;54096:4;54092:20;54088:1;54077:9;54073:17;54066:47;54130:131;54256:4;54130:131;:::i;:::-;54122:139;;53849:419;;;:::o
Swarm Source
ipfs://84584bb4ad7f4c7f7cb68a89e4ef63893e8b16a0f0eb4a75bfb10856144e274e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.