Source Code
Overview
MATIC Balance
0 MATIC
More Info
ContractCreator:
TokenTracker
Multichain Info
N/A
Loading...
Loading
Contract Name:
IseedWhitelist
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at mumbai.polygonscan.com on 2022-12-06 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (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: @openzeppelin/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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/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: @openzeppelin/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: @openzeppelin/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: @openzeppelin/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 nor 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 nor 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/IseedWhitelist.sol pragma solidity >=0.7.0 <0.9.0; interface infinityPassInterface { function getOwners() external view returns(address [] memory); } interface LiquidityPoolInterface { function transferBalance() external payable returns(bool); } contract IseedWhitelist is Ownable, ERC1155 { //Token info string public _name; string public _symbol; string public baseUri; string public baseExtension = ".json"; uint256 public price = 1000000000000000000 wei; //1 matic //communities string [] private communities; uint256 private currentCommunity; address [] public usersWithPreordainedItem = [0x874767A2d01A986b811d9aa77F8A3cD70F6966cE, 0x21EB10f4c4C417eF20800007181c5530F01AF9A0]; uint256 public maxSupply = 5000; uint256 public totalSupply = 0; //Burn for Iseed address public IseedContractAddress; bool public IseedContractAddressAlreadySetted = false; //Infinity pass address public infinityPassAddress; infinityPassInterface public infinityPassInstance; //constructor constructor ( string memory uri_, string memory name_, string memory symbol_, string [] memory _communities, address _infinityPass ) ERC1155 (uri_){ _name = name_; _symbol = symbol_; uint256 length = usersWithPreordainedItem.length; for(uint256 i = 0; i < length; i++) { _mint(usersWithPreordainedItem[i], 1, 1, ""); } totalSupply += length; //SPACEGEM, DONFOREX, WOLFOFTUSCANY, GGROUP, THEFINANCEGROUP communities = _communities; currentCommunity = 0; //mint to infinity pass owners require(_infinityPass != address(0), ""); infinityPassInstance = infinityPassInterface(_infinityPass); infinityPassAddress = _infinityPass; address [] memory infinityPassOwners = infinityPassInstance.getOwners(); for(uint256 i = 0; i < infinityPassOwners.length; i++) { _mint(infinityPassOwners[i], 2, 1, ""); } } function mint(string memory _community, uint256 _amount) public payable { require(currentCommunity < communities.length, "Event terminated"); require(keccak256(abi.encodePacked((_community))) == keccak256(abi.encodePacked((communities[currentCommunity]))), "There is a time for everything, but this is not the time."); require(_amount > 0); require(totalSupply + _amount <= maxSupply); require(msg.value >= _amount * price, "incorrect price"); _mint(msg.sender, 1, _amount, ""); totalSupply += _amount; } function airdrop(address _to, uint256 _amount) public onlyOwner { require(totalSupply + _amount <= maxSupply); _mint(_to, 1, _amount, ""); totalSupply += _amount; } function burnWhitelistForIseed (address _user, uint256 _amount, uint256 _id) external returns(bool) { require(msg.sender == IseedContractAddress, "User not approved"); _burn(_user, _id, _amount); return true; } // VIEW FUNCTIONS function uri(uint256 id) public view virtual override returns (string memory) { return string(abi.encodePacked(baseUri, id, baseExtension)); } function remainingTokens() public view returns(uint256) { return maxSupply - totalSupply; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } //################ // SETTINGS FUNCTIONS function setUri (string memory _uri) public onlyOwner { _setURI(_uri); } function setPrice (uint256 _newPriceInWei) public onlyOwner { price = _newPriceInWei; } function nextCommunity () public onlyOwner { currentCommunity += 1; } function getCurrentCommunity() public view onlyOwner returns(string memory) { return communities[currentCommunity]; } function getNextCommunity() public view onlyOwner returns(string memory) { return communities[currentCommunity + 1]; } function setIseedContractAddress (address _iseedContractAddress) public onlyOwner { require(!IseedContractAddressAlreadySetted, "Iseed contract address already setted"); IseedContractAddress = _iseedContractAddress; IseedContractAddressAlreadySetted = true; } function withdraw (address _liquidityPool) public onlyOwner { (bool sent, ) = _liquidityPool.call{value: address(this).balance}(""); require(sent); } function withdraw (address _liquidityPool, uint256 _percentageForLiquidityPool) public onlyOwner { require(_percentageForLiquidityPool > 0); LiquidityPoolInterface liquidityPoolInstance = LiquidityPoolInterface(_liquidityPool); bool sentoToLiquidity = liquidityPoolInstance.transferBalance{value: (address(this).balance * (_percentageForLiquidityPool / 100))}(); require(sentoToLiquidity); (bool sentToOwner, ) = msg.sender.call{value: address(this).balance}(""); require(sentToOwner); } }
[{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string[]","name":"_communities","type":"string[]"},{"internalType":"address","name":"_infinityPass","type":"address"}],"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":[],"name":"IseedContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IseedContractAddressAlreadySetted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"burnWhitelistForIseed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentCommunity","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextCommunity","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinityPassAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infinityPassInstance","outputs":[{"internalType":"contract infinityPassInterface","name":"","type":"address"}],"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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_community","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"address","name":"_iseedContractAddress","type":"address"}],"name":"setIseedContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPriceInWei","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setUri","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":"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":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usersWithPreordainedItem","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityPool","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityPool","type":"address"},{"internalType":"uint256","name":"_percentageForLiquidityPool","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600790805190602001906200005192919062000a36565b50670de0b6b3a7640000600855604051806040016040528073874767a2d01a986b811d9aa77f8a3cd70f6966ce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321eb10f4c4c417ef20800007181c5530f01af9a073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250600b9060026200010592919062000ac7565b50611388600c556000600d556000600e60146101000a81548160ff0219169083151502179055503480156200013957600080fd5b5060405162005fdb38038062005fdb83398181016040528101906200015f919062000ef6565b846200018062000174620004a760201b60201c565b620004af60201b60201c565b62000191816200057360201b60201c565b508360049080519060200190620001aa92919062000a36565b508260059080519060200190620001c392919062000a36565b506000600b80549050905060005b8181101562000255576200023f600b8281548110620001f557620001f462001581565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600180604051806020016040528060008152506200058f60201b60201c565b80806200024c90620014d5565b915050620001d1565b5080600d60008282546200026a91906200136c565b9250508190555082600990805190602001906200028992919062000b56565b506000600a81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000305576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fc9062001206565b60405180910390fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0e67e2b6040518163ffffffff1660e01b815260040160006040518083038186803b158015620003f257600080fd5b505afa15801562000407573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062000432919062000e73565b905060005b81518110156200049957620004838282815181106200045b576200045a62001581565b5b602002602001015160026001604051806020016040528060008152506200058f60201b60201c565b80806200049090620014d5565b91505062000437565b505050505050505062001801565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600390805190602001906200058b92919062000a36565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000602576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f99062001228565b60405180910390fd5b600062000614620004a760201b60201c565b9050600062000629856200077860201b60201c565b905060006200063e856200077860201b60201c565b90506200065783600089858589620007f960201b60201c565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006b991906200136c565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051620007399291906200124a565b60405180910390a462000758836000898585896200080160201b60201c565b6200076f836000898989896200080960201b60201c565b50505050505050565b60606000600167ffffffffffffffff8111156200079a5762000799620015b0565b5b604051908082528060200260200182016040528015620007c95781602001602082028036833780820191505090505b5090508281600081518110620007e457620007e362001581565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b620008358473ffffffffffffffffffffffffffffffffffffffff1662000a1360201b6200195b1760201c565b1562000a0b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200087e9594939291906200113a565b602060405180830381600087803b1580156200089957600080fd5b505af1925050508015620008cd57506040513d601f19601f82011682018060405250810190620008ca919062000ec4565b60015b6200097f57620008dc620015df565b806308c379a01415620009405750620008f46200172b565b8062000901575062000942565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093791906200119e565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097690620011c2565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000a09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0090620011e4565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805462000a449062001469565b90600052602060002090601f01602090048101928262000a68576000855562000ab4565b82601f1062000a8357805160ff191683800117855562000ab4565b8280016001018555821562000ab4579182015b8281111562000ab357825182559160200191906001019062000a96565b5b50905062000ac3919062000bbd565b5090565b82805482825590600052602060002090810192821562000b43579160200282015b8281111562000b425782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000ae8565b5b50905062000b52919062000bbd565b5090565b82805482825590600052602060002090810192821562000baa579160200282015b8281111562000ba957825182908051906020019062000b9892919062000a36565b509160200191906001019062000b77565b5b50905062000bb9919062000bdc565b5090565b5b8082111562000bd857600081600090555060010162000bbe565b5090565b5b8082111562000c00576000818162000bf6919062000c04565b5060010162000bdd565b5090565b50805462000c129062001469565b6000825580601f1062000c26575062000c47565b601f01602090049060005260206000209081019062000c46919062000bbd565b5b50565b600062000c6162000c5b84620012a0565b62001277565b9050808382526020820190508285602086028201111562000c875762000c8662001609565b5b60005b8581101562000cbb578162000ca0888262000dac565b84526020840193506020830192505060018101905062000c8a565b5050509392505050565b600062000cdc62000cd684620012cf565b62001277565b9050808382526020820190508285602086028201111562000d025762000d0162001609565b5b60005b8581101562000d5757815167ffffffffffffffff81111562000d2c5762000d2b62001604565b5b80860162000d3b898262000e40565b8552602085019450602084019350505060018101905062000d05565b5050509392505050565b600062000d7862000d7284620012fe565b62001277565b90508281526020810184848401111562000d975762000d966200160e565b5b62000da484828562001433565b509392505050565b60008151905062000dbd81620017cd565b92915050565b600082601f83011262000ddb5762000dda62001604565b5b815162000ded84826020860162000c4a565b91505092915050565b600082601f83011262000e0e5762000e0d62001604565b5b815162000e2084826020860162000cc5565b91505092915050565b60008151905062000e3a81620017e7565b92915050565b600082601f83011262000e585762000e5762001604565b5b815162000e6a84826020860162000d61565b91505092915050565b60006020828403121562000e8c5762000e8b62001618565b5b600082015167ffffffffffffffff81111562000ead5762000eac62001613565b5b62000ebb8482850162000dc3565b91505092915050565b60006020828403121562000edd5762000edc62001618565b5b600062000eed8482850162000e29565b91505092915050565b600080600080600060a0868803121562000f155762000f1462001618565b5b600086015167ffffffffffffffff81111562000f365762000f3562001613565b5b62000f448882890162000e40565b955050602086015167ffffffffffffffff81111562000f685762000f6762001613565b5b62000f768882890162000e40565b945050604086015167ffffffffffffffff81111562000f9a5762000f9962001613565b5b62000fa88882890162000e40565b935050606086015167ffffffffffffffff81111562000fcc5762000fcb62001613565b5b62000fda8882890162000df6565b925050608062000fed8882890162000dac565b9150509295509295909350565b6200100581620013c9565b82525050565b6000620010188262001334565b6200102481856200134a565b93506200103681856020860162001433565b62001041816200161d565b840191505092915050565b600062001059826200133f565b6200106581856200135b565b93506200107781856020860162001433565b62001082816200161d565b840191505092915050565b60006200109c6034836200135b565b9150620010a9826200163b565b604082019050919050565b6000620010c36028836200135b565b9150620010d0826200168a565b604082019050919050565b6000620010ea6000836200135b565b9150620010f782620016d9565b600082019050919050565b6000620011116021836200135b565b91506200111e82620016dc565b604082019050919050565b620011348162001429565b82525050565b600060a08201905062001151600083018862000ffa565b62001160602083018762000ffa565b6200116f604083018662001129565b6200117e606083018562001129565b81810360808301526200119281846200100b565b90509695505050505050565b60006020820190508181036000830152620011ba81846200104c565b905092915050565b60006020820190508181036000830152620011dd816200108d565b9050919050565b60006020820190508181036000830152620011ff81620010b4565b9050919050565b600060208201905081810360008301526200122181620010db565b9050919050565b60006020820190508181036000830152620012438162001102565b9050919050565b600060408201905062001261600083018562001129565b62001270602083018462001129565b9392505050565b60006200128362001296565b90506200129182826200149f565b919050565b6000604051905090565b600067ffffffffffffffff821115620012be57620012bd620015b0565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620012ed57620012ec620015b0565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156200131c576200131b620015b0565b5b62001327826200161d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620013798262001429565b9150620013868362001429565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013be57620013bd62001523565b5b828201905092915050565b6000620013d68262001409565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200145357808201518184015260208101905062001436565b8381111562001463576000848401525b50505050565b600060028204905060018216806200148257607f821691505b6020821081141562001499576200149862001552565b5b50919050565b620014aa826200161d565b810181811067ffffffffffffffff82111715620014cc57620014cb620015b0565b5b80604052505050565b6000620014e28262001429565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001518576200151762001523565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115620016015760046000803e620015fe6000516200162e565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b50565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156200173d57620017ca565b6200174762001296565b60043d036004823e80513d602482011167ffffffffffffffff8211171562001771575050620017ca565b808201805167ffffffffffffffff811115620017915750505050620017ca565b80602083010160043d038501811115620017b0575050505050620017ca565b620017c1826020018501866200149f565b82955050505050505b90565b620017d881620013c9565b8114620017e457600080fd5b50565b620017f281620013dd565b8114620017fe57600080fd5b50565b6147ca80620018116000396000f3fe6080604052600436106102195760003560e01c80639abc832011610123578063bf583903116100ab578063e985e9c51161006f578063e985e9c5146107a5578063ee681b4f146107e2578063f242432a1461080d578063f2fde38b14610836578063f3fef3a31461085f57610219565b8063bf583903146106bc578063c6682862146106e7578063d28d885214610712578063d5abeb011461073d578063e8aaabb71461076857610219565b8063a22cb465116100f2578063a22cb465146105fd578063a623066814610626578063b09f12661461063d578063be5e027c14610668578063bf2274b61461069157610219565b80639abc8320146105415780639b642de11461056c5780639cf41a9614610595578063a035b1fe146105d257610219565b806351cff8d9116101a6578063821bc4f111610175578063821bc4f11461046e5780638ba4cc3c146104995780638da5cb5b146104c257806391b7f5ed146104ed57806395d89b411461051657610219565b806351cff8d9146103d857806362d3d40e1461040157806370eda0611461042c578063715018a61461045757610219565b80630e89341c116101ed5780630e89341c146102df57806312fdc54c1461031c57806318160ddd146103475780632eb2c2d6146103725780634e1273f41461039b57610219565b8062fdd58e1461021e57806301ffc9a71461025b578063056b01ce1461029857806306fdde03146102b4575b600080fd5b34801561022a57600080fd5b5061024560048036038101906102409190613020565b610888565b6040516102529190613ba0565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613158565b610952565b60405161028f91906138e8565b60405180910390f35b6102b260048036038101906102ad91906131fb565b610a34565b005b3480156102c057600080fd5b506102c9610bdc565b6040516102d6919061391e565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613257565b610c6e565b604051610313919061391e565b60405180910390f35b34801561032857600080fd5b50610331610c9d565b60405161033e9190613903565b60405180910390f35b34801561035357600080fd5b5061035c610cc3565b6040516103699190613ba0565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612e7a565b610cc9565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906130b3565b610d6a565b6040516103cf919061388f565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190612e0d565b610e83565b005b34801561040d57600080fd5b50610416610f05565b60405161042391906137b2565b60405180910390f35b34801561043857600080fd5b50610441610f2b565b60405161044e919061391e565b60405180910390f35b34801561046357600080fd5b5061046c610fef565b005b34801561047a57600080fd5b50610483611003565b604051610490919061391e565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613020565b6110bb565b005b3480156104ce57600080fd5b506104d7611118565b6040516104e491906137b2565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613257565b611141565b005b34801561052257600080fd5b5061052b611153565b604051610538919061391e565b60405180910390f35b34801561054d57600080fd5b506105566111e5565b604051610563919061391e565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e91906131b2565b611273565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613060565b611287565b6040516105c991906138e8565b60405180910390f35b3480156105de57600080fd5b506105e761132f565b6040516105f49190613ba0565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190612fe0565b611335565b005b34801561063257600080fd5b5061063b61134b565b005b34801561064957600080fd5b5061065261136f565b60405161065f919061391e565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612e0d565b6113fd565b005b34801561069d57600080fd5b506106a66114b4565b6040516106b391906137b2565b60405180910390f35b3480156106c857600080fd5b506106d16114da565b6040516106de9190613ba0565b60405180910390f35b3480156106f357600080fd5b506106fc6114f1565b604051610709919061391e565b60405180910390f35b34801561071e57600080fd5b5061072761157f565b604051610734919061391e565b60405180910390f35b34801561074957600080fd5b5061075261160d565b60405161075f9190613ba0565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190613257565b611613565b60405161079c91906137b2565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190612e3a565b611652565b6040516107d991906138e8565b60405180910390f35b3480156107ee57600080fd5b506107f76116e6565b60405161080491906138e8565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190612f49565b6116f9565b005b34801561084257600080fd5b5061085d60048036038101906108589190612e0d565b61179a565b005b34801561086b57600080fd5b5061088660048036038101906108819190613020565b61181e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f090613a40565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2d5750610a2c8261197e565b5b9050919050565b600980549050600a5410610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613980565b60405180910390fd5b6009600a5481548110610a9357610a926140a3565b5b90600052602060002001604051602001610aad9190613751565b6040516020818303038152906040528051906020012082604051602001610ad4919061373a565b6040516020818303038152906040528051906020012014610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613a00565b60405180910390fd5b60008111610b3757600080fd5b600c5481600d54610b489190613d5f565b1115610b5357600080fd5b60085481610b619190613de6565b341015610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613b40565b60405180910390fd5b610bbf33600183604051806020016040528060008152506119e8565b80600d6000828254610bd19190613d5f565b925050819055505050565b606060048054610beb90613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1790613f60565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b60606006826007604051602001610c8793929190613768565b6040516020818303038152906040529050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b610cd1611b9a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d175750610d1685610d11611b9a565b611652565b5b610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613960565b60405180910390fd5b610d638585858585611ba2565b5050505050565b60608151835114610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613b00565b60405180910390fd5b6000835167ffffffffffffffff811115610dcd57610dcc6140d2565b5b604051908082528060200260200182016040528015610dfb5781602001602082028036833780820191505090505b50905060005b8451811015610e7857610e48858281518110610e2057610e1f6140a3565b5b6020026020010151858381518110610e3b57610e3a6140a3565b5b6020026020010151610888565b828281518110610e5b57610e5a6140a3565b5b60200260200101818152505080610e7190613fc3565b9050610e01565b508091505092915050565b610e8b611ec7565b60008173ffffffffffffffffffffffffffffffffffffffff1647604051610eb19061379d565b60006040518083038185875af1925050503d8060008114610eee576040519150601f19603f3d011682016040523d82523d6000602084013e610ef3565b606091505b5050905080610f0157600080fd5b5050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610f35611ec7565b60096001600a54610f469190613d5f565b81548110610f5757610f566140a3565b5b906000526020600020018054610f6c90613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9890613f60565b8015610fe55780601f10610fba57610100808354040283529160200191610fe5565b820191906000526020600020905b815481529060010190602001808311610fc857829003601f168201915b5050505050905090565b610ff7611ec7565b6110016000611f45565b565b606061100d611ec7565b6009600a5481548110611023576110226140a3565b5b90600052602060002001805461103890613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461106490613f60565b80156110b15780601f10611086576101008083540402835291602001916110b1565b820191906000526020600020905b81548152906001019060200180831161109457829003601f168201915b5050505050905090565b6110c3611ec7565b600c5481600d546110d49190613d5f565b11156110df57600080fd5b6110fb82600183604051806020016040528060008152506119e8565b80600d600082825461110d9190613d5f565b925050819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611149611ec7565b8060088190555050565b60606005805461116290613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461118e90613f60565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b600680546111f290613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461121e90613f60565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b505050505081565b61127b611ec7565b61128481612009565b50565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613b80565b60405180910390fd5b611324848385612023565b600190509392505050565b60085481565b611347611340611b9a565b838361226c565b5050565b611353611ec7565b6001600a60008282546113669190613d5f565b92505081905550565b6005805461137c90613f60565b80601f01602080910402602001604051908101604052809291908181526020018280546113a890613f60565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b505050505081565b611405611ec7565b600e60149054906101000a900460ff1615611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c906139c0565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60146101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54600c546114ec9190613e40565b905090565b600780546114fe90613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461152a90613f60565b80156115775780601f1061154c57610100808354040283529160200191611577565b820191906000526020600020905b81548152906001019060200180831161155a57829003601f168201915b505050505081565b6004805461158c90613f60565b80601f01602080910402602001604051908101604052809291908181526020018280546115b890613f60565b80156116055780601f106115da57610100808354040283529160200191611605565b820191906000526020600020905b8154815290600101906020018083116115e857829003601f168201915b505050505081565b600c5481565b600b818154811061162357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60149054906101000a900460ff1681565b611701611b9a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611747575061174685611741611b9a565b611652565b5b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613960565b60405180910390fd5b61179385858585856123d9565b5050505050565b6117a2611ec7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611809906139e0565b60405180910390fd5b61181b81611f45565b50565b611826611ec7565b6000811161183357600080fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff166366adeb8c6064856118639190613db5565b4761186e9190613de6565b6040518263ffffffff1660e01b81526004016020604051808303818588803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118d2919061312b565b9050806118de57600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516119049061379d565b60006040518083038185875af1925050503d8060008114611941576040519150601f19603f3d011682016040523d82523d6000602084013e611946565b606091505b505090508061195457600080fd5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90613b60565b60405180910390fd5b6000611a62611b9a565b90506000611a6f85612678565b90506000611a7c85612678565b9050611a8d836000898585896126f2565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aed9190613d5f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611b6b929190613bbb565b60405180910390a4611b82836000898585896126fa565b611b9183600089898989612702565b50505050505050565b600033905090565b8151835114611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613a60565b60405180910390fd5b6000611c60611b9a565b9050611c708187878787876126f2565b60005b8451811015611e24576000858281518110611c9157611c906140a3565b5b602002602001015190506000858381518110611cb057611caf6140a3565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990613aa0565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e099190613d5f565b9250508190555050505080611e1d90613fc3565b9050611c73565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e9b9291906138b1565b60405180910390a4611eb18187878787876126fa565b611ebf8187878787876128e9565b505050505050565b611ecf611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611eed611118565b73ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90613ac0565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806003908051906020019061201f929190612ad0565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613a80565b60405180910390fd5b600061209d611b9a565b905060006120aa84612678565b905060006120b784612678565b90506120d7838760008585604051806020016040528060008152506126f2565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690613a20565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161223d929190613bbb565b60405180910390a4612263848860008686604051806020016040528060008152506126fa565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613ae0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123cc91906138e8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090613a60565b60405180910390fd5b6000612453611b9a565b9050600061246085612678565b9050600061246d85612678565b905061247d8389898585896126f2565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90613aa0565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125cc9190613d5f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612649929190613bbb565b60405180910390a461265f848a8a86868a6126fa565b61266d848a8a8a8a8a612702565b505050505050505050565b60606000600167ffffffffffffffff811115612697576126966140d2565b5b6040519080825280602002602001820160405280156126c55781602001602082028036833780820191505090505b50905082816000815181106126dd576126dc6140a3565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6127218473ffffffffffffffffffffffffffffffffffffffff1661195b565b156128e1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612767959493929190613835565b602060405180830381600087803b15801561278157600080fd5b505af19250505080156127b257506040513d601f19601f820116820180604052508101906127af9190613185565b60015b612858576127be614101565b806308c379a0141561281b57506127d36146a2565b806127de575061281d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612812919061391e565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f90613940565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d6906139a0565b60405180910390fd5b505b505050505050565b6129088473ffffffffffffffffffffffffffffffffffffffff1661195b565b15612ac8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161294e9594939291906137cd565b602060405180830381600087803b15801561296857600080fd5b505af192505050801561299957506040513d601f19601f820116820180604052508101906129969190613185565b60015b612a3f576129a5614101565b806308c379a01415612a0257506129ba6146a2565b806129c55750612a04565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f9919061391e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3690613940565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd906139a0565b60405180910390fd5b505b505050505050565b828054612adc90613f60565b90600052602060002090601f016020900481019282612afe5760008555612b45565b82601f10612b1757805160ff1916838001178555612b45565b82800160010185558215612b45579182015b82811115612b44578251825591602001919060010190612b29565b5b509050612b529190612b56565b5090565b5b80821115612b6f576000816000905550600101612b57565b5090565b6000612b86612b8184613c09565b613be4565b90508083825260208201905082856020860282011115612ba957612ba8614128565b5b60005b85811015612bd95781612bbf8882612cd7565b845260208401935060208301925050600181019050612bac565b5050509392505050565b6000612bf6612bf184613c35565b613be4565b90508083825260208201905082856020860282011115612c1957612c18614128565b5b60005b85811015612c495781612c2f8882612df8565b845260208401935060208301925050600181019050612c1c565b5050509392505050565b6000612c66612c6184613c61565b613be4565b905082815260208101848484011115612c8257612c8161412d565b5b612c8d848285613f1e565b509392505050565b6000612ca8612ca384613c92565b613be4565b905082815260208101848484011115612cc457612cc361412d565b5b612ccf848285613f1e565b509392505050565b600081359050612ce681614738565b92915050565b600082601f830112612d0157612d00614123565b5b8135612d11848260208601612b73565b91505092915050565b600082601f830112612d2f57612d2e614123565b5b8135612d3f848260208601612be3565b91505092915050565b600081359050612d578161474f565b92915050565b600081519050612d6c8161474f565b92915050565b600081359050612d8181614766565b92915050565b600081519050612d9681614766565b92915050565b600082601f830112612db157612db0614123565b5b8135612dc1848260208601612c53565b91505092915050565b600082601f830112612ddf57612dde614123565b5b8135612def848260208601612c95565b91505092915050565b600081359050612e078161477d565b92915050565b600060208284031215612e2357612e22614137565b5b6000612e3184828501612cd7565b91505092915050565b60008060408385031215612e5157612e50614137565b5b6000612e5f85828601612cd7565b9250506020612e7085828601612cd7565b9150509250929050565b600080600080600060a08688031215612e9657612e95614137565b5b6000612ea488828901612cd7565b9550506020612eb588828901612cd7565b945050604086013567ffffffffffffffff811115612ed657612ed5614132565b5b612ee288828901612d1a565b935050606086013567ffffffffffffffff811115612f0357612f02614132565b5b612f0f88828901612d1a565b925050608086013567ffffffffffffffff811115612f3057612f2f614132565b5b612f3c88828901612d9c565b9150509295509295909350565b600080600080600060a08688031215612f6557612f64614137565b5b6000612f7388828901612cd7565b9550506020612f8488828901612cd7565b9450506040612f9588828901612df8565b9350506060612fa688828901612df8565b925050608086013567ffffffffffffffff811115612fc757612fc6614132565b5b612fd388828901612d9c565b9150509295509295909350565b60008060408385031215612ff757612ff6614137565b5b600061300585828601612cd7565b925050602061301685828601612d48565b9150509250929050565b6000806040838503121561303757613036614137565b5b600061304585828601612cd7565b925050602061305685828601612df8565b9150509250929050565b60008060006060848603121561307957613078614137565b5b600061308786828701612cd7565b935050602061309886828701612df8565b92505060406130a986828701612df8565b9150509250925092565b600080604083850312156130ca576130c9614137565b5b600083013567ffffffffffffffff8111156130e8576130e7614132565b5b6130f485828601612cec565b925050602083013567ffffffffffffffff81111561311557613114614132565b5b61312185828601612d1a565b9150509250929050565b60006020828403121561314157613140614137565b5b600061314f84828501612d5d565b91505092915050565b60006020828403121561316e5761316d614137565b5b600061317c84828501612d72565b91505092915050565b60006020828403121561319b5761319a614137565b5b60006131a984828501612d87565b91505092915050565b6000602082840312156131c8576131c7614137565b5b600082013567ffffffffffffffff8111156131e6576131e5614132565b5b6131f284828501612dca565b91505092915050565b6000806040838503121561321257613211614137565b5b600083013567ffffffffffffffff8111156132305761322f614132565b5b61323c85828601612dca565b925050602061324d85828601612df8565b9150509250929050565b60006020828403121561326d5761326c614137565b5b600061327b84828501612df8565b91505092915050565b60006132908383613705565b60208301905092915050565b6132a581613e74565b82525050565b60006132b682613ce8565b6132c08185613d16565b93506132cb83613cc3565b8060005b838110156132fc5781516132e38882613284565b97506132ee83613d09565b9250506001810190506132cf565b5085935050505092915050565b61331281613e86565b82525050565b600061332382613cf3565b61332d8185613d27565b935061333d818560208601613f2d565b6133468161413c565b840191505092915050565b61335a81613ee8565b82525050565b600061336b82613cfe565b6133758185613d43565b9350613385818560208601613f2d565b61338e8161413c565b840191505092915050565b60006133a482613cfe565b6133ae8185613d54565b93506133be818560208601613f2d565b80840191505092915050565b600081546133d781613f60565b6133e18186613d54565b945060018216600081146133fc576001811461340d57613440565b60ff19831686528186019350613440565b61341685613cd3565b60005b8381101561343857815481890152600182019150602081019050613419565b838801955050505b50505092915050565b6000613456603483613d43565b91506134618261415a565b604082019050919050565b6000613479602f83613d43565b9150613484826141a9565b604082019050919050565b600061349c601083613d43565b91506134a7826141f8565b602082019050919050565b60006134bf602883613d43565b91506134ca82614221565b604082019050919050565b60006134e2602583613d43565b91506134ed82614270565b604082019050919050565b6000613505602683613d43565b9150613510826142bf565b604082019050919050565b6000613528603983613d43565b91506135338261430e565b604082019050919050565b600061354b602483613d43565b91506135568261435d565b604082019050919050565b600061356e602a83613d43565b9150613579826143ac565b604082019050919050565b6000613591602583613d43565b915061359c826143fb565b604082019050919050565b60006135b4602383613d43565b91506135bf8261444a565b604082019050919050565b60006135d7602a83613d43565b91506135e282614499565b604082019050919050565b60006135fa602083613d43565b9150613605826144e8565b602082019050919050565b600061361d600083613d38565b915061362882614511565b600082019050919050565b6000613640602983613d43565b915061364b82614514565b604082019050919050565b6000613663602983613d43565b915061366e82614563565b604082019050919050565b6000613686602883613d43565b9150613691826145b2565b604082019050919050565b60006136a9600f83613d43565b91506136b482614601565b602082019050919050565b60006136cc602183613d43565b91506136d78261462a565b604082019050919050565b60006136ef601183613d43565b91506136fa82614679565b602082019050919050565b61370e81613ede565b82525050565b61371d81613ede565b82525050565b61373461372f82613ede565b61400c565b82525050565b60006137468284613399565b915081905092915050565b600061375d82846133ca565b915081905092915050565b600061377482866133ca565b91506137808285613723565b60208201915061379082846133ca565b9150819050949350505050565b60006137a882613610565b9150819050919050565b60006020820190506137c7600083018461329c565b92915050565b600060a0820190506137e2600083018861329c565b6137ef602083018761329c565b818103604083015261380181866132ab565b9050818103606083015261381581856132ab565b905081810360808301526138298184613318565b90509695505050505050565b600060a08201905061384a600083018861329c565b613857602083018761329c565b6138646040830186613714565b6138716060830185613714565b81810360808301526138838184613318565b90509695505050505050565b600060208201905081810360008301526138a981846132ab565b905092915050565b600060408201905081810360008301526138cb81856132ab565b905081810360208301526138df81846132ab565b90509392505050565b60006020820190506138fd6000830184613309565b92915050565b60006020820190506139186000830184613351565b92915050565b600060208201905081810360008301526139388184613360565b905092915050565b6000602082019050818103600083015261395981613449565b9050919050565b600060208201905081810360008301526139798161346c565b9050919050565b600060208201905081810360008301526139998161348f565b9050919050565b600060208201905081810360008301526139b9816134b2565b9050919050565b600060208201905081810360008301526139d9816134d5565b9050919050565b600060208201905081810360008301526139f9816134f8565b9050919050565b60006020820190508181036000830152613a198161351b565b9050919050565b60006020820190508181036000830152613a398161353e565b9050919050565b60006020820190508181036000830152613a5981613561565b9050919050565b60006020820190508181036000830152613a7981613584565b9050919050565b60006020820190508181036000830152613a99816135a7565b9050919050565b60006020820190508181036000830152613ab9816135ca565b9050919050565b60006020820190508181036000830152613ad9816135ed565b9050919050565b60006020820190508181036000830152613af981613633565b9050919050565b60006020820190508181036000830152613b1981613656565b9050919050565b60006020820190508181036000830152613b3981613679565b9050919050565b60006020820190508181036000830152613b598161369c565b9050919050565b60006020820190508181036000830152613b79816136bf565b9050919050565b60006020820190508181036000830152613b99816136e2565b9050919050565b6000602082019050613bb56000830184613714565b92915050565b6000604082019050613bd06000830185613714565b613bdd6020830184613714565b9392505050565b6000613bee613bff565b9050613bfa8282613f92565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2457613c236140d2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c5057613c4f6140d2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c7c57613c7b6140d2565b5b613c858261413c565b9050602081019050919050565b600067ffffffffffffffff821115613cad57613cac6140d2565b5b613cb68261413c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d6a82613ede565b9150613d7583613ede565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613daa57613da9614016565b5b828201905092915050565b6000613dc082613ede565b9150613dcb83613ede565b925082613ddb57613dda614045565b5b828204905092915050565b6000613df182613ede565b9150613dfc83613ede565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e3557613e34614016565b5b828202905092915050565b6000613e4b82613ede565b9150613e5683613ede565b925082821015613e6957613e68614016565b5b828203905092915050565b6000613e7f82613ebe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613ef382613efa565b9050919050565b6000613f0582613f0c565b9050919050565b6000613f1782613ebe565b9050919050565b82818337600083830152505050565b60005b83811015613f4b578082015181840152602081019050613f30565b83811115613f5a576000848401525b50505050565b60006002820490506001821680613f7857607f821691505b60208210811415613f8c57613f8b614074565b5b50919050565b613f9b8261413c565b810181811067ffffffffffffffff82111715613fba57613fb96140d2565b5b80604052505050565b6000613fce82613ede565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561400157614000614016565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156141205760046000803e61411d60005161414d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f4576656e74207465726d696e6174656400000000000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f497365656420636f6e7472616374206164647265737320616c7265616479207360008201527f6574746564000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865726520697320612074696d6520666f722065766572797468696e672c2060008201527f6275742074686973206973206e6f74207468652074696d652e00000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f696e636f72726563742070726963650000000000000000000000000000000000600082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f55736572206e6f7420617070726f766564000000000000000000000000000000600082015250565b600060443d10156146b257614735565b6146ba613bff565b60043d036004823e80513d602482011167ffffffffffffffff821117156146e2575050614735565b808201805167ffffffffffffffff8111156147005750505050614735565b80602083010160043d03850181111561471d575050505050614735565b61472c82602001850186613f92565b82955050505050505b90565b61474181613e74565b811461474c57600080fd5b50565b61475881613e86565b811461476357600080fd5b50565b61476f81613e92565b811461477a57600080fd5b50565b61478681613ede565b811461479157600080fd5b5056fea2646970667358221220868bb0364f2e39ca5ac59cc8ca9d7448294120793de70447adf54ee980d995a364736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000bbb46ad06857065abf2a80d0645e46c3230786d0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d504537386a63337842717537644c3453463373774b505a78413875794c656772355053486d66487964624e422f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e497365656457686974656c69737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024957000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000008535041434547454d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008444f4e464f524558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d574f4c464f4654555343414e590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064747524f55500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f54484546494e414e434547524f55500000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102195760003560e01c80639abc832011610123578063bf583903116100ab578063e985e9c51161006f578063e985e9c5146107a5578063ee681b4f146107e2578063f242432a1461080d578063f2fde38b14610836578063f3fef3a31461085f57610219565b8063bf583903146106bc578063c6682862146106e7578063d28d885214610712578063d5abeb011461073d578063e8aaabb71461076857610219565b8063a22cb465116100f2578063a22cb465146105fd578063a623066814610626578063b09f12661461063d578063be5e027c14610668578063bf2274b61461069157610219565b80639abc8320146105415780639b642de11461056c5780639cf41a9614610595578063a035b1fe146105d257610219565b806351cff8d9116101a6578063821bc4f111610175578063821bc4f11461046e5780638ba4cc3c146104995780638da5cb5b146104c257806391b7f5ed146104ed57806395d89b411461051657610219565b806351cff8d9146103d857806362d3d40e1461040157806370eda0611461042c578063715018a61461045757610219565b80630e89341c116101ed5780630e89341c146102df57806312fdc54c1461031c57806318160ddd146103475780632eb2c2d6146103725780634e1273f41461039b57610219565b8062fdd58e1461021e57806301ffc9a71461025b578063056b01ce1461029857806306fdde03146102b4575b600080fd5b34801561022a57600080fd5b5061024560048036038101906102409190613020565b610888565b6040516102529190613ba0565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613158565b610952565b60405161028f91906138e8565b60405180910390f35b6102b260048036038101906102ad91906131fb565b610a34565b005b3480156102c057600080fd5b506102c9610bdc565b6040516102d6919061391e565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613257565b610c6e565b604051610313919061391e565b60405180910390f35b34801561032857600080fd5b50610331610c9d565b60405161033e9190613903565b60405180910390f35b34801561035357600080fd5b5061035c610cc3565b6040516103699190613ba0565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612e7a565b610cc9565b005b3480156103a757600080fd5b506103c260048036038101906103bd91906130b3565b610d6a565b6040516103cf919061388f565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190612e0d565b610e83565b005b34801561040d57600080fd5b50610416610f05565b60405161042391906137b2565b60405180910390f35b34801561043857600080fd5b50610441610f2b565b60405161044e919061391e565b60405180910390f35b34801561046357600080fd5b5061046c610fef565b005b34801561047a57600080fd5b50610483611003565b604051610490919061391e565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613020565b6110bb565b005b3480156104ce57600080fd5b506104d7611118565b6040516104e491906137b2565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613257565b611141565b005b34801561052257600080fd5b5061052b611153565b604051610538919061391e565b60405180910390f35b34801561054d57600080fd5b506105566111e5565b604051610563919061391e565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e91906131b2565b611273565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613060565b611287565b6040516105c991906138e8565b60405180910390f35b3480156105de57600080fd5b506105e761132f565b6040516105f49190613ba0565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190612fe0565b611335565b005b34801561063257600080fd5b5061063b61134b565b005b34801561064957600080fd5b5061065261136f565b60405161065f919061391e565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190612e0d565b6113fd565b005b34801561069d57600080fd5b506106a66114b4565b6040516106b391906137b2565b60405180910390f35b3480156106c857600080fd5b506106d16114da565b6040516106de9190613ba0565b60405180910390f35b3480156106f357600080fd5b506106fc6114f1565b604051610709919061391e565b60405180910390f35b34801561071e57600080fd5b5061072761157f565b604051610734919061391e565b60405180910390f35b34801561074957600080fd5b5061075261160d565b60405161075f9190613ba0565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190613257565b611613565b60405161079c91906137b2565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190612e3a565b611652565b6040516107d991906138e8565b60405180910390f35b3480156107ee57600080fd5b506107f76116e6565b60405161080491906138e8565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f9190612f49565b6116f9565b005b34801561084257600080fd5b5061085d60048036038101906108589190612e0d565b61179a565b005b34801561086b57600080fd5b5061088660048036038101906108819190613020565b61181e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f090613a40565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2d5750610a2c8261197e565b5b9050919050565b600980549050600a5410610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7490613980565b60405180910390fd5b6009600a5481548110610a9357610a926140a3565b5b90600052602060002001604051602001610aad9190613751565b6040516020818303038152906040528051906020012082604051602001610ad4919061373a565b6040516020818303038152906040528051906020012014610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613a00565b60405180910390fd5b60008111610b3757600080fd5b600c5481600d54610b489190613d5f565b1115610b5357600080fd5b60085481610b619190613de6565b341015610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613b40565b60405180910390fd5b610bbf33600183604051806020016040528060008152506119e8565b80600d6000828254610bd19190613d5f565b925050819055505050565b606060048054610beb90613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1790613f60565b8015610c645780601f10610c3957610100808354040283529160200191610c64565b820191906000526020600020905b815481529060010190602001808311610c4757829003601f168201915b5050505050905090565b60606006826007604051602001610c8793929190613768565b6040516020818303038152906040529050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b610cd1611b9a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d175750610d1685610d11611b9a565b611652565b5b610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613960565b60405180910390fd5b610d638585858585611ba2565b5050505050565b60608151835114610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613b00565b60405180910390fd5b6000835167ffffffffffffffff811115610dcd57610dcc6140d2565b5b604051908082528060200260200182016040528015610dfb5781602001602082028036833780820191505090505b50905060005b8451811015610e7857610e48858281518110610e2057610e1f6140a3565b5b6020026020010151858381518110610e3b57610e3a6140a3565b5b6020026020010151610888565b828281518110610e5b57610e5a6140a3565b5b60200260200101818152505080610e7190613fc3565b9050610e01565b508091505092915050565b610e8b611ec7565b60008173ffffffffffffffffffffffffffffffffffffffff1647604051610eb19061379d565b60006040518083038185875af1925050503d8060008114610eee576040519150601f19603f3d011682016040523d82523d6000602084013e610ef3565b606091505b5050905080610f0157600080fd5b5050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610f35611ec7565b60096001600a54610f469190613d5f565b81548110610f5757610f566140a3565b5b906000526020600020018054610f6c90613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9890613f60565b8015610fe55780601f10610fba57610100808354040283529160200191610fe5565b820191906000526020600020905b815481529060010190602001808311610fc857829003601f168201915b5050505050905090565b610ff7611ec7565b6110016000611f45565b565b606061100d611ec7565b6009600a5481548110611023576110226140a3565b5b90600052602060002001805461103890613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461106490613f60565b80156110b15780601f10611086576101008083540402835291602001916110b1565b820191906000526020600020905b81548152906001019060200180831161109457829003601f168201915b5050505050905090565b6110c3611ec7565b600c5481600d546110d49190613d5f565b11156110df57600080fd5b6110fb82600183604051806020016040528060008152506119e8565b80600d600082825461110d9190613d5f565b925050819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611149611ec7565b8060088190555050565b60606005805461116290613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461118e90613f60565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b600680546111f290613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461121e90613f60565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b505050505081565b61127b611ec7565b61128481612009565b50565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613b80565b60405180910390fd5b611324848385612023565b600190509392505050565b60085481565b611347611340611b9a565b838361226c565b5050565b611353611ec7565b6001600a60008282546113669190613d5f565b92505081905550565b6005805461137c90613f60565b80601f01602080910402602001604051908101604052809291908181526020018280546113a890613f60565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b505050505081565b611405611ec7565b600e60149054906101000a900460ff1615611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c906139c0565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60146101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54600c546114ec9190613e40565b905090565b600780546114fe90613f60565b80601f016020809104026020016040519081016040528092919081815260200182805461152a90613f60565b80156115775780601f1061154c57610100808354040283529160200191611577565b820191906000526020600020905b81548152906001019060200180831161155a57829003601f168201915b505050505081565b6004805461158c90613f60565b80601f01602080910402602001604051908101604052809291908181526020018280546115b890613f60565b80156116055780601f106115da57610100808354040283529160200191611605565b820191906000526020600020905b8154815290600101906020018083116115e857829003601f168201915b505050505081565b600c5481565b600b818154811061162357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60149054906101000a900460ff1681565b611701611b9a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611747575061174685611741611b9a565b611652565b5b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90613960565b60405180910390fd5b61179385858585856123d9565b5050505050565b6117a2611ec7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611809906139e0565b60405180910390fd5b61181b81611f45565b50565b611826611ec7565b6000811161183357600080fd5b600082905060008173ffffffffffffffffffffffffffffffffffffffff166366adeb8c6064856118639190613db5565b4761186e9190613de6565b6040518263ffffffff1660e01b81526004016020604051808303818588803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118d2919061312b565b9050806118de57600080fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516119049061379d565b60006040518083038185875af1925050503d8060008114611941576040519150601f19603f3d011682016040523d82523d6000602084013e611946565b606091505b505090508061195457600080fd5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90613b60565b60405180910390fd5b6000611a62611b9a565b90506000611a6f85612678565b90506000611a7c85612678565b9050611a8d836000898585896126f2565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aed9190613d5f565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611b6b929190613bbb565b60405180910390a4611b82836000898585896126fa565b611b9183600089898989612702565b50505050505050565b600033905090565b8151835114611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613a60565b60405180910390fd5b6000611c60611b9a565b9050611c708187878787876126f2565b60005b8451811015611e24576000858281518110611c9157611c906140a3565b5b602002602001015190506000858381518110611cb057611caf6140a3565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990613aa0565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e099190613d5f565b9250508190555050505080611e1d90613fc3565b9050611c73565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e9b9291906138b1565b60405180910390a4611eb18187878787876126fa565b611ebf8187878787876128e9565b505050505050565b611ecf611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611eed611118565b73ffffffffffffffffffffffffffffffffffffffff1614611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90613ac0565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806003908051906020019061201f929190612ad0565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613a80565b60405180910390fd5b600061209d611b9a565b905060006120aa84612678565b905060006120b784612678565b90506120d7838760008585604051806020016040528060008152506126f2565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690613a20565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161223d929190613bbb565b60405180910390a4612263848860008686604051806020016040528060008152506126fa565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290613ae0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123cc91906138e8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090613a60565b60405180910390fd5b6000612453611b9a565b9050600061246085612678565b9050600061246d85612678565b905061247d8389898585896126f2565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90613aa0565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125cc9190613d5f565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612649929190613bbb565b60405180910390a461265f848a8a86868a6126fa565b61266d848a8a8a8a8a612702565b505050505050505050565b60606000600167ffffffffffffffff811115612697576126966140d2565b5b6040519080825280602002602001820160405280156126c55781602001602082028036833780820191505090505b50905082816000815181106126dd576126dc6140a3565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6127218473ffffffffffffffffffffffffffffffffffffffff1661195b565b156128e1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612767959493929190613835565b602060405180830381600087803b15801561278157600080fd5b505af19250505080156127b257506040513d601f19601f820116820180604052508101906127af9190613185565b60015b612858576127be614101565b806308c379a0141561281b57506127d36146a2565b806127de575061281d565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612812919061391e565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f90613940565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d6906139a0565b60405180910390fd5b505b505050505050565b6129088473ffffffffffffffffffffffffffffffffffffffff1661195b565b15612ac8578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161294e9594939291906137cd565b602060405180830381600087803b15801561296857600080fd5b505af192505050801561299957506040513d601f19601f820116820180604052508101906129969190613185565b60015b612a3f576129a5614101565b806308c379a01415612a0257506129ba6146a2565b806129c55750612a04565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f9919061391e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3690613940565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abd906139a0565b60405180910390fd5b505b505050505050565b828054612adc90613f60565b90600052602060002090601f016020900481019282612afe5760008555612b45565b82601f10612b1757805160ff1916838001178555612b45565b82800160010185558215612b45579182015b82811115612b44578251825591602001919060010190612b29565b5b509050612b529190612b56565b5090565b5b80821115612b6f576000816000905550600101612b57565b5090565b6000612b86612b8184613c09565b613be4565b90508083825260208201905082856020860282011115612ba957612ba8614128565b5b60005b85811015612bd95781612bbf8882612cd7565b845260208401935060208301925050600181019050612bac565b5050509392505050565b6000612bf6612bf184613c35565b613be4565b90508083825260208201905082856020860282011115612c1957612c18614128565b5b60005b85811015612c495781612c2f8882612df8565b845260208401935060208301925050600181019050612c1c565b5050509392505050565b6000612c66612c6184613c61565b613be4565b905082815260208101848484011115612c8257612c8161412d565b5b612c8d848285613f1e565b509392505050565b6000612ca8612ca384613c92565b613be4565b905082815260208101848484011115612cc457612cc361412d565b5b612ccf848285613f1e565b509392505050565b600081359050612ce681614738565b92915050565b600082601f830112612d0157612d00614123565b5b8135612d11848260208601612b73565b91505092915050565b600082601f830112612d2f57612d2e614123565b5b8135612d3f848260208601612be3565b91505092915050565b600081359050612d578161474f565b92915050565b600081519050612d6c8161474f565b92915050565b600081359050612d8181614766565b92915050565b600081519050612d9681614766565b92915050565b600082601f830112612db157612db0614123565b5b8135612dc1848260208601612c53565b91505092915050565b600082601f830112612ddf57612dde614123565b5b8135612def848260208601612c95565b91505092915050565b600081359050612e078161477d565b92915050565b600060208284031215612e2357612e22614137565b5b6000612e3184828501612cd7565b91505092915050565b60008060408385031215612e5157612e50614137565b5b6000612e5f85828601612cd7565b9250506020612e7085828601612cd7565b9150509250929050565b600080600080600060a08688031215612e9657612e95614137565b5b6000612ea488828901612cd7565b9550506020612eb588828901612cd7565b945050604086013567ffffffffffffffff811115612ed657612ed5614132565b5b612ee288828901612d1a565b935050606086013567ffffffffffffffff811115612f0357612f02614132565b5b612f0f88828901612d1a565b925050608086013567ffffffffffffffff811115612f3057612f2f614132565b5b612f3c88828901612d9c565b9150509295509295909350565b600080600080600060a08688031215612f6557612f64614137565b5b6000612f7388828901612cd7565b9550506020612f8488828901612cd7565b9450506040612f9588828901612df8565b9350506060612fa688828901612df8565b925050608086013567ffffffffffffffff811115612fc757612fc6614132565b5b612fd388828901612d9c565b9150509295509295909350565b60008060408385031215612ff757612ff6614137565b5b600061300585828601612cd7565b925050602061301685828601612d48565b9150509250929050565b6000806040838503121561303757613036614137565b5b600061304585828601612cd7565b925050602061305685828601612df8565b9150509250929050565b60008060006060848603121561307957613078614137565b5b600061308786828701612cd7565b935050602061309886828701612df8565b92505060406130a986828701612df8565b9150509250925092565b600080604083850312156130ca576130c9614137565b5b600083013567ffffffffffffffff8111156130e8576130e7614132565b5b6130f485828601612cec565b925050602083013567ffffffffffffffff81111561311557613114614132565b5b61312185828601612d1a565b9150509250929050565b60006020828403121561314157613140614137565b5b600061314f84828501612d5d565b91505092915050565b60006020828403121561316e5761316d614137565b5b600061317c84828501612d72565b91505092915050565b60006020828403121561319b5761319a614137565b5b60006131a984828501612d87565b91505092915050565b6000602082840312156131c8576131c7614137565b5b600082013567ffffffffffffffff8111156131e6576131e5614132565b5b6131f284828501612dca565b91505092915050565b6000806040838503121561321257613211614137565b5b600083013567ffffffffffffffff8111156132305761322f614132565b5b61323c85828601612dca565b925050602061324d85828601612df8565b9150509250929050565b60006020828403121561326d5761326c614137565b5b600061327b84828501612df8565b91505092915050565b60006132908383613705565b60208301905092915050565b6132a581613e74565b82525050565b60006132b682613ce8565b6132c08185613d16565b93506132cb83613cc3565b8060005b838110156132fc5781516132e38882613284565b97506132ee83613d09565b9250506001810190506132cf565b5085935050505092915050565b61331281613e86565b82525050565b600061332382613cf3565b61332d8185613d27565b935061333d818560208601613f2d565b6133468161413c565b840191505092915050565b61335a81613ee8565b82525050565b600061336b82613cfe565b6133758185613d43565b9350613385818560208601613f2d565b61338e8161413c565b840191505092915050565b60006133a482613cfe565b6133ae8185613d54565b93506133be818560208601613f2d565b80840191505092915050565b600081546133d781613f60565b6133e18186613d54565b945060018216600081146133fc576001811461340d57613440565b60ff19831686528186019350613440565b61341685613cd3565b60005b8381101561343857815481890152600182019150602081019050613419565b838801955050505b50505092915050565b6000613456603483613d43565b91506134618261415a565b604082019050919050565b6000613479602f83613d43565b9150613484826141a9565b604082019050919050565b600061349c601083613d43565b91506134a7826141f8565b602082019050919050565b60006134bf602883613d43565b91506134ca82614221565b604082019050919050565b60006134e2602583613d43565b91506134ed82614270565b604082019050919050565b6000613505602683613d43565b9150613510826142bf565b604082019050919050565b6000613528603983613d43565b91506135338261430e565b604082019050919050565b600061354b602483613d43565b91506135568261435d565b604082019050919050565b600061356e602a83613d43565b9150613579826143ac565b604082019050919050565b6000613591602583613d43565b915061359c826143fb565b604082019050919050565b60006135b4602383613d43565b91506135bf8261444a565b604082019050919050565b60006135d7602a83613d43565b91506135e282614499565b604082019050919050565b60006135fa602083613d43565b9150613605826144e8565b602082019050919050565b600061361d600083613d38565b915061362882614511565b600082019050919050565b6000613640602983613d43565b915061364b82614514565b604082019050919050565b6000613663602983613d43565b915061366e82614563565b604082019050919050565b6000613686602883613d43565b9150613691826145b2565b604082019050919050565b60006136a9600f83613d43565b91506136b482614601565b602082019050919050565b60006136cc602183613d43565b91506136d78261462a565b604082019050919050565b60006136ef601183613d43565b91506136fa82614679565b602082019050919050565b61370e81613ede565b82525050565b61371d81613ede565b82525050565b61373461372f82613ede565b61400c565b82525050565b60006137468284613399565b915081905092915050565b600061375d82846133ca565b915081905092915050565b600061377482866133ca565b91506137808285613723565b60208201915061379082846133ca565b9150819050949350505050565b60006137a882613610565b9150819050919050565b60006020820190506137c7600083018461329c565b92915050565b600060a0820190506137e2600083018861329c565b6137ef602083018761329c565b818103604083015261380181866132ab565b9050818103606083015261381581856132ab565b905081810360808301526138298184613318565b90509695505050505050565b600060a08201905061384a600083018861329c565b613857602083018761329c565b6138646040830186613714565b6138716060830185613714565b81810360808301526138838184613318565b90509695505050505050565b600060208201905081810360008301526138a981846132ab565b905092915050565b600060408201905081810360008301526138cb81856132ab565b905081810360208301526138df81846132ab565b90509392505050565b60006020820190506138fd6000830184613309565b92915050565b60006020820190506139186000830184613351565b92915050565b600060208201905081810360008301526139388184613360565b905092915050565b6000602082019050818103600083015261395981613449565b9050919050565b600060208201905081810360008301526139798161346c565b9050919050565b600060208201905081810360008301526139998161348f565b9050919050565b600060208201905081810360008301526139b9816134b2565b9050919050565b600060208201905081810360008301526139d9816134d5565b9050919050565b600060208201905081810360008301526139f9816134f8565b9050919050565b60006020820190508181036000830152613a198161351b565b9050919050565b60006020820190508181036000830152613a398161353e565b9050919050565b60006020820190508181036000830152613a5981613561565b9050919050565b60006020820190508181036000830152613a7981613584565b9050919050565b60006020820190508181036000830152613a99816135a7565b9050919050565b60006020820190508181036000830152613ab9816135ca565b9050919050565b60006020820190508181036000830152613ad9816135ed565b9050919050565b60006020820190508181036000830152613af981613633565b9050919050565b60006020820190508181036000830152613b1981613656565b9050919050565b60006020820190508181036000830152613b3981613679565b9050919050565b60006020820190508181036000830152613b598161369c565b9050919050565b60006020820190508181036000830152613b79816136bf565b9050919050565b60006020820190508181036000830152613b99816136e2565b9050919050565b6000602082019050613bb56000830184613714565b92915050565b6000604082019050613bd06000830185613714565b613bdd6020830184613714565b9392505050565b6000613bee613bff565b9050613bfa8282613f92565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2457613c236140d2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c5057613c4f6140d2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c7c57613c7b6140d2565b5b613c858261413c565b9050602081019050919050565b600067ffffffffffffffff821115613cad57613cac6140d2565b5b613cb68261413c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d6a82613ede565b9150613d7583613ede565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613daa57613da9614016565b5b828201905092915050565b6000613dc082613ede565b9150613dcb83613ede565b925082613ddb57613dda614045565b5b828204905092915050565b6000613df182613ede565b9150613dfc83613ede565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e3557613e34614016565b5b828202905092915050565b6000613e4b82613ede565b9150613e5683613ede565b925082821015613e6957613e68614016565b5b828203905092915050565b6000613e7f82613ebe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613ef382613efa565b9050919050565b6000613f0582613f0c565b9050919050565b6000613f1782613ebe565b9050919050565b82818337600083830152505050565b60005b83811015613f4b578082015181840152602081019050613f30565b83811115613f5a576000848401525b50505050565b60006002820490506001821680613f7857607f821691505b60208210811415613f8c57613f8b614074565b5b50919050565b613f9b8261413c565b810181811067ffffffffffffffff82111715613fba57613fb96140d2565b5b80604052505050565b6000613fce82613ede565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561400157614000614016565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156141205760046000803e61411d60005161414d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f4576656e74207465726d696e6174656400000000000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f497365656420636f6e7472616374206164647265737320616c7265616479207360008201527f6574746564000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546865726520697320612074696d6520666f722065766572797468696e672c2060008201527f6275742074686973206973206e6f74207468652074696d652e00000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f696e636f72726563742070726963650000000000000000000000000000000000600082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f55736572206e6f7420617070726f766564000000000000000000000000000000600082015250565b600060443d10156146b257614735565b6146ba613bff565b60043d036004823e80513d602482011167ffffffffffffffff821117156146e2575050614735565b808201805167ffffffffffffffff8111156147005750505050614735565b80602083010160043d03850181111561471d575050505050614735565b61472c82602001850186613f92565b82955050505050505b90565b61474181613e74565b811461474c57600080fd5b50565b61475881613e86565b811461476357600080fd5b50565b61476f81613e92565b811461477a57600080fd5b50565b61478681613ede565b811461479157600080fd5b5056fea2646970667358221220868bb0364f2e39ca5ac59cc8ca9d7448294120793de70447adf54ee980d995a364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000bbb46ad06857065abf2a80d0645e46c3230786d0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d504537386a63337842717537644c3453463373774b505a78413875794c656772355053486d66487964624e422f00000000000000000000000000000000000000000000000000000000000000000000000000000000000e497365656457686974656c69737400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024957000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000008535041434547454d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008444f4e464f524558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d574f4c464f4654555343414e590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064747524f55500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f54484546494e414e434547524f55500000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): ipfs://QmPE78jc3xBqu7dL4SF3swKPZxA8uyLegr5PSHmfHydbNB/
Arg [1] : name_ (string): IseedWhitelist
Arg [2] : symbol_ (string): IW
Arg [3] : _communities (string[]): SPACEGEM,DONFOREX,WOLFOFTUSCANY,GGROUP,THEFINANCEGROUP
Arg [4] : _infinityPass (address): 0x0BbB46AD06857065AbF2a80d0645E46c3230786d
-----Encoded View---------------
28 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000bbb46ad06857065abf2a80d0645e46c3230786d
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [6] : 697066733a2f2f516d504537386a63337842717537644c3453463373774b505a
Arg [7] : 78413875794c656772355053486d66487964624e422f00000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [9] : 497365656457686974656c697374000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [11] : 4957000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [14] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [17] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [19] : 535041434547454d000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [21] : 444f4e464f524558000000000000000000000000000000000000000000000000
Arg [22] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [23] : 574f4c464f4654555343414e5900000000000000000000000000000000000000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [25] : 4747524f55500000000000000000000000000000000000000000000000000000
Arg [26] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [27] : 54484546494e414e434547524f55500000000000000000000000000000000000
Deployed Bytecode Sourcemap
39483:5088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23659:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22682:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41369:584;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42715:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42438:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40248:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40021:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25603:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24055:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43840:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40207:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43401:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2811:103;;;;;;;;;;;;;:::i;:::-;;43262:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41961:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2163:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43062:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42814:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39608:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42968:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42165:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39680:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24652:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43171:83;;;;;;;;;;;;;:::i;:::-;;39580:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43541:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40082:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42602:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39636:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39554:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39983:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39841:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24879:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40124:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25119:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3069:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44020:548;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23659:230;23745:7;23792:1;23773:21;;:7;:21;;;;23765:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23859:9;:13;23869:2;23859:13;;;;;;;;;;;:22;23873:7;23859:22;;;;;;;;;;;;;;;;23852:29;;23659:230;;;;:::o;22682:310::-;22784:4;22836:26;22821:41;;;:11;:41;;;;:110;;;;22894:37;22879:52;;;:11;:52;;;;22821:110;:163;;;;22948:36;22972:11;22948:23;:36::i;:::-;22821:163;22801:183;;22682:310;;;:::o;41369:584::-;41479:11;:18;;;;41460:16;;:37;41452:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41610:11;41622:16;;41610:29;;;;;;;;:::i;:::-;;;;;;;;;41592:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;41582:60;;;;;;41565:10;41547:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;41537:41;;;;;;:105;41529:175;;;;;;;;;;;;:::i;:::-;;;;;;;;;41733:1;41723:7;:11;41715:20;;;;;;41779:9;;41768:7;41754:11;;:21;;;;:::i;:::-;:34;;41746:43;;;;;;41841:5;;41831:7;:15;;;;:::i;:::-;41818:9;:28;;41810:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41879:33;41885:10;41897:1;41900:7;41879:33;;;;;;;;;;;;:5;:33::i;:::-;41938:7;41923:11;;:22;;;;;;;:::i;:::-;;;;;;;;41369:584;;:::o;42715:91::-;42760:13;42793:5;42786:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42715:91;:::o;42438:156::-;42501:13;42558:7;42567:2;42571:13;42541:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42527:59;;42438:156;;;:::o;40248:49::-;;;;;;;;;;;;;:::o;40021:30::-;;;;:::o;25603:439::-;25844:12;:10;:12::i;:::-;25836:20;;:4;:20;;;:60;;;;25860:36;25877:4;25883:12;:10;:12::i;:::-;25860:16;:36::i;:::-;25836:60;25814:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25982:52;26005:4;26011:2;26015:3;26020:7;26029:4;25982:22;:52::i;:::-;25603:439;;;;;:::o;24055:524::-;24211:16;24272:3;:10;24253:8;:15;:29;24245:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24341:30;24388:8;:15;24374:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24341:63;;24422:9;24417:122;24441:8;:15;24437:1;:19;24417:122;;;24497:30;24507:8;24516:1;24507:11;;;;;;;;:::i;:::-;;;;;;;;24520:3;24524:1;24520:6;;;;;;;;:::i;:::-;;;;;;;;24497:9;:30::i;:::-;24478:13;24492:1;24478:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24458:3;;;;:::i;:::-;;;24417:122;;;;24558:13;24551:20;;;24055:524;;;;:::o;43840:172::-;2049:13;:11;:13::i;:::-;43912:9:::1;43927:14;:19;;43954:21;43927:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43911:69;;;43999:4;43991:13;;;::::0;::::1;;43900:112;43840:172:::0;:::o;40207:34::-;;;;;;;;;;;;;:::o;43401:132::-;43459:13;2049;:11;:13::i;:::-;43492:11:::1;43523:1;43504:16;;:20;;;;:::i;:::-;43492:33;;;;;;;;:::i;:::-;;;;;;;;;43485:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43401:132:::0;:::o;2811:103::-;2049:13;:11;:13::i;:::-;2876:30:::1;2903:1;2876:18;:30::i;:::-;2811:103::o:0;43262:131::-;43323:13;2049;:11;:13::i;:::-;43356:11:::1;43368:16;;43356:29;;;;;;;;:::i;:::-;;;;;;;;;43349:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43262:131:::0;:::o;41961:196::-;2049:13;:11;:13::i;:::-;42069:9:::1;;42058:7;42044:11;;:21;;;;:::i;:::-;:34;;42036:43;;;::::0;::::1;;42090:26;42096:3;42101:1;42104:7;42090:26;;;;;;;;;;;::::0;:5:::1;:26::i;:::-;42142:7;42127:11;;:22;;;;;;;:::i;:::-;;;;;;;;41961:196:::0;;:::o;2163:87::-;2209:7;2236:6;;;;;;;;;;;2229:13;;2163:87;:::o;43062:101::-;2049:13;:11;:13::i;:::-;43141:14:::1;43133:5;:22;;;;43062:101:::0;:::o;42814:95::-;42861:13;42894:7;42887:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42814:95;:::o;39608:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42968:86::-;2049:13;:11;:13::i;:::-;43033::::1;43041:4;43033:7;:13::i;:::-;42968:86:::0;:::o;42165:242::-;42259:4;42298:20;;;;;;;;;;;42284:34;;:10;:34;;;42276:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42351:26;42357:5;42364:3;42369:7;42351:5;:26::i;:::-;42395:4;42388:11;;42165:242;;;;;:::o;39680:46::-;;;;:::o;24652:155::-;24747:52;24766:12;:10;:12::i;:::-;24780:8;24790;24747:18;:52::i;:::-;24652:155;;:::o;43171:83::-;2049:13;:11;:13::i;:::-;43245:1:::1;43225:16;;:21;;;;;;;:::i;:::-;;;;;;;;43171:83::o:0;39580:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43541:291::-;2049:13;:11;:13::i;:::-;43643:33:::1;;;;;;;;;;;43642:34;43634:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;43752:21;43729:20;;:44;;;;;;;;;;;;;;;;;;43820:4;43784:33;;:40;;;;;;;;;;;;;;;;;;43541:291:::0;:::o;40082:35::-;;;;;;;;;;;;;:::o;42602:105::-;42649:7;42688:11;;42676:9;;:23;;;;:::i;:::-;42669:30;;42602:105;:::o;39636:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39554:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39983:31::-;;;;:::o;39841:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24879:168::-;24978:4;25002:18;:27;25021:7;25002:27;;;;;;;;;;;;;;;:37;25030:8;25002:37;;;;;;;;;;;;;;;;;;;;;;;;;24995:44;;24879:168;;;;:::o;40124:53::-;;;;;;;;;;;;;:::o;25119:407::-;25335:12;:10;:12::i;:::-;25327:20;;:4;:20;;;:60;;;;25351:36;25368:4;25374:12;:10;:12::i;:::-;25351:16;:36::i;:::-;25327:60;25305:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25473:45;25491:4;25497:2;25501;25505:6;25513:4;25473:17;:45::i;:::-;25119:407;;;;;:::o;3069:201::-;2049:13;:11;:13::i;:::-;3178:1:::1;3158:22;;:8;:22;;;;3150:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3234:28;3253:8;3234:18;:28::i;:::-;3069:201:::0;:::o;44020:548::-;2049:13;:11;:13::i;:::-;44166:1:::1;44136:27;:31;44128:40;;;::::0;::::1;;44179:44;44249:14;44179:85;;44275:21;44299;:37;;;44400:3;44370:27;:33;;;;:::i;:::-;44345:21;:59;;;;:::i;:::-;44299:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44275:133;;44427:16;44419:25;;;::::0;::::1;;44458:16;44480:10;:15;;44503:21;44480:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44457:72;;;44548:11;44540:20;;;::::0;::::1;;44117:451;;;44020:548:::0;;:::o;4861:326::-;4921:4;5178:1;5156:7;:19;;;:23;5149:30;;4861:326;;;:::o;13963:157::-;14048:4;14087:25;14072:40;;;:11;:40;;;;14065:47;;13963:157;;;:::o;30302:729::-;30469:1;30455:16;;:2;:16;;;;30447:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30522:16;30541:12;:10;:12::i;:::-;30522:31;;30564:20;30587:21;30605:2;30587:17;:21::i;:::-;30564:44;;30619:24;30646:25;30664:6;30646:17;:25::i;:::-;30619:52;;30684:66;30705:8;30723:1;30727:2;30731:3;30736:7;30745:4;30684:20;:66::i;:::-;30784:6;30763:9;:13;30773:2;30763:13;;;;;;;;;;;:17;30777:2;30763:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30843:2;30806:52;;30839:1;30806:52;;30821:8;30806:52;;;30847:2;30851:6;30806:52;;;;;;;:::i;:::-;;;;;;;;30871:65;30891:8;30909:1;30913:2;30917:3;30922:7;30931:4;30871:19;:65::i;:::-;30949:74;30980:8;30998:1;31002:2;31006;31010:6;31018:4;30949:30;:74::i;:::-;30436:595;;;30302:729;;;;:::o;714:98::-;767:7;794:10;787:17;;714:98;:::o;27838:1146::-;28065:7;:14;28051:3;:10;:28;28043:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28157:1;28143:16;;:2;:16;;;;28135:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28214:16;28233:12;:10;:12::i;:::-;28214:31;;28258:60;28279:8;28289:4;28295:2;28299:3;28304:7;28313:4;28258:20;:60::i;:::-;28336:9;28331:421;28355:3;:10;28351:1;:14;28331:421;;;28387:10;28400:3;28404:1;28400:6;;;;;;;;:::i;:::-;;;;;;;;28387:19;;28421:14;28438:7;28446:1;28438:10;;;;;;;;:::i;:::-;;;;;;;;28421:27;;28465:19;28487:9;:13;28497:2;28487:13;;;;;;;;;;;:19;28501:4;28487:19;;;;;;;;;;;;;;;;28465:41;;28544:6;28529:11;:21;;28521:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28677:6;28663:11;:20;28641:9;:13;28651:2;28641:13;;;;;;;;;;;:19;28655:4;28641:19;;;;;;;;;;;;;;;:42;;;;28734:6;28713:9;:13;28723:2;28713:13;;;;;;;;;;;:17;28727:2;28713:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28372:380;;;28367:3;;;;:::i;:::-;;;28331:421;;;;28799:2;28769:47;;28793:4;28769:47;;28783:8;28769:47;;;28803:3;28808:7;28769:47;;;;;;;:::i;:::-;;;;;;;;28829:59;28849:8;28859:4;28865:2;28869:3;28874:7;28883:4;28829:19;:59::i;:::-;28901:75;28937:8;28947:4;28953:2;28957:3;28962:7;28971:4;28901:35;:75::i;:::-;28032:952;27838:1146;;;;;:::o;2328:132::-;2403:12;:10;:12::i;:::-;2392:23;;:7;:5;:7::i;:::-;:23;;;2384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2328:132::o;3430:191::-;3504:16;3523:6;;;;;;;;;;;3504:25;;3549:8;3540:6;;:17;;;;;;;;;;;;;;;;;;3604:8;3573:40;;3594:8;3573:40;;;;;;;;;;;;3493:128;3430:191;:::o;29828:88::-;29902:6;29895:4;:13;;;;;;;;;;;;:::i;:::-;;29828:88;:::o;32545:808::-;32688:1;32672:18;;:4;:18;;;;32664:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32743:16;32762:12;:10;:12::i;:::-;32743:31;;32785:20;32808:21;32826:2;32808:17;:21::i;:::-;32785:44;;32840:24;32867:25;32885:6;32867:17;:25::i;:::-;32840:52;;32905:66;32926:8;32936:4;32950:1;32954:3;32959:7;32905:66;;;;;;;;;;;;:20;:66::i;:::-;32984:19;33006:9;:13;33016:2;33006:13;;;;;;;;;;;:19;33020:4;33006:19;;;;;;;;;;;;;;;;32984:41;;33059:6;33044:11;:21;;33036:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33178:6;33164:11;:20;33142:9;:13;33152:2;33142:13;;;;;;;;;;;:19;33156:4;33142:19;;;;;;;;;;;;;;;:42;;;;33252:1;33213:54;;33238:4;33213:54;;33228:8;33213:54;;;33256:2;33260:6;33213:54;;;;;;;:::i;:::-;;;;;;;;33280:65;33300:8;33310:4;33324:1;33328:3;33333:7;33280:65;;;;;;;;;;;;:19;:65::i;:::-;32653:700;;;;32545:808;;;:::o;34715:331::-;34870:8;34861:17;;:5;:17;;;;34853:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:8;34935:18;:25;34954:5;34935:25;;;;;;;;;;;;;;;:35;34961:8;34935:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35019:8;34997:41;;35012:5;34997:41;;;35029:8;34997:41;;;;;;:::i;:::-;;;;;;;;34715:331;;;:::o;26506:974::-;26708:1;26694:16;;:2;:16;;;;26686:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26765:16;26784:12;:10;:12::i;:::-;26765:31;;26807:20;26830:21;26848:2;26830:17;:21::i;:::-;26807:44;;26862:24;26889:25;26907:6;26889:17;:25::i;:::-;26862:52;;26927:60;26948:8;26958:4;26964:2;26968:3;26973:7;26982:4;26927:20;:60::i;:::-;27000:19;27022:9;:13;27032:2;27022:13;;;;;;;;;;;:19;27036:4;27022:19;;;;;;;;;;;;;;;;27000:41;;27075:6;27060:11;:21;;27052:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27200:6;27186:11;:20;27164:9;:13;27174:2;27164:13;;;;;;;;;;;:19;27178:4;27164:19;;;;;;;;;;;;;;;:42;;;;27249:6;27228:9;:13;27238:2;27228:13;;;;;;;;;;;:17;27242:2;27228:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27304:2;27273:46;;27298:4;27273:46;;27288:8;27273:46;;;27308:2;27312:6;27273:46;;;;;;;:::i;:::-;;;;;;;;27332:59;27352:8;27362:4;27368:2;27372:3;27377:7;27386:4;27332:19;:59::i;:::-;27404:68;27435:8;27445:4;27451:2;27455;27459:6;27467:4;27404:30;:68::i;:::-;26675:805;;;;26506:974;;;;;:::o;38981:198::-;39047:16;39076:22;39115:1;39101:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39076:41;;39139:7;39128:5;39134:1;39128:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39166:5;39159:12;;;38981:198;;;:::o;36004:221::-;;;;;;;:::o;37180:220::-;;;;;;;:::o;37408:744::-;37623:15;:2;:13;;;:15::i;:::-;37619:526;;;37676:2;37659:38;;;37698:8;37708:4;37714:2;37718:6;37726:4;37659:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37655:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38007:6;38000:14;;;;;;;;;;;:::i;:::-;;;;;;;;37655:479;;;38056:62;;;;;;;;;;:::i;:::-;;;;;;;;37655:479;37793:43;;;37781:55;;;:8;:55;;;;37777:154;;37861:50;;;;;;;;;;:::i;:::-;;;;;;;;37777:154;37732:214;37619:526;37408:744;;;;;;:::o;38160:813::-;38400:15;:2;:13;;;:15::i;:::-;38396:570;;;38453:2;38436:43;;;38480:8;38490:4;38496:3;38501:7;38510:4;38436:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38432:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38828:6;38821:14;;;;;;;;;;;:::i;:::-;;;;;;;;38432:523;;;38877:62;;;;;;;;;;:::i;:::-;;;;;;;;38432:523;38609:48;;;38597:60;;;:8;:60;;;;38593:159;;38682:50;;;;;;;;;;:::i;:::-;;;;;;;;38593:159;38516:251;38396:570;38160:813;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3455:5;3486:6;3480:13;3471:22;;3502:30;3526:5;3502:30;:::i;:::-;3401:137;;;;:::o;3544:::-;3589:5;3627:6;3614:20;3605:29;;3643:32;3669:5;3643:32;:::i;:::-;3544:137;;;;:::o;3687:141::-;3743:5;3774:6;3768:13;3759:22;;3790:32;3816:5;3790:32;:::i;:::-;3687:141;;;;:::o;3847:338::-;3902:5;3951:3;3944:4;3936:6;3932:17;3928:27;3918:122;;3959:79;;:::i;:::-;3918:122;4076:6;4063:20;4101:78;4175:3;4167:6;4160:4;4152:6;4148:17;4101:78;:::i;:::-;4092:87;;3908:277;3847:338;;;;:::o;4205:340::-;4261:5;4310:3;4303:4;4295:6;4291:17;4287:27;4277:122;;4318:79;;:::i;:::-;4277:122;4435:6;4422:20;4460:79;4535:3;4527:6;4520:4;4512:6;4508:17;4460:79;:::i;:::-;4451:88;;4267:278;4205:340;;;;:::o;4551:139::-;4597:5;4635:6;4622:20;4613:29;;4651:33;4678:5;4651:33;:::i;:::-;4551:139;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:619::-;9152:6;9160;9168;9217:2;9205:9;9196:7;9192:23;9188:32;9185:119;;;9223:79;;:::i;:::-;9185:119;9343:1;9368:53;9413:7;9404:6;9393:9;9389:22;9368:53;:::i;:::-;9358:63;;9314:117;9470:2;9496:53;9541:7;9532:6;9521:9;9517:22;9496:53;:::i;:::-;9486:63;;9441:118;9598:2;9624:53;9669:7;9660:6;9649:9;9645:22;9624:53;:::i;:::-;9614:63;;9569:118;9075:619;;;;;:::o;9700:894::-;9818:6;9826;9875:2;9863:9;9854:7;9850:23;9846:32;9843:119;;;9881:79;;:::i;:::-;9843:119;10029:1;10018:9;10014:17;10001:31;10059:18;10051:6;10048:30;10045:117;;;10081:79;;:::i;:::-;10045:117;10186:78;10256:7;10247:6;10236:9;10232:22;10186:78;:::i;:::-;10176:88;;9972:302;10341:2;10330:9;10326:18;10313:32;10372:18;10364:6;10361:30;10358:117;;;10394:79;;:::i;:::-;10358:117;10499:78;10569:7;10560:6;10549:9;10545:22;10499:78;:::i;:::-;10489:88;;10284:303;9700:894;;;;;:::o;10600:345::-;10667:6;10716:2;10704:9;10695:7;10691:23;10687:32;10684:119;;;10722:79;;:::i;:::-;10684:119;10842:1;10867:61;10920:7;10911:6;10900:9;10896:22;10867:61;:::i;:::-;10857:71;;10813:125;10600:345;;;;:::o;10951:327::-;11009:6;11058:2;11046:9;11037:7;11033:23;11029:32;11026:119;;;11064:79;;:::i;:::-;11026:119;11184:1;11209:52;11253:7;11244:6;11233:9;11229:22;11209:52;:::i;:::-;11199:62;;11155:116;10951:327;;;;:::o;11284:349::-;11353:6;11402:2;11390:9;11381:7;11377:23;11373:32;11370:119;;;11408:79;;:::i;:::-;11370:119;11528:1;11553:63;11608:7;11599:6;11588:9;11584:22;11553:63;:::i;:::-;11543:73;;11499:127;11284:349;;;;:::o;11639:509::-;11708:6;11757:2;11745:9;11736:7;11732:23;11728:32;11725:119;;;11763:79;;:::i;:::-;11725:119;11911:1;11900:9;11896:17;11883:31;11941:18;11933:6;11930:30;11927:117;;;11963:79;;:::i;:::-;11927:117;12068:63;12123:7;12114:6;12103:9;12099:22;12068:63;:::i;:::-;12058:73;;11854:287;11639:509;;;;:::o;12154:654::-;12232:6;12240;12289:2;12277:9;12268:7;12264:23;12260:32;12257:119;;;12295:79;;:::i;:::-;12257:119;12443:1;12432:9;12428:17;12415:31;12473:18;12465:6;12462:30;12459:117;;;12495:79;;:::i;:::-;12459:117;12600:63;12655:7;12646:6;12635:9;12631:22;12600:63;:::i;:::-;12590:73;;12386:287;12712:2;12738:53;12783:7;12774:6;12763:9;12759:22;12738:53;:::i;:::-;12728:63;;12683:118;12154:654;;;;;:::o;12814:329::-;12873:6;12922:2;12910:9;12901:7;12897:23;12893:32;12890:119;;;12928:79;;:::i;:::-;12890:119;13048:1;13073:53;13118:7;13109:6;13098:9;13094:22;13073:53;:::i;:::-;13063:63;;13019:117;12814:329;;;;:::o;13149:179::-;13218:10;13239:46;13281:3;13273:6;13239:46;:::i;:::-;13317:4;13312:3;13308:14;13294:28;;13149:179;;;;:::o;13334:118::-;13421:24;13439:5;13421:24;:::i;:::-;13416:3;13409:37;13334:118;;:::o;13488:732::-;13607:3;13636:54;13684:5;13636:54;:::i;:::-;13706:86;13785:6;13780:3;13706:86;:::i;:::-;13699:93;;13816:56;13866:5;13816:56;:::i;:::-;13895:7;13926:1;13911:284;13936:6;13933:1;13930:13;13911:284;;;14012:6;14006:13;14039:63;14098:3;14083:13;14039:63;:::i;:::-;14032:70;;14125:60;14178:6;14125:60;:::i;:::-;14115:70;;13971:224;13958:1;13955;13951:9;13946:14;;13911:284;;;13915:14;14211:3;14204:10;;13612:608;;;13488:732;;;;:::o;14226:109::-;14307:21;14322:5;14307:21;:::i;:::-;14302:3;14295:34;14226:109;;:::o;14341:360::-;14427:3;14455:38;14487:5;14455:38;:::i;:::-;14509:70;14572:6;14567:3;14509:70;:::i;:::-;14502:77;;14588:52;14633:6;14628:3;14621:4;14614:5;14610:16;14588:52;:::i;:::-;14665:29;14687:6;14665:29;:::i;:::-;14660:3;14656:39;14649:46;;14431:270;14341:360;;;;:::o;14707:191::-;14824:67;14885:5;14824:67;:::i;:::-;14819:3;14812:80;14707:191;;:::o;14904:364::-;14992:3;15020:39;15053:5;15020:39;:::i;:::-;15075:71;15139:6;15134:3;15075:71;:::i;:::-;15068:78;;15155:52;15200:6;15195:3;15188:4;15181:5;15177:16;15155:52;:::i;:::-;15232:29;15254:6;15232:29;:::i;:::-;15227:3;15223:39;15216:46;;14996:272;14904:364;;;;:::o;15274:377::-;15380:3;15408:39;15441:5;15408:39;:::i;:::-;15463:89;15545:6;15540:3;15463:89;:::i;:::-;15456:96;;15561:52;15606:6;15601:3;15594:4;15587:5;15583:16;15561:52;:::i;:::-;15638:6;15633:3;15629:16;15622:23;;15384:267;15274:377;;;;:::o;15681:845::-;15784:3;15821:5;15815:12;15850:36;15876:9;15850:36;:::i;:::-;15902:89;15984:6;15979:3;15902:89;:::i;:::-;15895:96;;16022:1;16011:9;16007:17;16038:1;16033:137;;;;16184:1;16179:341;;;;16000:520;;16033:137;16117:4;16113:9;16102;16098:25;16093:3;16086:38;16153:6;16148:3;16144:16;16137:23;;16033:137;;16179:341;16246:38;16278:5;16246:38;:::i;:::-;16306:1;16320:154;16334:6;16331:1;16328:13;16320:154;;;16408:7;16402:14;16398:1;16393:3;16389:11;16382:35;16458:1;16449:7;16445:15;16434:26;;16356:4;16353:1;16349:12;16344:17;;16320:154;;;16503:6;16498:3;16494:16;16487:23;;16186:334;;16000:520;;15788:738;;15681:845;;;;:::o;16532:366::-;16674:3;16695:67;16759:2;16754:3;16695:67;:::i;:::-;16688:74;;16771:93;16860:3;16771:93;:::i;:::-;16889:2;16884:3;16880:12;16873:19;;16532:366;;;:::o;16904:::-;17046:3;17067:67;17131:2;17126:3;17067:67;:::i;:::-;17060:74;;17143:93;17232:3;17143:93;:::i;:::-;17261:2;17256:3;17252:12;17245:19;;16904:366;;;:::o;17276:::-;17418:3;17439:67;17503:2;17498:3;17439:67;:::i;:::-;17432:74;;17515:93;17604:3;17515:93;:::i;:::-;17633:2;17628:3;17624:12;17617:19;;17276:366;;;:::o;17648:::-;17790:3;17811:67;17875:2;17870:3;17811:67;:::i;:::-;17804:74;;17887:93;17976:3;17887:93;:::i;:::-;18005:2;18000:3;17996:12;17989:19;;17648:366;;;:::o;18020:::-;18162:3;18183:67;18247:2;18242:3;18183:67;:::i;:::-;18176:74;;18259:93;18348:3;18259:93;:::i;:::-;18377:2;18372:3;18368:12;18361:19;;18020:366;;;:::o;18392:::-;18534:3;18555:67;18619:2;18614:3;18555:67;:::i;:::-;18548:74;;18631:93;18720:3;18631:93;:::i;:::-;18749:2;18744:3;18740:12;18733:19;;18392:366;;;:::o;18764:::-;18906:3;18927:67;18991:2;18986:3;18927:67;:::i;:::-;18920:74;;19003:93;19092:3;19003:93;:::i;:::-;19121:2;19116:3;19112:12;19105:19;;18764:366;;;:::o;19136:::-;19278:3;19299:67;19363:2;19358:3;19299:67;:::i;:::-;19292:74;;19375:93;19464:3;19375:93;:::i;:::-;19493:2;19488:3;19484:12;19477:19;;19136:366;;;:::o;19508:::-;19650:3;19671:67;19735:2;19730:3;19671:67;:::i;:::-;19664:74;;19747:93;19836:3;19747:93;:::i;:::-;19865:2;19860:3;19856:12;19849:19;;19508:366;;;:::o;19880:::-;20022:3;20043:67;20107:2;20102:3;20043:67;:::i;:::-;20036:74;;20119:93;20208:3;20119:93;:::i;:::-;20237:2;20232:3;20228:12;20221:19;;19880:366;;;:::o;20252:::-;20394:3;20415:67;20479:2;20474:3;20415:67;:::i;:::-;20408:74;;20491:93;20580:3;20491:93;:::i;:::-;20609:2;20604:3;20600:12;20593:19;;20252:366;;;:::o;20624:::-;20766:3;20787:67;20851:2;20846:3;20787:67;:::i;:::-;20780:74;;20863:93;20952:3;20863:93;:::i;:::-;20981:2;20976:3;20972:12;20965:19;;20624:366;;;:::o;20996:::-;21138:3;21159:67;21223:2;21218:3;21159:67;:::i;:::-;21152:74;;21235:93;21324:3;21235:93;:::i;:::-;21353:2;21348:3;21344:12;21337:19;;20996:366;;;:::o;21368:398::-;21527:3;21548:83;21629:1;21624:3;21548:83;:::i;:::-;21541:90;;21640:93;21729:3;21640:93;:::i;:::-;21758:1;21753:3;21749:11;21742:18;;21368:398;;;:::o;21772:366::-;21914:3;21935:67;21999:2;21994:3;21935:67;:::i;:::-;21928:74;;22011:93;22100:3;22011:93;:::i;:::-;22129:2;22124:3;22120:12;22113:19;;21772:366;;;:::o;22144:::-;22286:3;22307:67;22371:2;22366:3;22307:67;:::i;:::-;22300:74;;22383:93;22472:3;22383:93;:::i;:::-;22501:2;22496:3;22492:12;22485:19;;22144:366;;;:::o;22516:::-;22658:3;22679:67;22743:2;22738:3;22679:67;:::i;:::-;22672:74;;22755:93;22844:3;22755:93;:::i;:::-;22873:2;22868:3;22864:12;22857:19;;22516:366;;;:::o;22888:::-;23030:3;23051:67;23115:2;23110:3;23051:67;:::i;:::-;23044:74;;23127:93;23216:3;23127:93;:::i;:::-;23245:2;23240:3;23236:12;23229:19;;22888:366;;;:::o;23260:::-;23402:3;23423:67;23487:2;23482:3;23423:67;:::i;:::-;23416:74;;23499:93;23588:3;23499:93;:::i;:::-;23617:2;23612:3;23608:12;23601:19;;23260:366;;;:::o;23632:::-;23774:3;23795:67;23859:2;23854:3;23795:67;:::i;:::-;23788:74;;23871:93;23960:3;23871:93;:::i;:::-;23989:2;23984:3;23980:12;23973:19;;23632:366;;;:::o;24004:108::-;24081:24;24099:5;24081:24;:::i;:::-;24076:3;24069:37;24004:108;;:::o;24118:118::-;24205:24;24223:5;24205:24;:::i;:::-;24200:3;24193:37;24118:118;;:::o;24242:157::-;24347:45;24367:24;24385:5;24367:24;:::i;:::-;24347:45;:::i;:::-;24342:3;24335:58;24242:157;;:::o;24405:275::-;24537:3;24559:95;24650:3;24641:6;24559:95;:::i;:::-;24552:102;;24671:3;24664:10;;24405:275;;;;:::o;24686:269::-;24815:3;24837:92;24925:3;24916:6;24837:92;:::i;:::-;24830:99;;24946:3;24939:10;;24686:269;;;;:::o;24961:564::-;25163:3;25185:92;25273:3;25264:6;25185:92;:::i;:::-;25178:99;;25287:75;25358:3;25349:6;25287:75;:::i;:::-;25387:2;25382:3;25378:12;25371:19;;25407:92;25495:3;25486:6;25407:92;:::i;:::-;25400:99;;25516:3;25509:10;;24961:564;;;;;;:::o;25531:379::-;25715:3;25737:147;25880:3;25737:147;:::i;:::-;25730:154;;25901:3;25894:10;;25531:379;;;:::o;25916:222::-;26009:4;26047:2;26036:9;26032:18;26024:26;;26060:71;26128:1;26117:9;26113:17;26104:6;26060:71;:::i;:::-;25916:222;;;;:::o;26144:1053::-;26467:4;26505:3;26494:9;26490:19;26482:27;;26519:71;26587:1;26576:9;26572:17;26563:6;26519:71;:::i;:::-;26600:72;26668:2;26657:9;26653:18;26644:6;26600:72;:::i;:::-;26719:9;26713:4;26709:20;26704:2;26693:9;26689:18;26682:48;26747:108;26850:4;26841:6;26747:108;:::i;:::-;26739:116;;26902:9;26896:4;26892:20;26887:2;26876:9;26872:18;26865:48;26930:108;27033:4;27024:6;26930:108;:::i;:::-;26922:116;;27086:9;27080:4;27076:20;27070:3;27059:9;27055:19;27048:49;27114:76;27185:4;27176:6;27114:76;:::i;:::-;27106:84;;26144:1053;;;;;;;;:::o;27203:751::-;27426:4;27464:3;27453:9;27449:19;27441:27;;27478:71;27546:1;27535:9;27531:17;27522:6;27478:71;:::i;:::-;27559:72;27627:2;27616:9;27612:18;27603:6;27559:72;:::i;:::-;27641;27709:2;27698:9;27694:18;27685:6;27641:72;:::i;:::-;27723;27791:2;27780:9;27776:18;27767:6;27723:72;:::i;:::-;27843:9;27837:4;27833:20;27827:3;27816:9;27812:19;27805:49;27871:76;27942:4;27933:6;27871:76;:::i;:::-;27863:84;;27203:751;;;;;;;;:::o;27960:373::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:108;28321:4;28312:6;28218:108;:::i;:::-;28210:116;;27960:373;;;;:::o;28339:634::-;28560:4;28598:2;28587:9;28583:18;28575:26;;28647:9;28641:4;28637:20;28633:1;28622:9;28618:17;28611:47;28675:108;28778:4;28769:6;28675:108;:::i;:::-;28667:116;;28830:9;28824:4;28820:20;28815:2;28804:9;28800:18;28793:48;28858:108;28961:4;28952:6;28858:108;:::i;:::-;28850:116;;28339:634;;;;;:::o;28979:210::-;29066:4;29104:2;29093:9;29089:18;29081:26;;29117:65;29179:1;29168:9;29164:17;29155:6;29117:65;:::i;:::-;28979:210;;;;:::o;29195:282::-;29318:4;29356:2;29345:9;29341:18;29333:26;;29369:101;29467:1;29456:9;29452:17;29443:6;29369:101;:::i;:::-;29195:282;;;;:::o;29483:313::-;29596:4;29634:2;29623:9;29619:18;29611:26;;29683:9;29677:4;29673:20;29669:1;29658:9;29654:17;29647:47;29711:78;29784:4;29775:6;29711:78;:::i;:::-;29703:86;;29483:313;;;;:::o;29802:419::-;29968:4;30006:2;29995:9;29991:18;29983:26;;30055:9;30049:4;30045:20;30041:1;30030:9;30026:17;30019:47;30083:131;30209:4;30083:131;:::i;:::-;30075:139;;29802:419;;;:::o;30227:::-;30393:4;30431:2;30420:9;30416:18;30408:26;;30480:9;30474:4;30470:20;30466:1;30455:9;30451:17;30444:47;30508:131;30634:4;30508:131;:::i;:::-;30500:139;;30227:419;;;:::o;30652:::-;30818:4;30856:2;30845:9;30841:18;30833:26;;30905:9;30899:4;30895:20;30891:1;30880:9;30876:17;30869:47;30933:131;31059:4;30933:131;:::i;:::-;30925:139;;30652:419;;;:::o;31077:::-;31243:4;31281:2;31270:9;31266:18;31258:26;;31330:9;31324:4;31320:20;31316:1;31305:9;31301:17;31294:47;31358:131;31484:4;31358:131;:::i;:::-;31350:139;;31077:419;;;:::o;31502:::-;31668:4;31706:2;31695:9;31691:18;31683:26;;31755:9;31749:4;31745:20;31741:1;31730:9;31726:17;31719:47;31783:131;31909:4;31783:131;:::i;:::-;31775:139;;31502:419;;;:::o;31927:::-;32093:4;32131:2;32120:9;32116:18;32108:26;;32180:9;32174:4;32170:20;32166:1;32155:9;32151:17;32144:47;32208:131;32334:4;32208:131;:::i;:::-;32200:139;;31927:419;;;:::o;32352:::-;32518:4;32556:2;32545:9;32541:18;32533:26;;32605:9;32599:4;32595:20;32591:1;32580:9;32576:17;32569:47;32633:131;32759:4;32633:131;:::i;:::-;32625:139;;32352:419;;;:::o;32777:::-;32943:4;32981:2;32970:9;32966:18;32958:26;;33030:9;33024:4;33020:20;33016:1;33005:9;33001:17;32994:47;33058:131;33184:4;33058:131;:::i;:::-;33050:139;;32777:419;;;:::o;33202:::-;33368:4;33406:2;33395:9;33391:18;33383:26;;33455:9;33449:4;33445:20;33441:1;33430:9;33426:17;33419:47;33483:131;33609:4;33483:131;:::i;:::-;33475:139;;33202:419;;;:::o;33627:::-;33793:4;33831:2;33820:9;33816:18;33808:26;;33880:9;33874:4;33870:20;33866:1;33855:9;33851:17;33844:47;33908:131;34034:4;33908:131;:::i;:::-;33900:139;;33627:419;;;:::o;34052:::-;34218:4;34256:2;34245:9;34241:18;34233:26;;34305:9;34299:4;34295:20;34291:1;34280:9;34276:17;34269:47;34333:131;34459:4;34333:131;:::i;:::-;34325:139;;34052:419;;;:::o;34477:::-;34643:4;34681:2;34670:9;34666:18;34658:26;;34730:9;34724:4;34720:20;34716:1;34705:9;34701:17;34694:47;34758:131;34884:4;34758:131;:::i;:::-;34750:139;;34477:419;;;:::o;34902:::-;35068:4;35106:2;35095:9;35091:18;35083:26;;35155:9;35149:4;35145:20;35141:1;35130:9;35126:17;35119:47;35183:131;35309:4;35183:131;:::i;:::-;35175:139;;34902:419;;;:::o;35327:::-;35493:4;35531:2;35520:9;35516:18;35508:26;;35580:9;35574:4;35570:20;35566:1;35555:9;35551:17;35544:47;35608:131;35734:4;35608:131;:::i;:::-;35600:139;;35327:419;;;:::o;35752:::-;35918:4;35956:2;35945:9;35941:18;35933:26;;36005:9;35999:4;35995:20;35991:1;35980:9;35976:17;35969:47;36033:131;36159:4;36033:131;:::i;:::-;36025:139;;35752:419;;;:::o;36177:::-;36343:4;36381:2;36370:9;36366:18;36358:26;;36430:9;36424:4;36420:20;36416:1;36405:9;36401:17;36394:47;36458:131;36584:4;36458:131;:::i;:::-;36450:139;;36177:419;;;:::o;36602:::-;36768:4;36806:2;36795:9;36791:18;36783:26;;36855:9;36849:4;36845:20;36841:1;36830:9;36826:17;36819:47;36883:131;37009:4;36883:131;:::i;:::-;36875:139;;36602:419;;;:::o;37027:::-;37193:4;37231:2;37220:9;37216:18;37208:26;;37280:9;37274:4;37270:20;37266:1;37255:9;37251:17;37244:47;37308:131;37434:4;37308:131;:::i;:::-;37300:139;;37027:419;;;:::o;37452:::-;37618:4;37656:2;37645:9;37641:18;37633:26;;37705:9;37699:4;37695:20;37691:1;37680:9;37676:17;37669:47;37733:131;37859:4;37733:131;:::i;:::-;37725:139;;37452:419;;;:::o;37877:222::-;37970:4;38008:2;37997:9;37993:18;37985:26;;38021:71;38089:1;38078:9;38074:17;38065:6;38021:71;:::i;:::-;37877:222;;;;:::o;38105:332::-;38226:4;38264:2;38253:9;38249:18;38241:26;;38277:71;38345:1;38334:9;38330:17;38321:6;38277:71;:::i;:::-;38358:72;38426:2;38415:9;38411:18;38402:6;38358:72;:::i;:::-;38105:332;;;;;:::o;38443:129::-;38477:6;38504:20;;:::i;:::-;38494:30;;38533:33;38561:4;38553:6;38533:33;:::i;:::-;38443:129;;;:::o;38578:75::-;38611:6;38644:2;38638:9;38628:19;;38578:75;:::o;38659:311::-;38736:4;38826:18;38818:6;38815:30;38812:56;;;38848:18;;:::i;:::-;38812:56;38898:4;38890:6;38886:17;38878:25;;38958:4;38952;38948:15;38940:23;;38659:311;;;:::o;38976:::-;39053:4;39143:18;39135:6;39132:30;39129:56;;;39165:18;;:::i;:::-;39129:56;39215:4;39207:6;39203:17;39195:25;;39275:4;39269;39265:15;39257:23;;38976:311;;;:::o;39293:307::-;39354:4;39444:18;39436:6;39433:30;39430:56;;;39466:18;;:::i;:::-;39430:56;39504:29;39526:6;39504:29;:::i;:::-;39496:37;;39588:4;39582;39578:15;39570:23;;39293:307;;;:::o;39606:308::-;39668:4;39758:18;39750:6;39747:30;39744:56;;;39780:18;;:::i;:::-;39744:56;39818:29;39840:6;39818:29;:::i;:::-;39810:37;;39902:4;39896;39892:15;39884:23;;39606:308;;;:::o;39920:132::-;39987:4;40010:3;40002:11;;40040:4;40035:3;40031:14;40023:22;;39920:132;;;:::o;40058:141::-;40107:4;40130:3;40122:11;;40153:3;40150:1;40143:14;40187:4;40184:1;40174:18;40166:26;;40058:141;;;:::o;40205:114::-;40272:6;40306:5;40300:12;40290:22;;40205:114;;;:::o;40325:98::-;40376:6;40410:5;40404:12;40394:22;;40325:98;;;:::o;40429:99::-;40481:6;40515:5;40509:12;40499:22;;40429:99;;;:::o;40534:113::-;40604:4;40636;40631:3;40627:14;40619:22;;40534:113;;;:::o;40653:184::-;40752:11;40786:6;40781:3;40774:19;40826:4;40821:3;40817:14;40802:29;;40653:184;;;;:::o;40843:168::-;40926:11;40960:6;40955:3;40948:19;41000:4;40995:3;40991:14;40976:29;;40843:168;;;;:::o;41017:147::-;41118:11;41155:3;41140:18;;41017:147;;;;:::o;41170:169::-;41254:11;41288:6;41283:3;41276:19;41328:4;41323:3;41319:14;41304:29;;41170:169;;;;:::o;41345:148::-;41447:11;41484:3;41469:18;;41345:148;;;;:::o;41499:305::-;41539:3;41558:20;41576:1;41558:20;:::i;:::-;41553:25;;41592:20;41610:1;41592:20;:::i;:::-;41587:25;;41746:1;41678:66;41674:74;41671:1;41668:81;41665:107;;;41752:18;;:::i;:::-;41665:107;41796:1;41793;41789:9;41782:16;;41499:305;;;;:::o;41810:185::-;41850:1;41867:20;41885:1;41867:20;:::i;:::-;41862:25;;41901:20;41919:1;41901:20;:::i;:::-;41896:25;;41940:1;41930:35;;41945:18;;:::i;:::-;41930:35;41987:1;41984;41980:9;41975:14;;41810:185;;;;:::o;42001:348::-;42041:7;42064:20;42082:1;42064:20;:::i;:::-;42059:25;;42098:20;42116:1;42098:20;:::i;:::-;42093:25;;42286:1;42218:66;42214:74;42211:1;42208:81;42203:1;42196:9;42189:17;42185:105;42182:131;;;42293:18;;:::i;:::-;42182:131;42341:1;42338;42334:9;42323:20;;42001:348;;;;:::o;42355:191::-;42395:4;42415:20;42433:1;42415:20;:::i;:::-;42410:25;;42449:20;42467:1;42449:20;:::i;:::-;42444:25;;42488:1;42485;42482:8;42479:34;;;42493:18;;:::i;:::-;42479:34;42538:1;42535;42531:9;42523:17;;42355:191;;;;:::o;42552:96::-;42589:7;42618:24;42636:5;42618:24;:::i;:::-;42607:35;;42552:96;;;:::o;42654:90::-;42688:7;42731:5;42724:13;42717:21;42706:32;;42654:90;;;:::o;42750:149::-;42786:7;42826:66;42819:5;42815:78;42804:89;;42750:149;;;:::o;42905:126::-;42942:7;42982:42;42975:5;42971:54;42960:65;;42905:126;;;:::o;43037:77::-;43074:7;43103:5;43092:16;;43037:77;;;:::o;43120:156::-;43200:9;43233:37;43264:5;43233:37;:::i;:::-;43220:50;;43120:156;;;:::o;43282:126::-;43332:9;43365:37;43396:5;43365:37;:::i;:::-;43352:50;;43282:126;;;:::o;43414:113::-;43464:9;43497:24;43515:5;43497:24;:::i;:::-;43484:37;;43414:113;;;:::o;43533:154::-;43617:6;43612:3;43607;43594:30;43679:1;43670:6;43665:3;43661:16;43654:27;43533:154;;;:::o;43693:307::-;43761:1;43771:113;43785:6;43782:1;43779:13;43771:113;;;43870:1;43865:3;43861:11;43855:18;43851:1;43846:3;43842:11;43835:39;43807:2;43804:1;43800:10;43795:15;;43771:113;;;43902:6;43899:1;43896:13;43893:101;;;43982:1;43973:6;43968:3;43964:16;43957:27;43893:101;43742:258;43693:307;;;:::o;44006:320::-;44050:6;44087:1;44081:4;44077:12;44067:22;;44134:1;44128:4;44124:12;44155:18;44145:81;;44211:4;44203:6;44199:17;44189:27;;44145:81;44273:2;44265:6;44262:14;44242:18;44239:38;44236:84;;;44292:18;;:::i;:::-;44236:84;44057:269;44006:320;;;:::o;44332:281::-;44415:27;44437:4;44415:27;:::i;:::-;44407:6;44403:40;44545:6;44533:10;44530:22;44509:18;44497:10;44494:34;44491:62;44488:88;;;44556:18;;:::i;:::-;44488:88;44596:10;44592:2;44585:22;44375:238;44332:281;;:::o;44619:233::-;44658:3;44681:24;44699:5;44681:24;:::i;:::-;44672:33;;44727:66;44720:5;44717:77;44714:103;;;44797:18;;:::i;:::-;44714:103;44844:1;44837:5;44833:13;44826:20;;44619:233;;;:::o;44858:79::-;44897:7;44926:5;44915:16;;44858:79;;;:::o;44943:180::-;44991:77;44988:1;44981:88;45088:4;45085:1;45078:15;45112:4;45109:1;45102:15;45129:180;45177:77;45174:1;45167:88;45274:4;45271:1;45264:15;45298:4;45295:1;45288:15;45315:180;45363:77;45360:1;45353:88;45460:4;45457:1;45450:15;45484:4;45481:1;45474:15;45501:180;45549:77;45546:1;45539:88;45646:4;45643:1;45636:15;45670:4;45667:1;45660:15;45687:180;45735:77;45732:1;45725:88;45832:4;45829:1;45822:15;45856:4;45853:1;45846:15;45873:183;45908:3;45946:1;45928:16;45925:23;45922:128;;;45984:1;45981;45978;45963:23;46006:34;46037:1;46031:8;46006:34;:::i;:::-;45999:41;;45922:128;45873:183;:::o;46062:117::-;46171:1;46168;46161:12;46185:117;46294:1;46291;46284:12;46308:117;46417:1;46414;46407:12;46431:117;46540:1;46537;46530:12;46554:117;46663:1;46660;46653:12;46677:102;46718:6;46769:2;46765:7;46760:2;46753:5;46749:14;46745:28;46735:38;;46677:102;;;:::o;46785:106::-;46829:8;46878:5;46873:3;46869:15;46848:36;;46785:106;;;:::o;46897:239::-;47037:34;47033:1;47025:6;47021:14;47014:58;47106:22;47101:2;47093:6;47089:15;47082:47;46897:239;:::o;47142:234::-;47282:34;47278:1;47270:6;47266:14;47259:58;47351:17;47346:2;47338:6;47334:15;47327:42;47142:234;:::o;47382:166::-;47522:18;47518:1;47510:6;47506:14;47499:42;47382:166;:::o;47554:227::-;47694:34;47690:1;47682:6;47678:14;47671:58;47763:10;47758:2;47750:6;47746:15;47739:35;47554:227;:::o;47787:224::-;47927:34;47923:1;47915:6;47911:14;47904:58;47996:7;47991:2;47983:6;47979:15;47972:32;47787:224;:::o;48017:225::-;48157:34;48153:1;48145:6;48141:14;48134:58;48226:8;48221:2;48213:6;48209:15;48202:33;48017:225;:::o;48248:244::-;48388:34;48384:1;48376:6;48372:14;48365:58;48457:27;48452:2;48444:6;48440:15;48433:52;48248:244;:::o;48498:223::-;48638:34;48634:1;48626:6;48622:14;48615:58;48707:6;48702:2;48694:6;48690:15;48683:31;48498:223;:::o;48727:229::-;48867:34;48863:1;48855:6;48851:14;48844:58;48936:12;48931:2;48923:6;48919:15;48912:37;48727:229;:::o;48962:224::-;49102:34;49098:1;49090:6;49086:14;49079:58;49171:7;49166:2;49158:6;49154:15;49147:32;48962:224;:::o;49192:222::-;49332:34;49328:1;49320:6;49316:14;49309:58;49401:5;49396:2;49388:6;49384:15;49377:30;49192:222;:::o;49420:229::-;49560:34;49556:1;49548:6;49544:14;49537:58;49629:12;49624:2;49616:6;49612:15;49605:37;49420:229;:::o;49655:182::-;49795:34;49791:1;49783:6;49779:14;49772:58;49655:182;:::o;49843:114::-;;:::o;49963:228::-;50103:34;50099:1;50091:6;50087:14;50080:58;50172:11;50167:2;50159:6;50155:15;50148:36;49963:228;:::o;50197:::-;50337:34;50333:1;50325:6;50321:14;50314:58;50406:11;50401:2;50393:6;50389:15;50382:36;50197:228;:::o;50431:227::-;50571:34;50567:1;50559:6;50555:14;50548:58;50640:10;50635:2;50627:6;50623:15;50616:35;50431:227;:::o;50664:165::-;50804:17;50800:1;50792:6;50788:14;50781:41;50664:165;:::o;50835:220::-;50975:34;50971:1;50963:6;50959:14;50952:58;51044:3;51039:2;51031:6;51027:15;51020:28;50835:220;:::o;51061:167::-;51201:19;51197:1;51189:6;51185:14;51178:43;51061:167;:::o;51234:711::-;51273:3;51311:4;51293:16;51290:26;51287:39;;;51319:5;;51287:39;51348:20;;:::i;:::-;51423:1;51405:16;51401:24;51398:1;51392:4;51377:49;51456:4;51450:11;51555:16;51548:4;51540:6;51536:17;51533:39;51500:18;51492:6;51489:30;51473:113;51470:146;;;51601:5;;;;51470:146;51647:6;51641:4;51637:17;51683:3;51677:10;51710:18;51702:6;51699:30;51696:43;;;51732:5;;;;;;51696:43;51780:6;51773:4;51768:3;51764:14;51760:27;51839:1;51821:16;51817:24;51811:4;51807:35;51802:3;51799:44;51796:57;;;51846:5;;;;;;;51796:57;51863;51911:6;51905:4;51901:17;51893:6;51889:30;51883:4;51863:57;:::i;:::-;51936:3;51929:10;;51277:668;;;;;51234:711;;:::o;51951:122::-;52024:24;52042:5;52024:24;:::i;:::-;52017:5;52014:35;52004:63;;52063:1;52060;52053:12;52004:63;51951:122;:::o;52079:116::-;52149:21;52164:5;52149:21;:::i;:::-;52142:5;52139:32;52129:60;;52185:1;52182;52175:12;52129:60;52079:116;:::o;52201:120::-;52273:23;52290:5;52273:23;:::i;:::-;52266:5;52263:34;52253:62;;52311:1;52308;52301:12;52253:62;52201:120;:::o;52327:122::-;52400:24;52418:5;52400:24;:::i;:::-;52393:5;52390:35;52380:63;;52439:1;52436;52429:12;52380:63;52327:122;:::o
Swarm Source
ipfs://868bb0364f2e39ca5ac59cc8ca9d7448294120793de70447adf54ee980d995a3
Loading...
Loading
[ 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.