ERC-721
Source Code
Overview
Max Total Supply
250 BZB
Holders
17
Transfers
-
0
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
BreezyBots
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-06-23
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev 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 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 the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: contracts/BreezyBots.sol
/**
................................................................................................................................................................................................
................................................................................................................................................................................................
................................................................................................................................................................................................
......................'MMM$F1~....................................................................................................................................;+I#@MM]......................
.......................EMMMMMMMMMMMMMMMWF`.............................................................................................................]EMMMMMMMMMMMMMMMM~......................
.......................1MMMMMMMMMMMMMMMMl..]FFF&~...............................................................................................I&FFY,.~MMMMMMMMMMMMMMMMR.......................
........................XMMMMMMMMMMMMMMM,."IIX&'..........1#I}>:.................................................................!1*RX...........I&IY}..&MMMMMMMMMMMMMM@........................
.........................NMMMMMMMMMMMMMM!.~IIYKi..........]KII*:.*MMM%&]!`.............................................'1XEMMMN../YIX&`.........`FFIY/..EMMMMMMMMMMMMMM"........................
..........................IMMMMMMMMMMMMMN..!YIYXR/:....,*KYYII,.~MMMMMMMMMMMW......................................]MMMMMMMMMMMI..}YIY&&!.....!&&YIY1..YMMMMMMMMMMMMMN..........................
...........................>MMMMMMMMMMMMM%..`*YIYYFKKKKFYYIX}..'MMMMMMMMMMM>.........................................%MMMMMMMMMMI.."XIIYX&KKK&XYIIY"..IMMMMMMMMMMMMM&...........................
..............................#MMMMMMMMMMMMM1...~/*III*]+;...XMMMMMMMMM$'...............................................YMMMMMMMMM%,..:>}*III*}":..;NMMMMMMMMMMMMM!.............................
................................+NMMMMMMMMMMMM%],........~YMMMMMMMMMR~....................................................:IMMMMMMMMMRi.........iRMMMMMMMMMMMMMY................................
......................................;]KWMMMMMMMMMMMMMMMMMWF1'..................................................................`iYE@MMMMMMMMMMMMMMMMN#I"......................................
................................................................................................................................................................................................
................................................................................................................................................................................................
................................................................................................................................................................................................
*/
pragma solidity >=0.7.0 <0.9.0;
contract BreezyBots is ERC721, Ownable {
using Strings for uint256;
using Counters for Counters.Counter;
Counters.Counter private supply;
string public uriPrefix = "ipfs://QmSo1VWAhM1WaEMHzznfGhi2Sgk7fW2WC9emqbCuxmTwtH/";
string public uriSuffix = ".json";
uint256 public cost = 0.09 ether;
uint256 public maxSupply = 3999;
uint256 public maxMintAmountPerTx = 20;
bool public paused = false;
constructor() ERC721("Breezy Bots", "BZB") {}
modifier mintCompliance(uint256 _mintAmount) {
require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
_;
}
function totalSupply() public view returns (uint256) {
return supply.current();
}
function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
require(!paused, "The contract is paused!");
require(tx.origin == msg.sender, "Please be yourself.");
require(msg.value >= cost * _mintAmount, "Insufficient funds!");
_mintLoop(msg.sender, _mintAmount);
}
function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
_mintLoop(_receiver, _mintAmount);
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
uint256 currentTokenId = 1;
uint256 ownedTokenIndex = 0;
while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
address currentTokenOwner = ownerOf(currentTokenId);
if (currentTokenOwner == _owner) {
ownedTokenIds[ownedTokenIndex] = currentTokenId;
ownedTokenIndex++;
}
currentTokenId++;
}
return ownedTokenIds;
}
function tokenURI(uint256 _tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(_tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
: "";
}
function setCost(uint256 _cost) public onlyOwner {
cost = _cost;
}
function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
maxMintAmountPerTx = _maxMintAmountPerTx;
}
function setUriPrefix(string memory _uriPrefix) public onlyOwner {
uriPrefix = _uriPrefix;
}
function setUriSuffix(string memory _uriSuffix) public onlyOwner {
uriSuffix = _uriSuffix;
}
function setPaused(bool _state) public onlyOwner {
paused = _state;
}
function withdraw() public onlyOwner {
// =============================================================================
(bool hs, ) = payable(0x943590A42C27D08e3744202c4Ae5eD55c2dE240D).call{value: address(this).balance * 2 / 100}("");
require(hs);
// =============================================================================
// This will transfer the remaining contract balance to the owner.
// Do not remove this otherwise you will not be able to withdraw the funds.
// =============================================================================
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
// =============================================================================
}
function _mintLoop(address _receiver, uint256 _mintAmount) internal {
for (uint256 i = 0; i < _mintAmount; i++) {
supply.increment();
_safeMint(_receiver, supply.current());
}
}
function _baseURI() internal view virtual override returns (string memory) {
return uriPrefix;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052604051806060016040528060368152602001620043a260369139600890805190602001906200003592919062000258565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200008392919062000258565b5067013fbe85edc90000600a55610f9f600b556014600c556000600d60006101000a81548160ff021916908315150217905550348015620000c357600080fd5b506040518060400160405280600b81526020017f427265657a7920426f74730000000000000000000000000000000000000000008152506040518060400160405280600381526020017f425a42000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014892919062000258565b5080600190805190602001906200016192919062000258565b50505062000184620001786200018a60201b60201c565b6200019260201b60201c565b6200036d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002669062000308565b90600052602060002090601f0160209004810192826200028a5760008555620002d6565b82601f10620002a557805160ff1916838001178555620002d6565b82800160010185558215620002d6579182015b82811115620002d5578251825591602001919060010190620002b8565b5b509050620002e59190620002e9565b5090565b5b8082111562000304576000816000905550600101620002ea565b5090565b600060028204905060018216806200032157607f821691505b602082108114156200033857620003376200033e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614025806200037d6000396000f3fe6080604052600436106101e35760003560e01c80636352211e11610102578063a22cb46511610095578063d5abeb0111610064578063d5abeb01146106bd578063e985e9c5146106e8578063efbd73f414610725578063f2fde38b1461074e576101e3565b8063a22cb46514610605578063b071401b1461062e578063b88d4fde14610657578063c87b56dd14610680576101e3565b80638da5cb5b116100d15780638da5cb5b1461056857806394354fd01461059357806395d89b41146105be578063a0712d68146105e9576101e3565b80636352211e146104ae57806370a08231146104eb578063715018a6146105285780637ec4a6591461053f576101e3565b806323b872dd1161017a57806344a0d68a1161014957806344a0d68a146104045780635503a0e81461042d5780635c975abb1461045857806362b99ad414610483576101e3565b806323b872dd1461035e5780633ccfd60b1461038757806342842e0e1461039e578063438b6300146103c7576101e3565b806313faede6116101b657806313faede6146102b657806316ba10e0146102e157806316c38b3c1461030a57806318160ddd14610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612be3565b610777565b60405161021c9190613298565b60405180910390f35b34801561023157600080fd5b5061023a610859565b60405161024791906132b3565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612c86565b6108eb565b604051610284919061320f565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612b76565b610970565b005b3480156102c257600080fd5b506102cb610a88565b6040516102d89190613575565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612c3d565b610a8e565b005b34801561031657600080fd5b50610331600480360381019061032c9190612bb6565b610b24565b005b34801561033f57600080fd5b50610348610bbd565b6040516103559190613575565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612a60565b610bce565b005b34801561039357600080fd5b5061039c610c2e565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612a60565b610dcd565b005b3480156103d357600080fd5b506103ee60048036038101906103e991906129f3565b610ded565b6040516103fb9190613276565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612c86565b610ef8565b005b34801561043957600080fd5b50610442610f7e565b60405161044f91906132b3565b60405180910390f35b34801561046457600080fd5b5061046d61100c565b60405161047a9190613298565b60405180910390f35b34801561048f57600080fd5b5061049861101f565b6040516104a591906132b3565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612c86565b6110ad565b6040516104e2919061320f565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906129f3565b61115f565b60405161051f9190613575565b60405180910390f35b34801561053457600080fd5b5061053d611217565b005b34801561054b57600080fd5b5061056660048036038101906105619190612c3d565b61129f565b005b34801561057457600080fd5b5061057d611335565b60405161058a919061320f565b60405180910390f35b34801561059f57600080fd5b506105a861135f565b6040516105b59190613575565b60405180910390f35b3480156105ca57600080fd5b506105d3611365565b6040516105e091906132b3565b60405180910390f35b61060360048036038101906105fe9190612c86565b6113f7565b005b34801561061157600080fd5b5061062c60048036038101906106279190612b36565b6115be565b005b34801561063a57600080fd5b5061065560048036038101906106509190612c86565b6115d4565b005b34801561066357600080fd5b5061067e60048036038101906106799190612ab3565b61165a565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612c86565b6116bc565b6040516106b491906132b3565b60405180910390f35b3480156106c957600080fd5b506106d2611766565b6040516106df9190613575565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190612a20565b61176c565b60405161071c9190613298565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612cb3565b611800565b005b34801561075a57600080fd5b50610775600480360381019061077091906129f3565b611936565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610852575061085182611a2e565b5b9050919050565b6060600080546108689061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546108949061387e565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611a98565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90613475565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b826110ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906134f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611b04565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611b04565b61176c565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a70906133f5565b60405180910390fd5b610a838383611b0c565b505050565b600a5481565b610a96611b04565b73ffffffffffffffffffffffffffffffffffffffff16610ab4611335565b73ffffffffffffffffffffffffffffffffffffffff1614610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190613495565b60405180910390fd5b8060099080519060200190610b20929190612807565b5050565b610b2c611b04565b73ffffffffffffffffffffffffffffffffffffffff16610b4a611335565b73ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613495565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610bc96007611bc5565b905090565b610bdf610bd9611b04565b82611bd3565b610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613535565b60405180910390fd5b610c29838383611cb1565b505050565b610c36611b04565b73ffffffffffffffffffffffffffffffffffffffff16610c54611335565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613495565b60405180910390fd5b600073943590a42c27d08e3744202c4ae5ed55c2de240d73ffffffffffffffffffffffffffffffffffffffff166064600247610ce6919061373a565b610cf09190613709565b604051610cfc906131fa565b60006040518083038185875af1925050503d8060008114610d39576040519150601f19603f3d011682016040523d82523d6000602084013e610d3e565b606091505b5050905080610d4c57600080fd5b6000610d56611335565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d79906131fa565b60006040518083038185875af1925050503d8060008114610db6576040519150601f19603f3d011682016040523d82523d6000602084013e610dbb565b606091505b5050905080610dc957600080fd5b5050565b610de88383836040518060200160405280600081525061165a565b505050565b60606000610dfa8361115f565b905060008167ffffffffffffffff811115610e1857610e17613a17565b5b604051908082528060200260200182016040528015610e465781602001602082028036833780820191505090505b50905060006001905060005b8381108015610e635750600b548211155b15610eec576000610e73836110ad565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed85782848381518110610ebd57610ebc6139e8565b5b6020026020010181815250508180610ed4906138e1565b9250505b8280610ee3906138e1565b93505050610e52565b82945050505050919050565b610f00611b04565b73ffffffffffffffffffffffffffffffffffffffff16610f1e611335565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90613495565b60405180910390fd5b80600a8190555050565b60098054610f8b9061387e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb79061387e565b80156110045780601f10610fd957610100808354040283529160200191611004565b820191906000526020600020905b815481529060010190602001808311610fe757829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b6008805461102c9061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546110589061387e565b80156110a55780601f1061107a576101008083540402835291602001916110a5565b820191906000526020600020905b81548152906001019060200180831161108857829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90613435565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613415565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611b04565b73ffffffffffffffffffffffffffffffffffffffff1661123d611335565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613495565b60405180910390fd5b61129d6000611f18565b565b6112a7611b04565b73ffffffffffffffffffffffffffffffffffffffff166112c5611335565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613495565b60405180910390fd5b8060089080519060200190611331929190612807565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b6060600180546113749061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546113a09061387e565b80156113ed5780601f106113c2576101008083540402835291602001916113ed565b820191906000526020600020905b8154815290600101906020018083116113d057829003601f168201915b5050505050905090565b8060008111801561140a5750600c548111155b611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613375565b60405180910390fd5b600b54816114576007611bc5565b61146191906136b3565b11156114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613515565b60405180910390fd5b600d60009054906101000a900460ff16156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906134b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906132d5565b60405180910390fd5b81600a5461156e919061373a565b3410156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613555565b60405180910390fd5b6115ba3383611fde565b5050565b6115d06115c9611b04565b838361201e565b5050565b6115dc611b04565b73ffffffffffffffffffffffffffffffffffffffff166115fa611335565b73ffffffffffffffffffffffffffffffffffffffff1614611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790613495565b60405180910390fd5b80600c8190555050565b61166b611665611b04565b83611bd3565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613535565b60405180910390fd5b6116b68484848461218b565b50505050565b60606116c782611a98565b611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd906134d5565b60405180910390fd5b60006117106121e7565b90506000815111611730576040518060200160405280600081525061175e565b8061173a84612279565b600960405160200161174e939291906131c9565b6040516020818303038152906040525b915050919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156118135750600c548111155b611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613375565b60405180910390fd5b600b54816118606007611bc5565b61186a91906136b3565b11156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613515565b60405180910390fd5b6118b3611b04565b73ffffffffffffffffffffffffffffffffffffffff166118d1611335565b73ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90613495565b60405180910390fd5b6119318284611fde565b505050565b61193e611b04565b73ffffffffffffffffffffffffffffffffffffffff1661195c611335565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613495565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613315565b60405180910390fd5b611a2b81611f18565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b7f836110ad565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611bde82611a98565b611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c14906133d5565b60405180910390fd5b6000611c28836110ad565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6a5750611c69818561176c565b5b80611ca857508373ffffffffffffffffffffffffffffffffffffffff16611c90846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd1826110ad565b73ffffffffffffffffffffffffffffffffffffffff1614611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90613335565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613395565b60405180910390fd5b611da28383836123da565b611dad600082611b0c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfd9190613794565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5491906136b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f138383836123df565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561201957611ff360076123e4565b612006836120016007611bc5565b6123fa565b8080612011906138e1565b915050611fe1565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906133b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161217e9190613298565b60405180910390a3505050565b612196848484611cb1565b6121a284848484612418565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906132f5565b60405180910390fd5b50505050565b6060600880546121f69061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546122229061387e565b801561226f5780601f106122445761010080835404028352916020019161226f565b820191906000526020600020905b81548152906001019060200180831161225257829003601f168201915b5050505050905090565b606060008214156122c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123d5565b600082905060005b600082146122f35780806122dc906138e1565b915050600a826122ec9190613709565b91506122c9565b60008167ffffffffffffffff81111561230f5761230e613a17565b5b6040519080825280601f01601f1916602001820160405280156123415781602001600182028036833780820191505090505b5090505b600085146123ce5760018261235a9190613794565b9150600a85612369919061392a565b603061237591906136b3565b60f81b81838151811061238b5761238a6139e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123c79190613709565b9450612345565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b6124148282604051806020016040528060008152506125af565b5050565b60006124398473ffffffffffffffffffffffffffffffffffffffff1661260a565b156125a2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612462611b04565b8786866040518563ffffffff1660e01b8152600401612484949392919061322a565b602060405180830381600087803b15801561249e57600080fd5b505af19250505080156124cf57506040513d601f19601f820116820180604052508101906124cc9190612c10565b60015b612552573d80600081146124ff576040519150601f19603f3d011682016040523d82523d6000602084013e612504565b606091505b5060008151141561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906132f5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125a7565b600190505b949350505050565b6125b9838361262d565b6125c66000848484612418565b612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906132f5565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269490613455565b60405180910390fd5b6126a681611a98565b156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613355565b60405180910390fd5b6126f2600083836123da565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274291906136b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612803600083836123df565b5050565b8280546128139061387e565b90600052602060002090601f016020900481019282612835576000855561287c565b82601f1061284e57805160ff191683800117855561287c565b8280016001018555821561287c579182015b8281111561287b578251825591602001919060010190612860565b5b509050612889919061288d565b5090565b5b808211156128a657600081600090555060010161288e565b5090565b60006128bd6128b8846135b5565b613590565b9050828152602081018484840111156128d9576128d8613a4b565b5b6128e484828561383c565b509392505050565b60006128ff6128fa846135e6565b613590565b90508281526020810184848401111561291b5761291a613a4b565b5b61292684828561383c565b509392505050565b60008135905061293d81613f93565b92915050565b60008135905061295281613faa565b92915050565b60008135905061296781613fc1565b92915050565b60008151905061297c81613fc1565b92915050565b600082601f83011261299757612996613a46565b5b81356129a78482602086016128aa565b91505092915050565b600082601f8301126129c5576129c4613a46565b5b81356129d58482602086016128ec565b91505092915050565b6000813590506129ed81613fd8565b92915050565b600060208284031215612a0957612a08613a55565b5b6000612a178482850161292e565b91505092915050565b60008060408385031215612a3757612a36613a55565b5b6000612a458582860161292e565b9250506020612a568582860161292e565b9150509250929050565b600080600060608486031215612a7957612a78613a55565b5b6000612a878682870161292e565b9350506020612a988682870161292e565b9250506040612aa9868287016129de565b9150509250925092565b60008060008060808587031215612acd57612acc613a55565b5b6000612adb8782880161292e565b9450506020612aec8782880161292e565b9350506040612afd878288016129de565b925050606085013567ffffffffffffffff811115612b1e57612b1d613a50565b5b612b2a87828801612982565b91505092959194509250565b60008060408385031215612b4d57612b4c613a55565b5b6000612b5b8582860161292e565b9250506020612b6c85828601612943565b9150509250929050565b60008060408385031215612b8d57612b8c613a55565b5b6000612b9b8582860161292e565b9250506020612bac858286016129de565b9150509250929050565b600060208284031215612bcc57612bcb613a55565b5b6000612bda84828501612943565b91505092915050565b600060208284031215612bf957612bf8613a55565b5b6000612c0784828501612958565b91505092915050565b600060208284031215612c2657612c25613a55565b5b6000612c348482850161296d565b91505092915050565b600060208284031215612c5357612c52613a55565b5b600082013567ffffffffffffffff811115612c7157612c70613a50565b5b612c7d848285016129b0565b91505092915050565b600060208284031215612c9c57612c9b613a55565b5b6000612caa848285016129de565b91505092915050565b60008060408385031215612cca57612cc9613a55565b5b6000612cd8858286016129de565b9250506020612ce98582860161292e565b9150509250929050565b6000612cff83836131ab565b60208301905092915050565b612d14816137c8565b82525050565b6000612d258261363c565b612d2f818561366a565b9350612d3a83613617565b8060005b83811015612d6b578151612d528882612cf3565b9750612d5d8361365d565b925050600181019050612d3e565b5085935050505092915050565b612d81816137da565b82525050565b6000612d9282613647565b612d9c818561367b565b9350612dac81856020860161384b565b612db581613a5a565b840191505092915050565b6000612dcb82613652565b612dd58185613697565b9350612de581856020860161384b565b612dee81613a5a565b840191505092915050565b6000612e0482613652565b612e0e81856136a8565b9350612e1e81856020860161384b565b80840191505092915050565b60008154612e378161387e565b612e4181866136a8565b94506001821660008114612e5c5760018114612e6d57612ea0565b60ff19831686528186019350612ea0565b612e7685613627565b60005b83811015612e9857815481890152600182019150602081019050612e79565b838801955050505b50505092915050565b6000612eb6601383613697565b9150612ec182613a6b565b602082019050919050565b6000612ed9603283613697565b9150612ee482613a94565b604082019050919050565b6000612efc602683613697565b9150612f0782613ae3565b604082019050919050565b6000612f1f602583613697565b9150612f2a82613b32565b604082019050919050565b6000612f42601c83613697565b9150612f4d82613b81565b602082019050919050565b6000612f65601483613697565b9150612f7082613baa565b602082019050919050565b6000612f88602483613697565b9150612f9382613bd3565b604082019050919050565b6000612fab601983613697565b9150612fb682613c22565b602082019050919050565b6000612fce602c83613697565b9150612fd982613c4b565b604082019050919050565b6000612ff1603883613697565b9150612ffc82613c9a565b604082019050919050565b6000613014602a83613697565b915061301f82613ce9565b604082019050919050565b6000613037602983613697565b915061304282613d38565b604082019050919050565b600061305a602083613697565b915061306582613d87565b602082019050919050565b600061307d602c83613697565b915061308882613db0565b604082019050919050565b60006130a0602083613697565b91506130ab82613dff565b602082019050919050565b60006130c3601783613697565b91506130ce82613e28565b602082019050919050565b60006130e6602f83613697565b91506130f182613e51565b604082019050919050565b6000613109602183613697565b915061311482613ea0565b604082019050919050565b600061312c60008361368c565b915061313782613eef565b600082019050919050565b600061314f601483613697565b915061315a82613ef2565b602082019050919050565b6000613172603183613697565b915061317d82613f1b565b604082019050919050565b6000613195601383613697565b91506131a082613f6a565b602082019050919050565b6131b481613832565b82525050565b6131c381613832565b82525050565b60006131d58286612df9565b91506131e18285612df9565b91506131ed8284612e2a565b9150819050949350505050565b60006132058261311f565b9150819050919050565b60006020820190506132246000830184612d0b565b92915050565b600060808201905061323f6000830187612d0b565b61324c6020830186612d0b565b61325960408301856131ba565b818103606083015261326b8184612d87565b905095945050505050565b600060208201905081810360008301526132908184612d1a565b905092915050565b60006020820190506132ad6000830184612d78565b92915050565b600060208201905081810360008301526132cd8184612dc0565b905092915050565b600060208201905081810360008301526132ee81612ea9565b9050919050565b6000602082019050818103600083015261330e81612ecc565b9050919050565b6000602082019050818103600083015261332e81612eef565b9050919050565b6000602082019050818103600083015261334e81612f12565b9050919050565b6000602082019050818103600083015261336e81612f35565b9050919050565b6000602082019050818103600083015261338e81612f58565b9050919050565b600060208201905081810360008301526133ae81612f7b565b9050919050565b600060208201905081810360008301526133ce81612f9e565b9050919050565b600060208201905081810360008301526133ee81612fc1565b9050919050565b6000602082019050818103600083015261340e81612fe4565b9050919050565b6000602082019050818103600083015261342e81613007565b9050919050565b6000602082019050818103600083015261344e8161302a565b9050919050565b6000602082019050818103600083015261346e8161304d565b9050919050565b6000602082019050818103600083015261348e81613070565b9050919050565b600060208201905081810360008301526134ae81613093565b9050919050565b600060208201905081810360008301526134ce816130b6565b9050919050565b600060208201905081810360008301526134ee816130d9565b9050919050565b6000602082019050818103600083015261350e816130fc565b9050919050565b6000602082019050818103600083015261352e81613142565b9050919050565b6000602082019050818103600083015261354e81613165565b9050919050565b6000602082019050818103600083015261356e81613188565b9050919050565b600060208201905061358a60008301846131ba565b92915050565b600061359a6135ab565b90506135a682826138b0565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d0576135cf613a17565b5b6135d982613a5a565b9050602081019050919050565b600067ffffffffffffffff82111561360157613600613a17565b5b61360a82613a5a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136be82613832565b91506136c983613832565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fe576136fd61395b565b5b828201905092915050565b600061371482613832565b915061371f83613832565b92508261372f5761372e61398a565b5b828204905092915050565b600061374582613832565b915061375083613832565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137895761378861395b565b5b828202905092915050565b600061379f82613832565b91506137aa83613832565b9250828210156137bd576137bc61395b565b5b828203905092915050565b60006137d382613812565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386957808201518184015260208101905061384e565b83811115613878576000848401525b50505050565b6000600282049050600182168061389657607f821691505b602082108114156138aa576138a96139b9565b5b50919050565b6138b982613a5a565b810181811067ffffffffffffffff821117156138d8576138d7613a17565b5b80604052505050565b60006138ec82613832565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391f5761391e61395b565b5b600182019050919050565b600061393582613832565b915061394083613832565b9250826139505761394f61398a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f506c6561736520626520796f757273656c662e00000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f9c816137c8565b8114613fa757600080fd5b50565b613fb3816137da565b8114613fbe57600080fd5b50565b613fca816137e6565b8114613fd557600080fd5b50565b613fe181613832565b8114613fec57600080fd5b5056fea2646970667358221220bb498ec7cff0029dd895d088cdb0bf826074a7174d6c4a8a45463374935c327864736f6c63430008070033697066733a2f2f516d536f31565741684d315761454d487a7a6e664768693253676b37665732574339656d71624375786d547774482f
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636352211e11610102578063a22cb46511610095578063d5abeb0111610064578063d5abeb01146106bd578063e985e9c5146106e8578063efbd73f414610725578063f2fde38b1461074e576101e3565b8063a22cb46514610605578063b071401b1461062e578063b88d4fde14610657578063c87b56dd14610680576101e3565b80638da5cb5b116100d15780638da5cb5b1461056857806394354fd01461059357806395d89b41146105be578063a0712d68146105e9576101e3565b80636352211e146104ae57806370a08231146104eb578063715018a6146105285780637ec4a6591461053f576101e3565b806323b872dd1161017a57806344a0d68a1161014957806344a0d68a146104045780635503a0e81461042d5780635c975abb1461045857806362b99ad414610483576101e3565b806323b872dd1461035e5780633ccfd60b1461038757806342842e0e1461039e578063438b6300146103c7576101e3565b806313faede6116101b657806313faede6146102b657806316ba10e0146102e157806316c38b3c1461030a57806318160ddd14610333576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612be3565b610777565b60405161021c9190613298565b60405180910390f35b34801561023157600080fd5b5061023a610859565b60405161024791906132b3565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612c86565b6108eb565b604051610284919061320f565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612b76565b610970565b005b3480156102c257600080fd5b506102cb610a88565b6040516102d89190613575565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612c3d565b610a8e565b005b34801561031657600080fd5b50610331600480360381019061032c9190612bb6565b610b24565b005b34801561033f57600080fd5b50610348610bbd565b6040516103559190613575565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190612a60565b610bce565b005b34801561039357600080fd5b5061039c610c2e565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612a60565b610dcd565b005b3480156103d357600080fd5b506103ee60048036038101906103e991906129f3565b610ded565b6040516103fb9190613276565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612c86565b610ef8565b005b34801561043957600080fd5b50610442610f7e565b60405161044f91906132b3565b60405180910390f35b34801561046457600080fd5b5061046d61100c565b60405161047a9190613298565b60405180910390f35b34801561048f57600080fd5b5061049861101f565b6040516104a591906132b3565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190612c86565b6110ad565b6040516104e2919061320f565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906129f3565b61115f565b60405161051f9190613575565b60405180910390f35b34801561053457600080fd5b5061053d611217565b005b34801561054b57600080fd5b5061056660048036038101906105619190612c3d565b61129f565b005b34801561057457600080fd5b5061057d611335565b60405161058a919061320f565b60405180910390f35b34801561059f57600080fd5b506105a861135f565b6040516105b59190613575565b60405180910390f35b3480156105ca57600080fd5b506105d3611365565b6040516105e091906132b3565b60405180910390f35b61060360048036038101906105fe9190612c86565b6113f7565b005b34801561061157600080fd5b5061062c60048036038101906106279190612b36565b6115be565b005b34801561063a57600080fd5b5061065560048036038101906106509190612c86565b6115d4565b005b34801561066357600080fd5b5061067e60048036038101906106799190612ab3565b61165a565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612c86565b6116bc565b6040516106b491906132b3565b60405180910390f35b3480156106c957600080fd5b506106d2611766565b6040516106df9190613575565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190612a20565b61176c565b60405161071c9190613298565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612cb3565b611800565b005b34801561075a57600080fd5b50610775600480360381019061077091906129f3565b611936565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610852575061085182611a2e565b5b9050919050565b6060600080546108689061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546108949061387e565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611a98565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90613475565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b826110ad565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906134f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611b04565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611b04565b61176c565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a70906133f5565b60405180910390fd5b610a838383611b0c565b505050565b600a5481565b610a96611b04565b73ffffffffffffffffffffffffffffffffffffffff16610ab4611335565b73ffffffffffffffffffffffffffffffffffffffff1614610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190613495565b60405180910390fd5b8060099080519060200190610b20929190612807565b5050565b610b2c611b04565b73ffffffffffffffffffffffffffffffffffffffff16610b4a611335565b73ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613495565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610bc96007611bc5565b905090565b610bdf610bd9611b04565b82611bd3565b610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613535565b60405180910390fd5b610c29838383611cb1565b505050565b610c36611b04565b73ffffffffffffffffffffffffffffffffffffffff16610c54611335565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190613495565b60405180910390fd5b600073943590a42c27d08e3744202c4ae5ed55c2de240d73ffffffffffffffffffffffffffffffffffffffff166064600247610ce6919061373a565b610cf09190613709565b604051610cfc906131fa565b60006040518083038185875af1925050503d8060008114610d39576040519150601f19603f3d011682016040523d82523d6000602084013e610d3e565b606091505b5050905080610d4c57600080fd5b6000610d56611335565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d79906131fa565b60006040518083038185875af1925050503d8060008114610db6576040519150601f19603f3d011682016040523d82523d6000602084013e610dbb565b606091505b5050905080610dc957600080fd5b5050565b610de88383836040518060200160405280600081525061165a565b505050565b60606000610dfa8361115f565b905060008167ffffffffffffffff811115610e1857610e17613a17565b5b604051908082528060200260200182016040528015610e465781602001602082028036833780820191505090505b50905060006001905060005b8381108015610e635750600b548211155b15610eec576000610e73836110ad565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed85782848381518110610ebd57610ebc6139e8565b5b6020026020010181815250508180610ed4906138e1565b9250505b8280610ee3906138e1565b93505050610e52565b82945050505050919050565b610f00611b04565b73ffffffffffffffffffffffffffffffffffffffff16610f1e611335565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90613495565b60405180910390fd5b80600a8190555050565b60098054610f8b9061387e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb79061387e565b80156110045780601f10610fd957610100808354040283529160200191611004565b820191906000526020600020905b815481529060010190602001808311610fe757829003601f168201915b505050505081565b600d60009054906101000a900460ff1681565b6008805461102c9061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546110589061387e565b80156110a55780601f1061107a576101008083540402835291602001916110a5565b820191906000526020600020905b81548152906001019060200180831161108857829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90613435565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c790613415565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61121f611b04565b73ffffffffffffffffffffffffffffffffffffffff1661123d611335565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90613495565b60405180910390fd5b61129d6000611f18565b565b6112a7611b04565b73ffffffffffffffffffffffffffffffffffffffff166112c5611335565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613495565b60405180910390fd5b8060089080519060200190611331929190612807565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b6060600180546113749061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546113a09061387e565b80156113ed5780601f106113c2576101008083540402835291602001916113ed565b820191906000526020600020905b8154815290600101906020018083116113d057829003601f168201915b5050505050905090565b8060008111801561140a5750600c548111155b611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613375565b60405180910390fd5b600b54816114576007611bc5565b61146191906136b3565b11156114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613515565b60405180910390fd5b600d60009054906101000a900460ff16156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e9906134b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906132d5565b60405180910390fd5b81600a5461156e919061373a565b3410156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613555565b60405180910390fd5b6115ba3383611fde565b5050565b6115d06115c9611b04565b838361201e565b5050565b6115dc611b04565b73ffffffffffffffffffffffffffffffffffffffff166115fa611335565b73ffffffffffffffffffffffffffffffffffffffff1614611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790613495565b60405180910390fd5b80600c8190555050565b61166b611665611b04565b83611bd3565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613535565b60405180910390fd5b6116b68484848461218b565b50505050565b60606116c782611a98565b611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd906134d5565b60405180910390fd5b60006117106121e7565b90506000815111611730576040518060200160405280600081525061175e565b8061173a84612279565b600960405160200161174e939291906131c9565b6040516020818303038152906040525b915050919050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156118135750600c548111155b611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613375565b60405180910390fd5b600b54816118606007611bc5565b61186a91906136b3565b11156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290613515565b60405180910390fd5b6118b3611b04565b73ffffffffffffffffffffffffffffffffffffffff166118d1611335565b73ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90613495565b60405180910390fd5b6119318284611fde565b505050565b61193e611b04565b73ffffffffffffffffffffffffffffffffffffffff1661195c611335565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613495565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613315565b60405180910390fd5b611a2b81611f18565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b7f836110ad565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611bde82611a98565b611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c14906133d5565b60405180910390fd5b6000611c28836110ad565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6a5750611c69818561176c565b5b80611ca857508373ffffffffffffffffffffffffffffffffffffffff16611c90846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd1826110ad565b73ffffffffffffffffffffffffffffffffffffffff1614611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90613335565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613395565b60405180910390fd5b611da28383836123da565b611dad600082611b0c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfd9190613794565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5491906136b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f138383836123df565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561201957611ff360076123e4565b612006836120016007611bc5565b6123fa565b8080612011906138e1565b915050611fe1565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612084906133b5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161217e9190613298565b60405180910390a3505050565b612196848484611cb1565b6121a284848484612418565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906132f5565b60405180910390fd5b50505050565b6060600880546121f69061387e565b80601f01602080910402602001604051908101604052809291908181526020018280546122229061387e565b801561226f5780601f106122445761010080835404028352916020019161226f565b820191906000526020600020905b81548152906001019060200180831161225257829003601f168201915b5050505050905090565b606060008214156122c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123d5565b600082905060005b600082146122f35780806122dc906138e1565b915050600a826122ec9190613709565b91506122c9565b60008167ffffffffffffffff81111561230f5761230e613a17565b5b6040519080825280601f01601f1916602001820160405280156123415781602001600182028036833780820191505090505b5090505b600085146123ce5760018261235a9190613794565b9150600a85612369919061392a565b603061237591906136b3565b60f81b81838151811061238b5761238a6139e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123c79190613709565b9450612345565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b6124148282604051806020016040528060008152506125af565b5050565b60006124398473ffffffffffffffffffffffffffffffffffffffff1661260a565b156125a2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612462611b04565b8786866040518563ffffffff1660e01b8152600401612484949392919061322a565b602060405180830381600087803b15801561249e57600080fd5b505af19250505080156124cf57506040513d601f19601f820116820180604052508101906124cc9190612c10565b60015b612552573d80600081146124ff576040519150601f19603f3d011682016040523d82523d6000602084013e612504565b606091505b5060008151141561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906132f5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125a7565b600190505b949350505050565b6125b9838361262d565b6125c66000848484612418565b612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906132f5565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269490613455565b60405180910390fd5b6126a681611a98565b156126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613355565b60405180910390fd5b6126f2600083836123da565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274291906136b3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612803600083836123df565b5050565b8280546128139061387e565b90600052602060002090601f016020900481019282612835576000855561287c565b82601f1061284e57805160ff191683800117855561287c565b8280016001018555821561287c579182015b8281111561287b578251825591602001919060010190612860565b5b509050612889919061288d565b5090565b5b808211156128a657600081600090555060010161288e565b5090565b60006128bd6128b8846135b5565b613590565b9050828152602081018484840111156128d9576128d8613a4b565b5b6128e484828561383c565b509392505050565b60006128ff6128fa846135e6565b613590565b90508281526020810184848401111561291b5761291a613a4b565b5b61292684828561383c565b509392505050565b60008135905061293d81613f93565b92915050565b60008135905061295281613faa565b92915050565b60008135905061296781613fc1565b92915050565b60008151905061297c81613fc1565b92915050565b600082601f83011261299757612996613a46565b5b81356129a78482602086016128aa565b91505092915050565b600082601f8301126129c5576129c4613a46565b5b81356129d58482602086016128ec565b91505092915050565b6000813590506129ed81613fd8565b92915050565b600060208284031215612a0957612a08613a55565b5b6000612a178482850161292e565b91505092915050565b60008060408385031215612a3757612a36613a55565b5b6000612a458582860161292e565b9250506020612a568582860161292e565b9150509250929050565b600080600060608486031215612a7957612a78613a55565b5b6000612a878682870161292e565b9350506020612a988682870161292e565b9250506040612aa9868287016129de565b9150509250925092565b60008060008060808587031215612acd57612acc613a55565b5b6000612adb8782880161292e565b9450506020612aec8782880161292e565b9350506040612afd878288016129de565b925050606085013567ffffffffffffffff811115612b1e57612b1d613a50565b5b612b2a87828801612982565b91505092959194509250565b60008060408385031215612b4d57612b4c613a55565b5b6000612b5b8582860161292e565b9250506020612b6c85828601612943565b9150509250929050565b60008060408385031215612b8d57612b8c613a55565b5b6000612b9b8582860161292e565b9250506020612bac858286016129de565b9150509250929050565b600060208284031215612bcc57612bcb613a55565b5b6000612bda84828501612943565b91505092915050565b600060208284031215612bf957612bf8613a55565b5b6000612c0784828501612958565b91505092915050565b600060208284031215612c2657612c25613a55565b5b6000612c348482850161296d565b91505092915050565b600060208284031215612c5357612c52613a55565b5b600082013567ffffffffffffffff811115612c7157612c70613a50565b5b612c7d848285016129b0565b91505092915050565b600060208284031215612c9c57612c9b613a55565b5b6000612caa848285016129de565b91505092915050565b60008060408385031215612cca57612cc9613a55565b5b6000612cd8858286016129de565b9250506020612ce98582860161292e565b9150509250929050565b6000612cff83836131ab565b60208301905092915050565b612d14816137c8565b82525050565b6000612d258261363c565b612d2f818561366a565b9350612d3a83613617565b8060005b83811015612d6b578151612d528882612cf3565b9750612d5d8361365d565b925050600181019050612d3e565b5085935050505092915050565b612d81816137da565b82525050565b6000612d9282613647565b612d9c818561367b565b9350612dac81856020860161384b565b612db581613a5a565b840191505092915050565b6000612dcb82613652565b612dd58185613697565b9350612de581856020860161384b565b612dee81613a5a565b840191505092915050565b6000612e0482613652565b612e0e81856136a8565b9350612e1e81856020860161384b565b80840191505092915050565b60008154612e378161387e565b612e4181866136a8565b94506001821660008114612e5c5760018114612e6d57612ea0565b60ff19831686528186019350612ea0565b612e7685613627565b60005b83811015612e9857815481890152600182019150602081019050612e79565b838801955050505b50505092915050565b6000612eb6601383613697565b9150612ec182613a6b565b602082019050919050565b6000612ed9603283613697565b9150612ee482613a94565b604082019050919050565b6000612efc602683613697565b9150612f0782613ae3565b604082019050919050565b6000612f1f602583613697565b9150612f2a82613b32565b604082019050919050565b6000612f42601c83613697565b9150612f4d82613b81565b602082019050919050565b6000612f65601483613697565b9150612f7082613baa565b602082019050919050565b6000612f88602483613697565b9150612f9382613bd3565b604082019050919050565b6000612fab601983613697565b9150612fb682613c22565b602082019050919050565b6000612fce602c83613697565b9150612fd982613c4b565b604082019050919050565b6000612ff1603883613697565b9150612ffc82613c9a565b604082019050919050565b6000613014602a83613697565b915061301f82613ce9565b604082019050919050565b6000613037602983613697565b915061304282613d38565b604082019050919050565b600061305a602083613697565b915061306582613d87565b602082019050919050565b600061307d602c83613697565b915061308882613db0565b604082019050919050565b60006130a0602083613697565b91506130ab82613dff565b602082019050919050565b60006130c3601783613697565b91506130ce82613e28565b602082019050919050565b60006130e6602f83613697565b91506130f182613e51565b604082019050919050565b6000613109602183613697565b915061311482613ea0565b604082019050919050565b600061312c60008361368c565b915061313782613eef565b600082019050919050565b600061314f601483613697565b915061315a82613ef2565b602082019050919050565b6000613172603183613697565b915061317d82613f1b565b604082019050919050565b6000613195601383613697565b91506131a082613f6a565b602082019050919050565b6131b481613832565b82525050565b6131c381613832565b82525050565b60006131d58286612df9565b91506131e18285612df9565b91506131ed8284612e2a565b9150819050949350505050565b60006132058261311f565b9150819050919050565b60006020820190506132246000830184612d0b565b92915050565b600060808201905061323f6000830187612d0b565b61324c6020830186612d0b565b61325960408301856131ba565b818103606083015261326b8184612d87565b905095945050505050565b600060208201905081810360008301526132908184612d1a565b905092915050565b60006020820190506132ad6000830184612d78565b92915050565b600060208201905081810360008301526132cd8184612dc0565b905092915050565b600060208201905081810360008301526132ee81612ea9565b9050919050565b6000602082019050818103600083015261330e81612ecc565b9050919050565b6000602082019050818103600083015261332e81612eef565b9050919050565b6000602082019050818103600083015261334e81612f12565b9050919050565b6000602082019050818103600083015261336e81612f35565b9050919050565b6000602082019050818103600083015261338e81612f58565b9050919050565b600060208201905081810360008301526133ae81612f7b565b9050919050565b600060208201905081810360008301526133ce81612f9e565b9050919050565b600060208201905081810360008301526133ee81612fc1565b9050919050565b6000602082019050818103600083015261340e81612fe4565b9050919050565b6000602082019050818103600083015261342e81613007565b9050919050565b6000602082019050818103600083015261344e8161302a565b9050919050565b6000602082019050818103600083015261346e8161304d565b9050919050565b6000602082019050818103600083015261348e81613070565b9050919050565b600060208201905081810360008301526134ae81613093565b9050919050565b600060208201905081810360008301526134ce816130b6565b9050919050565b600060208201905081810360008301526134ee816130d9565b9050919050565b6000602082019050818103600083015261350e816130fc565b9050919050565b6000602082019050818103600083015261352e81613142565b9050919050565b6000602082019050818103600083015261354e81613165565b9050919050565b6000602082019050818103600083015261356e81613188565b9050919050565b600060208201905061358a60008301846131ba565b92915050565b600061359a6135ab565b90506135a682826138b0565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d0576135cf613a17565b5b6135d982613a5a565b9050602081019050919050565b600067ffffffffffffffff82111561360157613600613a17565b5b61360a82613a5a565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136be82613832565b91506136c983613832565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fe576136fd61395b565b5b828201905092915050565b600061371482613832565b915061371f83613832565b92508261372f5761372e61398a565b5b828204905092915050565b600061374582613832565b915061375083613832565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137895761378861395b565b5b828202905092915050565b600061379f82613832565b91506137aa83613832565b9250828210156137bd576137bc61395b565b5b828203905092915050565b60006137d382613812565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386957808201518184015260208101905061384e565b83811115613878576000848401525b50505050565b6000600282049050600182168061389657607f821691505b602082108114156138aa576138a96139b9565b5b50919050565b6138b982613a5a565b810181811067ffffffffffffffff821117156138d8576138d7613a17565b5b80604052505050565b60006138ec82613832565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391f5761391e61395b565b5b600182019050919050565b600061393582613832565b915061394083613832565b9250826139505761394f61398a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f506c6561736520626520796f757273656c662e00000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f9c816137c8565b8114613fa757600080fd5b50565b613fb3816137da565b8114613fbe57600080fd5b50565b613fca816137e6565b8114613fd557600080fd5b50565b613fe181613832565b8114613fec57600080fd5b5056fea2646970667358221220bb498ec7cff0029dd895d088cdb0bf826074a7174d6c4a8a45463374935c327864736f6c63430008070033
Deployed Bytecode Sourcemap
41957:3978:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25645:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28150:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27673:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42240:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44646:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44752:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42682:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28900:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44835:777;;;;;;;;;;;;;:::i;:::-;;29310:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43255:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44324:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42198:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42358:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42111:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26284:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26014:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6228:103;;;;;;;;;;;;;:::i;:::-;;44540:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5577:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42313:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26759:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42777:309;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28443:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44404:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29566:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43896:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42277:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28669:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43094:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25645:305;25747:4;25799:25;25784:40;;;:11;:40;;;;:105;;;;25856:33;25841:48;;;:11;:48;;;;25784:105;:158;;;;25906:36;25930:11;25906:23;:36::i;:::-;25784:158;25764:178;;25645:305;;;:::o;26590:100::-;26644:13;26677:5;26670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26590:100;:::o;28150:221::-;28226:7;28254:16;28262:7;28254;:16::i;:::-;28246:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28339:15;:24;28355:7;28339:24;;;;;;;;;;;;;;;;;;;;;28332:31;;28150:221;;;:::o;27673:411::-;27754:13;27770:23;27785:7;27770:14;:23::i;:::-;27754:39;;27818:5;27812:11;;:2;:11;;;;27804:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27912:5;27896:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27921:37;27938:5;27945:12;:10;:12::i;:::-;27921:16;:37::i;:::-;27896:62;27874:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28055:21;28064:2;28068:7;28055:8;:21::i;:::-;27743:341;27673:411;;:::o;42240:32::-;;;;:::o;44646:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44730:10:::1;44718:9;:22;;;;;;;;;;;;:::i;:::-;;44646:100:::0;:::o;44752:77::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44817:6:::1;44808;;:15;;;;;;;;;;;;;;;;;;44752:77:::0;:::o;42682:89::-;42726:7;42749:16;:6;:14;:16::i;:::-;42742:23;;42682:89;:::o;28900:339::-;29095:41;29114:12;:10;:12::i;:::-;29128:7;29095:18;:41::i;:::-;29087:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29203:28;29213:4;29219:2;29223:7;29203:9;:28::i;:::-;28900:339;;;:::o;44835:777::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44968:7:::1;44989:42;44981:56;;45073:3;45069:1;45045:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;44981:100;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44967:114;;;45096:2;45088:11;;;::::0;::::1;;45434:7;45455;:5;:7::i;:::-;45447:21;;45476;45447:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45433:69;;;45517:2;45509:11;;;::::0;::::1;;44872:740;;44835:777::o:0;29310:185::-;29448:39;29465:4;29471:2;29475:7;29448:39;;;;;;;;;;;;:16;:39::i;:::-;29310:185;;;:::o;43255:635::-;43330:16;43358:23;43384:17;43394:6;43384:9;:17::i;:::-;43358:43;;43408:30;43455:15;43441:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43408:63;;43478:22;43503:1;43478:26;;43511:23;43547:309;43572:15;43554;:33;:64;;;;;43609:9;;43591:14;:27;;43554:64;43547:309;;;43629:25;43657:23;43665:14;43657:7;:23::i;:::-;43629:51;;43716:6;43695:27;;:17;:27;;;43691:131;;;43768:14;43735:13;43749:15;43735:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43795:17;;;;;:::i;:::-;;;;43691:131;43832:16;;;;;:::i;:::-;;;;43620:236;43547:309;;;43871:13;43864:20;;;;;;43255:635;;;:::o;44324:74::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44387:5:::1;44380:4;:12;;;;44324:74:::0;:::o;42198:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42358:26::-;;;;;;;;;;;;;:::o;42111:82::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26284:239::-;26356:7;26376:13;26392:7;:16;26400:7;26392:16;;;;;;;;;;;;;;;;;;;;;26376:32;;26444:1;26427:19;;:5;:19;;;;26419:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26510:5;26503:12;;;26284:239;;;:::o;26014:208::-;26086:7;26131:1;26114:19;;:5;:19;;;;26106:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26198:9;:16;26208:5;26198:16;;;;;;;;;;;;;;;;26191:23;;26014:208;;;:::o;6228:103::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;44540:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44624:10:::1;44612:9;:22;;;;;;;;;;;;:::i;:::-;;44540:100:::0;:::o;5577:87::-;5623:7;5650:6;;;;;;;;;;;5643:13;;5577:87;:::o;42313:38::-;;;;:::o;26759:104::-;26815:13;26848:7;26841:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26759:104;:::o;42777:309::-;42842:11;42516:1;42502:11;:15;:52;;;;;42536:18;;42521:11;:33;;42502:52;42494:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42628:9;;42613:11;42594:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;42586:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42871:6:::1;;;;;;;;;;;42870:7;42862:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;42933:10;42920:23;;:9;:23;;;42912:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43002:11;42995:4;;:18;;;;:::i;:::-;42982:9;:31;;42974:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43046:34;43056:10;43068:11;43046:9;:34::i;:::-;42777:309:::0;;:::o;28443:155::-;28538:52;28557:12;:10;:12::i;:::-;28571:8;28581;28538:18;:52::i;:::-;28443:155;;:::o;44404:130::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44509:19:::1;44488:18;:40;;;;44404:130:::0;:::o;29566:328::-;29741:41;29760:12;:10;:12::i;:::-;29774:7;29741:18;:41::i;:::-;29733:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29847:39;29861:4;29867:2;29871:7;29880:5;29847:13;:39::i;:::-;29566:328;;;;:::o;43896:422::-;43995:13;44036:17;44044:8;44036:7;:17::i;:::-;44020:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44127:28;44158:10;:8;:10::i;:::-;44127:41;;44213:1;44188:14;44182:28;:32;:130;;;;;;;;;;;;;;;;;44250:14;44266:19;:8;:17;:19::i;:::-;44287:9;44233:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44182:130;44175:137;;;43896:422;;;:::o;42277:31::-;;;;:::o;28669:164::-;28766:4;28790:18;:25;28809:5;28790:25;;;;;;;;;;;;;;;:35;28816:8;28790:35;;;;;;;;;;;;;;;;;;;;;;;;;28783:42;;28669:164;;;;:::o;43094:155::-;43180:11;42516:1;42502:11;:15;:52;;;;;42536:18;;42521:11;:33;;42502:52;42494:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;42628:9;;42613:11;42594:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;42586:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5808:12:::1;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43210:33:::2;43220:9;43231:11;43210:9;:33::i;:::-;43094:155:::0;;;:::o;6486:201::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1:::1;6575:22;;:8;:22;;;;6567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;18384:157::-;18469:4;18508:25;18493:40;;;:11;:40;;;;18486:47;;18384:157;;;:::o;31404:127::-;31469:4;31521:1;31493:30;;:7;:16;31501:7;31493:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31486:37;;31404:127;;;:::o;4301:98::-;4354:7;4381:10;4374:17;;4301:98;:::o;35550:174::-;35652:2;35625:15;:24;35641:7;35625:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35708:7;35704:2;35670:46;;35679:23;35694:7;35679:14;:23::i;:::-;35670:46;;;;;;;;;;;;35550:174;;:::o;905:114::-;970:7;997;:14;;;990:21;;905:114;;;:::o;31698:348::-;31791:4;31816:16;31824:7;31816;:16::i;:::-;31808:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31892:13;31908:23;31923:7;31908:14;:23::i;:::-;31892:39;;31961:5;31950:16;;:7;:16;;;:52;;;;31970:32;31987:5;31994:7;31970:16;:32::i;:::-;31950:52;:87;;;;32030:7;32006:31;;:20;32018:7;32006:11;:20::i;:::-;:31;;;31950:87;31942:96;;;31698:348;;;;:::o;34807:625::-;34966:4;34939:31;;:23;34954:7;34939:14;:23::i;:::-;:31;;;34931:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35045:1;35031:16;;:2;:16;;;;35023:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35101:39;35122:4;35128:2;35132:7;35101:20;:39::i;:::-;35205:29;35222:1;35226:7;35205:8;:29::i;:::-;35266:1;35247:9;:15;35257:4;35247:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35295:1;35278:9;:13;35288:2;35278:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35326:2;35307:7;:16;35315:7;35307:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35365:7;35361:2;35346:27;;35355:4;35346:27;;;;;;;;;;;;35386:38;35406:4;35412:2;35416:7;35386:19;:38::i;:::-;34807:625;;;:::o;6847:191::-;6921:16;6940:6;;;;;;;;;;;6921:25;;6966:8;6957:6;;:17;;;;;;;;;;;;;;;;;;7021:8;6990:40;;7011:8;6990:40;;;;;;;;;;;;6910:128;6847:191;:::o;45618:204::-;45698:9;45693:124;45717:11;45713:1;:15;45693:124;;;45744:18;:6;:16;:18::i;:::-;45771:38;45781:9;45792:16;:6;:14;:16::i;:::-;45771:9;:38::i;:::-;45730:3;;;;;:::i;:::-;;;;45693:124;;;;45618:204;;:::o;35866:315::-;36021:8;36012:17;;:5;:17;;;;36004:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36108:8;36070:18;:25;36089:5;36070:25;;;;;;;;;;;;;;;:35;36096:8;36070:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36154:8;36132:41;;36147:5;36132:41;;;36164:8;36132:41;;;;;;:::i;:::-;;;;;;;;35866:315;;;:::o;30776:::-;30933:28;30943:4;30949:2;30953:7;30933:9;:28::i;:::-;30980:48;31003:4;31009:2;31013:7;31022:5;30980:22;:48::i;:::-;30972:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30776:315;;;;:::o;45828:104::-;45888:13;45917:9;45910:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45828:104;:::o;1863:723::-;1919:13;2149:1;2140:5;:10;2136:53;;;2167:10;;;;;;;;;;;;;;;;;;;;;2136:53;2199:12;2214:5;2199:20;;2230:14;2255:78;2270:1;2262:4;:9;2255:78;;2288:8;;;;;:::i;:::-;;;;2319:2;2311:10;;;;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:39;;2393:154;2409:1;2400:5;:10;2393:154;;2437:1;2427:11;;;;;:::i;:::-;;;2504:2;2496:5;:10;;;;:::i;:::-;2483:2;:24;;;;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2533:2;2524:11;;;;;:::i;:::-;;;2393:154;;;2571:6;2557:21;;;;;1863:723;;;;:::o;38117:126::-;;;;:::o;38628:125::-;;;;:::o;1027:127::-;1134:1;1116:7;:14;;;:19;;;;;;;;;;;1027:127;:::o;32388:110::-;32464:26;32474:2;32478:7;32464:26;;;;;;;;;;;;:9;:26::i;:::-;32388:110;;:::o;36746:799::-;36901:4;36922:15;:2;:13;;;:15::i;:::-;36918:620;;;36974:2;36958:36;;;36995:12;:10;:12::i;:::-;37009:4;37015:7;37024:5;36958:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36954:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37217:1;37200:6;:13;:18;37196:272;;;37243:60;;;;;;;;;;:::i;:::-;;;;;;;;37196:272;37418:6;37412:13;37403:6;37399:2;37395:15;37388:38;36954:529;37091:41;;;37081:51;;;:6;:51;;;;37074:58;;;;;36918:620;37522:4;37515:11;;36746:799;;;;;;;:::o;32725:321::-;32855:18;32861:2;32865:7;32855:5;:18::i;:::-;32906:54;32937:1;32941:2;32945:7;32954:5;32906:22;:54::i;:::-;32884:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32725:321;;;:::o;8278:326::-;8338:4;8595:1;8573:7;:19;;;:23;8566:30;;8278:326;;;:::o;33382:439::-;33476:1;33462:16;;:2;:16;;;;33454:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33535:16;33543:7;33535;:16::i;:::-;33534:17;33526:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33597:45;33626:1;33630:2;33634:7;33597:20;:45::i;:::-;33672:1;33655:9;:13;33665:2;33655:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33703:2;33684:7;:16;33692:7;33684:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33748:7;33744:2;33723:33;;33740:1;33723:33;;;;;;;;;;;;33769:44;33797:1;33801:2;33805:7;33769:19;:44::i;:::-;33382:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:::-;16503:3;16524:67;16588:2;16583:3;16524:67;:::i;:::-;16517:74;;16600:93;16689:3;16600:93;:::i;:::-;16718:2;16713:3;16709:12;16702:19;;16361:366;;;:::o;16733:::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:::-;17619:3;17640:67;17704:2;17699:3;17640:67;:::i;:::-;17633:74;;17716:93;17805:3;17716:93;:::i;:::-;17834:2;17829:3;17825:12;17818:19;;17477:366;;;:::o;17849:398::-;18008:3;18029:83;18110:1;18105:3;18029:83;:::i;:::-;18022:90;;18121:93;18210:3;18121:93;:::i;:::-;18239:1;18234:3;18230:11;18223:18;;17849:398;;;:::o;18253:366::-;18395:3;18416:67;18480:2;18475:3;18416:67;:::i;:::-;18409:74;;18492:93;18581:3;18492:93;:::i;:::-;18610:2;18605:3;18601:12;18594:19;;18253:366;;;:::o;18625:::-;18767:3;18788:67;18852:2;18847:3;18788:67;:::i;:::-;18781:74;;18864:93;18953:3;18864:93;:::i;:::-;18982:2;18977:3;18973:12;18966:19;;18625:366;;;:::o;18997:::-;19139:3;19160:67;19224:2;19219:3;19160:67;:::i;:::-;19153:74;;19236:93;19325:3;19236:93;:::i;:::-;19354:2;19349:3;19345:12;19338:19;;18997:366;;;:::o;19369:108::-;19446:24;19464:5;19446:24;:::i;:::-;19441:3;19434:37;19369:108;;:::o;19483:118::-;19570:24;19588:5;19570:24;:::i;:::-;19565:3;19558:37;19483:118;;:::o;19607:589::-;19832:3;19854:95;19945:3;19936:6;19854:95;:::i;:::-;19847:102;;19966:95;20057:3;20048:6;19966:95;:::i;:::-;19959:102;;20078:92;20166:3;20157:6;20078:92;:::i;:::-;20071:99;;20187:3;20180:10;;19607:589;;;;;;:::o;20202:379::-;20386:3;20408:147;20551:3;20408:147;:::i;:::-;20401:154;;20572:3;20565:10;;20202:379;;;:::o;20587:222::-;20680:4;20718:2;20707:9;20703:18;20695:26;;20731:71;20799:1;20788:9;20784:17;20775:6;20731:71;:::i;:::-;20587:222;;;;:::o;20815:640::-;21010:4;21048:3;21037:9;21033:19;21025:27;;21062:71;21130:1;21119:9;21115:17;21106:6;21062:71;:::i;:::-;21143:72;21211:2;21200:9;21196:18;21187:6;21143:72;:::i;:::-;21225;21293:2;21282:9;21278:18;21269:6;21225:72;:::i;:::-;21344:9;21338:4;21334:20;21329:2;21318:9;21314:18;21307:48;21372:76;21443:4;21434:6;21372:76;:::i;:::-;21364:84;;20815:640;;;;;;;:::o;21461:373::-;21604:4;21642:2;21631:9;21627:18;21619:26;;21691:9;21685:4;21681:20;21677:1;21666:9;21662:17;21655:47;21719:108;21822:4;21813:6;21719:108;:::i;:::-;21711:116;;21461:373;;;;:::o;21840:210::-;21927:4;21965:2;21954:9;21950:18;21942:26;;21978:65;22040:1;22029:9;22025:17;22016:6;21978:65;:::i;:::-;21840:210;;;;:::o;22056:313::-;22169:4;22207:2;22196:9;22192:18;22184:26;;22256:9;22250:4;22246:20;22242:1;22231:9;22227:17;22220:47;22284:78;22357:4;22348:6;22284:78;:::i;:::-;22276:86;;22056:313;;;;:::o;22375:419::-;22541:4;22579:2;22568:9;22564:18;22556:26;;22628:9;22622:4;22618:20;22614:1;22603:9;22599:17;22592:47;22656:131;22782:4;22656:131;:::i;:::-;22648:139;;22375:419;;;:::o;22800:::-;22966:4;23004:2;22993:9;22989:18;22981:26;;23053:9;23047:4;23043:20;23039:1;23028:9;23024:17;23017:47;23081:131;23207:4;23081:131;:::i;:::-;23073:139;;22800:419;;;:::o;23225:::-;23391:4;23429:2;23418:9;23414:18;23406:26;;23478:9;23472:4;23468:20;23464:1;23453:9;23449:17;23442:47;23506:131;23632:4;23506:131;:::i;:::-;23498:139;;23225:419;;;:::o;23650:::-;23816:4;23854:2;23843:9;23839:18;23831:26;;23903:9;23897:4;23893:20;23889:1;23878:9;23874:17;23867:47;23931:131;24057:4;23931:131;:::i;:::-;23923:139;;23650:419;;;:::o;24075:::-;24241:4;24279:2;24268:9;24264:18;24256:26;;24328:9;24322:4;24318:20;24314:1;24303:9;24299:17;24292:47;24356:131;24482:4;24356:131;:::i;:::-;24348:139;;24075:419;;;:::o;24500:::-;24666:4;24704:2;24693:9;24689:18;24681:26;;24753:9;24747:4;24743:20;24739:1;24728:9;24724:17;24717:47;24781:131;24907:4;24781:131;:::i;:::-;24773:139;;24500:419;;;:::o;24925:::-;25091:4;25129:2;25118:9;25114:18;25106:26;;25178:9;25172:4;25168:20;25164:1;25153:9;25149:17;25142:47;25206:131;25332:4;25206:131;:::i;:::-;25198:139;;24925:419;;;:::o;25350:::-;25516:4;25554:2;25543:9;25539:18;25531:26;;25603:9;25597:4;25593:20;25589:1;25578:9;25574:17;25567:47;25631:131;25757:4;25631:131;:::i;:::-;25623:139;;25350:419;;;:::o;25775:::-;25941:4;25979:2;25968:9;25964:18;25956:26;;26028:9;26022:4;26018:20;26014:1;26003:9;25999:17;25992:47;26056:131;26182:4;26056:131;:::i;:::-;26048:139;;25775:419;;;:::o;26200:::-;26366:4;26404:2;26393:9;26389:18;26381:26;;26453:9;26447:4;26443:20;26439:1;26428:9;26424:17;26417:47;26481:131;26607:4;26481:131;:::i;:::-;26473:139;;26200:419;;;:::o;26625:::-;26791:4;26829:2;26818:9;26814:18;26806:26;;26878:9;26872:4;26868:20;26864:1;26853:9;26849:17;26842:47;26906:131;27032:4;26906:131;:::i;:::-;26898:139;;26625:419;;;:::o;27050:::-;27216:4;27254:2;27243:9;27239:18;27231:26;;27303:9;27297:4;27293:20;27289:1;27278:9;27274:17;27267:47;27331:131;27457:4;27331:131;:::i;:::-;27323:139;;27050:419;;;:::o;27475:::-;27641:4;27679:2;27668:9;27664:18;27656:26;;27728:9;27722:4;27718:20;27714:1;27703:9;27699:17;27692:47;27756:131;27882:4;27756:131;:::i;:::-;27748:139;;27475:419;;;:::o;27900:::-;28066:4;28104:2;28093:9;28089:18;28081:26;;28153:9;28147:4;28143:20;28139:1;28128:9;28124:17;28117:47;28181:131;28307:4;28181:131;:::i;:::-;28173:139;;27900:419;;;:::o;28325:::-;28491:4;28529:2;28518:9;28514:18;28506:26;;28578:9;28572:4;28568:20;28564:1;28553:9;28549:17;28542:47;28606:131;28732:4;28606:131;:::i;:::-;28598:139;;28325:419;;;:::o;28750:::-;28916:4;28954:2;28943:9;28939:18;28931:26;;29003:9;28997:4;28993:20;28989:1;28978:9;28974:17;28967:47;29031:131;29157:4;29031:131;:::i;:::-;29023:139;;28750:419;;;:::o;29175:::-;29341:4;29379:2;29368:9;29364:18;29356:26;;29428:9;29422:4;29418:20;29414:1;29403:9;29399:17;29392:47;29456:131;29582:4;29456:131;:::i;:::-;29448:139;;29175:419;;;:::o;29600:::-;29766:4;29804:2;29793:9;29789:18;29781:26;;29853:9;29847:4;29843:20;29839:1;29828:9;29824:17;29817:47;29881:131;30007:4;29881:131;:::i;:::-;29873:139;;29600:419;;;:::o;30025:::-;30191:4;30229:2;30218:9;30214:18;30206:26;;30278:9;30272:4;30268:20;30264:1;30253:9;30249:17;30242:47;30306:131;30432:4;30306:131;:::i;:::-;30298:139;;30025:419;;;:::o;30450:::-;30616:4;30654:2;30643:9;30639:18;30631:26;;30703:9;30697:4;30693:20;30689:1;30678:9;30674:17;30667:47;30731:131;30857:4;30731:131;:::i;:::-;30723:139;;30450:419;;;:::o;30875:::-;31041:4;31079:2;31068:9;31064:18;31056:26;;31128:9;31122:4;31118:20;31114:1;31103:9;31099:17;31092:47;31156:131;31282:4;31156:131;:::i;:::-;31148:139;;30875:419;;;:::o;31300:222::-;31393:4;31431:2;31420:9;31416:18;31408:26;;31444:71;31512:1;31501:9;31497:17;31488:6;31444:71;:::i;:::-;31300:222;;;;:::o;31528:129::-;31562:6;31589:20;;:::i;:::-;31579:30;;31618:33;31646:4;31638:6;31618:33;:::i;:::-;31528:129;;;:::o;31663:75::-;31696:6;31729:2;31723:9;31713:19;;31663:75;:::o;31744:307::-;31805:4;31895:18;31887:6;31884:30;31881:56;;;31917:18;;:::i;:::-;31881:56;31955:29;31977:6;31955:29;:::i;:::-;31947:37;;32039:4;32033;32029:15;32021:23;;31744:307;;;:::o;32057:308::-;32119:4;32209:18;32201:6;32198:30;32195:56;;;32231:18;;:::i;:::-;32195:56;32269:29;32291:6;32269:29;:::i;:::-;32261:37;;32353:4;32347;32343:15;32335:23;;32057:308;;;:::o;32371:132::-;32438:4;32461:3;32453:11;;32491:4;32486:3;32482:14;32474:22;;32371:132;;;:::o;32509:141::-;32558:4;32581:3;32573:11;;32604:3;32601:1;32594:14;32638:4;32635:1;32625:18;32617:26;;32509:141;;;:::o;32656:114::-;32723:6;32757:5;32751:12;32741:22;;32656:114;;;:::o;32776:98::-;32827:6;32861:5;32855:12;32845:22;;32776:98;;;:::o;32880:99::-;32932:6;32966:5;32960:12;32950:22;;32880:99;;;:::o;32985:113::-;33055:4;33087;33082:3;33078:14;33070:22;;32985:113;;;:::o;33104:184::-;33203:11;33237:6;33232:3;33225:19;33277:4;33272:3;33268:14;33253:29;;33104:184;;;;:::o;33294:168::-;33377:11;33411:6;33406:3;33399:19;33451:4;33446:3;33442:14;33427:29;;33294:168;;;;:::o;33468:147::-;33569:11;33606:3;33591:18;;33468:147;;;;:::o;33621:169::-;33705:11;33739:6;33734:3;33727:19;33779:4;33774:3;33770:14;33755:29;;33621:169;;;;:::o;33796:148::-;33898:11;33935:3;33920:18;;33796:148;;;;:::o;33950:305::-;33990:3;34009:20;34027:1;34009:20;:::i;:::-;34004:25;;34043:20;34061:1;34043:20;:::i;:::-;34038:25;;34197:1;34129:66;34125:74;34122:1;34119:81;34116:107;;;34203:18;;:::i;:::-;34116:107;34247:1;34244;34240:9;34233:16;;33950:305;;;;:::o;34261:185::-;34301:1;34318:20;34336:1;34318:20;:::i;:::-;34313:25;;34352:20;34370:1;34352:20;:::i;:::-;34347:25;;34391:1;34381:35;;34396:18;;:::i;:::-;34381:35;34438:1;34435;34431:9;34426:14;;34261:185;;;;:::o;34452:348::-;34492:7;34515:20;34533:1;34515:20;:::i;:::-;34510:25;;34549:20;34567:1;34549:20;:::i;:::-;34544:25;;34737:1;34669:66;34665:74;34662:1;34659:81;34654:1;34647:9;34640:17;34636:105;34633:131;;;34744:18;;:::i;:::-;34633:131;34792:1;34789;34785:9;34774:20;;34452:348;;;;:::o;34806:191::-;34846:4;34866:20;34884:1;34866:20;:::i;:::-;34861:25;;34900:20;34918:1;34900:20;:::i;:::-;34895:25;;34939:1;34936;34933:8;34930:34;;;34944:18;;:::i;:::-;34930:34;34989:1;34986;34982:9;34974:17;;34806:191;;;;:::o;35003:96::-;35040:7;35069:24;35087:5;35069:24;:::i;:::-;35058:35;;35003:96;;;:::o;35105:90::-;35139:7;35182:5;35175:13;35168:21;35157:32;;35105:90;;;:::o;35201:149::-;35237:7;35277:66;35270:5;35266:78;35255:89;;35201:149;;;:::o;35356:126::-;35393:7;35433:42;35426:5;35422:54;35411:65;;35356:126;;;:::o;35488:77::-;35525:7;35554:5;35543:16;;35488:77;;;:::o;35571:154::-;35655:6;35650:3;35645;35632:30;35717:1;35708:6;35703:3;35699:16;35692:27;35571:154;;;:::o;35731:307::-;35799:1;35809:113;35823:6;35820:1;35817:13;35809:113;;;35908:1;35903:3;35899:11;35893:18;35889:1;35884:3;35880:11;35873:39;35845:2;35842:1;35838:10;35833:15;;35809:113;;;35940:6;35937:1;35934:13;35931:101;;;36020:1;36011:6;36006:3;36002:16;35995:27;35931:101;35780:258;35731:307;;;:::o;36044:320::-;36088:6;36125:1;36119:4;36115:12;36105:22;;36172:1;36166:4;36162:12;36193:18;36183:81;;36249:4;36241:6;36237:17;36227:27;;36183:81;36311:2;36303:6;36300:14;36280:18;36277:38;36274:84;;;36330:18;;:::i;:::-;36274:84;36095:269;36044:320;;;:::o;36370:281::-;36453:27;36475:4;36453:27;:::i;:::-;36445:6;36441:40;36583:6;36571:10;36568:22;36547:18;36535:10;36532:34;36529:62;36526:88;;;36594:18;;:::i;:::-;36526:88;36634:10;36630:2;36623:22;36413:238;36370:281;;:::o;36657:233::-;36696:3;36719:24;36737:5;36719:24;:::i;:::-;36710:33;;36765:66;36758:5;36755:77;36752:103;;;36835:18;;:::i;:::-;36752:103;36882:1;36875:5;36871:13;36864:20;;36657:233;;;:::o;36896:176::-;36928:1;36945:20;36963:1;36945:20;:::i;:::-;36940:25;;36979:20;36997:1;36979:20;:::i;:::-;36974:25;;37018:1;37008:35;;37023:18;;:::i;:::-;37008:35;37064:1;37061;37057:9;37052:14;;36896:176;;;;:::o;37078:180::-;37126:77;37123:1;37116:88;37223:4;37220:1;37213:15;37247:4;37244:1;37237:15;37264:180;37312:77;37309:1;37302:88;37409:4;37406:1;37399:15;37433:4;37430:1;37423:15;37450:180;37498:77;37495:1;37488:88;37595:4;37592:1;37585:15;37619:4;37616:1;37609:15;37636:180;37684:77;37681:1;37674:88;37781:4;37778:1;37771:15;37805:4;37802:1;37795:15;37822:180;37870:77;37867:1;37860:88;37967:4;37964:1;37957:15;37991:4;37988:1;37981:15;38008:117;38117:1;38114;38107:12;38131:117;38240:1;38237;38230:12;38254:117;38363:1;38360;38353:12;38377:117;38486:1;38483;38476:12;38500:102;38541:6;38592:2;38588:7;38583:2;38576:5;38572:14;38568:28;38558:38;;38500:102;;;:::o;38608:169::-;38748:21;38744:1;38736:6;38732:14;38725:45;38608:169;:::o;38783:237::-;38923:34;38919:1;38911:6;38907:14;38900:58;38992:20;38987:2;38979:6;38975:15;38968:45;38783:237;:::o;39026:225::-;39166:34;39162:1;39154:6;39150:14;39143:58;39235:8;39230:2;39222:6;39218:15;39211:33;39026:225;:::o;39257:224::-;39397:34;39393:1;39385:6;39381:14;39374:58;39466:7;39461:2;39453:6;39449:15;39442:32;39257:224;:::o;39487:178::-;39627:30;39623:1;39615:6;39611:14;39604:54;39487:178;:::o;39671:170::-;39811:22;39807:1;39799:6;39795:14;39788:46;39671:170;:::o;39847:223::-;39987:34;39983:1;39975:6;39971:14;39964:58;40056:6;40051:2;40043:6;40039:15;40032:31;39847:223;:::o;40076:175::-;40216:27;40212:1;40204:6;40200:14;40193:51;40076:175;:::o;40257:231::-;40397:34;40393:1;40385:6;40381:14;40374:58;40466:14;40461:2;40453:6;40449:15;40442:39;40257:231;:::o;40494:243::-;40634:34;40630:1;40622:6;40618:14;40611:58;40703:26;40698:2;40690:6;40686:15;40679:51;40494:243;:::o;40743:229::-;40883:34;40879:1;40871:6;40867:14;40860:58;40952:12;40947:2;40939:6;40935:15;40928:37;40743:229;:::o;40978:228::-;41118:34;41114:1;41106:6;41102:14;41095:58;41187:11;41182:2;41174:6;41170:15;41163:36;40978:228;:::o;41212:182::-;41352:34;41348:1;41340:6;41336:14;41329:58;41212:182;:::o;41400:231::-;41540:34;41536:1;41528:6;41524:14;41517:58;41609:14;41604:2;41596:6;41592:15;41585:39;41400:231;:::o;41637:182::-;41777:34;41773:1;41765:6;41761:14;41754:58;41637:182;:::o;41825:173::-;41965:25;41961:1;41953:6;41949:14;41942:49;41825:173;:::o;42004:234::-;42144:34;42140:1;42132:6;42128:14;42121:58;42213:17;42208:2;42200:6;42196:15;42189:42;42004:234;:::o;42244:220::-;42384:34;42380:1;42372:6;42368:14;42361:58;42453:3;42448:2;42440:6;42436:15;42429:28;42244:220;:::o;42470:114::-;;:::o;42590:170::-;42730:22;42726:1;42718:6;42714:14;42707:46;42590:170;:::o;42766:236::-;42906:34;42902:1;42894:6;42890:14;42883:58;42975:19;42970:2;42962:6;42958:15;42951:44;42766:236;:::o;43008:169::-;43148:21;43144:1;43136:6;43132:14;43125:45;43008:169;:::o;43183:122::-;43256:24;43274:5;43256:24;:::i;:::-;43249:5;43246:35;43236:63;;43295:1;43292;43285:12;43236:63;43183:122;:::o;43311:116::-;43381:21;43396:5;43381:21;:::i;:::-;43374:5;43371:32;43361:60;;43417:1;43414;43407:12;43361:60;43311:116;:::o;43433:120::-;43505:23;43522:5;43505:23;:::i;:::-;43498:5;43495:34;43485:62;;43543:1;43540;43533:12;43485:62;43433:120;:::o;43559:122::-;43632:24;43650:5;43632:24;:::i;:::-;43625:5;43622:35;43612:63;;43671:1;43668;43661:12;43612:63;43559:122;:::o
Swarm Source
ipfs://bb498ec7cff0029dd895d088cdb0bf826074a7174d6c4a8a45463374935c3278
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.