Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 225 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18299531 | 456 days ago | IN | 0 ETH | 0.00016464 | ||||
Safe Transfer Fr... | 17824534 | 523 days ago | IN | 0 ETH | 0.00101471 | ||||
Set Approval For... | 17649394 | 548 days ago | IN | 0 ETH | 0.00098099 | ||||
Withdraw | 17474677 | 572 days ago | IN | 0 ETH | 0.00222778 | ||||
Set Payout Addre... | 17474674 | 572 days ago | IN | 0 ETH | 0.00185899 | ||||
Pause | 17474669 | 572 days ago | IN | 0 ETH | 0.00185842 | ||||
_mint In Order T... | 17423694 | 579 days ago | IN | 0 ETH | 0.00607098 | ||||
Safe Transfer Fr... | 17423170 | 579 days ago | IN | 0 ETH | 0.00129094 | ||||
_mint In Order | 17421172 | 580 days ago | IN | 0.0077 ETH | 0.00400492 | ||||
Set Cost | 17417754 | 580 days ago | IN | 0 ETH | 0.00068439 | ||||
Set Approval For... | 17359443 | 588 days ago | IN | 0 ETH | 0.00111844 | ||||
Set Approval For... | 16837185 | 662 days ago | IN | 0 ETH | 0.00088682 | ||||
_mint In Order T... | 16408007 | 722 days ago | IN | 0 ETH | 0.00714263 | ||||
_mint In Order T... | 16371559 | 727 days ago | IN | 0 ETH | 0.00294478 | ||||
_mint In Order T... | 16362515 | 728 days ago | IN | 0 ETH | 0.004615 | ||||
_mint In Order T... | 16362387 | 729 days ago | IN | 0 ETH | 0.00473091 | ||||
_mint In Order T... | 16362348 | 729 days ago | IN | 0 ETH | 0.00279829 | ||||
_mint In Order T... | 16362312 | 729 days ago | IN | 0 ETH | 0.00490503 | ||||
_mint In Order T... | 16362158 | 729 days ago | IN | 0 ETH | 0.00316098 | ||||
_mint In Order T... | 16362131 | 729 days ago | IN | 0 ETH | 0.00440669 | ||||
_mint In Order T... | 16362110 | 729 days ago | IN | 0 ETH | 0.00468143 | ||||
Set Approval For... | 16333875 | 732 days ago | IN | 0 ETH | 0.00074846 | ||||
_mint In Order T... | 16323951 | 734 days ago | IN | 0 ETH | 0.00259377 | ||||
_mint In Order T... | 16323941 | 734 days ago | IN | 0 ETH | 0.00260169 | ||||
_mint In Order T... | 16318788 | 735 days ago | IN | 0 ETH | 0.00246949 |
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
VoodooLabs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-30 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/VoodooLabs.sol pragma solidity ^ 0.8.7; /* #################################################################BBBBBBBBBBBBBBBBBBBBBBBBBBB#BB#B##################################################### ######################################################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGP5#BBBBBBBB############################################## #####################################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGJJ5BBBBBBBBBBBBBBBB####################################### ###############################B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGJ~?5BBBBBBBBBBBBBBBBBBBBBBB################################ #################BBBBBB###B###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPGB?~~7YBBBBBBBBBBBBBBBBBBBBBBBBBBBB########################### ################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGPY!7~~~!JBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB####################### ################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBG?7P!~^~^~?BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB################### ###############BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPPP^~J!^^^^^?BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB################# ###############BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGY?P!77:^^^^^7BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#B############### ###############B5#BBB5GBBBBPYP55GBBBBGYPP5PBBBBGY55PBBBBBB55555BBBBB5Y55YGBBBBB55B5!?Y5::::::^JBBBBBYGBBBBBBBBBBG?GBBBBBBGY55YPBBBBBGY5P5P############ ###############B?GBBG?BBBBBJPBB5YBBBB5YBBPJBBBBPJBGJ5BBBBB?GBB?PBBBB?PBBJYBBB5!~JY7:7GJ:...::~5BBBBB?GBBBBBBBBBBY7YBBBBBBG?BBG?GBBBBYYBBP?############ ################5Y##Y5BBBBBJPBB5YBBBB55BBPJBBBBPJBBG?BBBBB?BBBJPBBBB?PBBJYBBBP?~^^:7BPY?7~~~~Y5GBBBB?GBBBBBBBBBB?P?GBBBBBG?BBB?GBBBBYY#BB5############ ################B?BB?BBBBBBJPBB5YBBBB5YBBPJBBBBPJBBG?BBBBB?GBB?PBBBB?PBBJYBBB5GP^::PBBBBP5JJY5YBBBBB?GBBBBBBBBBP?#J5BBBBBG755JJBBBBBPYPP5G############ ###############B#JPPJBBBBBBJPBB5YBBBBYYBBP?BBBBPJBBG7BBBBB?GBBJPBBBB?PBBYYBBB5Y5^:?BBG55555Y?PGBBBBB?GBBBBBBBBBJ5BP?BBBBBG?GGGJPBBBBBBBBPY############ ###############B#PJJPBBBBBBJPBB5YBBBBYY#BP?BBBBPJBBYJBBBBB?BBBJPBBBBJGBBY5BBBY?PJ~JPPYJYYY??PBBBBBBB?GBBBBBBBBG?BBBJGBBBBGJBB#55BBBBPP##GY############ ################BB7?BBBBBBBJYGGJYBBBB5JGG5JBBBBP?G5JGBBBBB?PGG?GBBBBJ5GGJ5BBBPY5YY55YJ7?5J5BBBBBBBBB?PGGGBBBBB5YBBB5YBBBBGJGGPYGBBBBP5GGP5############ ##################GGBBBBBBBBPPPPBBBBBBPPPPGBBBBBPPPBBBBBBBGPPPGBBBBBGPPPPBBBBPP?7JPY!~!JJGBBBBBBBBBBGPPPPBBBBBGGBBBBGBBBBBGGGGBBBBBBBGGGGB############ #################B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPPP!PY!~!YPBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#################### ###################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPJ5YJ~~!5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB######################### #####################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGY7?!!JGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB################################ ######################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGP?7?PBBBBBBBBBBBBBBBBBBBBBBBBBBBBB###################################### #########################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGY?YB#BBBBBBBBBBBBBBBBB################################################## ############################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBYG#BBBBBBB############################################################## #################################BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB######################################################################## */ contract VoodooLabs is ERC1155, Ownable { // editing section starts below here string public name = "Voodoo Labs"; //name your NFT collection string public symbol = "VDLS"; //few letters to represent the symbol of your collection string private ipfsCID = "QmWQtpHFPsRwFQXSyeJmA9HKcb5fvzkFL9NAbTqQxw2m2h"; // ipfs metadata folder CID as the starting or hidden NFT uint256 public collectionTotal = 3333; // total number of NFTs to start your collection uint256 public cost = 0.03 ether; // Phase 1 price per mint uint256 public maxMintAmount = 10; // max amount a user other than owner can mint at in one session uint256 public maxBatchMintAmount = 10; // max batch amount a user other than owner can mint at in one session uint256 public whitelisterLimit = 10; // max amount a whitelisted user can mint during presale // editing section end bool public paused = true; bool public revealed = true; bool public mintInOrder = true; uint256 public ogCollectionTotal; // the original collection total uint256 public tokenNextToMint; //next token index to mint mapping(uint => string) private tokenURI; mapping(uint256 => uint256) private currentSupply; mapping(uint256 => bool) private hasMaxSupply; mapping(uint256 => uint256) public maxSupply; mapping(uint256 => bool) private createdToken; // if true token has been minted at least one time or was updated into the collection total mapping(uint256 => string) public role; uint256[] public collectionBatchTotal; string[] public ipfsCIDBatch; string[] public uriBatch; bool public onlyWhitelisted = false; address[] public whitelistedAddresses; mapping(address => uint256) public whitelisterMintedBalance; address payable public payments; //the payout address for the withdraw function once dev is fully paid address public admin_1 = 0x7CE701EfD548BeCeF46fDc61091590D6d6e662Bb; uint256 public devpayCount; //when this number is greater than 60 dev is fully paid constructor() ERC1155(""){ ogCollectionTotal = collectionTotal; collectionBatchTotal.push(collectionTotal); ipfsCIDBatch.push(ipfsCID); uriBatch.push(""); maxSupply[1] = 1; hasMaxSupply[1] = true; createdToken[1] = true; currentSupply[1] = 1; //sets current supply to the amount minted on deploy tokenNextToMint = 2; //sets the next token index to mint on deploy role[1] = "VQ"; _mint(msg.sender, 1, 1, ""); //sends Owner, NFT id 1, amount 1 } /** * @dev The contract developer's website. */ function contractDev() public pure returns(string memory){ string memory dev = unicode"🐸 HalfSuperShop.com 🐸"; return dev; } /** * @dev Admin can set the PAUSE state. * true = closed to Admin Only * false = open for Presale or Public */ function pause(bool _state) public onlyAdmins { paused = _state; } /** * @dev Admin can set the mintInOrder state. * true = enable _mintInOrder function * false = disable _mintInOrder function */ function setMintInOrder(bool _state) public onlyAdmins { mintInOrder = _state; } /** * @dev Admin can set the tokenNextToMint. */ function setTokenNextToMint(uint _id) public onlyAdmins { tokenNextToMint = _id; } /** * @dev Allows Admins, Whitelisters, and Public to Mint NFTs in Order from 1-collectionTotal. * Can only be called by the Public when onlyWhitelisted is false. */ function _mintInOrder(uint _numberOfTokensToMint) public payable { require(mintInOrder, "This Can Only Be Used When mintInOrder is True"); require(!paused, "Contract Paused"); require(!exists(collectionTotal), "Collection Minted Out"); require(_numberOfTokensToMint + tokenNextToMint <= collectionTotal + 1, "Exceeds Collection Total, Please Lower Amount"); if (!checkIfAdmin()) { if (onlyWhitelisted) { require(isWhitelisted(msg.sender), "Not Whitelisted"); uint256 whitelisterMintedCount = whitelisterMintedBalance[msg.sender]; require(whitelisterMintedCount + _numberOfTokensToMint <= whitelisterLimit, "Exceeded Max Whitelist Mint Limit"); } devpayCount += _numberOfTokensToMint; require(msg.value >= (_numberOfTokensToMint * cost), "Insufficient Funds"); } whitelisterMintedBalance[msg.sender] += _numberOfTokensToMint; uint256[] memory _ids = new uint256[](_numberOfTokensToMint); uint256[] memory _amounts = new uint256[](_numberOfTokensToMint); for (uint256 i = 0; i < _numberOfTokensToMint; i++) { uint256 _id = tokenNextToMint; if (!exists(_id)) { createdToken[_id] = true; maxSupply[_id] = 1; hasMaxSupply[_id] = true; currentSupply[_id] = 1; } role[_id] = randomRole(); _ids[i] = tokenNextToMint; _amounts[i] = 1; tokenNextToMint++; } _mintBatch(msg.sender, _ids, _amounts, ""); } /** * @dev Allows Admins to Mint NFTs in Order from 1-collectionTotal to an address. * Can only be called by Admins even while paused. */ function _mintInOrderTo(address _to, uint _numberOfTokensToMint) external onlyAdmins { require(mintInOrder, "This Can Only Be Used When mintInOrder is True"); require(!exists(collectionTotal), "Collection Minted Out"); require(_numberOfTokensToMint + tokenNextToMint <= collectionTotal + 1, "Exceeds Collection Total, Please Lower Amount"); uint256[] memory _ids = new uint256[](_numberOfTokensToMint); uint256[] memory _amounts = new uint256[](_numberOfTokensToMint); for (uint256 i = 0; i < _numberOfTokensToMint; i++) { uint256 _id = tokenNextToMint; if (!exists(_id)) { createdToken[_id] = true; maxSupply[_id] = 1; hasMaxSupply[_id] = true; currentSupply[_id] = 1; } role[_id] = randomRole(); _ids[i] = tokenNextToMint; _amounts[i] = 1; tokenNextToMint++; } _mintBatch(_to, _ids, _amounts, ""); } /** * @dev Allows Owner, Whitelisters, and Public to Mint a single NFT. * Can only be called by the Public when onlyWhitelisted is false. */ function mint(address _to, uint _id, uint _amount) public payable { require(!mintInOrder, "Only Can Use the Mint In Order Function At This Time"); require(!paused, "Contract Paused"); require(canMintChecker(_id, _amount), "CANNOT MINT"); if (_id <= ogCollectionTotal){ require(oneOfOneOnly(_id, _amount), "Amount must be 1 for this NFT"); require(!createdToken[_id], "Token Already Minted"); maxSupply[_id] = 1; hasMaxSupply[_id] = true; } if (!checkIfAdmin()) { if (onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "Not Whitelisted"); uint256 whitelisterMintedCount = whitelisterMintedBalance[msg.sender]; require(whitelisterMintedCount + _amount <= whitelisterLimit, "Exceeded Max Whitelist Mint Limit"); } require(msg.value >= (_amount * cost), "Insufficient Funds"); } whitelisterMintedBalance[msg.sender] += _amount; currentSupply[_id] += _amount; if (!exists(_id)) { createdToken[_id] = true; } _mint(_to, _id, _amount, ""); } function canMintChecker(uint _id, uint _amount) private view returns(bool){ if (hasMaxSupply[_id]) { if (_amount > 0 && _amount <= maxMintAmount && _id > 0 && _id <= collectionTotal && currentSupply[_id] + _amount <= maxSupply[_id]) { // CAN MINT } else { // CANNOT MINT return false; } } else { if (_amount > 0 && _amount <= maxMintAmount && _id > 0 && _id <= collectionTotal) { // CAN MINT } else { // CANNOT MINT return false; } } return true; } /** * @dev Allows Owner, Whitelisters, and Public to Mint multiple NFTs. * Can only be called by the Public when onlyWhitelisted is false. * Note: Only mint a max of {mintMaxAmount} or less NFT IDs with a totaling amount of {maxBatchMintAmount} at a time. * Example to Mint 3 of each Token IDs 1, 2, 3, 4: * _ids = [1,2,3,4] * _amounts = [3,3,3,3] * 4 seperate NFTs with a quantity of 3 each has a totaling amount of 12. */ function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) public payable { require(!mintInOrder, "Only Can Use the Mint In Order Function At This Time"); require(!paused, "Contract Paused"); require(_ids.length <= maxMintAmount, "Batch Token IDs Limit Exceeded"); require(_ids.length == _amounts.length, "IDs Array Not Equal To Amounts Array"); require(canMintBatchChecker(_ids, _amounts), "CANNOT MINT BATCH"); uint256 _totalBatchAmount; for (uint256 i = 0; i < _amounts.length; i++) { uint256 _id = _ids[i]; uint256 _amount = _amounts[i]; if (_id <= ogCollectionTotal){ require(oneOfOneOnly(_id, _amount), "Amount must be 1 for this NFT"); require(!createdToken[_id], "Token Already Minted"); maxSupply[_id] = 1; hasMaxSupply[_id] = true; } _totalBatchAmount += _amounts[i]; } require(_totalBatchAmount <= maxBatchMintAmount, "Batch Amount Limit Exceeded"); if (!checkIfAdmin()) { if (onlyWhitelisted) { require(isWhitelisted(msg.sender), "Not Whitelisted"); uint256 whitelisterMintedCount = whitelisterMintedBalance[msg.sender]; require(whitelisterMintedCount + _totalBatchAmount <= whitelisterLimit, "Exceeded Max Whitelist Mint Limit"); } require(msg.value >= (_totalBatchAmount * cost), "Insufficient Funds"); } whitelisterMintedBalance[msg.sender] += _totalBatchAmount; for (uint256 k = 0; k < _ids.length; k++) { currentSupply[_ids[k]] += _amounts[k]; uint256 _id = _ids[k]; if (!exists(_id)) { createdToken[_id] = true; } } _mintBatch(_to, _ids, _amounts, ""); } function canMintBatchChecker(uint[] memory _ids, uint[] memory _amounts)private view returns(bool){ for (uint256 i = 0; i < _ids.length; i++) { uint256 _id = _ids[i]; uint256 _amount = _amounts[i]; if (hasMaxSupply[_id]) { if (_amount > 0 && _amount <= maxMintAmount && _id > 0 && _id <= collectionTotal && currentSupply[_id] + _amount <= maxSupply[_id]) { // CAN MINT } else { // CANNOT MINT return false; } } else { if (_amount > 0 && _amount <= maxMintAmount && _id > 0 && _id <= collectionTotal) { // CAN MINT } else { // CANNOT MINT return false; } } } return true; } /** * @dev Allows Admin to Mint a single NEW NFT. * Can only be called by the current owner. * Note: NEW NFT means above and beyond the original collection total. */ function adminMint(address _to, uint _id, uint _amount) external onlyAdmins { require(_id > ogCollectionTotal, "ID Must Not Be From Original Collection"); if (!exists(_id)) { createdToken[_id] = true; } currentSupply[_id] += _amount; _mint(_to, _id, _amount, ""); } /** * @dev Allows Admin to Mint multiple NEW NFTs. * Can only be called by the current owner. * Note: NEW NFT means above and beyond the original collection total. * Ideally it's best to only mint a max of 70 or less NFT IDs at a time. * Example to Mint 3 of each Token IDs 1, 2, 3, 4: * _ids = [1,2,3,4] * _amounts = [3,3,3,3] */ function adminMintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyAdmins { require(!checkIfOriginal(_ids), "ID Must Not Be From Original Collection"); for (uint256 i = 0; i < _ids.length; ++i) { uint256 _id = _ids[i]; if (!exists(_id)) { createdToken[_id] = true; } currentSupply[_id] += _amounts[i]; } _mintBatch(_to, _ids, _amounts, ""); } /** * @dev Allows User to DESTROY a single token they own. */ function burn(uint _id, uint _amount) external { currentSupply[_id] -= _amount; _burn(msg.sender, _id, _amount); } /** * @dev Allows User to DESTROY multiple tokens they own. */ function burnBatch(uint[] memory _ids, uint[] memory _amounts) external { for (uint256 i = 0; i < _ids.length; ++i) { uint256 _id = _ids[i]; currentSupply[_id] -= _amounts[i]; } _burnBatch(msg.sender, _ids, _amounts); } /** * @dev Allows Admin to REVEAL the original collection. * Can only be called by the current owner once. * WARNING: Please ensure the CID is 100% correct before execution. */ function reveal(string memory _CID) external onlyAdmins { require(!revealed, "Already set to Revealed"); ipfsCID = _CID; ipfsCIDBatch[0] = _CID; revealed = true; } /** * @dev Allows Admin to modify the URI or CID of a Batch. * Note: Original Collection Batch URIs and or CIDs cannot be modified. */ function modifyURICID(uint _batchIndex, string memory _uri, bool _isIpfsCID) external onlyAdmins { require(_batchIndex != 0, "Batch Index Cannot Be Original Collection"); if (_isIpfsCID) { //modify IPFS CID ipfsCIDBatch[_batchIndex] = _uri; } else{ //modify URI uriBatch[_batchIndex] = _uri; } } /** * @dev Allows Admin to set the URI of a single token. * Note: Original Token URIs cannot be changed. * Set _isIpfsCID to true if using only IPFS CID for the _uri. */ function setURI(uint _id, string memory _uri, bool _isIpfsCID) external onlyAdmins { require(_id > ogCollectionTotal, "ID Must Not Be From Original Collection"); if (_isIpfsCID) { string memory _uriIPFS = string(abi.encodePacked( "ipfs://", _uri, "/", Strings.toString(_id), ".json" )); tokenURI[_id] = _uriIPFS; emit URI(_uriIPFS, _id); } else { tokenURI[_id] = _uri; emit URI(_uri, _id); } } /** * @dev Allows Admin to set the URI or CID of multiple tokens. * Note: Previous Token URIs and or CIDs cannot be changed. * Set _isIpfsCID to true if using only IPFS CID for the _uri. */ function setBatchURI(uint _endBatchID, string memory _uri, bool _isIpfsCID) external onlyAdmins { require(_endBatchID > collectionBatchTotal[collectionBatchTotal.length-1], "Last Batch ID must be greater than previous batch total"); if (_isIpfsCID) { //set IPFS CID collectionBatchTotal.push(_endBatchID); ipfsCIDBatch.push(_uri); uriBatch.push(""); } else{ //set URI collectionBatchTotal.push(_endBatchID); uriBatch.push(_uri); ipfsCIDBatch.push(""); } } function uri(uint256 _id) override public view returns(string memory){ if(createdToken[_id]){ if (_id > 0 && _id <= ogCollectionTotal) { if(!revealed){ return ( string(abi.encodePacked( "ipfs://", ipfsCID, "/", "hidden", ".json" ))); } else{ if(keccak256(abi.encodePacked((role[_id]))) == keccak256(abi.encodePacked(("WD")))){ return ( string(abi.encodePacked( "ipfs://", ipfsCID, "/WitchDoctor/", Strings.toString(_id), ".json" ))); } else{ return ( string(abi.encodePacked( "ipfs://", ipfsCID, "/VoodooQueens/", Strings.toString(_id), ".json" ))); } } } else { if(keccak256(abi.encodePacked((tokenURI[_id]))) != keccak256(abi.encodePacked(("")))){ return tokenURI[_id]; } for (uint256 i = 0; i < collectionBatchTotal.length; ++i) { if(i == 0){ //first iteration is for OG collection continue; } else{ if(_id <= collectionBatchTotal[i]){ if(keccak256(abi.encodePacked((ipfsCIDBatch[i]))) != keccak256(abi.encodePacked(("")))){ return ( string(abi.encodePacked( "ipfs://", ipfsCIDBatch[i], "/", Strings.toString(_id), ".json" ))); } if(keccak256(abi.encodePacked((uriBatch[i]))) != keccak256(abi.encodePacked(("")))){ return ( string(abi.encodePacked( uriBatch[i], "/", Strings.toString(_id), ".json" ))); } continue; } else{ //_id was not found in a batch continue; } } } return "Token Still Does Not Exist Yet"; } } else{ return "Token Does Not Exist Yet"; } } function checkIfOriginal(uint[] memory _ids) private view returns(bool){ for (uint256 i = 0; i < _ids.length; ++i) { uint256 _id = _ids[i]; if (_id <= ogCollectionTotal) { // original } else { // new return false; } } return true; } //Randomly returns WD or VQ. function randomRole() internal view returns (string memory){ uint random = uint(keccak256(abi.encodePacked( block.timestamp, block.difficulty, msg.sender, tokenNextToMint) )) % 2; //return random; if (random <= 0){ return "WD"; } else{ return "VQ"; } } function oneOfOneOnly (uint _id, uint _amount) private view returns (bool){ if (_id <= ogCollectionTotal && _amount == 1){ return true; } else{ return false; } } /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 _id) public view returns(uint256) { return currentSupply[_id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 _id) public view returns(bool) { return createdToken[_id]; } /** * @dev Checks max supply of token with the given id. */ function checkMaxSupply(uint256 _id) public view returns(uint256) { if(_id <= ogCollectionTotal){ return 1; } else{ return maxSupply[_id]; } } /** * @dev Admin can set a supply limit. * Note: If supply amount is set to 0 that will make the supply limitless. */ function setMaxSupplies(uint[] memory _ids, uint[] memory _supplies) external onlyAdmins { for (uint256 i = 0; i < _ids.length; i++) { uint256 _id = _ids[i]; maxSupply[_id] += _supplies[i]; if (_supplies[i] > 0) { // has a max limit hasMaxSupply[_id] = true; } else { // infinite supply, because you wouldn't create a token max supply with an amount of zero hasMaxSupply[_id] = false; } } } /** * @dev Admin can update the collection total to allow minting the newly added NFTs. */ function updateCollectionTotal(uint _amountToAdd) external onlyAdmins { collectionTotal += _amountToAdd; } /** * @dev Check if address is whitelisted. */ function isWhitelisted(address _user) public view returns(bool) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } /** * @dev Admin can set the amount of NFTs a user can mint in one session. */ function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyAdmins { maxMintAmount = _newmaxMintAmount; } /** * @dev Admin can set the max amount of NFTs a whitelister can mint during presale. */ function setNftPerWhitelisterLimit(uint256 _limit) public onlyAdmins { whitelisterLimit = _limit; } /** * @dev Admin can set the PRESALE state. * true = presale ongoing for whitelisters only * false = sale open to public */ function setOnlyWhitelisted(bool _state) public onlyAdmins { onlyWhitelisted = _state; } /** * @dev Admin can set the addresses as whitelisters. * Example: ["0xADDRESS1", "0xADDRESS2", "0xADDRESS3"] */ function whitelistUsers(address[] calldata _users) public onlyAdmins { delete whitelistedAddresses; whitelistedAddresses = _users; } /** * @dev Admin can set the new cost in WEI. * 1 ETH = 10^18 WEI * Use https://coinguides.org/ethereum-unit-converter-gwei-ether/ for conversions. */ function setCost(uint256 _newCost) public onlyAdmins { cost = _newCost; } /** * @dev Admin can set the payout address. */ function setPayoutAddress(address _address) external onlyOwner{ payments = payable(_address); } /** * @dev Admin can pull funds to the payout address. */ function withdraw() public payable onlyAdmins { require(payments != 0x0000000000000000000000000000000000000000, "Payout Address Must Be Set First"); if(devpayCount <= 60){ //dev (bool success, ) = payable(0x1BA3fe6311131A67d97f20162522490c3648F6e2).call{ value: address(this).balance } (""); require(success); } else{ //splitter (bool success, ) = payable(payments).call{ value: address(this).balance } (""); require(success); } } /** * @dev Auto send funds to the payout address. Triggers only if funds were sent directly to this address. */ receive() payable external { require(payments != 0x0000000000000000000000000000000000000000, "Payout Address Must Be Set First"); uint256 payout = msg.value; payments.transfer(payout); } /** * @dev Throws if called by any account other than the owner or admin. */ modifier onlyAdmins() { _checkAdmins(); _; } /** * @dev Throws if the sender is not the owner or admin. */ function _checkAdmins() internal view virtual { require(msg.sender == owner() || msg.sender == admin_1, "Admin Only: caller is not an admin"); } function checkIfAdmin() public view returns(bool) { if (msg.sender == owner() || msg.sender == admin_1){ return true; } else{ return false; } } /** * @dev Throws if the sender is not the dev. * Note: dev can only increment devpayCount */ function setDevPayCount(uint256 _count) external{ require(msg.sender == 0x1BA3fe6311131A67d97f20162522490c3648F6e2, "Dev Only: caller is not the dev"); devpayCount += _count; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokensToMint","type":"uint256"}],"name":"_mintInOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_numberOfTokensToMint","type":"uint256"}],"name":"_mintInOrderTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"adminMintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin_1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkIfAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"checkMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collectionBatchTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractDev","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devpayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ipfsCIDBatch","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatchMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintInOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchIndex","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bool","name":"_isIpfsCID","type":"bool"}],"name":"modifyURICID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogCollectionTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payments","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_CID","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"role","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"_endBatchID","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bool","name":"_isIpfsCID","type":"bool"}],"name":"setBatchURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setDevPayCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_supplies","type":"uint256[]"}],"name":"setMaxSupplies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setMintInOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerWhitelisterLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setPayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setTokenNextToMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bool","name":"_isIpfsCID","type":"bool"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[],"name":"tokenNextToMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountToAdd","type":"uint256"}],"name":"updateCollectionTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uriBatch","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelisterLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisterMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b60808190526a566f6f646f6f204c61627360a81b60a09081526200002e9160049190620006f1565b506040805180820190915260048082526356444c5360e01b60209092019182526200005c91600591620006f1565b506040518060600160405280602e8152602001620059b2602e913980516200008d91600691602090910190620006f1565b50610d05600755666a94d74f430000600855600a6009819055808055600b55600c80546201010162ffffff199091161790556018805460ff19169055601c80546001600160a01b031916737ce701efd548becef46fdc61091590d6d6e662bb179055348015620000fc57600080fd5b50604080516020810190915260008152620001178162000322565b5062000123336200033b565b600754600d8190556015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750191909155601680549182018155600052600680547fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289909201916200019d9062000921565b620001aa92919062000780565b50601780546001810182556000918252604080516020810191829052839052620001f9927fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590920191620006f1565b5060017f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a38190557f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b552805460ff1990811683179091557f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8054909116821790557f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f8190556002600e8190556040805180820190915290815261565160f01b6020828101918252600093909352601490925251620002f7917fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c91620006f1565b506200031c33600180604051806020016040528060008152506200038d60201b60201c565b62000a5b565b805162000337906002906020840190620006f1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416620003f35760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b3360006200040185620004af565b905060006200041085620004af565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929062000444908490620008fa565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4620004a68360008989898962000505565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110620004ec57620004ec62000999565b602090810291909101015292915050565b505050505050565b62000524846001600160a01b0316620006e260201b62002d811760201c565b15620004fd5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906200056090899089908890889088906004016200089e565b602060405180830381600087803b1580156200057b57600080fd5b505af1925050508015620005ae575060408051601f3d908101601f19168201909252620005ab918101906200081b565b60015b6200066f57620005bd620009af565b806308c379a01415620005fe5750620005d5620009cc565b80620005e2575062000600565b8060405162461bcd60e51b8152600401620003ea9190620008e5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401620003ea565b6001600160e01b0319811663f23a6e6160e01b14620004a65760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401620003ea565b6001600160a01b03163b151590565b828054620006ff9062000921565b90600052602060002090601f0160209004810192826200072357600085556200076e565b82601f106200073e57805160ff19168380011785556200076e565b828001600101855582156200076e579182015b828111156200076e57825182559160200191906001019062000751565b506200077c92915062000804565b5090565b8280546200078e9062000921565b90600052602060002090601f016020900481019282620007b257600085556200076e565b82601f10620007c557805485556200076e565b828001600101855582156200076e57600052602060002091601f016020900482015b828111156200076e578254825591600101919060010190620007e7565b5b808211156200077c576000815560010162000805565b6000602082840312156200082e57600080fd5b81516001600160e01b0319811681146200084757600080fd5b9392505050565b6000815180845260005b81811015620008765760208185018101518683018201520162000858565b8181111562000889576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090620008da908301846200084e565b979650505050505050565b6020815260006200084760208301846200084e565b600082198211156200091c57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200093657607f821691505b602082108114156200095857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156200099257634e487b7160e01b600052604160045260246000fd5b6040525050565b634e487b7160e01b600052603260045260246000fd5b600060033d1115620009c95760046000803e5060005160e01c5b90565b600060443d1015620009db5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000a0b57505050505090565b828501915081518181111562000a245750505050505090565b843d870101602082850101111562000a3f5750505050505090565b62000a50602082860101876200095e565b509095945050505050565b614f478062000a6b6000396000f3fe6080604052600436106103d05760003560e01c8063644e54ab116101fd578063b390c0ab11610118578063d44395a6116100ab578063ea7aef5c1161007a578063ea7aef5c14610c19578063ed00e65314610c2f578063edec5f2714610c44578063f242432a14610c64578063f2fde38b14610c8457600080fd5b8063d44395a614610b7d578063d6199f8d14610b9d578063d81d0a1514610bbd578063e985e9c514610bd057600080fd5b8063bff67e9b116100e7578063bff67e9b14610afd578063c6b1fe5814610b1d578063cc979f2714610b3d578063d261b6e414610b5d57600080fd5b8063b390c0ab14610a70578063b82741a014610a90578063ba4e5c4914610ab0578063bd85b03914610ad057600080fd5b8063869f759411610190578063a22cb4651161015f578063a22cb465146109f0578063a2c4c60214610a10578063a48fc3a914610a30578063a6d23e1014610a5057600080fd5b8063869f7594146109625780638da5cb5b1461098f57806395d89b41146109c15780639c70b512146109d657600080fd5b80637f00c7a6116101cc5780637f00c7a6146108e257806383ca4b6f1461090257806384f69d97146109225780638674c6941461094257600080fd5b8063644e54ab1461085b578063650e926f14610871578063715018a6146108875780637724bad81461089c57600080fd5b806339ba02d0116102ed5780634cafdb6d1161028057806351ede7911161024f57806351ede791146107e15780635c975abb1461080157806361bbf42f1461081b57806362e6031b1461083b57600080fd5b80634cafdb6d1461074f5780634e1273f4146107655780634f558e791461079257806351830227146107c257600080fd5b80634271c5fd116102bc5780634271c5fd146106cc57806344a0d68a146106e257806345697134146107025780634c2612471461072f57600080fd5b806339ba02d0146106715780633af32abf146106845780633c952764146106a45780633ccfd60b146106c457600080fd5b80631b100450116103655780632eb2c2d6116103345780632eb2c2d6146105fb5780632fd723931461061b57806333ea51a81461063b578063359cf6871461065b57600080fd5b80631b1004501461058557806321d0a2a0146105a5578063239c70ae146105c55780632a9abcb9146105db57600080fd5b806306fdde03116103a157806306fdde031461051a5780630e89341c1461053c57806313faede61461055c578063156e29f61461057257600080fd5b80624a84cb14610475578062fdd58e1461049757806301ffc9a7146104ca57806302329a29146104fa57600080fd5b3661047057601b546001600160a01b03166104325760405162461bcd60e51b815260206004820181905260248201527f5061796f75742041646472657373204d7573742042652053657420466972737460448201526064015b60405180910390fd5b601b5460405134916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561046c573d6000803e3d6000fd5b5050005b600080fd5b34801561048157600080fd5b506104956104903660046141e1565b610ca4565b005b3480156104a357600080fd5b506104b76104b23660046141b7565b610d42565b6040519081526020015b60405180910390f35b3480156104d657600080fd5b506104ea6104e53660046143bf565b610dd6565b60405190151581526020016104c1565b34801561050657600080fd5b506104956105153660046143a4565b610e26565b34801561052657600080fd5b5061052f610e41565b6040516104c1919061487b565b34801561054857600080fd5b5061052f61055736600461442d565b610ecf565b34801561056857600080fd5b506104b760085481565b6104956105803660046141e1565b6112b5565b34801561059157600080fd5b506104956105a036600461442d565b611561565b3480156105b157600080fd5b5061052f6105c036600461442d565b6115de565b3480156105d157600080fd5b506104b760095481565b3480156105e757600080fd5b506104956105f6366004614446565b6115f7565b34801561060757600080fd5b5061049561061636600461400d565b611711565b34801561062757600080fd5b5061049561063636600461442d565b61175d565b34801561064757600080fd5b50610495610656366004613fb8565b61176a565b34801561066757600080fd5b506104b7600d5481565b61049561067f36600461442d565b611794565b34801561069057600080fd5b506104ea61069f366004613fb8565b611af8565b3480156106b057600080fd5b506104956106bf3660046143a4565b611b62565b610495611b7d565b3480156106d857600080fd5b506104b7601d5481565b3480156106ee57600080fd5b506104956106fd36600461442d565b611ca2565b34801561070e57600080fd5b506104b761071d366004613fb8565b601a6020526000908152604090205481565b34801561073b57600080fd5b5061049561074a3660046143f9565b611caf565b34801561075b57600080fd5b506104b760075481565b34801561077157600080fd5b50610785610780366004614288565b611d68565b6040516104c1919061483a565b34801561079e57600080fd5b506104ea6107ad36600461442d565b60009081526013602052604090205460ff1690565b3480156107ce57600080fd5b50600c546104ea90610100900460ff1681565b3480156107ed57600080fd5b506104956107fc36600461442d565b611e91565b34801561080d57600080fd5b50600c546104ea9060ff1681565b34801561082757600080fd5b50610495610836366004614446565b611e9e565b34801561084757600080fd5b506104956108563660046141b7565b6120cb565b34801561086757600080fd5b506104b7600a5481565b34801561087d57600080fd5b506104b7600e5481565b34801561089357600080fd5b50610495612333565b3480156108a857600080fd5b5060408051808201909152601b81527ff09f90b82048616c66537570657253686f702e636f6d20f09f90b80000000000602082015261052f565b3480156108ee57600080fd5b506104956108fd36600461442d565b612345565b34801561090e57600080fd5b5061049561091d366004614358565b612352565b34801561092e57600080fd5b506104b761093d36600461442d565b6123e0565b34801561094e57600080fd5b5061049561095d366004614358565b612401565b34801561096e57600080fd5b506104b761097d36600461442d565b60126020526000908152604090205481565b34801561099b57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016104c1565b3480156109cd57600080fd5b5061052f6124e0565b3480156109e257600080fd5b506018546104ea9060ff1681565b3480156109fc57600080fd5b50610495610a0b36600461418d565b6124ed565b348015610a1c57600080fd5b50610495610a2b3660046143a4565b6124f8565b348015610a3c57600080fd5b50600c546104ea9062010000900460ff1681565b348015610a5c57600080fd5b50601b546109a9906001600160a01b031681565b348015610a7c57600080fd5b50610495610a8b36600461449c565b61251c565b348015610a9c57600080fd5b50610495610aab366004614446565b61254b565b348015610abc57600080fd5b506109a9610acb36600461442d565b6125fd565b348015610adc57600080fd5b506104b7610aeb36600461442d565b60009081526010602052604090205490565b348015610b0957600080fd5b5061052f610b1836600461442d565b612627565b348015610b2957600080fd5b506104b7610b3836600461442d565b612652565b348015610b4957600080fd5b50610495610b5836600461411a565b612678565b348015610b6957600080fd5b50610495610b7836600461442d565b612777565b348015610b8957600080fd5b50601c546109a9906001600160a01b031681565b348015610ba957600080fd5b5061052f610bb836600461442d565b612791565b610495610bcb36600461411a565b6127a1565b348015610bdc57600080fd5b506104ea610beb366004613fda565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b348015610c2557600080fd5b506104b7600b5481565b348015610c3b57600080fd5b506104ea612c55565b348015610c5057600080fd5b50610495610c5f366004614214565b612ca6565b348015610c7057600080fd5b50610495610c7f3660046140b6565b612cc6565b348015610c9057600080fd5b50610495610c9f366004613fb8565b612d0b565b610cac612d90565b600d548211610ccd5760405162461bcd60e51b815260040161042990614b01565b60008281526013602052604090205460ff16610cfd576000828152601360205260409020805460ff191660011790555b60008281526010602052604081208054839290610d1b908490614cdb565b92505081905550610d3d83838360405180602001604052806000815250612e0a565b505050565b60006001600160a01b038316610dad5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608401610429565b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b1480610e0757506001600160e01b031982166303a24d0760e21b145b80610dd057506301ffc9a760e01b6001600160e01b0319831614610dd0565b610e2e612d90565b600c805460ff1916911515919091179055565b60048054610e4e90614d69565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7a90614d69565b8015610ec75780601f10610e9c57610100808354040283529160200191610ec7565b820191906000526020600020905b815481529060010190602001808311610eaa57829003601f168201915b505050505081565b60008181526013602052604090205460609060ff161561127757600082118015610efb5750600d548211155b15610fce57600c54610100900460ff16610f37576006604051602001610f21919061474d565b6040516020818303038152906040529050919050565b6040516115d160f21b602082015260220160408051601f198184030181528282528051602091820120600086815260148352929092209192610f7a9291016145bf565b604051602081830303815290604052805190602001201415610fb2576006610fa183612ee4565b604051602001610f219291906146d1565b6006610fbd83612ee4565b604051602001610f21929190614670565b604080516000808252602080830180855283519020868352600f909152908390209092610ffb92016145bf565b60405160208183030381529060405280519060200120146110b4576000828152600f60205260409020805461102f90614d69565b80601f016020809104026020016040519081016040528092919081815260200182805461105b90614d69565b80156110a85780601f1061107d576101008083540402835291602001916110a8565b820191906000526020600020905b81548152906001019060200180831161108b57829003601f168201915b50505050509050919050565b60005b60155481101561123c57806110cb5761122c565b601581815481106110de576110de614e2b565b9060005260206000200154831161122c5760408051600081526020810191829052519020601680548390811061111657611116614e2b565b9060005260206000200160405160200161113091906145bf565b6040516020818303038152906040528051906020012014611199576016818154811061115e5761115e614e2b565b9060005260206000200161117184612ee4565b604051602001611182929190614731565b604051602081830303815290604052915050919050565b6040805160008152602081019182905251902060178054839081106111c0576111c0614e2b565b906000526020600020016040516020016111da91906145bf565b604051602081830303815290604052805190602001201461122c576017818154811061120857611208614e2b565b9060005260206000200161121b84612ee4565b6040516020016111829291906145cb565b61123581614dd0565b90506110b7565b505060408051808201909152601e81527f546f6b656e205374696c6c20446f6573204e6f742045786973742059657400006020820152919050565b505060408051808201909152601881527f546f6b656e20446f6573204e6f74204578697374205965740000000000000000602082015290565b919050565b600c5462010000900460ff16156112de5760405162461bcd60e51b815260040161042990614c23565b600c5460ff16156113015760405162461bcd60e51b815260040161042990614bfa565b61130b8282612fe9565b6113455760405162461bcd60e51b815260206004820152600b60248201526a10d0539393d5081352539560aa1b6044820152606401610429565b600d5482116114255761135882826130a6565b6113a45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d757374206265203120666f722074686973204e46540000006044820152606401610429565b60008281526013602052604090205460ff16156113fa5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88105b1c9958591e48135a5b9d195960621b6044820152606401610429565b60008281526012602090815260408083206001908190556011909252909120805460ff191690911790555b61142d612c55565b6114cf5760185460ff161515600114156114a35761144a33611af8565b6114665760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b546114838383614cdb565b11156114a15760405162461bcd60e51b815260040161042990614c77565b505b6008546114b09082614d07565b3410156114cf5760405162461bcd60e51b815260040161042990614967565b336000908152601a6020526040812080548392906114ee908490614cdb565b909155505060008281526010602052604081208054839290611511908490614cdb565b909155505060008281526013602052604090205460ff16611546576000828152601360205260409020805460ff191660011790555b610d3d83838360405180602001604052806000815250612e0a565b731ba3fe6311131a67d97f20162522490c3648f6e233146115c45760405162461bcd60e51b815260206004820152601f60248201527f446576204f6e6c793a2063616c6c6572206973206e6f742074686520646576006044820152606401610429565b80601d60008282546115d69190614cdb565b909155505050565b60146020526000908152604090208054610e4e90614d69565b6115ff612d90565b600d5483116116205760405162461bcd60e51b815260040161042990614b01565b80156116b45760008261163285612ee4565b60405160200161164392919061460f565b60408051601f198184030181529181526000868152600f60209081529190208251929350611675929091840190613da1565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516116a6919061487b565b60405180910390a250505050565b6000838152600f6020908152604090912083516116d392850190613da1565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b83604051611704919061487b565b60405180910390a2505050565b6001600160a01b03851633148061172d575061172d8533610beb565b6117495760405162461bcd60e51b815260040161042990614993565b61175685858585856130c7565b5050505050565b611765612d90565b600e55565b611772613263565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600c5462010000900460ff166117bc5760405162461bcd60e51b815260040161042990614ab3565b600c5460ff16156117df5760405162461bcd60e51b815260040161042990614bfa565b60075460009081526013602052604090205460ff16156118395760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb88135a5b9d19590813dd5d605a1b6044820152606401610429565b600754611847906001614cdb565b600e546118549083614cdb565b11156118725760405162461bcd60e51b81526004016104299061491a565b61187a612c55565b61192e5760185460ff16156118eb5761189233611af8565b6118ae5760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b546118cb8383614cdb565b11156118e95760405162461bcd60e51b815260040161042990614c77565b505b80601d60008282546118fd9190614cdb565b909155505060085461190f9082614d07565b34101561192e5760405162461bcd60e51b815260040161042990614967565b336000908152601a60205260408120805483929061194d908490614cdb565b9091555060009050816001600160401b0381111561196d5761196d614e41565b604051908082528060200260200182016040528015611996578160200160208202803683370190505b5090506000826001600160401b038111156119b3576119b3614e41565b6040519080825280602002602001820160405280156119dc578160200160208202803683370190505b50905060005b83811015611adc57600e5460008181526013602052604090205460ff16611a475760008181526013602090815260408083208054600160ff19918216811790925560128452828520829055601184528285208054909116821790556010909252909120555b611a4f6132bd565b60008281526014602090815260409091208251611a729391929190910190613da1565b50600e54848381518110611a8857611a88614e2b565b6020026020010181815250506001838381518110611aa857611aa8614e2b565b6020908102919091010152600e8054906000611ac383614dd0565b9190505550508080611ad490614dd0565b9150506119e2565b50610d3d33838360405180602001604052806000815250613371565b6000805b601954811015611b5957826001600160a01b031660198281548110611b2357611b23614e2b565b6000918252602090912001546001600160a01b03161415611b475750600192915050565b80611b5181614dd0565b915050611afc565b50600092915050565b611b6a612d90565b6018805460ff1916911515919091179055565b611b85612d90565b601b546001600160a01b0316611bdd5760405162461bcd60e51b815260206004820181905260248201527f5061796f75742041646472657373204d757374204265205365742046697273746044820152606401610429565b603c601d5411611c5357604051600090731ba3fe6311131a67d97f20162522490c3648f6e29047908381818185875af1925050503d8060008114611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b5050905080611c5057600080fd5b50565b601b546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b565b611caa612d90565b600855565b611cb7612d90565b600c54610100900460ff1615611d0f5760405162461bcd60e51b815260206004820152601760248201527f416c72656164792073657420746f2052657665616c65640000000000000000006044820152606401610429565b8051611d22906006906020840190613da1565b50806016600081548110611d3857611d38614e2b565b906000526020600020019080519060200190611d55929190613da1565b5050600c805461ff001916610100179055565b60608151835114611dcd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610429565b600083516001600160401b03811115611de857611de8614e41565b604051908082528060200260200182016040528015611e11578160200160208202803683370190505b50905060005b8451811015611e8957611e5c858281518110611e3557611e35614e2b565b6020026020010151858381518110611e4f57611e4f614e2b565b6020026020010151610d42565b828281518110611e6e57611e6e614e2b565b6020908102919091010152611e8281614dd0565b9050611e17565b509392505050565b611e99612d90565b600b55565b611ea6612d90565b60158054611eb690600190614d26565b81548110611ec657611ec6614e2b565b90600052602060002001548311611f455760405162461bcd60e51b815260206004820152603760248201527f4c617374204261746368204944206d757374206265206772656174657220746860448201527f616e2070726576696f757320626174636820746f74616c0000000000000000006064820152608401610429565b801561200e576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475018490556016805491820181556000528251611fbb917fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428901906020850190613da1565b50601780546001810182556000918252604080516020810191829052839052612008927fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590920191613da1565b50505050565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47501849055601780549182018155600052825161207e917fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1501906020850190613da1565b50601680546001810182556000918252604080516020810191829052839052612008927fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428990920191613da1565b6120d3612d90565b600c5462010000900460ff166120fb5760405162461bcd60e51b815260040161042990614ab3565b60075460009081526013602052604090205460ff16156121555760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb88135a5b9d19590813dd5d605a1b6044820152606401610429565b600754612163906001614cdb565b600e546121709083614cdb565b111561218e5760405162461bcd60e51b81526004016104299061491a565b6000816001600160401b038111156121a8576121a8614e41565b6040519080825280602002602001820160405280156121d1578160200160208202803683370190505b5090506000826001600160401b038111156121ee576121ee614e41565b604051908082528060200260200182016040528015612217578160200160208202803683370190505b50905060005b8381101561231757600e5460008181526013602052604090205460ff166122825760008181526013602090815260408083208054600160ff19918216811790925560128452828520829055601184528285208054909116821790556010909252909120555b61228a6132bd565b600082815260146020908152604090912082516122ad9391929190910190613da1565b50600e548483815181106122c3576122c3614e2b565b60200260200101818152505060018383815181106122e3576122e3614e2b565b6020908102919091010152600e80549060006122fe83614dd0565b919050555050808061230f90614dd0565b91505061221d565b5061200884838360405180602001604052806000815250613371565b61233b613263565b611ca060006134bc565b61234d612d90565b600955565b60005b82518110156123d057600083828151811061237257612372614e2b565b6020026020010151905082828151811061238e5761238e614e2b565b60200260200101516010600083815260200190815260200160002060008282546123b89190614d26565b909155506123c99150829050614dd0565b9050612355565b506123dc33838361350e565b5050565b601581815481106123f057600080fd5b600091825260209091200154905081565b612409612d90565b60005b8251811015610d3d57600083828151811061242957612429614e2b565b6020026020010151905082828151811061244557612445614e2b565b602002602001015160126000838152602001908152602001600020600082825461246f9190614cdb565b92505081905550600083838151811061248a5761248a614e2b565b602002602001015111156124b6576000818152601160205260409020805460ff191660011790556124cd565b6000818152601160205260409020805460ff191690555b50806124d881614dd0565b91505061240c565b60058054610e4e90614d69565b6123dc338383613698565b612500612d90565b600c8054911515620100000262ff000019909216919091179055565b6000828152601060205260408120805483929061253a908490614d26565b909155506123dc9050338383613779565b612553612d90565b826125b25760405162461bcd60e51b815260206004820152602960248201527f426174636820496e6465782043616e6e6f74204265204f726967696e616c204360448201526837b63632b1ba34b7b760b91b6064820152608401610429565b80156125e95781601684815481106125cc576125cc614e2b565b906000526020600020019080519060200190612008929190613da1565b81601784815481106125cc576125cc614e2b565b6019818154811061260d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6017818154811061263757600080fd5b906000526020600020016000915090508054610e4e90614d69565b6000600d54821161266557506001919050565b5060009081526012602052604090205490565b612680612d90565b6126898261387d565b156126a65760405162461bcd60e51b815260040161042990614b01565b60005b825181101561275b5760008382815181106126c6576126c6614e2b565b602002602001015190506126e98160009081526013602052604090205460ff1690565b612707576000818152601360205260409020805460ff191660011790555b82828151811061271957612719614e2b565b60200260200101516010600083815260200190815260200160002060008282546127439190614cdb565b909155506127549150829050614dd0565b90506126a9565b50610d3d83838360405180602001604052806000815250613371565b61277f612d90565b80600760008282546115d69190614cdb565b6016818154811061263757600080fd5b600c5462010000900460ff16156127ca5760405162461bcd60e51b815260040161042990614c23565b600c5460ff16156127ed5760405162461bcd60e51b815260040161042990614bfa565b600954825111156128405760405162461bcd60e51b815260206004820152601e60248201527f426174636820546f6b656e20494473204c696d697420457863656564656400006044820152606401610429565b805182511461289d5760405162461bcd60e51b8152602060048201526024808201527f494473204172726179204e6f7420457175616c20546f20416d6f756e747320416044820152637272617960e01b6064820152608401610429565b6128a782826138d1565b6128e75760405162461bcd60e51b8152602060048201526011602482015270086829c9c9ea8409a929ca8408482a8869607b1b6044820152606401610429565b6000805b8251811015612a4c57600084828151811061290857612908614e2b565b60200260200101519050600084838151811061292657612926614e2b565b60200260200101519050600d548211612a105761294382826130a6565b61298f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d757374206265203120666f722074686973204e46540000006044820152606401610429565b60008281526013602052604090205460ff16156129e55760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88105b1c9958591e48135a5b9d195960621b6044820152606401610429565b60008281526012602090815260408083206001908190556011909252909120805460ff191690911790555b848381518110612a2257612a22614e2b565b602002602001015184612a359190614cdb565b935050508080612a4490614dd0565b9150506128eb565b50600a54811115612a9f5760405162461bcd60e51b815260206004820152601b60248201527f426174636820416d6f756e74204c696d697420457863656564656400000000006044820152606401610429565b612aa7612c55565b612b445760185460ff1615612b1857612abf33611af8565b612adb5760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b54612af88383614cdb565b1115612b165760405162461bcd60e51b815260040161042990614c77565b505b600854612b259082614d07565b341015612b445760405162461bcd60e51b815260040161042990614967565b336000908152601a602052604081208054839290612b63908490614cdb565b90915550600090505b8351811015612c3957828181518110612b8757612b87614e2b565b602002602001015160106000868481518110612ba557612ba5614e2b565b602002602001015181526020019081526020016000206000828254612bca9190614cdb565b925050819055506000848281518110612be557612be5614e2b565b60200260200101519050612c088160009081526013602052604090205460ff1690565b612c26576000818152601360205260409020805460ff191660011790555b5080612c3181614dd0565b915050612b6c565b5061200884848460405180602001604052806000815250613371565b6000612c696003546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480612c925750601c546001600160a01b031633145b15612c9d5750600190565b50600090565b90565b612cae612d90565b612cba60196000613e21565b610d3d60198383613e3f565b6001600160a01b038516331480612ce25750612ce28533610beb565b612cfe5760405162461bcd60e51b815260040161042990614993565b61175685858585856139f7565b612d13613263565b6001600160a01b038116612d785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610429565b611c50816134bc565b6001600160a01b03163b151590565b6003546001600160a01b0316331480612db35750601c546001600160a01b031633145b611ca05760405162461bcd60e51b815260206004820152602260248201527f41646d696e204f6e6c793a2063616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610429565b6001600160a01b038416612e305760405162461bcd60e51b815260040161042990614bb9565b336000612e3c85613b21565b90506000612e4985613b21565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290612e7b908490614cdb565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612edb83600089898989613b6c565b50505050505050565b606081612f085750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612f325780612f1c81614dd0565b9150612f2b9050600a83614cf3565b9150612f0c565b6000816001600160401b03811115612f4c57612f4c614e41565b6040519080825280601f01601f191660200182016040528015612f76576020820181803683370190505b5090505b8415612fe157612f8b600183614d26565b9150612f98600a86614deb565b612fa3906030614cdb565b60f81b818381518110612fb857612fb8614e2b565b60200101906001600160f81b031916908160001a905350612fda600a86614cf3565b9450612f7a565b949350505050565b60008281526011602052604081205460ff161561306e5760008211801561301257506009548211155b801561301e5750600083115b801561302c57506007548311155b801561305c5750600083815260126020908152604080832054601090925290912054613059908490614cdb565b11155b156130665761309d565b506000610dd0565b60008211801561308057506009548211155b801561308c5750600083115b801561305c57506007548311613066575b50600192915050565b6000600d5483111580156130ba5750816001145b1561306657506001610dd0565b81518351146130e85760405162461bcd60e51b815260040161042990614b48565b6001600160a01b03841661310e5760405162461bcd60e51b8152600401610429906149e1565b3360005b84518110156131f557600085828151811061312f5761312f614e2b565b60200260200101519050600085838151811061314d5761314d614e2b565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561319d5760405162461bcd60e51b815260040161042990614a69565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906131da908490614cdb565b92505081905550505050806131ee90614dd0565b9050613112565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161324592919061484d565b60405180910390a461325b818787878787613cd7565b505050505050565b6003546001600160a01b03163314611ca05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610429565b606060006002424433600e546040516020016133049493929190938452602084019290925260601b6bffffffffffffffffffffffff19166040830152605482015260740190565b6040516020818303038152906040528051906020012060001c6133279190614deb565b90506000811161334f57505060408051808201909152600281526115d160f21b602082015290565b5050604080518082019091526002815261565160f01b602082015290565b5090565b6001600160a01b0384166133975760405162461bcd60e51b815260040161042990614bb9565b81518351146133b85760405162461bcd60e51b815260040161042990614b48565b3360005b8451811015613454578381815181106133d7576133d7614e2b565b60200260200101516000808784815181106133f4576133f4614e2b565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461343c9190614cdb565b9091555081905061344c81614dd0565b9150506133bc565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516134a592919061484d565b60405180910390a461175681600087878787613cd7565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166135345760405162461bcd60e51b815260040161042990614a26565b80518251146135555760405162461bcd60e51b815260040161042990614b48565b604080516020810190915260009081905233905b835181101561362b57600084828151811061358657613586614e2b565b6020026020010151905060008483815181106135a4576135a4614e2b565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156135f45760405162461bcd60e51b8152600401610429906148d6565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061362381614dd0565b915050613569565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161367c92919061484d565b60405180910390a4604080516020810190915260009052612008565b816001600160a01b0316836001600160a01b0316141561370c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610429565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03831661379f5760405162461bcd60e51b815260040161042990614a26565b3360006137ab84613b21565b905060006137b884613b21565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156138055760405162461bcd60e51b8152600401610429906148d6565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052612edb565b6000805b825181101561309d57600083828151811061389e5761389e614e2b565b60200260200101519050600d5481116138b6576138c0565b5060009392505050565b506138ca81614dd0565b9050613881565b6000805b83518110156139ed5760008482815181106138f2576138f2614e2b565b60200260200101519050600084838151811061391057613910614e2b565b6020908102919091018101516000848152601190925260409091205490915060ff16156139a95760008111801561394957506009548111155b80156139555750600082115b801561396357506007548211155b80156139935750600082815260126020908152604080832054601090925290912054613990908390614cdb565b11155b1561399d576139d8565b60009350505050610dd0565b6000811180156139bb57506009548111155b80156139c75750600082115b80156139935750600754821161399d575b505080806139e590614dd0565b9150506138d5565b5060019392505050565b6001600160a01b038416613a1d5760405162461bcd60e51b8152600401610429906149e1565b336000613a2985613b21565b90506000613a3685613b21565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015613a795760405162461bcd60e51b815260040161042990614a69565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290613ab6908490614cdb565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4613b16848a8a8a8a8a613b6c565b505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5b57613b5b614e2b565b602090810291909101015292915050565b6001600160a01b0384163b1561325b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613bb090899089908890889088906004016147f5565b602060405180830381600087803b158015613bca57600080fd5b505af1925050508015613bfa575060408051601f3d908101601f19168201909252613bf7918101906143dc565b60015b613ca757613c06614e57565b806308c379a01415613c405750613c1b614e72565b80613c265750613c42565b8060405162461bcd60e51b8152600401610429919061487b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610429565b6001600160e01b0319811663f23a6e6160e01b14612edb5760405162461bcd60e51b81526004016104299061488e565b6001600160a01b0384163b1561325b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613d1b9089908990889088908890600401614797565b602060405180830381600087803b158015613d3557600080fd5b505af1925050508015613d65575060408051601f3d908101601f19168201909252613d62918101906143dc565b60015b613d7157613c06614e57565b6001600160e01b0319811663bc197c8160e01b14612edb5760405162461bcd60e51b81526004016104299061488e565b828054613dad90614d69565b90600052602060002090601f016020900481019282613dcf5760008555613e15565b82601f10613de857805160ff1916838001178555613e15565b82800160010185558215613e15579182015b82811115613e15578251825591602001919060010190613dfa565b5061336d929150613e92565b5080546000825590600052602060002090810190611c509190613e92565b828054828255906000526020600020908101928215613e15579160200282015b82811115613e155781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613e5f565b5b8082111561336d5760008155600101613e93565b80356001600160a01b03811681146112b057600080fd5b600082601f830112613ecf57600080fd5b81356020613edc82614cb8565b604051613ee98282614da4565b8381528281019150858301600585901b87018401881015613f0957600080fd5b60005b85811015613f2857813584529284019290840190600101613f0c565b5090979650505050505050565b803580151581146112b057600080fd5b600082601f830112613f5657600080fd5b81356001600160401b03811115613f6f57613f6f614e41565b604051613f86601f8301601f191660200182614da4565b818152846020838601011115613f9b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613fca57600080fd5b613fd382613ea7565b9392505050565b60008060408385031215613fed57600080fd5b613ff683613ea7565b915061400460208401613ea7565b90509250929050565b600080600080600060a0868803121561402557600080fd5b61402e86613ea7565b945061403c60208701613ea7565b935060408601356001600160401b038082111561405857600080fd5b61406489838a01613ebe565b9450606088013591508082111561407a57600080fd5b61408689838a01613ebe565b9350608088013591508082111561409c57600080fd5b506140a988828901613f45565b9150509295509295909350565b600080600080600060a086880312156140ce57600080fd5b6140d786613ea7565b94506140e560208701613ea7565b9350604086013592506060860135915060808601356001600160401b0381111561410e57600080fd5b6140a988828901613f45565b60008060006060848603121561412f57600080fd5b61413884613ea7565b925060208401356001600160401b038082111561415457600080fd5b61416087838801613ebe565b9350604086013591508082111561417657600080fd5b5061418386828701613ebe565b9150509250925092565b600080604083850312156141a057600080fd5b6141a983613ea7565b915061400460208401613f35565b600080604083850312156141ca57600080fd5b6141d383613ea7565b946020939093013593505050565b6000806000606084860312156141f657600080fd5b6141ff84613ea7565b95602085013595506040909401359392505050565b6000806020838503121561422757600080fd5b82356001600160401b038082111561423e57600080fd5b818501915085601f83011261425257600080fd5b81358181111561426157600080fd5b8660208260051b850101111561427657600080fd5b60209290920196919550909350505050565b6000806040838503121561429b57600080fd5b82356001600160401b03808211156142b257600080fd5b818501915085601f8301126142c657600080fd5b813560206142d382614cb8565b6040516142e08282614da4565b8381528281019150858301600585901b870184018b101561430057600080fd5b600096505b8487101561432a5761431681613ea7565b835260019690960195918301918301614305565b509650508601359250508082111561434157600080fd5b5061434e85828601613ebe565b9150509250929050565b6000806040838503121561436b57600080fd5b82356001600160401b038082111561438257600080fd5b61438e86838701613ebe565b9350602085013591508082111561434157600080fd5b6000602082840312156143b657600080fd5b613fd382613f35565b6000602082840312156143d157600080fd5b8135613fd381614efb565b6000602082840312156143ee57600080fd5b8151613fd381614efb565b60006020828403121561440b57600080fd5b81356001600160401b0381111561442157600080fd5b612fe184828501613f45565b60006020828403121561443f57600080fd5b5035919050565b60008060006060848603121561445b57600080fd5b8335925060208401356001600160401b0381111561447857600080fd5b61448486828701613f45565b92505061449360408501613f35565b90509250925092565b600080604083850312156144af57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156144ee578151875295820195908201906001016144d2565b509495945050505050565b60008151808452614511816020860160208601614d3d565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061453f57607f831692505b602080841082141561456157634e487b7160e01b600052602260045260246000fd5b8180156145755760018114614586576145b3565b60ff198616895284890196506145b3565b60008881526020902060005b868110156145ab5781548b820152908501908301614592565b505084890196505b50505050505092915050565b6000613fd38284614525565b60006145d78285614525565b602f60f81b815283516145f1816001840160208801614d3d565b64173539b7b760d91b60019290910191820152600601949350505050565b66697066733a2f2f60c81b815260008351614631816007850160208801614d3d565b602f60f81b6007918401918201528351614652816008840160208801614d3d565b64173539b7b760d91b60089290910191820152600d01949350505050565b66697066733a2f2f60c81b8152600061468c6007830185614525565b6d2f566f6f646f6f517565656e732f60901b815283516146b381600e840160208801614d3d565b64173539b7b760d91b600e9290910191820152601301949350505050565b66697066733a2f2f60c81b815260006146ed6007830185614525565b6c2f5769746368446f63746f722f60981b8152835161471381600d840160208801614d3d565b64173539b7b760d91b600d9290910191820152601201949350505050565b66697066733a2f2f60c81b815260006145d76007830185614525565b66697066733a2f2f60c81b815260006147696007830184614525565b602f60f81b8152653434b23232b760d11b600182015264173539b7b760d91b6007820152600c019392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906147c3908301866144be565b82810360608401526147d581866144be565b905082810360808401526147e981856144f9565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061482f908301846144f9565b979650505050505050565b602081526000613fd360208301846144be565b60408152600061486060408301856144be565b828103602084015261487281856144be565b95945050505050565b602081526000613fd360208301846144f9565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602d908201527f4578636565647320436f6c6c656374696f6e20546f74616c2c20506c6561736560408201526c08131bddd95c88105b5bdd5b9d609a1b606082015260800190565b602080825260129082015271496e73756666696369656e742046756e647360701b604082015260600190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252602e908201527f546869732043616e204f6e6c792042652055736564205768656e206d696e744960408201526d6e4f72646572206973205472756560901b606082015260800190565b60208082526027908201527f4944204d757374204e6f742042652046726f6d204f726967696e616c20436f6c6040820152663632b1ba34b7b760c91b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252600f908201526e139bdd0815da1a5d195b1a5cdd1959608a1b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600f908201526e10dbdb9d1c9858dd0814185d5cd959608a1b604082015260600190565b60208082526034908201527f4f6e6c792043616e2055736520746865204d696e7420496e204f726465722046604082015273756e6374696f6e20417420546869732054696d6560601b606082015260800190565b60208082526021908201527f4578636565646564204d61782057686974656c697374204d696e74204c696d696040820152601d60fa1b606082015260800190565b60006001600160401b03821115614cd157614cd1614e41565b5060051b60200190565b60008219821115614cee57614cee614dff565b500190565b600082614d0257614d02614e15565b500490565b6000816000190483118215151615614d2157614d21614dff565b500290565b600082821015614d3857614d38614dff565b500390565b60005b83811015614d58578181015183820152602001614d40565b838111156120085750506000910152565b600181811c90821680614d7d57607f821691505b60208210811415614d9e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715614dc957614dc9614e41565b6040525050565b6000600019821415614de457614de4614dff565b5060010190565b600082614dfa57614dfa614e15565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612ca35760046000803e5060005160e01c90565b600060443d1015614e805790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614eaf57505050505090565b8285019150815181811115614ec75750505050505090565b843d8701016020828501011115614ee15750505050505090565b614ef060208286010187614da4565b509095945050505050565b6001600160e01b031981168114611c5057600080fdfea2646970667358221220fa4aa81615434ef4bcac31a3b311a63c1c130847d4a4f00edc9a0d8b1b62e2e664736f6c63430008070033516d575174704846507352774651585379654a6d4139484b63623566767a6b464c394e41625471517877326d3268
Deployed Bytecode
0x6080604052600436106103d05760003560e01c8063644e54ab116101fd578063b390c0ab11610118578063d44395a6116100ab578063ea7aef5c1161007a578063ea7aef5c14610c19578063ed00e65314610c2f578063edec5f2714610c44578063f242432a14610c64578063f2fde38b14610c8457600080fd5b8063d44395a614610b7d578063d6199f8d14610b9d578063d81d0a1514610bbd578063e985e9c514610bd057600080fd5b8063bff67e9b116100e7578063bff67e9b14610afd578063c6b1fe5814610b1d578063cc979f2714610b3d578063d261b6e414610b5d57600080fd5b8063b390c0ab14610a70578063b82741a014610a90578063ba4e5c4914610ab0578063bd85b03914610ad057600080fd5b8063869f759411610190578063a22cb4651161015f578063a22cb465146109f0578063a2c4c60214610a10578063a48fc3a914610a30578063a6d23e1014610a5057600080fd5b8063869f7594146109625780638da5cb5b1461098f57806395d89b41146109c15780639c70b512146109d657600080fd5b80637f00c7a6116101cc5780637f00c7a6146108e257806383ca4b6f1461090257806384f69d97146109225780638674c6941461094257600080fd5b8063644e54ab1461085b578063650e926f14610871578063715018a6146108875780637724bad81461089c57600080fd5b806339ba02d0116102ed5780634cafdb6d1161028057806351ede7911161024f57806351ede791146107e15780635c975abb1461080157806361bbf42f1461081b57806362e6031b1461083b57600080fd5b80634cafdb6d1461074f5780634e1273f4146107655780634f558e791461079257806351830227146107c257600080fd5b80634271c5fd116102bc5780634271c5fd146106cc57806344a0d68a146106e257806345697134146107025780634c2612471461072f57600080fd5b806339ba02d0146106715780633af32abf146106845780633c952764146106a45780633ccfd60b146106c457600080fd5b80631b100450116103655780632eb2c2d6116103345780632eb2c2d6146105fb5780632fd723931461061b57806333ea51a81461063b578063359cf6871461065b57600080fd5b80631b1004501461058557806321d0a2a0146105a5578063239c70ae146105c55780632a9abcb9146105db57600080fd5b806306fdde03116103a157806306fdde031461051a5780630e89341c1461053c57806313faede61461055c578063156e29f61461057257600080fd5b80624a84cb14610475578062fdd58e1461049757806301ffc9a7146104ca57806302329a29146104fa57600080fd5b3661047057601b546001600160a01b03166104325760405162461bcd60e51b815260206004820181905260248201527f5061796f75742041646472657373204d7573742042652053657420466972737460448201526064015b60405180910390fd5b601b5460405134916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561046c573d6000803e3d6000fd5b5050005b600080fd5b34801561048157600080fd5b506104956104903660046141e1565b610ca4565b005b3480156104a357600080fd5b506104b76104b23660046141b7565b610d42565b6040519081526020015b60405180910390f35b3480156104d657600080fd5b506104ea6104e53660046143bf565b610dd6565b60405190151581526020016104c1565b34801561050657600080fd5b506104956105153660046143a4565b610e26565b34801561052657600080fd5b5061052f610e41565b6040516104c1919061487b565b34801561054857600080fd5b5061052f61055736600461442d565b610ecf565b34801561056857600080fd5b506104b760085481565b6104956105803660046141e1565b6112b5565b34801561059157600080fd5b506104956105a036600461442d565b611561565b3480156105b157600080fd5b5061052f6105c036600461442d565b6115de565b3480156105d157600080fd5b506104b760095481565b3480156105e757600080fd5b506104956105f6366004614446565b6115f7565b34801561060757600080fd5b5061049561061636600461400d565b611711565b34801561062757600080fd5b5061049561063636600461442d565b61175d565b34801561064757600080fd5b50610495610656366004613fb8565b61176a565b34801561066757600080fd5b506104b7600d5481565b61049561067f36600461442d565b611794565b34801561069057600080fd5b506104ea61069f366004613fb8565b611af8565b3480156106b057600080fd5b506104956106bf3660046143a4565b611b62565b610495611b7d565b3480156106d857600080fd5b506104b7601d5481565b3480156106ee57600080fd5b506104956106fd36600461442d565b611ca2565b34801561070e57600080fd5b506104b761071d366004613fb8565b601a6020526000908152604090205481565b34801561073b57600080fd5b5061049561074a3660046143f9565b611caf565b34801561075b57600080fd5b506104b760075481565b34801561077157600080fd5b50610785610780366004614288565b611d68565b6040516104c1919061483a565b34801561079e57600080fd5b506104ea6107ad36600461442d565b60009081526013602052604090205460ff1690565b3480156107ce57600080fd5b50600c546104ea90610100900460ff1681565b3480156107ed57600080fd5b506104956107fc36600461442d565b611e91565b34801561080d57600080fd5b50600c546104ea9060ff1681565b34801561082757600080fd5b50610495610836366004614446565b611e9e565b34801561084757600080fd5b506104956108563660046141b7565b6120cb565b34801561086757600080fd5b506104b7600a5481565b34801561087d57600080fd5b506104b7600e5481565b34801561089357600080fd5b50610495612333565b3480156108a857600080fd5b5060408051808201909152601b81527ff09f90b82048616c66537570657253686f702e636f6d20f09f90b80000000000602082015261052f565b3480156108ee57600080fd5b506104956108fd36600461442d565b612345565b34801561090e57600080fd5b5061049561091d366004614358565b612352565b34801561092e57600080fd5b506104b761093d36600461442d565b6123e0565b34801561094e57600080fd5b5061049561095d366004614358565b612401565b34801561096e57600080fd5b506104b761097d36600461442d565b60126020526000908152604090205481565b34801561099b57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016104c1565b3480156109cd57600080fd5b5061052f6124e0565b3480156109e257600080fd5b506018546104ea9060ff1681565b3480156109fc57600080fd5b50610495610a0b36600461418d565b6124ed565b348015610a1c57600080fd5b50610495610a2b3660046143a4565b6124f8565b348015610a3c57600080fd5b50600c546104ea9062010000900460ff1681565b348015610a5c57600080fd5b50601b546109a9906001600160a01b031681565b348015610a7c57600080fd5b50610495610a8b36600461449c565b61251c565b348015610a9c57600080fd5b50610495610aab366004614446565b61254b565b348015610abc57600080fd5b506109a9610acb36600461442d565b6125fd565b348015610adc57600080fd5b506104b7610aeb36600461442d565b60009081526010602052604090205490565b348015610b0957600080fd5b5061052f610b1836600461442d565b612627565b348015610b2957600080fd5b506104b7610b3836600461442d565b612652565b348015610b4957600080fd5b50610495610b5836600461411a565b612678565b348015610b6957600080fd5b50610495610b7836600461442d565b612777565b348015610b8957600080fd5b50601c546109a9906001600160a01b031681565b348015610ba957600080fd5b5061052f610bb836600461442d565b612791565b610495610bcb36600461411a565b6127a1565b348015610bdc57600080fd5b506104ea610beb366004613fda565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b348015610c2557600080fd5b506104b7600b5481565b348015610c3b57600080fd5b506104ea612c55565b348015610c5057600080fd5b50610495610c5f366004614214565b612ca6565b348015610c7057600080fd5b50610495610c7f3660046140b6565b612cc6565b348015610c9057600080fd5b50610495610c9f366004613fb8565b612d0b565b610cac612d90565b600d548211610ccd5760405162461bcd60e51b815260040161042990614b01565b60008281526013602052604090205460ff16610cfd576000828152601360205260409020805460ff191660011790555b60008281526010602052604081208054839290610d1b908490614cdb565b92505081905550610d3d83838360405180602001604052806000815250612e0a565b505050565b60006001600160a01b038316610dad5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608401610429565b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b1480610e0757506001600160e01b031982166303a24d0760e21b145b80610dd057506301ffc9a760e01b6001600160e01b0319831614610dd0565b610e2e612d90565b600c805460ff1916911515919091179055565b60048054610e4e90614d69565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7a90614d69565b8015610ec75780601f10610e9c57610100808354040283529160200191610ec7565b820191906000526020600020905b815481529060010190602001808311610eaa57829003601f168201915b505050505081565b60008181526013602052604090205460609060ff161561127757600082118015610efb5750600d548211155b15610fce57600c54610100900460ff16610f37576006604051602001610f21919061474d565b6040516020818303038152906040529050919050565b6040516115d160f21b602082015260220160408051601f198184030181528282528051602091820120600086815260148352929092209192610f7a9291016145bf565b604051602081830303815290604052805190602001201415610fb2576006610fa183612ee4565b604051602001610f219291906146d1565b6006610fbd83612ee4565b604051602001610f21929190614670565b604080516000808252602080830180855283519020868352600f909152908390209092610ffb92016145bf565b60405160208183030381529060405280519060200120146110b4576000828152600f60205260409020805461102f90614d69565b80601f016020809104026020016040519081016040528092919081815260200182805461105b90614d69565b80156110a85780601f1061107d576101008083540402835291602001916110a8565b820191906000526020600020905b81548152906001019060200180831161108b57829003601f168201915b50505050509050919050565b60005b60155481101561123c57806110cb5761122c565b601581815481106110de576110de614e2b565b9060005260206000200154831161122c5760408051600081526020810191829052519020601680548390811061111657611116614e2b565b9060005260206000200160405160200161113091906145bf565b6040516020818303038152906040528051906020012014611199576016818154811061115e5761115e614e2b565b9060005260206000200161117184612ee4565b604051602001611182929190614731565b604051602081830303815290604052915050919050565b6040805160008152602081019182905251902060178054839081106111c0576111c0614e2b565b906000526020600020016040516020016111da91906145bf565b604051602081830303815290604052805190602001201461122c576017818154811061120857611208614e2b565b9060005260206000200161121b84612ee4565b6040516020016111829291906145cb565b61123581614dd0565b90506110b7565b505060408051808201909152601e81527f546f6b656e205374696c6c20446f6573204e6f742045786973742059657400006020820152919050565b505060408051808201909152601881527f546f6b656e20446f6573204e6f74204578697374205965740000000000000000602082015290565b919050565b600c5462010000900460ff16156112de5760405162461bcd60e51b815260040161042990614c23565b600c5460ff16156113015760405162461bcd60e51b815260040161042990614bfa565b61130b8282612fe9565b6113455760405162461bcd60e51b815260206004820152600b60248201526a10d0539393d5081352539560aa1b6044820152606401610429565b600d5482116114255761135882826130a6565b6113a45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d757374206265203120666f722074686973204e46540000006044820152606401610429565b60008281526013602052604090205460ff16156113fa5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88105b1c9958591e48135a5b9d195960621b6044820152606401610429565b60008281526012602090815260408083206001908190556011909252909120805460ff191690911790555b61142d612c55565b6114cf5760185460ff161515600114156114a35761144a33611af8565b6114665760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b546114838383614cdb565b11156114a15760405162461bcd60e51b815260040161042990614c77565b505b6008546114b09082614d07565b3410156114cf5760405162461bcd60e51b815260040161042990614967565b336000908152601a6020526040812080548392906114ee908490614cdb565b909155505060008281526010602052604081208054839290611511908490614cdb565b909155505060008281526013602052604090205460ff16611546576000828152601360205260409020805460ff191660011790555b610d3d83838360405180602001604052806000815250612e0a565b731ba3fe6311131a67d97f20162522490c3648f6e233146115c45760405162461bcd60e51b815260206004820152601f60248201527f446576204f6e6c793a2063616c6c6572206973206e6f742074686520646576006044820152606401610429565b80601d60008282546115d69190614cdb565b909155505050565b60146020526000908152604090208054610e4e90614d69565b6115ff612d90565b600d5483116116205760405162461bcd60e51b815260040161042990614b01565b80156116b45760008261163285612ee4565b60405160200161164392919061460f565b60408051601f198184030181529181526000868152600f60209081529190208251929350611675929091840190613da1565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516116a6919061487b565b60405180910390a250505050565b6000838152600f6020908152604090912083516116d392850190613da1565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b83604051611704919061487b565b60405180910390a2505050565b6001600160a01b03851633148061172d575061172d8533610beb565b6117495760405162461bcd60e51b815260040161042990614993565b61175685858585856130c7565b5050505050565b611765612d90565b600e55565b611772613263565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600c5462010000900460ff166117bc5760405162461bcd60e51b815260040161042990614ab3565b600c5460ff16156117df5760405162461bcd60e51b815260040161042990614bfa565b60075460009081526013602052604090205460ff16156118395760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb88135a5b9d19590813dd5d605a1b6044820152606401610429565b600754611847906001614cdb565b600e546118549083614cdb565b11156118725760405162461bcd60e51b81526004016104299061491a565b61187a612c55565b61192e5760185460ff16156118eb5761189233611af8565b6118ae5760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b546118cb8383614cdb565b11156118e95760405162461bcd60e51b815260040161042990614c77565b505b80601d60008282546118fd9190614cdb565b909155505060085461190f9082614d07565b34101561192e5760405162461bcd60e51b815260040161042990614967565b336000908152601a60205260408120805483929061194d908490614cdb565b9091555060009050816001600160401b0381111561196d5761196d614e41565b604051908082528060200260200182016040528015611996578160200160208202803683370190505b5090506000826001600160401b038111156119b3576119b3614e41565b6040519080825280602002602001820160405280156119dc578160200160208202803683370190505b50905060005b83811015611adc57600e5460008181526013602052604090205460ff16611a475760008181526013602090815260408083208054600160ff19918216811790925560128452828520829055601184528285208054909116821790556010909252909120555b611a4f6132bd565b60008281526014602090815260409091208251611a729391929190910190613da1565b50600e54848381518110611a8857611a88614e2b565b6020026020010181815250506001838381518110611aa857611aa8614e2b565b6020908102919091010152600e8054906000611ac383614dd0565b9190505550508080611ad490614dd0565b9150506119e2565b50610d3d33838360405180602001604052806000815250613371565b6000805b601954811015611b5957826001600160a01b031660198281548110611b2357611b23614e2b565b6000918252602090912001546001600160a01b03161415611b475750600192915050565b80611b5181614dd0565b915050611afc565b50600092915050565b611b6a612d90565b6018805460ff1916911515919091179055565b611b85612d90565b601b546001600160a01b0316611bdd5760405162461bcd60e51b815260206004820181905260248201527f5061796f75742041646472657373204d757374204265205365742046697273746044820152606401610429565b603c601d5411611c5357604051600090731ba3fe6311131a67d97f20162522490c3648f6e29047908381818185875af1925050503d8060008114611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b606091505b5050905080611c5057600080fd5b50565b601b546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611c3d576040519150601f19603f3d011682016040523d82523d6000602084013e611c42565b565b611caa612d90565b600855565b611cb7612d90565b600c54610100900460ff1615611d0f5760405162461bcd60e51b815260206004820152601760248201527f416c72656164792073657420746f2052657665616c65640000000000000000006044820152606401610429565b8051611d22906006906020840190613da1565b50806016600081548110611d3857611d38614e2b565b906000526020600020019080519060200190611d55929190613da1565b5050600c805461ff001916610100179055565b60608151835114611dcd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610429565b600083516001600160401b03811115611de857611de8614e41565b604051908082528060200260200182016040528015611e11578160200160208202803683370190505b50905060005b8451811015611e8957611e5c858281518110611e3557611e35614e2b565b6020026020010151858381518110611e4f57611e4f614e2b565b6020026020010151610d42565b828281518110611e6e57611e6e614e2b565b6020908102919091010152611e8281614dd0565b9050611e17565b509392505050565b611e99612d90565b600b55565b611ea6612d90565b60158054611eb690600190614d26565b81548110611ec657611ec6614e2b565b90600052602060002001548311611f455760405162461bcd60e51b815260206004820152603760248201527f4c617374204261746368204944206d757374206265206772656174657220746860448201527f616e2070726576696f757320626174636820746f74616c0000000000000000006064820152608401610429565b801561200e576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475018490556016805491820181556000528251611fbb917fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428901906020850190613da1565b50601780546001810182556000918252604080516020810191829052839052612008927fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590920191613da1565b50505050565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47501849055601780549182018155600052825161207e917fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1501906020850190613da1565b50601680546001810182556000918252604080516020810191829052839052612008927fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428990920191613da1565b6120d3612d90565b600c5462010000900460ff166120fb5760405162461bcd60e51b815260040161042990614ab3565b60075460009081526013602052604090205460ff16156121555760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb88135a5b9d19590813dd5d605a1b6044820152606401610429565b600754612163906001614cdb565b600e546121709083614cdb565b111561218e5760405162461bcd60e51b81526004016104299061491a565b6000816001600160401b038111156121a8576121a8614e41565b6040519080825280602002602001820160405280156121d1578160200160208202803683370190505b5090506000826001600160401b038111156121ee576121ee614e41565b604051908082528060200260200182016040528015612217578160200160208202803683370190505b50905060005b8381101561231757600e5460008181526013602052604090205460ff166122825760008181526013602090815260408083208054600160ff19918216811790925560128452828520829055601184528285208054909116821790556010909252909120555b61228a6132bd565b600082815260146020908152604090912082516122ad9391929190910190613da1565b50600e548483815181106122c3576122c3614e2b565b60200260200101818152505060018383815181106122e3576122e3614e2b565b6020908102919091010152600e80549060006122fe83614dd0565b919050555050808061230f90614dd0565b91505061221d565b5061200884838360405180602001604052806000815250613371565b61233b613263565b611ca060006134bc565b61234d612d90565b600955565b60005b82518110156123d057600083828151811061237257612372614e2b565b6020026020010151905082828151811061238e5761238e614e2b565b60200260200101516010600083815260200190815260200160002060008282546123b89190614d26565b909155506123c99150829050614dd0565b9050612355565b506123dc33838361350e565b5050565b601581815481106123f057600080fd5b600091825260209091200154905081565b612409612d90565b60005b8251811015610d3d57600083828151811061242957612429614e2b565b6020026020010151905082828151811061244557612445614e2b565b602002602001015160126000838152602001908152602001600020600082825461246f9190614cdb565b92505081905550600083838151811061248a5761248a614e2b565b602002602001015111156124b6576000818152601160205260409020805460ff191660011790556124cd565b6000818152601160205260409020805460ff191690555b50806124d881614dd0565b91505061240c565b60058054610e4e90614d69565b6123dc338383613698565b612500612d90565b600c8054911515620100000262ff000019909216919091179055565b6000828152601060205260408120805483929061253a908490614d26565b909155506123dc9050338383613779565b612553612d90565b826125b25760405162461bcd60e51b815260206004820152602960248201527f426174636820496e6465782043616e6e6f74204265204f726967696e616c204360448201526837b63632b1ba34b7b760b91b6064820152608401610429565b80156125e95781601684815481106125cc576125cc614e2b565b906000526020600020019080519060200190612008929190613da1565b81601784815481106125cc576125cc614e2b565b6019818154811061260d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6017818154811061263757600080fd5b906000526020600020016000915090508054610e4e90614d69565b6000600d54821161266557506001919050565b5060009081526012602052604090205490565b612680612d90565b6126898261387d565b156126a65760405162461bcd60e51b815260040161042990614b01565b60005b825181101561275b5760008382815181106126c6576126c6614e2b565b602002602001015190506126e98160009081526013602052604090205460ff1690565b612707576000818152601360205260409020805460ff191660011790555b82828151811061271957612719614e2b565b60200260200101516010600083815260200190815260200160002060008282546127439190614cdb565b909155506127549150829050614dd0565b90506126a9565b50610d3d83838360405180602001604052806000815250613371565b61277f612d90565b80600760008282546115d69190614cdb565b6016818154811061263757600080fd5b600c5462010000900460ff16156127ca5760405162461bcd60e51b815260040161042990614c23565b600c5460ff16156127ed5760405162461bcd60e51b815260040161042990614bfa565b600954825111156128405760405162461bcd60e51b815260206004820152601e60248201527f426174636820546f6b656e20494473204c696d697420457863656564656400006044820152606401610429565b805182511461289d5760405162461bcd60e51b8152602060048201526024808201527f494473204172726179204e6f7420457175616c20546f20416d6f756e747320416044820152637272617960e01b6064820152608401610429565b6128a782826138d1565b6128e75760405162461bcd60e51b8152602060048201526011602482015270086829c9c9ea8409a929ca8408482a8869607b1b6044820152606401610429565b6000805b8251811015612a4c57600084828151811061290857612908614e2b565b60200260200101519050600084838151811061292657612926614e2b565b60200260200101519050600d548211612a105761294382826130a6565b61298f5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d757374206265203120666f722074686973204e46540000006044820152606401610429565b60008281526013602052604090205460ff16156129e55760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88105b1c9958591e48135a5b9d195960621b6044820152606401610429565b60008281526012602090815260408083206001908190556011909252909120805460ff191690911790555b848381518110612a2257612a22614e2b565b602002602001015184612a359190614cdb565b935050508080612a4490614dd0565b9150506128eb565b50600a54811115612a9f5760405162461bcd60e51b815260206004820152601b60248201527f426174636820416d6f756e74204c696d697420457863656564656400000000006044820152606401610429565b612aa7612c55565b612b445760185460ff1615612b1857612abf33611af8565b612adb5760405162461bcd60e51b815260040161042990614b90565b336000908152601a6020526040902054600b54612af88383614cdb565b1115612b165760405162461bcd60e51b815260040161042990614c77565b505b600854612b259082614d07565b341015612b445760405162461bcd60e51b815260040161042990614967565b336000908152601a602052604081208054839290612b63908490614cdb565b90915550600090505b8351811015612c3957828181518110612b8757612b87614e2b565b602002602001015160106000868481518110612ba557612ba5614e2b565b602002602001015181526020019081526020016000206000828254612bca9190614cdb565b925050819055506000848281518110612be557612be5614e2b565b60200260200101519050612c088160009081526013602052604090205460ff1690565b612c26576000818152601360205260409020805460ff191660011790555b5080612c3181614dd0565b915050612b6c565b5061200884848460405180602001604052806000815250613371565b6000612c696003546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480612c925750601c546001600160a01b031633145b15612c9d5750600190565b50600090565b90565b612cae612d90565b612cba60196000613e21565b610d3d60198383613e3f565b6001600160a01b038516331480612ce25750612ce28533610beb565b612cfe5760405162461bcd60e51b815260040161042990614993565b61175685858585856139f7565b612d13613263565b6001600160a01b038116612d785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610429565b611c50816134bc565b6001600160a01b03163b151590565b6003546001600160a01b0316331480612db35750601c546001600160a01b031633145b611ca05760405162461bcd60e51b815260206004820152602260248201527f41646d696e204f6e6c793a2063616c6c6572206973206e6f7420616e2061646d60448201526134b760f11b6064820152608401610429565b6001600160a01b038416612e305760405162461bcd60e51b815260040161042990614bb9565b336000612e3c85613b21565b90506000612e4985613b21565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290612e7b908490614cdb565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612edb83600089898989613b6c565b50505050505050565b606081612f085750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612f325780612f1c81614dd0565b9150612f2b9050600a83614cf3565b9150612f0c565b6000816001600160401b03811115612f4c57612f4c614e41565b6040519080825280601f01601f191660200182016040528015612f76576020820181803683370190505b5090505b8415612fe157612f8b600183614d26565b9150612f98600a86614deb565b612fa3906030614cdb565b60f81b818381518110612fb857612fb8614e2b565b60200101906001600160f81b031916908160001a905350612fda600a86614cf3565b9450612f7a565b949350505050565b60008281526011602052604081205460ff161561306e5760008211801561301257506009548211155b801561301e5750600083115b801561302c57506007548311155b801561305c5750600083815260126020908152604080832054601090925290912054613059908490614cdb565b11155b156130665761309d565b506000610dd0565b60008211801561308057506009548211155b801561308c5750600083115b801561305c57506007548311613066575b50600192915050565b6000600d5483111580156130ba5750816001145b1561306657506001610dd0565b81518351146130e85760405162461bcd60e51b815260040161042990614b48565b6001600160a01b03841661310e5760405162461bcd60e51b8152600401610429906149e1565b3360005b84518110156131f557600085828151811061312f5761312f614e2b565b60200260200101519050600085838151811061314d5761314d614e2b565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561319d5760405162461bcd60e51b815260040161042990614a69565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906131da908490614cdb565b92505081905550505050806131ee90614dd0565b9050613112565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161324592919061484d565b60405180910390a461325b818787878787613cd7565b505050505050565b6003546001600160a01b03163314611ca05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610429565b606060006002424433600e546040516020016133049493929190938452602084019290925260601b6bffffffffffffffffffffffff19166040830152605482015260740190565b6040516020818303038152906040528051906020012060001c6133279190614deb565b90506000811161334f57505060408051808201909152600281526115d160f21b602082015290565b5050604080518082019091526002815261565160f01b602082015290565b5090565b6001600160a01b0384166133975760405162461bcd60e51b815260040161042990614bb9565b81518351146133b85760405162461bcd60e51b815260040161042990614b48565b3360005b8451811015613454578381815181106133d7576133d7614e2b565b60200260200101516000808784815181106133f4576133f4614e2b565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461343c9190614cdb565b9091555081905061344c81614dd0565b9150506133bc565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516134a592919061484d565b60405180910390a461175681600087878787613cd7565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166135345760405162461bcd60e51b815260040161042990614a26565b80518251146135555760405162461bcd60e51b815260040161042990614b48565b604080516020810190915260009081905233905b835181101561362b57600084828151811061358657613586614e2b565b6020026020010151905060008483815181106135a4576135a4614e2b565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156135f45760405162461bcd60e51b8152600401610429906148d6565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061362381614dd0565b915050613569565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161367c92919061484d565b60405180910390a4604080516020810190915260009052612008565b816001600160a01b0316836001600160a01b0316141561370c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610429565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03831661379f5760405162461bcd60e51b815260040161042990614a26565b3360006137ab84613b21565b905060006137b884613b21565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156138055760405162461bcd60e51b8152600401610429906148d6565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052612edb565b6000805b825181101561309d57600083828151811061389e5761389e614e2b565b60200260200101519050600d5481116138b6576138c0565b5060009392505050565b506138ca81614dd0565b9050613881565b6000805b83518110156139ed5760008482815181106138f2576138f2614e2b565b60200260200101519050600084838151811061391057613910614e2b565b6020908102919091018101516000848152601190925260409091205490915060ff16156139a95760008111801561394957506009548111155b80156139555750600082115b801561396357506007548211155b80156139935750600082815260126020908152604080832054601090925290912054613990908390614cdb565b11155b1561399d576139d8565b60009350505050610dd0565b6000811180156139bb57506009548111155b80156139c75750600082115b80156139935750600754821161399d575b505080806139e590614dd0565b9150506138d5565b5060019392505050565b6001600160a01b038416613a1d5760405162461bcd60e51b8152600401610429906149e1565b336000613a2985613b21565b90506000613a3685613b21565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015613a795760405162461bcd60e51b815260040161042990614a69565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290613ab6908490614cdb565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4613b16848a8a8a8a8a613b6c565b505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5b57613b5b614e2b565b602090810291909101015292915050565b6001600160a01b0384163b1561325b5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613bb090899089908890889088906004016147f5565b602060405180830381600087803b158015613bca57600080fd5b505af1925050508015613bfa575060408051601f3d908101601f19168201909252613bf7918101906143dc565b60015b613ca757613c06614e57565b806308c379a01415613c405750613c1b614e72565b80613c265750613c42565b8060405162461bcd60e51b8152600401610429919061487b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610429565b6001600160e01b0319811663f23a6e6160e01b14612edb5760405162461bcd60e51b81526004016104299061488e565b6001600160a01b0384163b1561325b5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613d1b9089908990889088908890600401614797565b602060405180830381600087803b158015613d3557600080fd5b505af1925050508015613d65575060408051601f3d908101601f19168201909252613d62918101906143dc565b60015b613d7157613c06614e57565b6001600160e01b0319811663bc197c8160e01b14612edb5760405162461bcd60e51b81526004016104299061488e565b828054613dad90614d69565b90600052602060002090601f016020900481019282613dcf5760008555613e15565b82601f10613de857805160ff1916838001178555613e15565b82800160010185558215613e15579182015b82811115613e15578251825591602001919060010190613dfa565b5061336d929150613e92565b5080546000825590600052602060002090810190611c509190613e92565b828054828255906000526020600020908101928215613e15579160200282015b82811115613e155781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613e5f565b5b8082111561336d5760008155600101613e93565b80356001600160a01b03811681146112b057600080fd5b600082601f830112613ecf57600080fd5b81356020613edc82614cb8565b604051613ee98282614da4565b8381528281019150858301600585901b87018401881015613f0957600080fd5b60005b85811015613f2857813584529284019290840190600101613f0c565b5090979650505050505050565b803580151581146112b057600080fd5b600082601f830112613f5657600080fd5b81356001600160401b03811115613f6f57613f6f614e41565b604051613f86601f8301601f191660200182614da4565b818152846020838601011115613f9b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613fca57600080fd5b613fd382613ea7565b9392505050565b60008060408385031215613fed57600080fd5b613ff683613ea7565b915061400460208401613ea7565b90509250929050565b600080600080600060a0868803121561402557600080fd5b61402e86613ea7565b945061403c60208701613ea7565b935060408601356001600160401b038082111561405857600080fd5b61406489838a01613ebe565b9450606088013591508082111561407a57600080fd5b61408689838a01613ebe565b9350608088013591508082111561409c57600080fd5b506140a988828901613f45565b9150509295509295909350565b600080600080600060a086880312156140ce57600080fd5b6140d786613ea7565b94506140e560208701613ea7565b9350604086013592506060860135915060808601356001600160401b0381111561410e57600080fd5b6140a988828901613f45565b60008060006060848603121561412f57600080fd5b61413884613ea7565b925060208401356001600160401b038082111561415457600080fd5b61416087838801613ebe565b9350604086013591508082111561417657600080fd5b5061418386828701613ebe565b9150509250925092565b600080604083850312156141a057600080fd5b6141a983613ea7565b915061400460208401613f35565b600080604083850312156141ca57600080fd5b6141d383613ea7565b946020939093013593505050565b6000806000606084860312156141f657600080fd5b6141ff84613ea7565b95602085013595506040909401359392505050565b6000806020838503121561422757600080fd5b82356001600160401b038082111561423e57600080fd5b818501915085601f83011261425257600080fd5b81358181111561426157600080fd5b8660208260051b850101111561427657600080fd5b60209290920196919550909350505050565b6000806040838503121561429b57600080fd5b82356001600160401b03808211156142b257600080fd5b818501915085601f8301126142c657600080fd5b813560206142d382614cb8565b6040516142e08282614da4565b8381528281019150858301600585901b870184018b101561430057600080fd5b600096505b8487101561432a5761431681613ea7565b835260019690960195918301918301614305565b509650508601359250508082111561434157600080fd5b5061434e85828601613ebe565b9150509250929050565b6000806040838503121561436b57600080fd5b82356001600160401b038082111561438257600080fd5b61438e86838701613ebe565b9350602085013591508082111561434157600080fd5b6000602082840312156143b657600080fd5b613fd382613f35565b6000602082840312156143d157600080fd5b8135613fd381614efb565b6000602082840312156143ee57600080fd5b8151613fd381614efb565b60006020828403121561440b57600080fd5b81356001600160401b0381111561442157600080fd5b612fe184828501613f45565b60006020828403121561443f57600080fd5b5035919050565b60008060006060848603121561445b57600080fd5b8335925060208401356001600160401b0381111561447857600080fd5b61448486828701613f45565b92505061449360408501613f35565b90509250925092565b600080604083850312156144af57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156144ee578151875295820195908201906001016144d2565b509495945050505050565b60008151808452614511816020860160208601614d3d565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061453f57607f831692505b602080841082141561456157634e487b7160e01b600052602260045260246000fd5b8180156145755760018114614586576145b3565b60ff198616895284890196506145b3565b60008881526020902060005b868110156145ab5781548b820152908501908301614592565b505084890196505b50505050505092915050565b6000613fd38284614525565b60006145d78285614525565b602f60f81b815283516145f1816001840160208801614d3d565b64173539b7b760d91b60019290910191820152600601949350505050565b66697066733a2f2f60c81b815260008351614631816007850160208801614d3d565b602f60f81b6007918401918201528351614652816008840160208801614d3d565b64173539b7b760d91b60089290910191820152600d01949350505050565b66697066733a2f2f60c81b8152600061468c6007830185614525565b6d2f566f6f646f6f517565656e732f60901b815283516146b381600e840160208801614d3d565b64173539b7b760d91b600e9290910191820152601301949350505050565b66697066733a2f2f60c81b815260006146ed6007830185614525565b6c2f5769746368446f63746f722f60981b8152835161471381600d840160208801614d3d565b64173539b7b760d91b600d9290910191820152601201949350505050565b66697066733a2f2f60c81b815260006145d76007830185614525565b66697066733a2f2f60c81b815260006147696007830184614525565b602f60f81b8152653434b23232b760d11b600182015264173539b7b760d91b6007820152600c019392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906147c3908301866144be565b82810360608401526147d581866144be565b905082810360808401526147e981856144f9565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061482f908301846144f9565b979650505050505050565b602081526000613fd360208301846144be565b60408152600061486060408301856144be565b828103602084015261487281856144be565b95945050505050565b602081526000613fd360208301846144f9565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602d908201527f4578636565647320436f6c6c656374696f6e20546f74616c2c20506c6561736560408201526c08131bddd95c88105b5bdd5b9d609a1b606082015260800190565b602080825260129082015271496e73756666696369656e742046756e647360701b604082015260600190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252602e908201527f546869732043616e204f6e6c792042652055736564205768656e206d696e744960408201526d6e4f72646572206973205472756560901b606082015260800190565b60208082526027908201527f4944204d757374204e6f742042652046726f6d204f726967696e616c20436f6c6040820152663632b1ba34b7b760c91b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252600f908201526e139bdd0815da1a5d195b1a5cdd1959608a1b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252600f908201526e10dbdb9d1c9858dd0814185d5cd959608a1b604082015260600190565b60208082526034908201527f4f6e6c792043616e2055736520746865204d696e7420496e204f726465722046604082015273756e6374696f6e20417420546869732054696d6560601b606082015260800190565b60208082526021908201527f4578636565646564204d61782057686974656c697374204d696e74204c696d696040820152601d60fa1b606082015260800190565b60006001600160401b03821115614cd157614cd1614e41565b5060051b60200190565b60008219821115614cee57614cee614dff565b500190565b600082614d0257614d02614e15565b500490565b6000816000190483118215151615614d2157614d21614dff565b500290565b600082821015614d3857614d38614dff565b500390565b60005b83811015614d58578181015183820152602001614d40565b838111156120085750506000910152565b600181811c90821680614d7d57607f821691505b60208210811415614d9e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715614dc957614dc9614e41565b6040525050565b6000600019821415614de457614de4614dff565b5060010190565b600082614dfa57614dfa614e15565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612ca35760046000803e5060005160e01c90565b600060443d1015614e805790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614eaf57505050505090565b8285019150815181811115614ec75750505050505090565b843d8701016020828501011115614ee15750505050505090565b614ef060208286010187614da4565b509095945050505050565b6001600160e01b031981168114611c5057600080fdfea2646970667358221220fa4aa81615434ef4bcac31a3b311a63c1c130847d4a4f00edc9a0d8b1b62e2e664736f6c63430008070033
Deployed Bytecode Sourcemap
46785:26571:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72222:8;;-1:-1:-1;;;;;72222:8:0;72214:99;;;;-1:-1:-1;;;72214:99:0;;25599:2:1;72214:99:0;;;25581:21:1;;;25618:18;;;25611:30;25677:34;25657:18;;;25650:62;25729:18;;72214:99:0;;;;;;;;;72361:8;;:25;;72341:9;;-1:-1:-1;;;;;72361:8:0;;:25;;;;;72341:9;;72324:14;72361:25;72324:14;72361:25;72341:9;72361:8;:25;;;;;;;;;;;;;;;;;;;;;72203:191;46785:26571;;;;;59070:328;;;;;;;;;;-1:-1:-1;59070:328:0;;;;;:::i;:::-;;:::i;:::-;;27526:230;;;;;;;;;;-1:-1:-1;27526:230:0;;;;;:::i;:::-;;:::i;:::-;;;34472:25:1;;;34460:2;34445:18;27526:230:0;;;;;;;;26549:310;;;;;;;;;;-1:-1:-1;26549:310:0;;;;;:::i;:::-;;:::i;:::-;;;20126:14:1;;20119:22;20101:41;;20089:2;20074:18;26549:310:0;19961:187:1;49784:80:0;;;;;;;;;;-1:-1:-1;49784:80:0;;;;;:::i;:::-;;:::i;46874:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;63511:3360::-;;;;;;;;;;-1:-1:-1;63511:3360:0;;;;;:::i;:::-;;:::i;47266:32::-;;;;;;;;;;;;;;;;53552:1229;;;;;;:::i;:::-;;:::i;73152:199::-;;;;;;;;;;-1:-1:-1;73152:199:0;;;;;:::i;:::-;;:::i;48276:38::-;;;;;;;;;;-1:-1:-1;48276:38:0;;;;;:::i;:::-;;:::i;47332:33::-;;;;;;;;;;;;;;;;62037:608;;;;;;;;;;-1:-1:-1;62037:608:0;;;;;:::i;:::-;;:::i;29469:438::-;;;;;;;;;;-1:-1:-1;29469:438:0;;;;;:::i;:::-;;:::i;50198:96::-;;;;;;;;;;-1:-1:-1;50198:96:0;;;;;:::i;:::-;;:::i;71269:109::-;;;;;;;;;;-1:-1:-1;71269:109:0;;;;;:::i;:::-;;:::i;47790:32::-;;;;;;;;;;;;;;;;50491:1677;;;;;;:::i;:::-;;:::i;69631:273::-;;;;;;;;;;-1:-1:-1;69631:273:0;;;;;:::i;:::-;;:::i;70520:102::-;;;;;;;;;;-1:-1:-1;70520:102:0;;;;;:::i;:::-;;:::i;71461:569::-;;;:::i;48771:26::-;;;;;;;;;;;;;;;;71109:87;;;;;;;;;;-1:-1:-1;71109:87:0;;;;;:::i;:::-;;:::i;48521:59::-;;;;;;;;;;-1:-1:-1;48521:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;61064:204;;;;;;;;;;-1:-1:-1;61064:204:0;;;;;:::i;:::-;;:::i;47173:37::-;;;;;;;;;;;;;;;;27922:524;;;;;;;;;;-1:-1:-1;27922:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;68224:98::-;;;;;;;;;;-1:-1:-1;68224:98:0;;;;;:::i;:::-;68273:4;68297:17;;;:12;:17;;;;;;;;;68224:98;47717:27;;;;;;;;;;-1:-1:-1;47717:27:0;;;;;;;;;;;70246:113;;;;;;;;;;-1:-1:-1;70246:113:0;;;;;:::i;:::-;;:::i;47685:25::-;;;;;;;;;;-1:-1:-1;47685:25:0;;;;;;;;62874:629;;;;;;;;;;-1:-1:-1;62874:629:0;;;;;:::i;:::-;;:::i;52337:1043::-;;;;;;;;;;-1:-1:-1;52337:1043:0;;;;;:::i;:::-;;:::i;47437:38::-;;;;;;;;;;;;;;;;47862:30;;;;;;;;;;;;;;;;5432:103;;;;;;;;;;;;;:::i;49482:153::-;;;;;;;;;;-1:-1:-1;49550:56:0;;;;;;;;;;;;;;;;;49482:153;;70008:123;;;;;;;;;;-1:-1:-1;70008:123:0;;;;;:::i;:::-;;:::i;60577:277::-;;;;;;;;;;-1:-1:-1;60577:277:0;;;;;:::i;:::-;;:::i;48323:37::-;;;;;;;;;;-1:-1:-1;48323:37:0;;;;;:::i;:::-;;:::i;68763:560::-;;;;;;;;;;-1:-1:-1;68763:560:0;;;;;:::i;:::-;;:::i;48081:44::-;;;;;;;;;;-1:-1:-1;48081:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;4784:87;;;;;;;;;;-1:-1:-1;4857:6:0;;-1:-1:-1;;;;;4857:6:0;4784:87;;;-1:-1:-1;;;;;17561:32:1;;;17543:51;;17531:2;17516:18;4784:87:0;17397:203:1;46942:29:0;;;;;;;;;;;;;:::i;48435:35::-;;;;;;;;;;-1:-1:-1;48435:35:0;;;;;;;;28519:155;;;;;;;;;;-1:-1:-1;28519:155:0;;;;;:::i;:::-;;:::i;50030:94::-;;;;;;;;;;-1:-1:-1;50030:94:0;;;;;:::i;:::-;;:::i;47751:30::-;;;;;;;;;;-1:-1:-1;47751:30:0;;;;;;;;;;;48589:31;;;;;;;;;;-1:-1:-1;48589:31:0;;;;-1:-1:-1;;;;;48589:31:0;;;60354:137;;;;;;;;;;-1:-1:-1;60354:137:0;;;;;:::i;:::-;;:::i;61431:397::-;;;;;;;;;;-1:-1:-1;61431:397:0;;;;;:::i;:::-;;:::i;48477:37::-;;;;;;;;;;-1:-1:-1;48477:37:0;;;;;:::i;:::-;;:::i;68019:107::-;;;;;;;;;;-1:-1:-1;68019:107:0;;;;;:::i;:::-;68073:7;68100:18;;;:13;:18;;;;;;;68019:107;48402:24;;;;;;;;;;-1:-1:-1;48402:24:0;;;;;:::i;:::-;;:::i;68405:209::-;;;;;;;;;;-1:-1:-1;68405:209:0;;;;;:::i;:::-;;:::i;59790:479::-;;;;;;;;;;-1:-1:-1;59790:479:0;;;;;:::i;:::-;;:::i;69439:120::-;;;;;;;;;;-1:-1:-1;69439:120:0;;;;;:::i;:::-;;:::i;48697:67::-;;;;;;;;;;-1:-1:-1;48697:67:0;;;;-1:-1:-1;;;;;48697:67:0;;;48367:28;;;;;;;;;;-1:-1:-1;48367:28:0;;;;;:::i;:::-;;:::i;55982:1931::-;;;;;;:::i;:::-;;:::i;28746:168::-;;;;;;;;;;-1:-1:-1;28746:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;28869:27:0;;;28845:4;28869:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;28746:168;47554:36;;;;;;;;;;;;;;;;72817:210;;;;;;;;;;;;;:::i;70766:155::-;;;;;;;;;;-1:-1:-1;70766:155:0;;;;;:::i;:::-;;:::i;28986:406::-;;;;;;;;;;-1:-1:-1;28986:406:0;;;;;:::i;:::-;;:::i;5690:201::-;;;;;;;;;;-1:-1:-1;5690:201:0;;;;;:::i;:::-;;:::i;59070:328::-;72530:14;:12;:14::i;:::-;59171:17:::1;;59165:3;:23;59157:75;;;;-1:-1:-1::0;;;59157:75:0::1;;;;;;;:::i;:::-;68273:4:::0;68297:17;;;:12;:17;;;;;;;;59243:69:::1;;59276:17;::::0;;;:12:::1;:17;::::0;;;;:24;;-1:-1:-1;;59276:24:0::1;59296:4;59276:24;::::0;;59243:69:::1;59322:18;::::0;;;:13:::1;:18;::::0;;;;:29;;59344:7;;59322:18;:29:::1;::::0;59344:7;;59322:29:::1;:::i;:::-;;;;;;;;59362:28;59368:3;59373;59378:7;59362:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;59070:328:::0;;;:::o;27526:230::-;27612:7;-1:-1:-1;;;;;27640:21:0;;27632:76;;;;-1:-1:-1;;;27632:76:0;;24368:2:1;27632:76:0;;;24350:21:1;24407:2;24387:18;;;24380:30;24446:34;24426:18;;;24419:62;-1:-1:-1;;;24497:18:1;;;24490:40;24547:19;;27632:76:0;24166:406:1;27632:76:0;-1:-1:-1;27726:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;27726:22:0;;;;;;;;;;27526:230;;;;;:::o;26549:310::-;26651:4;-1:-1:-1;;;;;;26688:41:0;;-1:-1:-1;;;26688:41:0;;:110;;-1:-1:-1;;;;;;;26746:52:0;;-1:-1:-1;;;26746:52:0;26688:110;:163;;;-1:-1:-1;;;;;;;;;;17727:40:0;;;26815:36;17618:157;49784:80;72530:14;:12;:14::i;:::-;49841:6:::1;:15:::0;;-1:-1:-1;;49841:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49784:80::o;46874:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;63511:3360::-;63594:17;;;;:12;:17;;;;;;63566:13;;63594:17;;63591:3273;;;63637:1;63631:3;:7;:35;;;;;63649:17;;63642:3;:24;;63631:35;63627:3152;;;63691:8;;;;;;;63687:1147;;63839:7;63760:208;;;;;;;;:::i;:::-;;;;;;;;;;;;;63723:247;;63511:3360;;;:::o;63687:1147::-;64092:24;;-1:-1:-1;;;64092:24:0;;;12314:17:1;12347:11;;64092:24:0;;;-1:-1:-1;;64092:24:0;;;;;;;;;64082:35;;64092:24;64082:35;;;;64066:9;;;;:4;:9;;;;;;64082:35;;64048:29;;64066:9;64048:29;;:::i;:::-;;;;;;;;;;;;;64038:40;;;;;;:79;64035:780;;;64257:7;64333:21;64350:3;64333:16;:21::i;:::-;64178:233;;;;;;;;;:::i;64035:780::-;64618:7;64703:21;64720:3;64703:16;:21::i;:::-;64531:258;;;;;;;;;:::i;63627:3152::-;64948:22;;;;;;;;;;;;;;64938:33;;;;64918:13;;;:8;:13;;;;;;;64938:33;;64900;;;;:::i;:::-;;;;;;;;;;;;;64890:44;;;;;;:81;64887:148;;65002:13;;;;:8;:13;;;;;64995:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63511:3360;;;:::o;64887:148::-;65058:9;65053:1635;65077:20;:27;65073:31;;65053:1635;;;65137:6;65134:1513;;65235:8;;65134:1513;65330:20;65351:1;65330:23;;;;;;;;:::i;:::-;;;;;;;;;65323:3;:30;65320:1304;;65448:22;;;;;;;;;;;;;65438:33;;;65416:12;:15;;65429:1;;65416:15;;;;;;:::i;:::-;;;;;;;;65398:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;65388:46;;;;;;:83;65385:506;;65659:12;65672:1;65659:15;;;;;;;;:::i;:::-;;;;;;;;65755:21;65772:3;65755:16;:21::i;:::-;65556:301;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65507:352;;;63511:3360;;;:::o;65385:506::-;65980:22;;;;;;;;;;;;;65970:33;;;65952:8;:11;;65961:1;;65952:11;;;;;;:::i;:::-;;;;;;;;65934:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;65924:42;;;;;;:79;65921:450;;66143:8;66152:1;66143:11;;;;;;;;:::i;:::-;;;;;;;;66235:21;66252:3;66235:16;:21::i;:::-;66088:249;;;;;;;;;:::i;65921:450::-;65106:3;;;:::i;:::-;;;65053:1635;;;-1:-1:-1;;66706:39:0;;;;;;;;;;;;;;;;;;63511:3360;-1:-1:-1;63511:3360:0:o;63591:3273::-;-1:-1:-1;;66819:33:0;;;;;;;;;;;;;;;;;;63511:3360::o;63591:3273::-;63511:3360;;;:::o;53552:1229::-;53638:11;;;;;;;53637:12;53629:77;;;;-1:-1:-1;;;53629:77:0;;;;;;;:::i;:::-;53726:6;;;;53725:7;53717:35;;;;-1:-1:-1;;;53717:35:0;;;;;;;:::i;:::-;53771:28;53786:3;53791:7;53771:14;:28::i;:::-;53763:52;;;;-1:-1:-1;;;53763:52:0;;21696:2:1;53763:52:0;;;21678:21:1;21735:2;21715:18;;;21708:30;-1:-1:-1;;;21754:18:1;;;21747:41;21805:18;;53763:52:0;21494:335:1;53763:52:0;53837:17;;53830:3;:24;53826:262;;53878:26;53891:3;53896:7;53878:12;:26::i;:::-;53870:68;;;;-1:-1:-1;;;53870:68:0;;20579:2:1;53870:68:0;;;20561:21:1;20618:2;20598:18;;;20591:30;20657:31;20637:18;;;20630:59;20706:18;;53870:68:0;20377:353:1;53870:68:0;53962:17;;;;:12;:17;;;;;;;;53961:18;53953:51;;;;-1:-1:-1;;;53953:51:0;;30616:2:1;53953:51:0;;;30598:21:1;30655:2;30635:18;;;30628:30;-1:-1:-1;;;30674:18:1;;;30667:50;30734:18;;53953:51:0;30414:344:1;53953:51:0;54019:14;;;;:9;:14;;;;;;;;54036:1;54019:18;;;;54052:12;:17;;;;;;:24;;-1:-1:-1;;54052:24:0;;;;;;53826:262;54105:14;:12;:14::i;:::-;54100:444;;54140:15;;;;:23;;:15;:23;54136:322;;;54192:25;54206:10;54192:13;:25::i;:::-;54184:53;;;;-1:-1:-1;;;54184:53:0;;;;;;;:::i;:::-;54314:10;54256:30;54289:36;;;:24;:36;;;;;;54388:16;;54352:32;54377:7;54289:36;54352:32;:::i;:::-;:52;;54344:98;;;;-1:-1:-1;;;54344:98:0;;;;;;;:::i;:::-;54165:293;54136:322;54504:4;;54494:14;;:7;:14;:::i;:::-;54480:9;:29;;54472:60;;;;-1:-1:-1;;;54472:60:0;;;;;;;:::i;:::-;54581:10;54556:36;;;;:24;:36;;;;;:47;;54596:7;;54556:36;:47;;54596:7;;54556:47;:::i;:::-;;;;-1:-1:-1;;54614:18:0;;;;:13;:18;;;;;:29;;54636:7;;54614:18;:29;;54636:7;;54614:29;:::i;:::-;;;;-1:-1:-1;;68273:4:0;68297:17;;;:12;:17;;;;;;;;54654:81;;54687:17;;;;:12;:17;;;;;:24;;-1:-1:-1;;54687:24:0;54707:4;54687:24;;;54654:81;54745:28;54751:3;54756;54761:7;54745:28;;;;;;;;;;;;:5;:28::i;73152:199::-;73233:42;73219:10;:56;73211:100;;;;-1:-1:-1;;;73211:100:0;;28776:2:1;73211:100:0;;;28758:21:1;28815:2;28795:18;;;28788:30;28854:33;28834:18;;;28827:61;28905:18;;73211:100:0;28574:355:1;73211:100:0;73337:6;73322:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;73152:199:0:o;48276:38::-;;;;;;;;;;;;;;;;:::i;62037:608::-;72530:14;:12;:14::i;:::-;62145:17:::1;;62139:3;:23;62131:75;;;;-1:-1:-1::0;;;62131:75:0::1;;;;;;;:::i;:::-;62221:10;62217:421;;;62248:22;62343:4;62388:21;62405:3;62388:16;:21::i;:::-;62280:170;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;62280:170:0;;::::1;::::0;;;;;;62468:13:::1;::::0;;;:8:::1;62280:170;62468:13:::0;;;;;;:24;;62280:170;;-1:-1:-1;62468:24:0::1;::::0;:13;;:24;::::1;::::0;::::1;:::i;:::-;;62526:3;62512:18;62516:8;62512:18;;;;;;:::i;:::-;;;;;;;;62233:309;59070:328:::0;;;:::o;62217:421::-:1;62572:13;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;62622:3;62612:14;62616:4;62612:14;;;;;;:::i;:::-;;;;;;;;62037:608:::0;;;:::o;29469:438::-;-1:-1:-1;;;;;29702:20:0;;3362:10;29702:20;;:60;;-1:-1:-1;29726:36:0;29743:4;3362:10;28746:168;:::i;29726:36::-;29680:156;;;;-1:-1:-1;;;29680:156:0;;;;;;;:::i;:::-;29847:52;29870:4;29876:2;29880:3;29885:7;29894:4;29847:22;:52::i;:::-;29469:438;;;;;:::o;50198:96::-;72530:14;:12;:14::i;:::-;50265:15:::1;:21:::0;50198:96::o;71269:109::-;4670:13;:11;:13::i;:::-;71342:8:::1;:28:::0;;-1:-1:-1;;;;;;71342:28:0::1;-1:-1:-1::0;;;;;71342:28:0;;;::::1;::::0;;;::::1;::::0;;71269:109::o;50491:1677::-;50575:11;;;;;;;50567:70;;;;-1:-1:-1;;;50567:70:0;;;;;;;:::i;:::-;50657:6;;;;50656:7;50648:35;;;;-1:-1:-1;;;50648:35:0;;;;;;;:::i;:::-;50710:15;;68273:4;68297:17;;;:12;:17;;;;;;;;50702:24;50694:58;;;;-1:-1:-1;;;50694:58:0;;21346:2:1;50694:58:0;;;21328:21:1;21385:2;21365:18;;;21358:30;-1:-1:-1;;;21404:18:1;;;21397:51;21465:18;;50694:58:0;21144:345:1;50694:58:0;50814:15;;:19;;50832:1;50814:19;:::i;:::-;50795:15;;50771:39;;:21;:39;:::i;:::-;:62;;50763:120;;;;-1:-1:-1;;;50763:120:0;;;;;;;:::i;:::-;50901:14;:12;:14::i;:::-;50896:515;;50936:15;;;;50932:328;;;50980:25;50994:10;50980:13;:25::i;:::-;50972:53;;;;-1:-1:-1;;;50972:53:0;;;;;;;:::i;:::-;51102:10;51044:30;51077:36;;;:24;:36;;;;;;51190:16;;51140:46;51165:21;51077:36;51140:46;:::i;:::-;:66;;51132:112;;;;-1:-1:-1;;;51132:112:0;;;;;;;:::i;:::-;50953:307;50932:328;51289:21;51274:11;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;51371:4:0;;51347:28;;:21;:28;:::i;:::-;51333:9;:43;;51325:74;;;;-1:-1:-1;;;51325:74:0;;;;;;;:::i;:::-;51448:10;51423:36;;;;:24;:36;;;;;:61;;51463:21;;51423:36;:61;;51463:21;;51423:61;:::i;:::-;;;;-1:-1:-1;51497:21:0;;-1:-1:-1;51535:21:0;-1:-1:-1;;;;;51521:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51521:36:0;;51497:60;;51568:25;51610:21;-1:-1:-1;;;;;51596:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51596:36:0;;51568:64;;51648:9;51643:463;51667:21;51663:1;:25;51643:463;;;51724:15;;68273:4;68297:17;;;:12;:17;;;;;;;;51754:198;;51791:17;;;;:12;:17;;;;;;;;:24;;51811:4;-1:-1:-1;;51791:24:0;;;;;;;;51834:9;:14;;;;;:18;;;51871:12;:17;;;;;:24;;;;;;;;;51914:13;:18;;;;;;:22;51754:198;51980:12;:10;:12::i;:::-;51968:9;;;;:4;:9;;;;;;;;:24;;;;:9;;:24;;;;;;:::i;:::-;;52017:15;;52007:4;52012:1;52007:7;;;;;;;;:::i;:::-;;;;;;:25;;;;;52061:1;52047:8;52056:1;52047:11;;;;;;;;:::i;:::-;;;;;;;;;;:15;52077;:17;;;:15;:17;;;:::i;:::-;;;;;;51695:411;51690:3;;;;;:::i;:::-;;;;51643:463;;;;52118:42;52129:10;52141:4;52147:8;52118:42;;;;;;;;;;;;:10;:42::i;69631:273::-;69689:4;;69706:168;69730:20;:27;69726:31;;69706:168;;;69810:5;-1:-1:-1;;;;;69783:32:0;:20;69804:1;69783:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;69783:23:0;:32;69779:84;;;-1:-1:-1;69843:4:0;;69631:273;-1:-1:-1;;69631:273:0:o;69779:84::-;69759:3;;;;:::i;:::-;;;;69706:168;;;-1:-1:-1;69891:5:0;;69631:273;-1:-1:-1;;69631:273:0:o;70520:102::-;72530:14;:12;:14::i;:::-;70590:15:::1;:24:::0;;-1:-1:-1;;70590:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;70520:102::o;71461:569::-;72530:14;:12;:14::i;:::-;71526:8:::1;::::0;-1:-1:-1;;;;;71526:8:0::1;71518:99;;;::::0;-1:-1:-1;;;71518:99:0;;25599:2:1;71518:99:0::1;::::0;::::1;25581:21:1::0;;;25618:18;;;25611:30;25677:34;25657:18;;;25650:62;25729:18;;71518:99:0::1;25397:356:1::0;71518:99:0::1;71646:2;71631:11;;:17;71628:385;;71703:93;::::0;71685:12:::1;::::0;71711:42:::1;::::0;71768:21:::1;::::0;71685:12;71703:93;71685:12;71703:93;71768:21;71711:42;71703:93:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71684:112;;;71819:7;71811:16;;;::::0;::::1;;71649:190;71461:569::o:0;71628:385::-:1;71919:8;::::0;71911:59:::1;::::0;71893:12:::1;::::0;-1:-1:-1;;;;;71919:8:0::1;::::0;71942:21:::1;::::0;71893:12;71911:59;71893:12;71911:59;71942:21;71919:8;71911:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71628:385;71461:569::o:0;71109:87::-;72530:14;:12;:14::i;:::-;71173:4:::1;:15:::0;71109:87::o;61064:204::-;72530:14;:12;:14::i;:::-;61140:8:::1;::::0;::::1;::::0;::::1;;;61139:9;61131:45;;;::::0;-1:-1:-1;;;61131:45:0;;30264:2:1;61131:45:0::1;::::0;::::1;30246:21:1::0;30303:2;30283:18;;;30276:30;30342:25;30322:18;;;30315:53;30385:18;;61131:45:0::1;30062:347:1::0;61131:45:0::1;61187:14:::0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;61230:4;61212:12;61225:1;61212:15;;;;;;;;:::i;:::-;;;;;;;;:22;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;61245:8:0::1;:15:::0;;-1:-1:-1;;61245:15:0::1;;;::::0;;61064:204::o;27922:524::-;28078:16;28139:3;:10;28120:8;:15;:29;28112:83;;;;-1:-1:-1;;;28112:83:0;;31375:2:1;28112:83:0;;;31357:21:1;31414:2;31394:18;;;31387:30;31453:34;31433:18;;;31426:62;-1:-1:-1;;;31504:18:1;;;31497:39;31553:19;;28112:83:0;31173:405:1;28112:83:0;28208:30;28255:8;:15;-1:-1:-1;;;;;28241:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28241:30:0;;28208:63;;28289:9;28284:122;28308:8;:15;28304:1;:19;28284:122;;;28364:30;28374:8;28383:1;28374:11;;;;;;;;:::i;:::-;;;;;;;28387:3;28391:1;28387:6;;;;;;;;:::i;:::-;;;;;;;28364:9;:30::i;:::-;28345:13;28359:1;28345:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;28325:3;;;:::i;:::-;;;28284:122;;;-1:-1:-1;28425:13:0;27922:524;-1:-1:-1;;;27922:524:0:o;70246:113::-;72530:14;:12;:14::i;:::-;70326:16:::1;:25:::0;70246:113::o;62874:629::-;72530:14;:12;:14::i;:::-;63003:20:::1;63024:27:::0;;:29:::1;::::0;63052:1:::1;::::0;63024:29:::1;:::i;:::-;63003:51;;;;;;;;:::i;:::-;;;;;;;;;62989:11;:65;62981:133;;;::::0;-1:-1:-1;;;62981:133:0;;25960:2:1;62981:133:0::1;::::0;::::1;25942:21:1::0;25999:2;25979:18;;;25972:30;26038:34;26018:18;;;26011:62;26109:25;26089:18;;;26082:53;26152:19;;62981:133:0::1;25758:419:1::0;62981:133:0::1;63139:10;63135:351;;;63194:20;:38:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;63247:12:::1;:23:::0;;;;::::1;::::0;;-1:-1:-1;63247:23:0;;;::::1;::::0;;::::1;::::0;63194:38:::1;63247:23:::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;63285:8:0::1;:17:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;63285:17:0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;;59070:328:::0;;;:::o;63135:351::-:1;63366:20;:38:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;63419:8:::1;:19:::0;;;;::::1;::::0;;-1:-1:-1;63419:19:0;;;::::1;::::0;;::::1;::::0;63366:38:::1;63419:19:::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;63453:12:0::1;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;63453:21:0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;::::1;:::i;52337:1043::-:0;72530:14;:12;:14::i;:::-;52441:11:::1;::::0;;;::::1;;;52433:70;;;;-1:-1:-1::0;;;52433:70:0::1;;;;;;;:::i;:::-;52530:15;::::0;68273:4;68297:17;;;:12;:17;;;;;;;;52522:24:::1;52514:58;;;::::0;-1:-1:-1;;;52514:58:0;;21346:2:1;52514:58:0::1;::::0;::::1;21328:21:1::0;21385:2;21365:18;;;21358:30;-1:-1:-1;;;21404:18:1;;;21397:51;21465:18;;52514:58:0::1;21144:345:1::0;52514:58:0::1;52634:15;::::0;:19:::1;::::0;52652:1:::1;52634:19;:::i;:::-;52615:15;::::0;52591:39:::1;::::0;:21;:39:::1;:::i;:::-;:62;;52583:120;;;;-1:-1:-1::0;;;52583:120:0::1;;;;;;;:::i;:::-;52716:21;52754;-1:-1:-1::0;;;;;52740:36:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;52740:36:0::1;;52716:60;;52787:25;52829:21;-1:-1:-1::0;;;;;52815:36:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;52815:36:0::1;;52787:64;;52867:9;52862:463;52886:21;52882:1;:25;52862:463;;;52943:15;::::0;68273:4;68297:17;;;:12;:17;;;;;;;;52973:198:::1;;53010:17;::::0;;;:12:::1;:17;::::0;;;;;;;:24;;53030:4:::1;-1:-1:-1::0;;53010:24:0;;::::1;::::0;::::1;::::0;;;53053:9:::1;:14:::0;;;;;:18;;;53090:12:::1;:17:::0;;;;;:24;;;;::::1;::::0;::::1;::::0;;53133:13:::1;:18:::0;;;;;;:22;52973:198:::1;53199:12;:10;:12::i;:::-;53187:9;::::0;;;:4:::1;:9;::::0;;;;;;;:24;;::::1;::::0;:9;;:24;;;::::1;::::0;::::1;:::i;:::-;;53236:15;;53226:4;53231:1;53226:7;;;;;;;;:::i;:::-;;;;;;:25;;;::::0;::::1;53280:1;53266:8;53275:1;53266:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:15;53296::::1;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;52914:411;52909:3;;;;;:::i;:::-;;;;52862:463;;;;53337:35;53348:3;53353:4;53359:8;53337:35;;;;;;;;;;;::::0;:10:::1;:35::i;5432:103::-:0;4670:13;:11;:13::i;:::-;5497:30:::1;5524:1;5497:18;:30::i;70008:123::-:0;72530:14;:12;:14::i;:::-;70090:13:::1;:33:::0;70008:123::o;60577:277::-;60665:9;60660:138;60684:4;:11;60680:1;:15;60660:138;;;60717:11;60731:4;60736:1;60731:7;;;;;;;;:::i;:::-;;;;;;;60717:21;;60775:8;60784:1;60775:11;;;;;;;;:::i;:::-;;;;;;;60753:13;:18;60767:3;60753:18;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;60697:3:0;;-1:-1:-1;60697:3:0;;-1:-1:-1;60697:3:0;:::i;:::-;;;60660:138;;;;60808:38;60819:10;60831:4;60837:8;60808:10;:38::i;:::-;60577:277;;:::o;48323:37::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48323:37:0;:::o;68763:560::-;72530:14;:12;:14::i;:::-;68868:9:::1;68863:453;68887:4;:11;68883:1;:15;68863:453;;;68920:11;68934:4;68939:1;68934:7;;;;;;;;:::i;:::-;;;;;;;68920:21;;68974:9;68984:1;68974:12;;;;;;;;:::i;:::-;;;;;;;68956:9;:14;68966:3;68956:14;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;69020:1;69005:9;69015:1;69005:12;;;;;;;;:::i;:::-;;;;;;;:16;69001:304;;;69078:17;::::0;;;:12:::1;:17;::::0;;;;:24;;-1:-1:-1;;69078:24:0::1;69098:4;69078:24;::::0;;69001:304:::1;;;69284:5;69264:17:::0;;;:12:::1;:17;::::0;;;;:25;;-1:-1:-1;;69264:25:0::1;::::0;;69001:304:::1;-1:-1:-1::0;68900:3:0;::::1;::::0;::::1;:::i;:::-;;;;68863:453;;46942:29:::0;;;;;;;:::i;28519:155::-;28614:52;3362:10;28647:8;28657;28614:18;:52::i;50030:94::-;72530:14;:12;:14::i;:::-;50096:11:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;50096:20:0;;::::1;::::0;;;::::1;::::0;;50030:94::o;60354:137::-;60412:18;;;;:13;:18;;;;;:29;;60434:7;;60412:18;:29;;60434:7;;60412:29;:::i;:::-;;;;-1:-1:-1;60452:31:0;;-1:-1:-1;60458:10:0;60470:3;60475:7;60452:5;:31::i;61431:397::-;72530:14;:12;:14::i;:::-;61547:16;61539:70:::1;;;::::0;-1:-1:-1;;;61539:70:0;;26384:2:1;61539:70:0::1;::::0;::::1;26366:21:1::0;26423:2;26403:18;;;26396:30;26462:34;26442:18;;;26435:62;-1:-1:-1;;;26513:18:1;;;26506:39;26562:19;;61539:70:0::1;26182:405:1::0;61539:70:0::1;61624:10;61620:201;;;61710:4;61682:12;61695:11;61682:25;;;;;;;;:::i;:::-;;;;;;;;:32;;;;;;;;;;;;:::i;61620:201::-;61805:4;61781:8;61790:11;61781:21;;;;;;;;:::i;48477:37::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48477:37:0;;-1:-1:-1;48477:37:0;:::o;48402:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;68405:209::-;68462:7;68492:17;;68485:3;:24;68482:125;;-1:-1:-1;68532:1:0;;68405:209;-1:-1:-1;68405:209:0:o;68482:125::-;-1:-1:-1;68581:14:0;;;;:9;:14;;;;;;;68405:209::o;59790:479::-;72530:14;:12;:14::i;:::-;59911:21:::1;59927:4;59911:15;:21::i;:::-;59910:22;59902:74;;;;-1:-1:-1::0;;;59902:74:0::1;;;;;;;:::i;:::-;59992:9;59987:229;60011:4;:11;60007:1;:15;59987:229;;;60044:11;60058:4;60063:1;60058:7;;;;;;;;:::i;:::-;;;;;;;60044:21;;60085:11;60092:3;68273:4:::0;68297:17;;;:12;:17;;;;;;;;;68224:98;60085:11:::1;60080:77;;60117:17;::::0;;;:12:::1;:17;::::0;;;;:24;;-1:-1:-1;;60117:24:0::1;60137:4;60117:24;::::0;;60080:77:::1;60193:8;60202:1;60193:11;;;;;;;;:::i;:::-;;;;;;;60171:13;:18;60185:3;60171:18;;;;;;;;;;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;60024:3:0::1;::::0;-1:-1:-1;60024:3:0;;-1:-1:-1;60024:3:0::1;:::i;:::-;;;59987:229;;;;60226:35;60237:3;60242:4;60248:8;60226:35;;;;;;;;;;;::::0;:10:::1;:35::i;69439:120::-:0;72530:14;:12;:14::i;:::-;69539:12:::1;69520:15;;:31;;;;;;;:::i;48367:28::-:0;;;;;;;;;;;;55982:1931;56093:11;;;;;;;56092:12;56084:77;;;;-1:-1:-1;;;56084:77:0;;;;;;;:::i;:::-;56181:6;;;;56180:7;56172:35;;;;-1:-1:-1;;;56172:35:0;;;;;;;:::i;:::-;56241:13;;56226:4;:11;:28;;56218:71;;;;-1:-1:-1;;;56218:71:0;;29136:2:1;56218:71:0;;;29118:21:1;29175:2;29155:18;;;29148:30;29214:32;29194:18;;;29187:60;29264:18;;56218:71:0;28934:354:1;56218:71:0;56323:8;:15;56308:4;:11;:30;56300:79;;;;-1:-1:-1;;;56300:79:0;;25194:2:1;56300:79:0;;;25176:21:1;25233:2;25213:18;;;25206:30;25272:34;25252:18;;;25245:62;-1:-1:-1;;;25323:18:1;;;25316:34;25367:19;;56300:79:0;24992:400:1;56300:79:0;56398:35;56418:4;56424:8;56398:19;:35::i;:::-;56390:65;;;;-1:-1:-1;;;56390:65:0;;27200:2:1;56390:65:0;;;27182:21:1;27239:2;27219:18;;;27212:30;-1:-1:-1;;;27258:18:1;;;27251:47;27315:18;;56390:65:0;26998:341:1;56390:65:0;56468:25;;56504:481;56528:8;:15;56524:1;:19;56504:481;;;56565:11;56579:4;56584:1;56579:7;;;;;;;;:::i;:::-;;;;;;;56565:21;;56601:15;56619:8;56628:1;56619:11;;;;;;;;:::i;:::-;;;;;;;56601:29;;56656:17;;56649:3;:24;56645:282;;56701:26;56714:3;56719:7;56701:12;:26::i;:::-;56693:68;;;;-1:-1:-1;;;56693:68:0;;20579:2:1;56693:68:0;;;20561:21:1;20618:2;20598:18;;;20591:30;20657:31;20637:18;;;20630:59;20706:18;;56693:68:0;20377:353:1;56693:68:0;56789:17;;;;:12;:17;;;;;;;;56788:18;56780:51;;;;-1:-1:-1;;;56780:51:0;;30616:2:1;56780:51:0;;;30598:21:1;30655:2;30635:18;;;30628:30;-1:-1:-1;;;30674:18:1;;;30667:50;30734:18;;56780:51:0;30414:344:1;56780:51:0;56850:14;;;;:9;:14;;;;;;;;56867:1;56850:18;;;;56887:12;:17;;;;;;:24;;-1:-1:-1;;56887:24:0;;;;;;56645:282;56962:8;56971:1;56962:11;;;;;;;;:::i;:::-;;;;;;;56941:32;;;;;:::i;:::-;;;56550:435;;56545:3;;;;;:::i;:::-;;;;56504:481;;;;57024:18;;57003:17;:39;;56995:79;;;;-1:-1:-1;;;56995:79:0;;22036:2:1;56995:79:0;;;22018:21:1;22075:2;22055:18;;;22048:30;22114:29;22094:18;;;22087:57;22161:18;;56995:79:0;21834:351:1;56995:79:0;57092:14;:12;:14::i;:::-;57087:456;;57127:15;;;;57123:324;;;57171:25;57185:10;57171:13;:25::i;:::-;57163:53;;;;-1:-1:-1;;;57163:53:0;;;;;;;:::i;:::-;57293:10;57235:30;57268:36;;;:24;:36;;;;;;57377:16;;57331:42;57356:17;57268:36;57331:42;:::i;:::-;:62;;57323:108;;;;-1:-1:-1;;;57323:108:0;;;;;;;:::i;:::-;57144:303;57123:324;57503:4;;57483:24;;:17;:24;:::i;:::-;57469:9;:39;;57461:70;;;;-1:-1:-1;;;57461:70:0;;;;;;;:::i;:::-;57580:10;57555:36;;;;:24;:36;;;;;:57;;57595:17;;57555:36;:57;;57595:17;;57555:57;:::i;:::-;;;;-1:-1:-1;57630:9:0;;-1:-1:-1;57625:233:0;57649:4;:11;57645:1;:15;57625:233;;;57708:8;57717:1;57708:11;;;;;;;;:::i;:::-;;;;;;;57682:13;:22;57696:4;57701:1;57696:7;;;;;;;;:::i;:::-;;;;;;;57682:22;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;57734:11;57748:4;57753:1;57748:7;;;;;;;;:::i;:::-;;;;;;;57734:21;;57775:11;57782:3;68273:4;68297:17;;;:12;:17;;;;;;;;;68224:98;57775:11;57770:77;;57807:17;;;;:12;:17;;;;;:24;;-1:-1:-1;;57807:24:0;57827:4;57807:24;;;57770:77;-1:-1:-1;57662:3:0;;;;:::i;:::-;;;;57625:233;;;;57870:35;57881:3;57886:4;57892:8;57870:35;;;;;;;;;;;;:10;:35::i;72817:210::-;72861:4;72896:7;4857:6;;-1:-1:-1;;;;;4857:6:0;;4784:87;72896:7;-1:-1:-1;;;;;72882:21:0;:10;-1:-1:-1;;;;;72882:21:0;;:46;;;-1:-1:-1;72921:7:0;;-1:-1:-1;;;;;72921:7:0;72907:10;:21;72882:46;72878:142;;;-1:-1:-1;72951:4:0;;72817:210::o;72878:142::-;-1:-1:-1;73003:5:0;;72817:210::o;72878:142::-;72817:210;:::o;70766:155::-;72530:14;:12;:14::i;:::-;70846:27:::1;70853:20;;70846:27;:::i;:::-;70884:29;:20;70907:6:::0;;70884:29:::1;:::i;28986:406::-:0;-1:-1:-1;;;;;29194:20:0;;3362:10;29194:20;;:60;;-1:-1:-1;29218:36:0;29235:4;3362:10;28746:168;:::i;29218:36::-;29172:156;;;;-1:-1:-1;;;29172:156:0;;;;;;;:::i;:::-;29339:45;29357:4;29363:2;29367;29371:6;29379:4;29339:17;:45::i;5690:201::-;4670:13;:11;:13::i;:::-;-1:-1:-1;;;;;5779:22:0;::::1;5771:73;;;::::0;-1:-1:-1;;;5771:73:0;;22392:2:1;5771:73:0::1;::::0;::::1;22374:21:1::0;22431:2;22411:18;;;22404:30;22470:34;22450:18;;;22443:62;-1:-1:-1;;;22521:18:1;;;22514:36;22567:19;;5771:73:0::1;22190:402:1::0;5771:73:0::1;5855:28;5874:8;5855:18;:28::i;7535:326::-:0;-1:-1:-1;;;;;7830:19:0;;:23;;;7535:326::o;72651:158::-;4857:6;;-1:-1:-1;;;;;4857:6:0;72716:10;:21;;:46;;-1:-1:-1;72755:7:0;;-1:-1:-1;;;;;72755:7:0;72741:10;:21;72716:46;72708:93;;;;-1:-1:-1;;;72708:93:0;;23204:2:1;72708:93:0;;;23186:21:1;23243:2;23223:18;;;23216:30;23282:34;23262:18;;;23255:62;-1:-1:-1;;;23333:18:1;;;23326:32;23375:19;;72708:93:0;23002:398:1;34167:729:0;-1:-1:-1;;;;;34320:16:0;;34312:62;;;;-1:-1:-1;;;34312:62:0;;;;;;;:::i;:::-;3362:10;34387:16;34452:21;34470:2;34452:17;:21::i;:::-;34429:44;;34484:24;34511:25;34529:6;34511:17;:25::i;:::-;34484:52;;34628:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34628:17:0;;;;;;;;;:27;;34649:6;;34628:9;:27;;34649:6;;34628:27;:::i;:::-;;;;-1:-1:-1;;34671:52:0;;;34682:25:1;;;34738:2;34723:18;;34716:34;;;-1:-1:-1;;;;;34671:52:0;;;;34704:1;;34671:52;;;;;;34655:18:1;34671:52:0;;;;;;;34814:74;34845:8;34863:1;34867:2;34871;34875:6;34883:4;34814:30;:74::i;:::-;34301:595;;;34167:729;;;;:::o;483:723::-;539:13;760:10;756:53;;-1:-1:-1;;787:10:0;;;;;;;;;;;;-1:-1:-1;;;787:10:0;;;;;483:723::o;756:53::-;834:5;819:12;875:78;882:9;;875:78;;908:8;;;;:::i;:::-;;-1:-1:-1;931:10:0;;-1:-1:-1;939:2:0;931:10;;:::i;:::-;;;875:78;;;963:19;995:6;-1:-1:-1;;;;;985:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;985:17:0;;963:39;;1013:154;1020:10;;1013:154;;1047:11;1057:1;1047:11;;:::i;:::-;;-1:-1:-1;1116:10:0;1124:2;1116:5;:10;:::i;:::-;1103:24;;:2;:24;:::i;:::-;1090:39;;1073:6;1080;1073:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1073:56:0;;;;;;;;-1:-1:-1;1144:11:0;1153:2;1144:11;;:::i;:::-;;;1013:154;;;1191:6;483:723;-1:-1:-1;;;;483:723:0:o;54789:708::-;54858:4;54878:17;;;:12;:17;;;;;;;;54874:592;;;54926:1;54916:7;:11;:39;;;;;54942:13;;54931:7;:24;;54916:39;:50;;;;;54965:1;54959:3;:7;54916:50;:76;;;;;54977:15;;54970:3;:22;;54916:76;:126;;;;-1:-1:-1;55028:14:0;;;;:9;:14;;;;;;;;;54996:13;:18;;;;;;;:28;;55017:7;;54996:28;:::i;:::-;:46;;54916:126;54912:276;;;54874:592;;54912:276;-1:-1:-1;55167:5:0;55160:12;;54874:592;55243:1;55233:7;:11;:39;;;;;55259:13;;55248:7;:24;;55233:39;:50;;;;;55282:1;55276:3;:7;55233:50;:76;;;;;55294:15;;55287:3;:22;55229:226;;;-1:-1:-1;55485:4:0;54789:708;;;;:::o;67711:228::-;67780:4;67807:17;;67800:3;:24;;:40;;;;;67828:7;67839:1;67828:12;67800:40;67796:136;;;-1:-1:-1;67863:4:0;67856:11;;31703:1146;31930:7;:14;31916:3;:10;:28;31908:81;;;;-1:-1:-1;;;31908:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32008:16:0;;32000:66;;;;-1:-1:-1;;;32000:66:0;;;;;;;:::i;:::-;3362:10;32079:16;32196:421;32220:3;:10;32216:1;:14;32196:421;;;32252:10;32265:3;32269:1;32265:6;;;;;;;;:::i;:::-;;;;;;;32252:19;;32286:14;32303:7;32311:1;32303:10;;;;;;;;:::i;:::-;;;;;;;;;;;;32330:19;32352:13;;;;;;;;;;-1:-1:-1;;;;;32352:19:0;;;;;;;;;;;;32303:10;;-1:-1:-1;32394:21:0;;;;32386:76;;;;-1:-1:-1;;;32386:76:0;;;;;;;:::i;:::-;32506:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32506:19:0;;;;;;;;;;32528:20;;;32506:42;;32578:17;;;;;;;:27;;32528:20;;32506:9;32578:27;;32528:20;;32578:27;:::i;:::-;;;;;;;;32237:380;;;32232:3;;;;:::i;:::-;;;32196:421;;;;32664:2;-1:-1:-1;;;;;32634:47:0;32658:4;-1:-1:-1;;;;;32634:47:0;32648:8;-1:-1:-1;;;;;32634:47:0;;32668:3;32673:7;32634:47;;;;;;;:::i;:::-;;;;;;;;32766:75;32802:8;32812:4;32818:2;32822:3;32827:7;32836:4;32766:35;:75::i;:::-;31897:952;31703:1146;;;;;:::o;4949:132::-;4857:6;;-1:-1:-1;;;;;4857:6:0;3362:10;5013:23;5005:68;;;;-1:-1:-1;;;5005:68:0;;29495:2:1;5005:68:0;;;29477:21:1;;;29514:18;;;29507:30;29573:34;29553:18;;;29546:62;29625:18;;5005:68:0;29293:356:1;67301:402:0;67346:13;67371:11;67552:1;67431:15;67461:16;67492:10;67517:15;;67400:133;;;;;;;;;;17180:19:1;;;17224:2;17215:12;;17208:28;;;;17274:2;17270:15;-1:-1:-1;;17266:53:1;17261:2;17252:12;;17245:75;17345:2;17336:12;;17329:28;17382:3;17373:13;;16967:425;67400:133:0;;;;;;;;;;;;;67390:158;;;;;;67385:164;;:168;;;;:::i;:::-;67371:182;;67604:1;67594:6;:11;67590:106;;-1:-1:-1;;67621:11:0;;;;;;;;;;;;-1:-1:-1;;;67621:11:0;;;;;67301:402::o;67590:106::-;-1:-1:-1;;67673:11:0;;;;;;;;;;;;-1:-1:-1;;;67673:11:0;;;;;67301:402::o;67590:106::-;67360:343;67301:402;:::o;35299:813::-;-1:-1:-1;;;;;35477:16:0;;35469:62;;;;-1:-1:-1;;;35469:62:0;;;;;;;:::i;:::-;35564:7;:14;35550:3;:10;:28;35542:81;;;;-1:-1:-1;;;35542:81:0;;;;;;;:::i;:::-;3362:10;35636:16;35759:103;35783:3;:10;35779:1;:14;35759:103;;;35840:7;35848:1;35840:10;;;;;;;;:::i;:::-;;;;;;;35815:9;:17;35825:3;35829:1;35825:6;;;;;;;;:::i;:::-;;;;;;;35815:17;;;;;;;;;;;:21;35833:2;-1:-1:-1;;;;;35815:21:0;-1:-1:-1;;;;;35815:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;35795:3:0;;-1:-1:-1;35795:3:0;;;:::i;:::-;;;;35759:103;;;;35915:2;-1:-1:-1;;;;;35879:53:0;35911:1;-1:-1:-1;;;;;35879:53:0;35893:8;-1:-1:-1;;;;;35879:53:0;;35919:3;35924:7;35879:53;;;;;;;:::i;:::-;;;;;;;;36023:81;36059:8;36077:1;36081:2;36085:3;36090:7;36099:4;36023:35;:81::i;6051:191::-;6144:6;;;-1:-1:-1;;;;;6161:17:0;;;-1:-1:-1;;;;;;6161:17:0;;;;;;;6194:40;;6144:6;;;6161:17;6144:6;;6194:40;;6125:16;;6194:40;6114:128;6051:191;:::o;37468:969::-;-1:-1:-1;;;;;37620:18:0;;37612:66;;;;-1:-1:-1;;;37612:66:0;;;;;;;:::i;:::-;37711:7;:14;37697:3;:10;:28;37689:81;;;;-1:-1:-1;;;37689:81:0;;;;;;;:::i;:::-;37827:66;;;;;;;;;37783:16;37827:66;;;;3362:10;;37906:373;37930:3;:10;37926:1;:14;37906:373;;;37962:10;37975:3;37979:1;37975:6;;;;;;;;:::i;:::-;;;;;;;37962:19;;37996:14;38013:7;38021:1;38013:10;;;;;;;;:::i;:::-;;;;;;;;;;;;38040:19;38062:13;;;;;;;;;;-1:-1:-1;;;;;38062:19:0;;;;;;;;;;;;38013:10;;-1:-1:-1;38104:21:0;;;;38096:70;;;;-1:-1:-1;;;38096:70:0;;;;;;;:::i;:::-;38210:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38210:19:0;;;;;;;;;;38232:20;;38210:42;;37942:3;;;;:::i;:::-;;;;37906:373;;;;38334:1;-1:-1:-1;;;;;38296:55:0;38320:4;-1:-1:-1;;;;;38296:55:0;38310:8;-1:-1:-1;;;;;38296:55:0;;38338:3;38343:7;38296:55;;;;;;;:::i;:::-;;;;;;;;38364:65;;;;;;;;;38408:1;38364:65;;;31703:1146;38580:331;38735:8;-1:-1:-1;;;;;38726:17:0;:5;-1:-1:-1;;;;;38726:17:0;;;38718:71;;;;-1:-1:-1;;;38718:71:0;;30965:2:1;38718:71:0;;;30947:21:1;31004:2;30984:18;;;30977:30;31043:34;31023:18;;;31016:62;-1:-1:-1;;;31094:18:1;;;31087:39;31143:19;;38718:71:0;30763:405:1;38718:71:0;-1:-1:-1;;;;;38800:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38800:46:0;;;;;;;;;;38862:41;;20101::1;;;38862::0;;20074:18:1;38862:41:0;;;;;;;38580:331;;;:::o;36410:808::-;-1:-1:-1;;;;;36537:18:0;;36529:66;;;;-1:-1:-1;;;36529:66:0;;;;;;;:::i;:::-;3362:10;36608:16;36673:21;36691:2;36673:17;:21::i;:::-;36650:44;;36705:24;36732:25;36750:6;36732:17;:25::i;:::-;36770:66;;;;;;;;;-1:-1:-1;36770:66:0;;;;36871:13;;;;;;;;;-1:-1:-1;;;;;36871:19:0;;;;;;;;36705:52;;-1:-1:-1;36909:21:0;;;;36901:70;;;;-1:-1:-1;;;36901:70:0;;;;;;;:::i;:::-;37007:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37007:19:0;;;;;;;;;;;;37029:20;;;37007:42;;37078:54;;34682:25:1;;;34723:18;;;34716:34;;;37007:19:0;;37078:54;;;;;;34655:18:1;37078:54:0;;;;;;;37145:65;;;;;;;;;37189:1;37145:65;;;31703:1146;66879:380;66945:4;;66961:269;66985:4;:11;66981:1;:15;66961:269;;;67018:11;67032:4;67037:1;67032:7;;;;;;;;:::i;:::-;;;;;;;67018:21;;67065:17;;67058:3;:24;67054:165;;;;;-1:-1:-1;67198:5:0;;66879:380;-1:-1:-1;;;66879:380:0:o;67054:165::-;-1:-1:-1;66998:3:0;;;:::i;:::-;;;66961:269;;57921:946;58014:4;;58030:806;58054:4;:11;58050:1;:15;58030:806;;;58087:11;58101:4;58106:1;58101:7;;;;;;;;:::i;:::-;;;;;;;58087:21;;58123:15;58141:8;58150:1;58141:11;;;;;;;;:::i;:::-;;;;;;;;;;;;58171:17;;;;:12;:17;;;;;;;;58141:11;;-1:-1:-1;58171:17:0;;58167:658;;;58223:1;58213:7;:11;:39;;;;;58239:13;;58228:7;:24;;58213:39;:50;;;;;58262:1;58256:3;:7;58213:50;:76;;;;;58274:15;;58267:3;:22;;58213:76;:126;;;;-1:-1:-1;58325:14:0;;;;:9;:14;;;;;;;;;58293:13;:18;;;;;;;:28;;58314:7;;58293:28;:::i;:::-;:46;;58213:126;58209:299;;;58167:658;;58209:299;58483:5;58476:12;;;;;;;58167:658;58575:1;58565:7;:11;:39;;;;;58591:13;;58580:7;:24;;58565:39;:50;;;;;58614:1;58608:3;:7;58565:50;:76;;;;;58626:15;;58619:3;:22;58561:249;;;58072:764;;58067:3;;;;;:::i;:::-;;;;58030:806;;;-1:-1:-1;58855:4:0;;57921:946;-1:-1:-1;;;57921:946:0:o;30371:974::-;-1:-1:-1;;;;;30559:16:0;;30551:66;;;;-1:-1:-1;;;30551:66:0;;;;;;;:::i;:::-;3362:10;30630:16;30695:21;30713:2;30695:17;:21::i;:::-;30672:44;;30727:24;30754:25;30772:6;30754:17;:25::i;:::-;30727:52;;30865:19;30887:13;;;;;;;;;;;-1:-1:-1;;;;;30887:19:0;;;;;;;;;;30925:21;;;;30917:76;;;;-1:-1:-1;;;30917:76:0;;;;;;;:::i;:::-;31029:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31029:19:0;;;;;;;;;;31051:20;;;31029:42;;31093:17;;;;;;;:27;;31051:20;;31029:9;31093:27;;31051:20;;31093:27;:::i;:::-;;;;-1:-1:-1;;31138:46:0;;;34682:25:1;;;34738:2;34723:18;;34716:34;;;-1:-1:-1;;;;;31138:46:0;;;;;;;;;;;;;;34655:18:1;31138:46:0;;;;;;;31269:68;31300:8;31310:4;31316:2;31320;31324:6;31332:4;31269:30;:68::i;:::-;30540:805;;;;30371:974;;;;;:::o;42846:198::-;42966:16;;;42980:1;42966:16;;;;;;;;;42912;;42941:22;;42966:16;;;;;;;;;;;;-1:-1:-1;42966:16:0;42941:41;;43004:7;42993:5;42999:1;42993:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;43031:5;42846:198;-1:-1:-1;;42846:198:0:o;41273:744::-;-1:-1:-1;;;;;41488:13:0;;7830:19;:23;41484:526;;41524:72;;-1:-1:-1;;;41524:72:0;;-1:-1:-1;;;;;41524:38:0;;;;;:72;;41563:8;;41573:4;;41579:2;;41583:6;;41591:4;;41524:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41524:72:0;;;;;;;;-1:-1:-1;;41524:72:0;;;;;;;;;;;;:::i;:::-;;;41520:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41872:6;41865:14;;-1:-1:-1;;;41865:14:0;;;;;;;;:::i;41520:479::-;;;41921:62;;-1:-1:-1;;;41921:62:0;;33284:2:1;41921:62:0;;;33266:21:1;33323:2;33303:18;;;33296:30;33362:34;33342:18;;;33335:62;-1:-1:-1;;;33413:18:1;;;33406:50;33473:19;;41921:62:0;33082:416:1;41520:479:0;-1:-1:-1;;;;;;41646:55:0;;-1:-1:-1;;;41646:55:0;41642:154;;41726:50;;-1:-1:-1;;;41726:50:0;;;;;;;:::i;42025:813::-;-1:-1:-1;;;;;42265:13:0;;7830:19;:23;42261:570;;42301:79;;-1:-1:-1;;;42301:79:0;;-1:-1:-1;;;;;42301:43:0;;;;;:79;;42345:8;;42355:4;;42361:3;;42366:7;;42375:4;;42301:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42301:79:0;;;;;;;;-1:-1:-1;;42301:79:0;;;;;;;;;;;;:::i;:::-;;;42297:523;;;;:::i;:::-;-1:-1:-1;;;;;;42462:60:0;;-1:-1:-1;;;42462:60:0;42458:159;;42547:50;;-1:-1:-1;;;42547:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:735;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:163;748:2;745:1;742:9;734:163;;;805:17;;793:30;;843:12;;;;875;;;;766:1;759:9;734:163;;;-1:-1:-1;915:6:1;;192:735;-1:-1:-1;;;;;;;192:735:1:o;932:160::-;997:20;;1053:13;;1046:21;1036:32;;1026:60;;1082:1;1079;1072:12;1097:555;1139:5;1192:3;1185:4;1177:6;1173:17;1169:27;1159:55;;1210:1;1207;1200:12;1159:55;1246:6;1233:20;-1:-1:-1;;;;;1268:2:1;1265:26;1262:52;;;1294:18;;:::i;:::-;1343:2;1337:9;1355:67;1410:2;1391:13;;-1:-1:-1;;1387:27:1;1416:4;1383:38;1337:9;1355:67;:::i;:::-;1446:2;1438:6;1431:18;1492:3;1485:4;1480:2;1472:6;1468:15;1464:26;1461:35;1458:55;;;1509:1;1506;1499:12;1458:55;1573:2;1566:4;1558:6;1554:17;1547:4;1539:6;1535:17;1522:54;1620:1;1596:15;;;1613:4;1592:26;1585:37;;;;1600:6;1097:555;-1:-1:-1;;;1097:555:1:o;1657:186::-;1716:6;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1808:29;1827:9;1808:29;:::i;:::-;1798:39;1657:186;-1:-1:-1;;;1657:186:1:o;1848:260::-;1916:6;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2016:29;2035:9;2016:29;:::i;:::-;2006:39;;2064:38;2098:2;2087:9;2083:18;2064:38;:::i;:::-;2054:48;;1848:260;;;;;:::o;2113:943::-;2267:6;2275;2283;2291;2299;2352:3;2340:9;2331:7;2327:23;2323:33;2320:53;;;2369:1;2366;2359:12;2320:53;2392:29;2411:9;2392:29;:::i;:::-;2382:39;;2440:38;2474:2;2463:9;2459:18;2440:38;:::i;:::-;2430:48;;2529:2;2518:9;2514:18;2501:32;-1:-1:-1;;;;;2593:2:1;2585:6;2582:14;2579:34;;;2609:1;2606;2599:12;2579:34;2632:61;2685:7;2676:6;2665:9;2661:22;2632:61;:::i;:::-;2622:71;;2746:2;2735:9;2731:18;2718:32;2702:48;;2775:2;2765:8;2762:16;2759:36;;;2791:1;2788;2781:12;2759:36;2814:63;2869:7;2858:8;2847:9;2843:24;2814:63;:::i;:::-;2804:73;;2930:3;2919:9;2915:19;2902:33;2886:49;;2960:2;2950:8;2947:16;2944:36;;;2976:1;2973;2966:12;2944:36;;2999:51;3042:7;3031:8;3020:9;3016:24;2999:51;:::i;:::-;2989:61;;;2113:943;;;;;;;;:::o;3061:606::-;3165:6;3173;3181;3189;3197;3250:3;3238:9;3229:7;3225:23;3221:33;3218:53;;;3267:1;3264;3257:12;3218:53;3290:29;3309:9;3290:29;:::i;:::-;3280:39;;3338:38;3372:2;3361:9;3357:18;3338:38;:::i;:::-;3328:48;;3423:2;3412:9;3408:18;3395:32;3385:42;;3474:2;3463:9;3459:18;3446:32;3436:42;;3529:3;3518:9;3514:19;3501:33;-1:-1:-1;;;;;3549:6:1;3546:30;3543:50;;;3589:1;3586;3579:12;3543:50;3612:49;3653:7;3644:6;3633:9;3629:22;3612:49;:::i;3672:669::-;3799:6;3807;3815;3868:2;3856:9;3847:7;3843:23;3839:32;3836:52;;;3884:1;3881;3874:12;3836:52;3907:29;3926:9;3907:29;:::i;:::-;3897:39;;3987:2;3976:9;3972:18;3959:32;-1:-1:-1;;;;;4051:2:1;4043:6;4040:14;4037:34;;;4067:1;4064;4057:12;4037:34;4090:61;4143:7;4134:6;4123:9;4119:22;4090:61;:::i;:::-;4080:71;;4204:2;4193:9;4189:18;4176:32;4160:48;;4233:2;4223:8;4220:16;4217:36;;;4249:1;4246;4239:12;4217:36;;4272:63;4327:7;4316:8;4305:9;4301:24;4272:63;:::i;:::-;4262:73;;;3672:669;;;;;:::o;4346:254::-;4411:6;4419;4472:2;4460:9;4451:7;4447:23;4443:32;4440:52;;;4488:1;4485;4478:12;4440:52;4511:29;4530:9;4511:29;:::i;:::-;4501:39;;4559:35;4590:2;4579:9;4575:18;4559:35;:::i;4605:254::-;4673:6;4681;4734:2;4722:9;4713:7;4709:23;4705:32;4702:52;;;4750:1;4747;4740:12;4702:52;4773:29;4792:9;4773:29;:::i;:::-;4763:39;4849:2;4834:18;;;;4821:32;;-1:-1:-1;;;4605:254:1:o;4864:322::-;4941:6;4949;4957;5010:2;4998:9;4989:7;4985:23;4981:32;4978:52;;;5026:1;5023;5016:12;4978:52;5049:29;5068:9;5049:29;:::i;:::-;5039:39;5125:2;5110:18;;5097:32;;-1:-1:-1;5176:2:1;5161:18;;;5148:32;;4864:322;-1:-1:-1;;;4864:322:1:o;5191:615::-;5277:6;5285;5338:2;5326:9;5317:7;5313:23;5309:32;5306:52;;;5354:1;5351;5344:12;5306:52;5394:9;5381:23;-1:-1:-1;;;;;5464:2:1;5456:6;5453:14;5450:34;;;5480:1;5477;5470:12;5450:34;5518:6;5507:9;5503:22;5493:32;;5563:7;5556:4;5552:2;5548:13;5544:27;5534:55;;5585:1;5582;5575:12;5534:55;5625:2;5612:16;5651:2;5643:6;5640:14;5637:34;;;5667:1;5664;5657:12;5637:34;5720:7;5715:2;5705:6;5702:1;5698:14;5694:2;5690:23;5686:32;5683:45;5680:65;;;5741:1;5738;5731:12;5680:65;5772:2;5764:11;;;;;5794:6;;-1:-1:-1;5191:615:1;;-1:-1:-1;;;;5191:615:1:o;5811:1219::-;5929:6;5937;5990:2;5978:9;5969:7;5965:23;5961:32;5958:52;;;6006:1;6003;5996:12;5958:52;6046:9;6033:23;-1:-1:-1;;;;;6116:2:1;6108:6;6105:14;6102:34;;;6132:1;6129;6122:12;6102:34;6170:6;6159:9;6155:22;6145:32;;6215:7;6208:4;6204:2;6200:13;6196:27;6186:55;;6237:1;6234;6227:12;6186:55;6273:2;6260:16;6295:4;6318:43;6358:2;6318:43;:::i;:::-;6390:2;6384:9;6402:31;6430:2;6422:6;6402:31;:::i;:::-;6468:18;;;6502:15;;;;-1:-1:-1;6537:11:1;;;6579:1;6575:10;;;6567:19;;6563:28;;6560:41;-1:-1:-1;6557:61:1;;;6614:1;6611;6604:12;6557:61;6636:1;6627:10;;6646:169;6660:2;6657:1;6654:9;6646:169;;;6717:23;6736:3;6717:23;:::i;:::-;6705:36;;6678:1;6671:9;;;;;6761:12;;;;6793;;6646:169;;;-1:-1:-1;6834:6:1;-1:-1:-1;;6878:18:1;;6865:32;;-1:-1:-1;;6909:16:1;;;6906:36;;;6938:1;6935;6928:12;6906:36;;6961:63;7016:7;7005:8;6994:9;6990:24;6961:63;:::i;:::-;6951:73;;;5811:1219;;;;;:::o;7035:595::-;7153:6;7161;7214:2;7202:9;7193:7;7189:23;7185:32;7182:52;;;7230:1;7227;7220:12;7182:52;7270:9;7257:23;-1:-1:-1;;;;;7340:2:1;7332:6;7329:14;7326:34;;;7356:1;7353;7346:12;7326:34;7379:61;7432:7;7423:6;7412:9;7408:22;7379:61;:::i;:::-;7369:71;;7493:2;7482:9;7478:18;7465:32;7449:48;;7522:2;7512:8;7509:16;7506:36;;;7538:1;7535;7528:12;7635:180;7691:6;7744:2;7732:9;7723:7;7719:23;7715:32;7712:52;;;7760:1;7757;7750:12;7712:52;7783:26;7799:9;7783:26;:::i;7820:245::-;7878:6;7931:2;7919:9;7910:7;7906:23;7902:32;7899:52;;;7947:1;7944;7937:12;7899:52;7986:9;7973:23;8005:30;8029:5;8005:30;:::i;8070:249::-;8139:6;8192:2;8180:9;8171:7;8167:23;8163:32;8160:52;;;8208:1;8205;8198:12;8160:52;8240:9;8234:16;8259:30;8283:5;8259:30;:::i;8324:321::-;8393:6;8446:2;8434:9;8425:7;8421:23;8417:32;8414:52;;;8462:1;8459;8452:12;8414:52;8502:9;8489:23;-1:-1:-1;;;;;8527:6:1;8524:30;8521:50;;;8567:1;8564;8557:12;8521:50;8590:49;8631:7;8622:6;8611:9;8607:22;8590:49;:::i;8650:180::-;8709:6;8762:2;8750:9;8741:7;8737:23;8733:32;8730:52;;;8778:1;8775;8768:12;8730:52;-1:-1:-1;8801:23:1;;8650:180;-1:-1:-1;8650:180:1:o;8835:457::-;8919:6;8927;8935;8988:2;8976:9;8967:7;8963:23;8959:32;8956:52;;;9004:1;9001;8994:12;8956:52;9040:9;9027:23;9017:33;;9101:2;9090:9;9086:18;9073:32;-1:-1:-1;;;;;9120:6:1;9117:30;9114:50;;;9160:1;9157;9150:12;9114:50;9183:49;9224:7;9215:6;9204:9;9200:22;9183:49;:::i;:::-;9173:59;;;9251:35;9282:2;9271:9;9267:18;9251:35;:::i;:::-;9241:45;;8835:457;;;;;:::o;9297:248::-;9365:6;9373;9426:2;9414:9;9405:7;9401:23;9397:32;9394:52;;;9442:1;9439;9432:12;9394:52;-1:-1:-1;;9465:23:1;;;9535:2;9520:18;;;9507:32;;-1:-1:-1;9297:248:1:o;9550:435::-;9603:3;9641:5;9635:12;9668:6;9663:3;9656:19;9694:4;9723:2;9718:3;9714:12;9707:19;;9760:2;9753:5;9749:14;9781:1;9791:169;9805:6;9802:1;9799:13;9791:169;;;9866:13;;9854:26;;9900:12;;;;9935:15;;;;9827:1;9820:9;9791:169;;;-1:-1:-1;9976:3:1;;9550:435;-1:-1:-1;;;;;9550:435:1:o;9990:257::-;10031:3;10069:5;10063:12;10096:6;10091:3;10084:19;10112:63;10168:6;10161:4;10156:3;10152:14;10145:4;10138:5;10134:16;10112:63;:::i;:::-;10229:2;10208:15;-1:-1:-1;;10204:29:1;10195:39;;;;10236:4;10191:50;;9990:257;-1:-1:-1;;9990:257:1:o;10252:973::-;10337:12;;10302:3;;10392:1;10412:18;;;;10465;;;;10492:61;;10546:4;10538:6;10534:17;10524:27;;10492:61;10572:2;10620;10612:6;10609:14;10589:18;10586:38;10583:161;;;10666:10;10661:3;10657:20;10654:1;10647:31;10701:4;10698:1;10691:15;10729:4;10726:1;10719:15;10583:161;10760:18;10787:104;;;;10905:1;10900:319;;;;10753:466;;10787:104;-1:-1:-1;;10820:24:1;;10808:37;;10865:16;;;;-1:-1:-1;10787:104:1;;10900:319;35022:1;35015:14;;;35059:4;35046:18;;10994:1;11008:165;11022:6;11019:1;11016:13;11008:165;;;11100:14;;11087:11;;;11080:35;11143:16;;;;11037:10;;11008:165;;;11012:3;;11202:6;11197:3;11193:16;11186:23;;10753:466;;;;;;;10252:973;;;;:::o;11230:197::-;11358:3;11383:38;11417:3;11409:6;11383:38;:::i;11432:675::-;11810:3;11838:38;11872:3;11864:6;11838:38;:::i;:::-;-1:-1:-1;;;11892:2:1;11885:15;11929:6;11923:13;11945:60;11998:6;11994:1;11990:2;11986:10;11979:4;11971:6;11967:17;11945:60;:::i;:::-;-1:-1:-1;;;12063:1:1;12024:15;;;;12055:10;;;12048:27;12099:1;12091:10;;11432:675;-1:-1:-1;;;;11432:675:1:o;12369:909::-;-1:-1:-1;;;12876:3:1;12869:22;12851:3;12920:6;12914:13;12936:61;12990:6;12986:1;12981:3;12977:11;12970:4;12962:6;12958:17;12936:61;:::i;:::-;-1:-1:-1;;;13056:1:1;13016:16;;;13048:10;;;13041:23;13089:13;;13111:62;13089:13;13160:1;13152:10;;13145:4;13133:17;;13111:62;:::i;:::-;-1:-1:-1;;;13233:1:1;13192:17;;;;13225:10;;;13218:27;13269:2;13261:11;;12369:909;-1:-1:-1;;;;12369:909:1:o;13283:831::-;-1:-1:-1;;;13787:3:1;13780:22;13762:3;13821:46;13864:1;13859:3;13855:11;13847:6;13821:46;:::i;:::-;-1:-1:-1;;;13883:2:1;13876:28;13933:6;13927:13;13949:61;14003:6;13998:2;13994;13990:11;13983:4;13975:6;13971:17;13949:61;:::i;:::-;-1:-1:-1;;;14068:2:1;14029:15;;;;14060:11;;;14053:28;14105:2;14097:11;;13283:831;-1:-1:-1;;;;13283:831:1:o;14119:830::-;-1:-1:-1;;;14623:3:1;14616:22;14598:3;14657:46;14700:1;14695:3;14691:11;14683:6;14657:46;:::i;:::-;-1:-1:-1;;;14719:2:1;14712:27;14768:6;14762:13;14784:61;14838:6;14833:2;14829;14825:11;14818:4;14810:6;14806:17;14784:61;:::i;:::-;-1:-1:-1;;;14903:2:1;14864:15;;;;14895:11;;;14888:28;14940:2;14932:11;;14119:830;-1:-1:-1;;;;14119:830:1:o;14954:815::-;-1:-1:-1;;;15458:3:1;15451:22;15433:3;15492:46;15535:1;15530:3;15526:11;15518:6;15492:46;:::i;15774:767::-;-1:-1:-1;;;16331:3:1;16324:22;16306:3;16365:46;16408:1;16403:3;16399:11;16391:6;16365:46;:::i;:::-;-1:-1:-1;;;16420:15:1;;-1:-1:-1;;;16459:1:1;16451:10;;16444:28;-1:-1:-1;;;16496:1:1;16488:10;;16481:27;16532:2;16524:11;;15774:767;-1:-1:-1;;;15774:767:1:o;17829:826::-;-1:-1:-1;;;;;18226:15:1;;;18208:34;;18278:15;;18273:2;18258:18;;18251:43;18188:3;18325:2;18310:18;;18303:31;;;18151:4;;18357:57;;18394:19;;18386:6;18357:57;:::i;:::-;18462:9;18454:6;18450:22;18445:2;18434:9;18430:18;18423:50;18496:44;18533:6;18525;18496:44;:::i;:::-;18482:58;;18589:9;18581:6;18577:22;18571:3;18560:9;18556:19;18549:51;18617:32;18642:6;18634;18617:32;:::i;:::-;18609:40;17829:826;-1:-1:-1;;;;;;;;17829:826:1:o;18660:560::-;-1:-1:-1;;;;;18957:15:1;;;18939:34;;19009:15;;19004:2;18989:18;;18982:43;19056:2;19041:18;;19034:34;;;19099:2;19084:18;;19077:34;;;18919:3;19142;19127:19;;19120:32;;;18882:4;;19169:45;;19194:19;;19186:6;19169:45;:::i;:::-;19161:53;18660:560;-1:-1:-1;;;;;;;18660:560:1:o;19225:261::-;19404:2;19393:9;19386:21;19367:4;19424:56;19476:2;19465:9;19461:18;19453:6;19424:56;:::i;19491:465::-;19748:2;19737:9;19730:21;19711:4;19774:56;19826:2;19815:9;19811:18;19803:6;19774:56;:::i;:::-;19878:9;19870:6;19866:22;19861:2;19850:9;19846:18;19839:50;19906:44;19943:6;19935;19906:44;:::i;:::-;19898:52;19491:465;-1:-1:-1;;;;;19491:465:1:o;20153:219::-;20302:2;20291:9;20284:21;20265:4;20322:44;20362:2;20351:9;20347:18;20339:6;20322:44;:::i;20735:404::-;20937:2;20919:21;;;20976:2;20956:18;;;20949:30;21015:34;21010:2;20995:18;;20988:62;-1:-1:-1;;;21081:2:1;21066:18;;21059:38;21129:3;21114:19;;20735:404::o;22597:400::-;22799:2;22781:21;;;22838:2;22818:18;;;22811:30;22877:34;22872:2;22857:18;;22850:62;-1:-1:-1;;;22943:2:1;22928:18;;22921:34;22987:3;22972:19;;22597:400::o;23405:409::-;23607:2;23589:21;;;23646:2;23626:18;;;23619:30;23685:34;23680:2;23665:18;;23658:62;-1:-1:-1;;;23751:2:1;23736:18;;23729:43;23804:3;23789:19;;23405:409::o;23819:342::-;24021:2;24003:21;;;24060:2;24040:18;;;24033:30;-1:-1:-1;;;24094:2:1;24079:18;;24072:48;24152:2;24137:18;;23819:342::o;24577:410::-;24779:2;24761:21;;;24818:2;24798:18;;;24791:30;24857:34;24852:2;24837:18;;24830:62;-1:-1:-1;;;24923:2:1;24908:18;;24901:44;24977:3;24962:19;;24577:410::o;26592:401::-;26794:2;26776:21;;;26833:2;26813:18;;;26806:30;26872:34;26867:2;26852:18;;26845:62;-1:-1:-1;;;26938:2:1;26923:18;;26916:35;26983:3;26968:19;;26592:401::o;27344:399::-;27546:2;27528:21;;;27585:2;27565:18;;;27558:30;27624:34;27619:2;27604:18;;27597:62;-1:-1:-1;;;27690:2:1;27675:18;;27668:33;27733:3;27718:19;;27344:399::o;27748:406::-;27950:2;27932:21;;;27989:2;27969:18;;;27962:30;28028:34;28023:2;28008:18;;28001:62;-1:-1:-1;;;28094:2:1;28079:18;;28072:40;28144:3;28129:19;;27748:406::o;28159:410::-;28361:2;28343:21;;;28400:2;28380:18;;;28373:30;28439:34;28434:2;28419:18;;28412:62;-1:-1:-1;;;28505:2:1;28490:18;;28483:44;28559:3;28544:19;;28159:410::o;29654:403::-;29856:2;29838:21;;;29895:2;29875:18;;;29868:30;29934:34;29929:2;29914:18;;29907:62;-1:-1:-1;;;30000:2:1;29985:18;;29978:37;30047:3;30032:19;;29654:403::o;31583:404::-;31785:2;31767:21;;;31824:2;31804:18;;;31797:30;31863:34;31858:2;31843:18;;31836:62;-1:-1:-1;;;31929:2:1;31914:18;;31907:38;31977:3;31962:19;;31583:404::o;31992:339::-;32194:2;32176:21;;;32233:2;32213:18;;;32206:30;-1:-1:-1;;;32267:2:1;32252:18;;32245:45;32322:2;32307:18;;31992:339::o;32336:397::-;32538:2;32520:21;;;32577:2;32557:18;;;32550:30;32616:34;32611:2;32596:18;;32589:62;-1:-1:-1;;;32682:2:1;32667:18;;32660:31;32723:3;32708:19;;32336:397::o;32738:339::-;32940:2;32922:21;;;32979:2;32959:18;;;32952:30;-1:-1:-1;;;33013:2:1;32998:18;;32991:45;33068:2;33053:18;;32738:339::o;33503:416::-;33705:2;33687:21;;;33744:2;33724:18;;;33717:30;33783:34;33778:2;33763:18;;33756:62;-1:-1:-1;;;33849:2:1;33834:18;;33827:50;33909:3;33894:19;;33503:416::o;33924:397::-;34126:2;34108:21;;;34165:2;34145:18;;;34138:30;34204:34;34199:2;34184:18;;34177:62;-1:-1:-1;;;34270:2:1;34255:18;;34248:31;34311:3;34296:19;;33924:397::o;34761:183::-;34821:4;-1:-1:-1;;;;;34846:6:1;34843:30;34840:56;;;34876:18;;:::i;:::-;-1:-1:-1;34921:1:1;34917:14;34933:4;34913:25;;34761:183::o;35075:128::-;35115:3;35146:1;35142:6;35139:1;35136:13;35133:39;;;35152:18;;:::i;:::-;-1:-1:-1;35188:9:1;;35075:128::o;35208:120::-;35248:1;35274;35264:35;;35279:18;;:::i;:::-;-1:-1:-1;35313:9:1;;35208:120::o;35333:168::-;35373:7;35439:1;35435;35431:6;35427:14;35424:1;35421:21;35416:1;35409:9;35402:17;35398:45;35395:71;;;35446:18;;:::i;:::-;-1:-1:-1;35486:9:1;;35333:168::o;35506:125::-;35546:4;35574:1;35571;35568:8;35565:34;;;35579:18;;:::i;:::-;-1:-1:-1;35616:9:1;;35506:125::o;35636:258::-;35708:1;35718:113;35732:6;35729:1;35726:13;35718:113;;;35808:11;;;35802:18;35789:11;;;35782:39;35754:2;35747:10;35718:113;;;35849:6;35846:1;35843:13;35840:48;;;-1:-1:-1;;35884:1:1;35866:16;;35859:27;35636:258::o;35899:380::-;35978:1;35974:12;;;;36021;;;36042:61;;36096:4;36088:6;36084:17;36074:27;;36042:61;36149:2;36141:6;36138:14;36118:18;36115:38;36112:161;;;36195:10;36190:3;36186:20;36183:1;36176:31;36230:4;36227:1;36220:15;36258:4;36255:1;36248:15;36112:161;;35899:380;;;:::o;36284:249::-;36394:2;36375:13;;-1:-1:-1;;36371:27:1;36359:40;;-1:-1:-1;;;;;36414:34:1;;36450:22;;;36411:62;36408:88;;;36476:18;;:::i;:::-;36512:2;36505:22;-1:-1:-1;;36284:249:1:o;36538:135::-;36577:3;-1:-1:-1;;36598:17:1;;36595:43;;;36618:18;;:::i;:::-;-1:-1:-1;36665:1:1;36654:13;;36538:135::o;36678:112::-;36710:1;36736;36726:35;;36741:18;;:::i;:::-;-1:-1:-1;36775:9:1;;36678:112::o;36795:127::-;36856:10;36851:3;36847:20;36844:1;36837:31;36887:4;36884:1;36877:15;36911:4;36908:1;36901:15;36927:127;36988:10;36983:3;36979:20;36976:1;36969:31;37019:4;37016:1;37009:15;37043:4;37040:1;37033:15;37059:127;37120:10;37115:3;37111:20;37108:1;37101:31;37151:4;37148:1;37141:15;37175:4;37172:1;37165:15;37191:127;37252:10;37247:3;37243:20;37240:1;37233:31;37283:4;37280:1;37273:15;37307:4;37304:1;37297:15;37323:179;37358:3;37400:1;37382:16;37379:23;37376:120;;;37446:1;37443;37440;37425:23;-1:-1:-1;37483:1:1;37477:8;37472:3;37468:18;37323:179;:::o;37507:671::-;37546:3;37588:4;37570:16;37567:26;37564:39;;;37507:671;:::o;37564:39::-;37630:2;37624:9;-1:-1:-1;;37695:16:1;37691:25;;37688:1;37624:9;37667:50;37746:4;37740:11;37770:16;-1:-1:-1;;;;;37876:2:1;37869:4;37861:6;37857:17;37854:25;37849:2;37841:6;37838:14;37835:45;37832:58;;;37883:5;;;;;37507:671;:::o;37832:58::-;37920:6;37914:4;37910:17;37899:28;;37956:3;37950:10;37983:2;37975:6;37972:14;37969:27;;;37989:5;;;;;;37507:671;:::o;37969:27::-;38073:2;38054:16;38048:4;38044:27;38040:36;38033:4;38024:6;38019:3;38015:16;38011:27;38008:69;38005:82;;;38080:5;;;;;;37507:671;:::o;38005:82::-;38096:57;38147:4;38138:6;38130;38126:19;38122:30;38116:4;38096:57;:::i;:::-;-1:-1:-1;38169:3:1;;37507:671;-1:-1:-1;;;;;37507:671:1:o;38183:131::-;-1:-1:-1;;;;;;38257:32:1;;38247:43;;38237:71;;38304:1;38301;38294:12
Swarm Source
ipfs://fa4aa81615434ef4bcac31a3b311a63c1c130847d4a4f00edc9a0d8b1b62e2e6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.