ERC-1155
Overview
Max Total Supply
44
Holders
25
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HeroBoxSerum
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-30 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; 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); } 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; } 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); } 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); } 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); } } } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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); } function uri(uint256) public view virtual override returns (string memory) { return _uri; } 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]; } 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; } function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } 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); } 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); } 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); } 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 ); } function _setURI(string memory newuri) internal virtual { _uri = newuri; } 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 ); } 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 ); } 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, ""); } 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, ""); } 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); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} 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; } } 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); } } abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } abstract contract ERC1155URIStorage is ERC1155 { using Strings for uint256; // Optional base URI string private _baseURI = ""; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; function uri(uint256 tokenId) public view virtual override returns (string memory) { string memory tokenURI = _tokenURIs[tokenId]; // If token URI is set, concatenate base URI and tokenURI (via abi.encodePacked). return bytes(tokenURI).length > 0 ? string(abi.encodePacked(_baseURI, tokenURI)) : super.uri(tokenId); } /** * @dev Sets `tokenURI` as the tokenURI of `tokenId`. */ function _setURI(uint256 tokenId, string memory tokenURI) internal virtual { _tokenURIs[tokenId] = tokenURI; emit URI(uri(tokenId), tokenId); } /** * @dev Sets `baseURI` as the `_baseURI` for all tokens */ function _setBaseURI(string memory baseURI) internal virtual { _baseURI = baseURI; } } abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require( supply >= amount, "ERC1155: burn amount exceeds totalSupply" ); unchecked { _totalSupply[id] = supply - amount; } } } } } interface IERC20 { function balanceOf(address account) external view returns (uint256); function burn(address user, uint256 _amount) external; } contract HeroBoxSerum is Ownable, Pausable, ERC1155Supply, ERC1155URIStorage { address public immutable traxToken; uint256 public constant maxHeroBox = 1250; uint256 public constant maxRegularSerum = 1000; uint256 public constant maxRareSerum = 240; uint256 public constant maxUltraRareSerum = 10; uint256 public HeroBoxPrice = 50000; uint256 public RegularSerumPrice = 100000; uint256 public RareSerumPrice = 250000; uint256 public UltraRareSerumPrice = 500000; mapping(address => uint256) public traxBurned; constructor(address _trax) ERC1155("") { traxToken = _trax; } // NOTE: cost of minting herobox and serum tokens are taken in terms of trax tokens not ethers (directly) function mintHeroBox(uint256 amount) public whenNotPaused { require(amount >= 1); uint256 heroSupply = totalSupply(0); require( (heroSupply + amount) <= maxHeroBox, "NO MORE HEROBOX TOKEN CAN BE MINTED" ); uint256 balance = IERC20(traxToken).balanceOf(msg.sender); require( balance >= (HeroBoxPrice * (10**18) * amount), "YOU DON'T HAVE ENOUGH TRAX TO BUY HEROBOX TOKENs" ); IERC20(traxToken).burn(msg.sender, HeroBoxPrice * amount); _mint(msg.sender, 0, amount, "0x00"); traxBurned[msg.sender] += (HeroBoxPrice * amount); } function mintSerum(uint256 _type, uint256 amount) public whenNotPaused { require( _type == 1 || _type == 2 || _type == 3, "INVALID TYPE VARIABLE" ); require(amount >= 1); if (_type == 1) { uint256 regularSerumSupply = totalSupply(1); require( (regularSerumSupply + amount) <= maxRegularSerum, "NO MORE REGULAR SEREUM TOKEN CAN BE MINTED" ); uint256 balance = IERC20(traxToken).balanceOf(msg.sender); require( balance >= (RegularSerumPrice * (10**18) * amount), "YOU DON'T HAVE ENOUGH TRAX TO BUY REGULAR SEREUM TOKENs" ); IERC20(traxToken).burn(msg.sender, RegularSerumPrice * amount); } else if (_type == 2) { uint256 rareSerumSupply = totalSupply(2); require( (rareSerumSupply + amount) <= maxRareSerum, "NO MORE RARE SEREUM TOKEN CAN BE MINTED" ); uint256 balance = IERC20(traxToken).balanceOf(msg.sender); require( balance >= (RareSerumPrice * (10**18) * amount), "YOU DON'T HAVE ENOUGH TRAX TO BUY RARE SEREUM TOKENs" ); IERC20(traxToken).burn(msg.sender, RareSerumPrice * amount); } else if (_type == 3) { uint256 ultraRareSerumSupply = totalSupply(3); require( (ultraRareSerumSupply + amount) <= maxUltraRareSerum, "NO MORE ULTRA RARE SEREUM TOKEN CAN BE MINTED" ); uint256 balance = IERC20(traxToken).balanceOf(msg.sender); require( balance >= (UltraRareSerumPrice * (10**18) * amount), "YOU DON'T HAVE ENOUGH TRAX TO BUY ULTRA RARE SEREUM TOKENs" ); IERC20(traxToken).burn(msg.sender, UltraRareSerumPrice * amount); } _mint(msg.sender, _type, amount, "0x00"); traxBurned[msg.sender] += (HeroBoxPrice * amount); } function burnHeroBox(address account, uint256 amount) public virtual whenNotPaused { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, 0, amount); } function burnSerum( uint256 _type, address account, uint256 amount ) public virtual whenNotPaused { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); require( _type == 1 || _type == 2 || _type == 3, "INVALID TYPE VARIABLE" ); _burn(account, _type, amount); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal override(ERC1155, ERC1155Supply) whenNotPaused { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function uri(uint256 tokenId) public view override(ERC1155, ERC1155URIStorage) returns (string memory) { return super.uri(tokenId); } function setURI(uint256 tokenId, string memory tokenURI) public onlyOwner { _setURI(tokenId, tokenURI); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } // function to set price of for herobox and serum tokens // @param _type -> 0==herobox 1==regular serum, 2==rare serum, 3==ultra rare serum // @param price -> number of traxtokens (DO NOT DENOMINATE IN 10*18) function setPrice(uint256 _type, uint256 _price) public onlyOwner { require( _type == 0 || _type == 1 || _type == 2 || _type == 3, "INVALID TYPE VARIABLE" ); if (_type == 0) { HeroBoxPrice = _price; } else if (_type == 1) { RegularSerumPrice = _price; } else if (_type == 2) { RareSerumPrice = _price; } else if (_type == 3) { UltraRareSerumPrice = _price; } } function tokenCounter(uint256 _type) public view returns (uint256) { require( _type == 0 || _type == 1 || _type == 2 || _type == 3, "INVALID TYPE VARIABLE" ); return totalSupply(_type); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_trax","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"HeroBoxPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RareSerumPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RegularSerumPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UltraRareSerumPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnHeroBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnSerum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxHeroBox","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRareSerum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRegularSerum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxUltraRareSerum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintHeroBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintSerum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","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":[{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"traxBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"traxToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405260405180602001604052806000815250600590805190602001906200002b929190620001fc565b5061c350600755620186a06008556203d0906009556207a120600a553480156200005457600080fd5b50604051620053a6380380620053a683398181016040528101906200007a9190620002c3565b60405180602001604052806000815250620000aa6200009e6200011460201b60201c565b6200011c60201b60201c565b60008060146101000a81548160ff021916908315150217905550620000d581620001e060201b60201c565b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620003ad565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039080519060200190620001f8929190620001fc565b5050565b8280546200020a9062000329565b90600052602060002090601f0160209004810192826200022e57600085556200027a565b82601f106200024957805160ff19168380011785556200027a565b828001600101855582156200027a579182015b82811115620002795782518255916020019190600101906200025c565b5b5090506200028991906200028d565b5090565b5b80821115620002a85760008160009055506001016200028e565b5090565b600081519050620002bd8162000393565b92915050565b600060208284031215620002dc57620002db6200038e565b5b6000620002ec84828501620002ac565b91505092915050565b6000620003028262000309565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200034257607f821691505b602082108114156200035957620003586200035f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200039e81620002f5565b8114620003aa57600080fd5b50565b60805160601c614fa26200040460003960008181610b6001528181610c6e01528181610d7701528181610e8501528181610f8e0152818161109c0152818161138b0152818161149901526115fa0152614fa26000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c8063715018a61161011a578063a9c7788d116100ad578063e985e9c51161007c578063e985e9c51461058f578063f242432a146105bf578063f2fde38b146105db578063f7d97577146105f7578063fc6d8bd514610613576101fa565b8063a9c7788d14610507578063bd85b03914610523578063d10d47eb14610553578063dd20d96d14610571576101fa565b8063862440e2116100e9578063862440e21461049357806388cc7e1d146104af5780638da5cb5b146104cd578063a22cb465146104eb576101fa565b8063715018a61461044557806377a154071461044f5780637b19b4e41461046d5780638456cb5914610489576101fa565b80634e1273f4116101925780635c975abb116101615780635c975abb146103bd578063638cd42d146103db5780636a210b531461040b5780636d56b2d614610427576101fa565b80634e1273f4146103215780634f558e791461035157806353ede1ba1461038157806358500a531461039f576101fa565b80631fdd2c66116101ce5780631fdd2c66146102ad57806321bdb140146102cb5780632eb2c2d6146102fb5780633f4ba83a14610317576101fa565b8062fdd58e146101ff57806301ffc9a71461022f5780630e4d7ad11461025f5780630e89341c1461027d575b600080fd5b61021960048036038101906102149190613574565b61062f565b6040516102269190614231565b60405180910390f35b6102496004803603810190610244919061362c565b6106f9565b6040516102569190613eb4565b60405180910390f35b6102676107db565b6040516102749190614231565b60405180910390f35b61029760048036038101906102929190613686565b6107e1565b6040516102a49190613ecf565b60405180910390f35b6102b56107f3565b6040516102c29190614231565b60405180910390f35b6102e560048036038101906102e09190613686565b6107f8565b6040516102f29190614231565b60405180910390f35b610315600480360381019061031091906133ce565b61086d565b005b61031f61090e565b005b61033b600480360381019061033691906135b4565b610920565b6040516103489190613e5b565b60405180910390f35b61036b60048036038101906103669190613686565b610a39565b6040516103789190613eb4565b60405180910390f35b610389610a4d565b6040516103969190614231565b60405180910390f35b6103a7610a52565b6040516103b49190614231565b60405180910390f35b6103c5610a58565b6040516103d29190613eb4565b60405180910390f35b6103f560048036038101906103f09190613361565b610a6e565b6040516104029190614231565b60405180910390f35b6104256004803603810190610420919061378f565b610a86565b005b61042f6111e1565b60405161043c9190614231565b60405180910390f35b61044d6111e7565b005b6104576111fb565b6040516104649190614231565b60405180910390f35b61048760048036038101906104829190613574565b611201565b005b6104916112a6565b005b6104ad60048036038101906104a89190613733565b6112b8565b005b6104b76112ce565b6040516104c49190614231565b60405180910390f35b6104d56112d4565b6040516104e29190613d55565b60405180910390f35b61050560048036038101906105009190613534565b6112fd565b005b610521600480360381019061051c9190613686565b611313565b005b61053d60048036038101906105389190613686565b6115db565b60405161054a9190614231565b60405180910390f35b61055b6115f8565b6040516105689190613d55565b60405180910390f35b61057961161c565b6040516105869190614231565b60405180910390f35b6105a960048036038101906105a4919061338e565b611622565b6040516105b69190613eb4565b60405180910390f35b6105d960048036038101906105d4919061349d565b6116b6565b005b6105f560048036038101906105f09190613361565b611757565b005b610611600480360381019061060c919061378f565b6117db565b005b61062d600480360381019061062891906136e0565b61189e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069790613ff1565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d38261199c565b5b9050919050565b6104e281565b60606107ec82611a06565b9050919050565b600a81565b6000808214806108085750600182145b806108135750600282145b8061081e5750600382145b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085490614071565b60405180910390fd5b610866826115db565b9050919050565b610875611aeb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108bb57506108ba856108b5611aeb565b611622565b5b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613f11565b60405180910390fd5b6109078585858585611af3565b5050505050565b610916611e18565b61091e611e96565b565b60608151835114610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90614151565b60405180910390fd5b6000835167ffffffffffffffff81111561098357610982614684565b5b6040519080825280602002602001820160405280156109b15781602001602082028036833780820191505090505b50905060005b8451811015610a2e576109fe8582815181106109d6576109d5614655565b5b60200260200101518583815181106109f1576109f0614655565b5b602002602001015161062f565b828281518110610a1157610a10614655565b5b60200260200101818152505080610a27906145ae565b90506109b7565b508091505092915050565b600080610a45836115db565b119050919050565b60f081565b60095481565b60008060149054906101000a900460ff16905090565b600b6020528060005260406000206000915090505481565b610a8e611ef8565b6001821480610a9d5750600282145b80610aa85750600382145b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90614071565b60405180910390fd5b6001811015610af557600080fd5b6001821415610d0d576000610b0a60016115db565b90506103e88282610b1b91906143e5565b1115610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613fb1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bb79190613d55565b60206040518083038186803b158015610bcf57600080fd5b505afa158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0791906136b3565b905082670de0b6b3a7640000600854610c20919061443b565b610c2a919061443b565b811015610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c63906141f1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600854610cb7919061443b565b6040518363ffffffff1660e01b8152600401610cd4929190613e32565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050505050611139565b6002821415610f24576000610d2260026115db565b905060f08282610d3291906143e5565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906141d1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610dce9190613d55565b60206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e91906136b3565b905082670de0b6b3a7640000600954610e37919061443b565b610e41919061443b565b811015610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90614011565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600954610ece919061443b565b6040518363ffffffff1660e01b8152600401610eeb929190613e32565b600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050505050611138565b6003821415611137576000610f3960036115db565b9050600a8282610f4991906143e5565b1115610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613fd1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fe59190613d55565b60206040518083038186803b158015610ffd57600080fd5b505afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906136b3565b905082670de0b6b3a7640000600a5461104e919061443b565b611058919061443b565b81101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614091565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600a546110e5919061443b565b6040518363ffffffff1660e01b8152600401611102929190613e32565b600060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b5050505050505b5b5b61117a3383836040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611f42565b80600754611188919061443b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111d691906143e5565b925050819055505050565b60075481565b6111ef611e18565b6111f960006120f4565b565b600a5481565b611209611ef8565b611211611aeb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611257575061125682611251611aeb565b611622565b5b611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90613f11565b60405180910390fd5b6112a2826000836121b8565b5050565b6112ae611e18565b6112b6612401565b565b6112c0611e18565b6112ca8282612464565b5050565b6103e881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61130f611308611aeb565b83836124d0565b5050565b61131b611ef8565b600181101561132957600080fd5b600061133560006115db565b90506104e2828261134691906143e5565b1115611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90614211565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113e29190613d55565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143291906136b3565b905082670de0b6b3a764000060075461144b919061443b565b611455919061443b565b811015611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614171565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639dc29fac33856007546114e2919061443b565b6040518363ffffffff1660e01b81526004016114ff929190613e32565b600060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b50505050611573336000856040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611f42565b82600754611581919061443b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cf91906143e5565b92505081905550505050565b600060046000838152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116be611aeb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117045750611703856116fe611aeb565b611622565b5b611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90613f11565b60405180910390fd5b611750858585858561263d565b5050505050565b61175f611e18565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690613f71565b60405180910390fd5b6117d8816120f4565b50565b6117e3611e18565b60008214806117f25750600182145b806117fd5750600282145b806118085750600382145b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614071565b60405180910390fd5b600082141561185c578060078190555061189a565b60018214156118715780600881905550611899565b60028214156118865780600981905550611898565b60038214156118975780600a819055505b5b5b5b5050565b6118a6611ef8565b6118ae611aeb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806118f457506118f3826118ee611aeb565b611622565b5b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613f11565b60405180910390fd5b60018314806119425750600283145b8061194d5750600383145b61198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390614071565b60405180910390fd5b6119978284836121b8565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000600660008481526020019081526020016000208054611a289061454b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a549061454b565b8015611aa15780601f10611a7657610100808354040283529160200191611aa1565b820191906000526020600020905b815481529060010190602001808311611a8457829003601f168201915b505050505090506000815111611abf57611aba836128dc565b611ae3565b600581604051602001611ad3929190613d31565b6040516020818303038152906040525b915050919050565b600033905090565b8151835114611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614051565b60405180910390fd5b6000611bb1611aeb565b9050611bc1818787878787612970565b60005b8451811015611d75576000858281518110611be257611be1614655565b5b602002602001015190506000858381518110611c0157611c00614655565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906140d1565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d5a91906143e5565b9250508190555050505080611d6e906145ae565b9050611bc4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611dec929190613e7d565b60405180910390a4611e0281878787878761298e565b611e10818787878787612996565b505050505050565b611e20611aeb565b73ffffffffffffffffffffffffffffffffffffffff16611e3e6112d4565b73ffffffffffffffffffffffffffffffffffffffff1614611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b906140f1565b60405180910390fd5b565b611e9e612b7d565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ee1611aeb565b604051611eee9190613d55565b60405180910390a1565b611f00610a58565b15611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790614031565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906141b1565b60405180910390fd5b6000611fbc611aeb565b90506000611fc985612bc6565b90506000611fd685612bc6565b9050611fe783600089858589612970565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204791906143e5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120c592919061424c565b60405180910390a46120dc8360008985858961298e565b6120eb83600089898989612c40565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f906140b1565b60405180910390fd5b6000612232611aeb565b9050600061223f84612bc6565b9050600061224c84612bc6565b905061226c83876000858560405180602001604052806000815250612970565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90613f91565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516123d292919061424c565b60405180910390a46123f88488600086866040518060200160405280600081525061298e565b50505050505050565b612409611ef8565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861244d611aeb565b60405161245a9190613d55565b60405180910390a1565b8060066000848152602001908152602001600020908051906020019061248b929190613024565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6124b7846107e1565b6040516124c49190613ecf565b60405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614131565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126309190613eb4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614051565b60405180910390fd5b60006126b7611aeb565b905060006126c485612bc6565b905060006126d185612bc6565b90506126e1838989858589612970565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906140d1565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283091906143e5565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516128ad92919061424c565b60405180910390a46128c3848a8a86868a61298e565b6128d1848a8a8a8a8a612c40565b505050505050505050565b6060600380546128eb9061454b565b80601f01602080910402602001604051908101604052809291908181526020018280546129179061454b565b80156129645780601f1061293957610100808354040283529160200191612964565b820191906000526020600020905b81548152906001019060200180831161294757829003601f168201915b50505050509050919050565b612978611ef8565b612986868686868686612e27565b505050505050565b505050505050565b6129b58473ffffffffffffffffffffffffffffffffffffffff16612ff9565b15612b75578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016129fb959493929190613d70565b602060405180830381600087803b158015612a1557600080fd5b505af1925050508015612a4657506040513d601f19601f82011682018060405250810190612a439190613659565b60015b612aec57612a526146b3565b806308c379a01415612aaf5750612a67614e7a565b80612a725750612ab1565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa69190613ecf565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390613ef1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90613f31565b60405180910390fd5b505b505050505050565b612b85610a58565b612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb90613f51565b60405180910390fd5b565b60606000600167ffffffffffffffff811115612be557612be4614684565b5b604051908082528060200260200182016040528015612c135781602001602082028036833780820191505090505b5090508281600081518110612c2b57612c2a614655565b5b60200260200101818152505080915050919050565b612c5f8473ffffffffffffffffffffffffffffffffffffffff16612ff9565b15612e1f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ca5959493929190613dd8565b602060405180830381600087803b158015612cbf57600080fd5b505af1925050508015612cf057506040513d601f19601f82011682018060405250810190612ced9190613659565b60015b612d9657612cfc6146b3565b806308c379a01415612d595750612d11614e7a565b80612d1c5750612d5b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d509190613ecf565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90613ef1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490613f31565b60405180910390fd5b505b505050505050565b612e3586868686868661301c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ee75760005b8351811015612ee557828181518110612e8957612e88614655565b5b602002602001015160046000868481518110612ea857612ea7614655565b5b602002602001015181526020019081526020016000206000828254612ecd91906143e5565b9250508190555080612ede906145ae565b9050612e6d565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ff15760005b8351811015612fef576000848281518110612f3d57612f3c614655565b5b602002602001015190506000848381518110612f5c57612f5b614655565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614111565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612fe8906145ae565b9050612f1f565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546130309061454b565b90600052602060002090601f0160209004810192826130525760008555613099565b82601f1061306b57805160ff1916838001178555613099565b82800160010185558215613099579182015b8281111561309857825182559160200191906001019061307d565b5b5090506130a691906130aa565b5090565b5b808211156130c35760008160009055506001016130ab565b5090565b60006130da6130d58461429a565b614275565b905080838252602082019050828560208602820111156130fd576130fc6146da565b5b60005b8581101561312d5781613113888261322b565b845260208401935060208301925050600181019050613100565b5050509392505050565b600061314a613145846142c6565b614275565b9050808382526020820190508285602086028201111561316d5761316c6146da565b5b60005b8581101561319d57816131838882613337565b845260208401935060208301925050600181019050613170565b5050509392505050565b60006131ba6131b5846142f2565b614275565b9050828152602081018484840111156131d6576131d56146df565b5b6131e1848285614509565b509392505050565b60006131fc6131f784614323565b614275565b905082815260208101848484011115613218576132176146df565b5b613223848285614509565b509392505050565b60008135905061323a81614f10565b92915050565b600082601f830112613255576132546146d5565b5b81356132658482602086016130c7565b91505092915050565b600082601f830112613283576132826146d5565b5b8135613293848260208601613137565b91505092915050565b6000813590506132ab81614f27565b92915050565b6000813590506132c081614f3e565b92915050565b6000815190506132d581614f3e565b92915050565b600082601f8301126132f0576132ef6146d5565b5b81356133008482602086016131a7565b91505092915050565b600082601f83011261331e5761331d6146d5565b5b813561332e8482602086016131e9565b91505092915050565b60008135905061334681614f55565b92915050565b60008151905061335b81614f55565b92915050565b600060208284031215613377576133766146e9565b5b60006133858482850161322b565b91505092915050565b600080604083850312156133a5576133a46146e9565b5b60006133b38582860161322b565b92505060206133c48582860161322b565b9150509250929050565b600080600080600060a086880312156133ea576133e96146e9565b5b60006133f88882890161322b565b95505060206134098882890161322b565b945050604086013567ffffffffffffffff81111561342a576134296146e4565b5b6134368882890161326e565b935050606086013567ffffffffffffffff811115613457576134566146e4565b5b6134638882890161326e565b925050608086013567ffffffffffffffff811115613484576134836146e4565b5b613490888289016132db565b9150509295509295909350565b600080600080600060a086880312156134b9576134b86146e9565b5b60006134c78882890161322b565b95505060206134d88882890161322b565b94505060406134e988828901613337565b93505060606134fa88828901613337565b925050608086013567ffffffffffffffff81111561351b5761351a6146e4565b5b613527888289016132db565b9150509295509295909350565b6000806040838503121561354b5761354a6146e9565b5b60006135598582860161322b565b925050602061356a8582860161329c565b9150509250929050565b6000806040838503121561358b5761358a6146e9565b5b60006135998582860161322b565b92505060206135aa85828601613337565b9150509250929050565b600080604083850312156135cb576135ca6146e9565b5b600083013567ffffffffffffffff8111156135e9576135e86146e4565b5b6135f585828601613240565b925050602083013567ffffffffffffffff811115613616576136156146e4565b5b6136228582860161326e565b9150509250929050565b600060208284031215613642576136416146e9565b5b6000613650848285016132b1565b91505092915050565b60006020828403121561366f5761366e6146e9565b5b600061367d848285016132c6565b91505092915050565b60006020828403121561369c5761369b6146e9565b5b60006136aa84828501613337565b91505092915050565b6000602082840312156136c9576136c86146e9565b5b60006136d78482850161334c565b91505092915050565b6000806000606084860312156136f9576136f86146e9565b5b600061370786828701613337565b93505060206137188682870161322b565b925050604061372986828701613337565b9150509250925092565b6000806040838503121561374a576137496146e9565b5b600061375885828601613337565b925050602083013567ffffffffffffffff811115613779576137786146e4565b5b61378585828601613309565b9150509250929050565b600080604083850312156137a6576137a56146e9565b5b60006137b485828601613337565b92505060206137c585828601613337565b9150509250929050565b60006137db8383613d13565b60208301905092915050565b6137f081614495565b82525050565b600061380182614379565b61380b81856143a7565b935061381683614354565b8060005b8381101561384757815161382e88826137cf565b97506138398361439a565b92505060018101905061381a565b5085935050505092915050565b61385d816144a7565b82525050565b600061386e82614384565b61387881856143b8565b9350613888818560208601614518565b613891816146ee565b840191505092915050565b60006138a78261438f565b6138b181856143c9565b93506138c1818560208601614518565b6138ca816146ee565b840191505092915050565b60006138e08261438f565b6138ea81856143da565b93506138fa818560208601614518565b80840191505092915050565b600081546139138161454b565b61391d81866143da565b9450600182166000811461393857600181146139495761397c565b60ff1983168652818601935061397c565b61395285614364565b60005b8381101561397457815481890152600182019150602081019050613955565b838801955050505b50505092915050565b60006139926034836143c9565b915061399d8261470c565b604082019050919050565b60006139b5602f836143c9565b91506139c08261475b565b604082019050919050565b60006139d86028836143c9565b91506139e3826147aa565b604082019050919050565b60006139fb6014836143c9565b9150613a06826147f9565b602082019050919050565b6000613a1e6026836143c9565b9150613a2982614822565b604082019050919050565b6000613a416024836143c9565b9150613a4c82614871565b604082019050919050565b6000613a64602a836143c9565b9150613a6f826148c0565b604082019050919050565b6000613a87602d836143c9565b9150613a928261490f565b604082019050919050565b6000613aaa602a836143c9565b9150613ab58261495e565b604082019050919050565b6000613acd6034836143c9565b9150613ad8826149ad565b604082019050919050565b6000613af06010836143c9565b9150613afb826149fc565b602082019050919050565b6000613b136025836143c9565b9150613b1e82614a25565b604082019050919050565b6000613b366015836143c9565b9150613b4182614a74565b602082019050919050565b6000613b59603a836143c9565b9150613b6482614a9d565b604082019050919050565b6000613b7c6023836143c9565b9150613b8782614aec565b604082019050919050565b6000613b9f602a836143c9565b9150613baa82614b3b565b604082019050919050565b6000613bc26020836143c9565b9150613bcd82614b8a565b602082019050919050565b6000613be56028836143c9565b9150613bf082614bb3565b604082019050919050565b6000613c086029836143c9565b9150613c1382614c02565b604082019050919050565b6000613c2b6029836143c9565b9150613c3682614c51565b604082019050919050565b6000613c4e6030836143c9565b9150613c5982614ca0565b604082019050919050565b6000613c716028836143c9565b9150613c7c82614cef565b604082019050919050565b6000613c946021836143c9565b9150613c9f82614d3e565b604082019050919050565b6000613cb76027836143c9565b9150613cc282614d8d565b604082019050919050565b6000613cda6037836143c9565b9150613ce582614ddc565b604082019050919050565b6000613cfd6023836143c9565b9150613d0882614e2b565b604082019050919050565b613d1c816144ff565b82525050565b613d2b816144ff565b82525050565b6000613d3d8285613906565b9150613d4982846138d5565b91508190509392505050565b6000602082019050613d6a60008301846137e7565b92915050565b600060a082019050613d8560008301886137e7565b613d9260208301876137e7565b8181036040830152613da481866137f6565b90508181036060830152613db881856137f6565b90508181036080830152613dcc8184613863565b90509695505050505050565b600060a082019050613ded60008301886137e7565b613dfa60208301876137e7565b613e076040830186613d22565b613e146060830185613d22565b8181036080830152613e268184613863565b90509695505050505050565b6000604082019050613e4760008301856137e7565b613e546020830184613d22565b9392505050565b60006020820190508181036000830152613e7581846137f6565b905092915050565b60006040820190508181036000830152613e9781856137f6565b90508181036020830152613eab81846137f6565b90509392505050565b6000602082019050613ec96000830184613854565b92915050565b60006020820190508181036000830152613ee9818461389c565b905092915050565b60006020820190508181036000830152613f0a81613985565b9050919050565b60006020820190508181036000830152613f2a816139a8565b9050919050565b60006020820190508181036000830152613f4a816139cb565b9050919050565b60006020820190508181036000830152613f6a816139ee565b9050919050565b60006020820190508181036000830152613f8a81613a11565b9050919050565b60006020820190508181036000830152613faa81613a34565b9050919050565b60006020820190508181036000830152613fca81613a57565b9050919050565b60006020820190508181036000830152613fea81613a7a565b9050919050565b6000602082019050818103600083015261400a81613a9d565b9050919050565b6000602082019050818103600083015261402a81613ac0565b9050919050565b6000602082019050818103600083015261404a81613ae3565b9050919050565b6000602082019050818103600083015261406a81613b06565b9050919050565b6000602082019050818103600083015261408a81613b29565b9050919050565b600060208201905081810360008301526140aa81613b4c565b9050919050565b600060208201905081810360008301526140ca81613b6f565b9050919050565b600060208201905081810360008301526140ea81613b92565b9050919050565b6000602082019050818103600083015261410a81613bb5565b9050919050565b6000602082019050818103600083015261412a81613bd8565b9050919050565b6000602082019050818103600083015261414a81613bfb565b9050919050565b6000602082019050818103600083015261416a81613c1e565b9050919050565b6000602082019050818103600083015261418a81613c41565b9050919050565b600060208201905081810360008301526141aa81613c64565b9050919050565b600060208201905081810360008301526141ca81613c87565b9050919050565b600060208201905081810360008301526141ea81613caa565b9050919050565b6000602082019050818103600083015261420a81613ccd565b9050919050565b6000602082019050818103600083015261422a81613cf0565b9050919050565b60006020820190506142466000830184613d22565b92915050565b60006040820190506142616000830185613d22565b61426e6020830184613d22565b9392505050565b600061427f614290565b905061428b828261457d565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b5576142b4614684565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142e1576142e0614684565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561430d5761430c614684565b5b614316826146ee565b9050602081019050919050565b600067ffffffffffffffff82111561433e5761433d614684565b5b614347826146ee565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143f0826144ff565b91506143fb836144ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144305761442f6145f7565b5b828201905092915050565b6000614446826144ff565b9150614451836144ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448a576144896145f7565b5b828202905092915050565b60006144a0826144df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561453657808201518184015260208101905061451b565b83811115614545576000848401525b50505050565b6000600282049050600182168061456357607f821691505b6020821081141561457757614576614626565b5b50919050565b614586826146ee565b810181811067ffffffffffffffff821117156145a5576145a4614684565b5b80604052505050565b60006145b9826144ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145ec576145eb6145f7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146d25760046000803e6146cf6000516146ff565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520524547554c41522053455245554d20544f4b454e2043414e60008201527f204245204d494e54454400000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520554c54524120524152452053455245554d20544f4b454e2060008201527f43414e204245204d494e54454400000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920524152452053455245554d20544f4b454e73000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49442054595045205641524941424c450000000000000000000000600082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920554c54524120524152452053455245554d20544f4b454e73000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f59204845524f424f5820544f4b454e7300000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520524152452053455245554d20544f4b454e2043414e20424560008201527f204d494e54454400000000000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920524547554c41522053455245554d20544f4b454e73000000000000000000602082015250565b7f4e4f204d4f5245204845524f424f5820544f4b454e2043414e204245204d494e60008201527f5445440000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614e8a57614f0d565b614e92614290565b60043d036004823e80513d602482011167ffffffffffffffff82111715614eba575050614f0d565b808201805167ffffffffffffffff811115614ed85750505050614f0d565b80602083010160043d038501811115614ef5575050505050614f0d565b614f048260200185018661457d565b82955050505050505b90565b614f1981614495565b8114614f2457600080fd5b50565b614f30816144a7565b8114614f3b57600080fd5b50565b614f47816144b3565b8114614f5257600080fd5b50565b614f5e816144ff565b8114614f6957600080fd5b5056fea26469706673582212206c03a39ffdf15e635754106224b13fbc6e98bae057124b368b8e53835cf3aa7864736f6c63430008070033000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e5
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c8063715018a61161011a578063a9c7788d116100ad578063e985e9c51161007c578063e985e9c51461058f578063f242432a146105bf578063f2fde38b146105db578063f7d97577146105f7578063fc6d8bd514610613576101fa565b8063a9c7788d14610507578063bd85b03914610523578063d10d47eb14610553578063dd20d96d14610571576101fa565b8063862440e2116100e9578063862440e21461049357806388cc7e1d146104af5780638da5cb5b146104cd578063a22cb465146104eb576101fa565b8063715018a61461044557806377a154071461044f5780637b19b4e41461046d5780638456cb5914610489576101fa565b80634e1273f4116101925780635c975abb116101615780635c975abb146103bd578063638cd42d146103db5780636a210b531461040b5780636d56b2d614610427576101fa565b80634e1273f4146103215780634f558e791461035157806353ede1ba1461038157806358500a531461039f576101fa565b80631fdd2c66116101ce5780631fdd2c66146102ad57806321bdb140146102cb5780632eb2c2d6146102fb5780633f4ba83a14610317576101fa565b8062fdd58e146101ff57806301ffc9a71461022f5780630e4d7ad11461025f5780630e89341c1461027d575b600080fd5b61021960048036038101906102149190613574565b61062f565b6040516102269190614231565b60405180910390f35b6102496004803603810190610244919061362c565b6106f9565b6040516102569190613eb4565b60405180910390f35b6102676107db565b6040516102749190614231565b60405180910390f35b61029760048036038101906102929190613686565b6107e1565b6040516102a49190613ecf565b60405180910390f35b6102b56107f3565b6040516102c29190614231565b60405180910390f35b6102e560048036038101906102e09190613686565b6107f8565b6040516102f29190614231565b60405180910390f35b610315600480360381019061031091906133ce565b61086d565b005b61031f61090e565b005b61033b600480360381019061033691906135b4565b610920565b6040516103489190613e5b565b60405180910390f35b61036b60048036038101906103669190613686565b610a39565b6040516103789190613eb4565b60405180910390f35b610389610a4d565b6040516103969190614231565b60405180910390f35b6103a7610a52565b6040516103b49190614231565b60405180910390f35b6103c5610a58565b6040516103d29190613eb4565b60405180910390f35b6103f560048036038101906103f09190613361565b610a6e565b6040516104029190614231565b60405180910390f35b6104256004803603810190610420919061378f565b610a86565b005b61042f6111e1565b60405161043c9190614231565b60405180910390f35b61044d6111e7565b005b6104576111fb565b6040516104649190614231565b60405180910390f35b61048760048036038101906104829190613574565b611201565b005b6104916112a6565b005b6104ad60048036038101906104a89190613733565b6112b8565b005b6104b76112ce565b6040516104c49190614231565b60405180910390f35b6104d56112d4565b6040516104e29190613d55565b60405180910390f35b61050560048036038101906105009190613534565b6112fd565b005b610521600480360381019061051c9190613686565b611313565b005b61053d60048036038101906105389190613686565b6115db565b60405161054a9190614231565b60405180910390f35b61055b6115f8565b6040516105689190613d55565b60405180910390f35b61057961161c565b6040516105869190614231565b60405180910390f35b6105a960048036038101906105a4919061338e565b611622565b6040516105b69190613eb4565b60405180910390f35b6105d960048036038101906105d4919061349d565b6116b6565b005b6105f560048036038101906105f09190613361565b611757565b005b610611600480360381019061060c919061378f565b6117db565b005b61062d600480360381019061062891906136e0565b61189e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069790613ff1565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d38261199c565b5b9050919050565b6104e281565b60606107ec82611a06565b9050919050565b600a81565b6000808214806108085750600182145b806108135750600282145b8061081e5750600382145b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085490614071565b60405180910390fd5b610866826115db565b9050919050565b610875611aeb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108bb57506108ba856108b5611aeb565b611622565b5b6108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f190613f11565b60405180910390fd5b6109078585858585611af3565b5050505050565b610916611e18565b61091e611e96565b565b60608151835114610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90614151565b60405180910390fd5b6000835167ffffffffffffffff81111561098357610982614684565b5b6040519080825280602002602001820160405280156109b15781602001602082028036833780820191505090505b50905060005b8451811015610a2e576109fe8582815181106109d6576109d5614655565b5b60200260200101518583815181106109f1576109f0614655565b5b602002602001015161062f565b828281518110610a1157610a10614655565b5b60200260200101818152505080610a27906145ae565b90506109b7565b508091505092915050565b600080610a45836115db565b119050919050565b60f081565b60095481565b60008060149054906101000a900460ff16905090565b600b6020528060005260406000206000915090505481565b610a8e611ef8565b6001821480610a9d5750600282145b80610aa85750600382145b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90614071565b60405180910390fd5b6001811015610af557600080fd5b6001821415610d0d576000610b0a60016115db565b90506103e88282610b1b91906143e5565b1115610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613fb1565b60405180910390fd5b60007f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610bb79190613d55565b60206040518083038186803b158015610bcf57600080fd5b505afa158015610be3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0791906136b3565b905082670de0b6b3a7640000600854610c20919061443b565b610c2a919061443b565b811015610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c63906141f1565b60405180910390fd5b7f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600854610cb7919061443b565b6040518363ffffffff1660e01b8152600401610cd4929190613e32565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050505050611139565b6002821415610f24576000610d2260026115db565b905060f08282610d3291906143e5565b1115610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906141d1565b60405180910390fd5b60007f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610dce9190613d55565b60206040518083038186803b158015610de657600080fd5b505afa158015610dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1e91906136b3565b905082670de0b6b3a7640000600954610e37919061443b565b610e41919061443b565b811015610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90614011565b60405180910390fd5b7f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600954610ece919061443b565b6040518363ffffffff1660e01b8152600401610eeb929190613e32565b600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050505050611138565b6003821415611137576000610f3960036115db565b9050600a8282610f4991906143e5565b1115610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8190613fd1565b60405180910390fd5b60007f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fe59190613d55565b60206040518083038186803b158015610ffd57600080fd5b505afa158015611011573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103591906136b3565b905082670de0b6b3a7640000600a5461104e919061443b565b611058919061443b565b81101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614091565b60405180910390fd5b7f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385600a546110e5919061443b565b6040518363ffffffff1660e01b8152600401611102929190613e32565b600060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b5050505050505b5b5b61117a3383836040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611f42565b80600754611188919061443b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111d691906143e5565b925050819055505050565b60075481565b6111ef611e18565b6111f960006120f4565b565b600a5481565b611209611ef8565b611211611aeb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611257575061125682611251611aeb565b611622565b5b611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90613f11565b60405180910390fd5b6112a2826000836121b8565b5050565b6112ae611e18565b6112b6612401565b565b6112c0611e18565b6112ca8282612464565b5050565b6103e881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61130f611308611aeb565b83836124d0565b5050565b61131b611ef8565b600181101561132957600080fd5b600061133560006115db565b90506104e2828261134691906143e5565b1115611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90614211565b60405180910390fd5b60007f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113e29190613d55565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143291906136b3565b905082670de0b6b3a764000060075461144b919061443b565b611455919061443b565b811015611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614171565b60405180910390fd5b7f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e573ffffffffffffffffffffffffffffffffffffffff16639dc29fac33856007546114e2919061443b565b6040518363ffffffff1660e01b81526004016114ff929190613e32565b600060405180830381600087803b15801561151957600080fd5b505af115801561152d573d6000803e3d6000fd5b50505050611573336000856040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250611f42565b82600754611581919061443b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cf91906143e5565b92505081905550505050565b600060046000838152602001908152602001600020549050919050565b7f000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e581565b60085481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116be611aeb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117045750611703856116fe611aeb565b611622565b5b611743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173a90613f11565b60405180910390fd5b611750858585858561263d565b5050505050565b61175f611e18565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690613f71565b60405180910390fd5b6117d8816120f4565b50565b6117e3611e18565b60008214806117f25750600182145b806117fd5750600282145b806118085750600382145b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90614071565b60405180910390fd5b600082141561185c578060078190555061189a565b60018214156118715780600881905550611899565b60028214156118865780600981905550611898565b60038214156118975780600a819055505b5b5b5b5050565b6118a6611ef8565b6118ae611aeb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806118f457506118f3826118ee611aeb565b611622565b5b611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192a90613f11565b60405180910390fd5b60018314806119425750600283145b8061194d5750600383145b61198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390614071565b60405180910390fd5b6119978284836121b8565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000600660008481526020019081526020016000208054611a289061454b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a549061454b565b8015611aa15780601f10611a7657610100808354040283529160200191611aa1565b820191906000526020600020905b815481529060010190602001808311611a8457829003601f168201915b505050505090506000815111611abf57611aba836128dc565b611ae3565b600581604051602001611ad3929190613d31565b6040516020818303038152906040525b915050919050565b600033905090565b8151835114611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90614191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614051565b60405180910390fd5b6000611bb1611aeb565b9050611bc1818787878787612970565b60005b8451811015611d75576000858281518110611be257611be1614655565b5b602002602001015190506000858381518110611c0157611c00614655565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906140d1565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d5a91906143e5565b9250508190555050505080611d6e906145ae565b9050611bc4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611dec929190613e7d565b60405180910390a4611e0281878787878761298e565b611e10818787878787612996565b505050505050565b611e20611aeb565b73ffffffffffffffffffffffffffffffffffffffff16611e3e6112d4565b73ffffffffffffffffffffffffffffffffffffffff1614611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b906140f1565b60405180910390fd5b565b611e9e612b7d565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ee1611aeb565b604051611eee9190613d55565b60405180910390a1565b611f00610a58565b15611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790614031565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906141b1565b60405180910390fd5b6000611fbc611aeb565b90506000611fc985612bc6565b90506000611fd685612bc6565b9050611fe783600089858589612970565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461204791906143e5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516120c592919061424c565b60405180910390a46120dc8360008985858961298e565b6120eb83600089898989612c40565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f906140b1565b60405180910390fd5b6000612232611aeb565b9050600061223f84612bc6565b9050600061224c84612bc6565b905061226c83876000858560405180602001604052806000815250612970565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90613f91565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516123d292919061424c565b60405180910390a46123f88488600086866040518060200160405280600081525061298e565b50505050505050565b612409611ef8565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861244d611aeb565b60405161245a9190613d55565b60405180910390a1565b8060066000848152602001908152602001600020908051906020019061248b929190613024565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6124b7846107e1565b6040516124c49190613ecf565b60405180910390a25050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614131565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126309190613eb4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614051565b60405180910390fd5b60006126b7611aeb565b905060006126c485612bc6565b905060006126d185612bc6565b90506126e1838989858589612970565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906140d1565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283091906143e5565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516128ad92919061424c565b60405180910390a46128c3848a8a86868a61298e565b6128d1848a8a8a8a8a612c40565b505050505050505050565b6060600380546128eb9061454b565b80601f01602080910402602001604051908101604052809291908181526020018280546129179061454b565b80156129645780601f1061293957610100808354040283529160200191612964565b820191906000526020600020905b81548152906001019060200180831161294757829003601f168201915b50505050509050919050565b612978611ef8565b612986868686868686612e27565b505050505050565b505050505050565b6129b58473ffffffffffffffffffffffffffffffffffffffff16612ff9565b15612b75578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016129fb959493929190613d70565b602060405180830381600087803b158015612a1557600080fd5b505af1925050508015612a4657506040513d601f19601f82011682018060405250810190612a439190613659565b60015b612aec57612a526146b3565b806308c379a01415612aaf5750612a67614e7a565b80612a725750612ab1565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa69190613ecf565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390613ef1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6a90613f31565b60405180910390fd5b505b505050505050565b612b85610a58565b612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb90613f51565b60405180910390fd5b565b60606000600167ffffffffffffffff811115612be557612be4614684565b5b604051908082528060200260200182016040528015612c135781602001602082028036833780820191505090505b5090508281600081518110612c2b57612c2a614655565b5b60200260200101818152505080915050919050565b612c5f8473ffffffffffffffffffffffffffffffffffffffff16612ff9565b15612e1f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ca5959493929190613dd8565b602060405180830381600087803b158015612cbf57600080fd5b505af1925050508015612cf057506040513d601f19601f82011682018060405250810190612ced9190613659565b60015b612d9657612cfc6146b3565b806308c379a01415612d595750612d11614e7a565b80612d1c5750612d5b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d509190613ecf565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8d90613ef1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490613f31565b60405180910390fd5b505b505050505050565b612e3586868686868661301c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612ee75760005b8351811015612ee557828181518110612e8957612e88614655565b5b602002602001015160046000868481518110612ea857612ea7614655565b5b602002602001015181526020019081526020016000206000828254612ecd91906143e5565b9250508190555080612ede906145ae565b9050612e6d565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ff15760005b8351811015612fef576000848281518110612f3d57612f3c614655565b5b602002602001015190506000848381518110612f5c57612f5b614655565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614111565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080612fe8906145ae565b9050612f1f565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546130309061454b565b90600052602060002090601f0160209004810192826130525760008555613099565b82601f1061306b57805160ff1916838001178555613099565b82800160010185558215613099579182015b8281111561309857825182559160200191906001019061307d565b5b5090506130a691906130aa565b5090565b5b808211156130c35760008160009055506001016130ab565b5090565b60006130da6130d58461429a565b614275565b905080838252602082019050828560208602820111156130fd576130fc6146da565b5b60005b8581101561312d5781613113888261322b565b845260208401935060208301925050600181019050613100565b5050509392505050565b600061314a613145846142c6565b614275565b9050808382526020820190508285602086028201111561316d5761316c6146da565b5b60005b8581101561319d57816131838882613337565b845260208401935060208301925050600181019050613170565b5050509392505050565b60006131ba6131b5846142f2565b614275565b9050828152602081018484840111156131d6576131d56146df565b5b6131e1848285614509565b509392505050565b60006131fc6131f784614323565b614275565b905082815260208101848484011115613218576132176146df565b5b613223848285614509565b509392505050565b60008135905061323a81614f10565b92915050565b600082601f830112613255576132546146d5565b5b81356132658482602086016130c7565b91505092915050565b600082601f830112613283576132826146d5565b5b8135613293848260208601613137565b91505092915050565b6000813590506132ab81614f27565b92915050565b6000813590506132c081614f3e565b92915050565b6000815190506132d581614f3e565b92915050565b600082601f8301126132f0576132ef6146d5565b5b81356133008482602086016131a7565b91505092915050565b600082601f83011261331e5761331d6146d5565b5b813561332e8482602086016131e9565b91505092915050565b60008135905061334681614f55565b92915050565b60008151905061335b81614f55565b92915050565b600060208284031215613377576133766146e9565b5b60006133858482850161322b565b91505092915050565b600080604083850312156133a5576133a46146e9565b5b60006133b38582860161322b565b92505060206133c48582860161322b565b9150509250929050565b600080600080600060a086880312156133ea576133e96146e9565b5b60006133f88882890161322b565b95505060206134098882890161322b565b945050604086013567ffffffffffffffff81111561342a576134296146e4565b5b6134368882890161326e565b935050606086013567ffffffffffffffff811115613457576134566146e4565b5b6134638882890161326e565b925050608086013567ffffffffffffffff811115613484576134836146e4565b5b613490888289016132db565b9150509295509295909350565b600080600080600060a086880312156134b9576134b86146e9565b5b60006134c78882890161322b565b95505060206134d88882890161322b565b94505060406134e988828901613337565b93505060606134fa88828901613337565b925050608086013567ffffffffffffffff81111561351b5761351a6146e4565b5b613527888289016132db565b9150509295509295909350565b6000806040838503121561354b5761354a6146e9565b5b60006135598582860161322b565b925050602061356a8582860161329c565b9150509250929050565b6000806040838503121561358b5761358a6146e9565b5b60006135998582860161322b565b92505060206135aa85828601613337565b9150509250929050565b600080604083850312156135cb576135ca6146e9565b5b600083013567ffffffffffffffff8111156135e9576135e86146e4565b5b6135f585828601613240565b925050602083013567ffffffffffffffff811115613616576136156146e4565b5b6136228582860161326e565b9150509250929050565b600060208284031215613642576136416146e9565b5b6000613650848285016132b1565b91505092915050565b60006020828403121561366f5761366e6146e9565b5b600061367d848285016132c6565b91505092915050565b60006020828403121561369c5761369b6146e9565b5b60006136aa84828501613337565b91505092915050565b6000602082840312156136c9576136c86146e9565b5b60006136d78482850161334c565b91505092915050565b6000806000606084860312156136f9576136f86146e9565b5b600061370786828701613337565b93505060206137188682870161322b565b925050604061372986828701613337565b9150509250925092565b6000806040838503121561374a576137496146e9565b5b600061375885828601613337565b925050602083013567ffffffffffffffff811115613779576137786146e4565b5b61378585828601613309565b9150509250929050565b600080604083850312156137a6576137a56146e9565b5b60006137b485828601613337565b92505060206137c585828601613337565b9150509250929050565b60006137db8383613d13565b60208301905092915050565b6137f081614495565b82525050565b600061380182614379565b61380b81856143a7565b935061381683614354565b8060005b8381101561384757815161382e88826137cf565b97506138398361439a565b92505060018101905061381a565b5085935050505092915050565b61385d816144a7565b82525050565b600061386e82614384565b61387881856143b8565b9350613888818560208601614518565b613891816146ee565b840191505092915050565b60006138a78261438f565b6138b181856143c9565b93506138c1818560208601614518565b6138ca816146ee565b840191505092915050565b60006138e08261438f565b6138ea81856143da565b93506138fa818560208601614518565b80840191505092915050565b600081546139138161454b565b61391d81866143da565b9450600182166000811461393857600181146139495761397c565b60ff1983168652818601935061397c565b61395285614364565b60005b8381101561397457815481890152600182019150602081019050613955565b838801955050505b50505092915050565b60006139926034836143c9565b915061399d8261470c565b604082019050919050565b60006139b5602f836143c9565b91506139c08261475b565b604082019050919050565b60006139d86028836143c9565b91506139e3826147aa565b604082019050919050565b60006139fb6014836143c9565b9150613a06826147f9565b602082019050919050565b6000613a1e6026836143c9565b9150613a2982614822565b604082019050919050565b6000613a416024836143c9565b9150613a4c82614871565b604082019050919050565b6000613a64602a836143c9565b9150613a6f826148c0565b604082019050919050565b6000613a87602d836143c9565b9150613a928261490f565b604082019050919050565b6000613aaa602a836143c9565b9150613ab58261495e565b604082019050919050565b6000613acd6034836143c9565b9150613ad8826149ad565b604082019050919050565b6000613af06010836143c9565b9150613afb826149fc565b602082019050919050565b6000613b136025836143c9565b9150613b1e82614a25565b604082019050919050565b6000613b366015836143c9565b9150613b4182614a74565b602082019050919050565b6000613b59603a836143c9565b9150613b6482614a9d565b604082019050919050565b6000613b7c6023836143c9565b9150613b8782614aec565b604082019050919050565b6000613b9f602a836143c9565b9150613baa82614b3b565b604082019050919050565b6000613bc26020836143c9565b9150613bcd82614b8a565b602082019050919050565b6000613be56028836143c9565b9150613bf082614bb3565b604082019050919050565b6000613c086029836143c9565b9150613c1382614c02565b604082019050919050565b6000613c2b6029836143c9565b9150613c3682614c51565b604082019050919050565b6000613c4e6030836143c9565b9150613c5982614ca0565b604082019050919050565b6000613c716028836143c9565b9150613c7c82614cef565b604082019050919050565b6000613c946021836143c9565b9150613c9f82614d3e565b604082019050919050565b6000613cb76027836143c9565b9150613cc282614d8d565b604082019050919050565b6000613cda6037836143c9565b9150613ce582614ddc565b604082019050919050565b6000613cfd6023836143c9565b9150613d0882614e2b565b604082019050919050565b613d1c816144ff565b82525050565b613d2b816144ff565b82525050565b6000613d3d8285613906565b9150613d4982846138d5565b91508190509392505050565b6000602082019050613d6a60008301846137e7565b92915050565b600060a082019050613d8560008301886137e7565b613d9260208301876137e7565b8181036040830152613da481866137f6565b90508181036060830152613db881856137f6565b90508181036080830152613dcc8184613863565b90509695505050505050565b600060a082019050613ded60008301886137e7565b613dfa60208301876137e7565b613e076040830186613d22565b613e146060830185613d22565b8181036080830152613e268184613863565b90509695505050505050565b6000604082019050613e4760008301856137e7565b613e546020830184613d22565b9392505050565b60006020820190508181036000830152613e7581846137f6565b905092915050565b60006040820190508181036000830152613e9781856137f6565b90508181036020830152613eab81846137f6565b90509392505050565b6000602082019050613ec96000830184613854565b92915050565b60006020820190508181036000830152613ee9818461389c565b905092915050565b60006020820190508181036000830152613f0a81613985565b9050919050565b60006020820190508181036000830152613f2a816139a8565b9050919050565b60006020820190508181036000830152613f4a816139cb565b9050919050565b60006020820190508181036000830152613f6a816139ee565b9050919050565b60006020820190508181036000830152613f8a81613a11565b9050919050565b60006020820190508181036000830152613faa81613a34565b9050919050565b60006020820190508181036000830152613fca81613a57565b9050919050565b60006020820190508181036000830152613fea81613a7a565b9050919050565b6000602082019050818103600083015261400a81613a9d565b9050919050565b6000602082019050818103600083015261402a81613ac0565b9050919050565b6000602082019050818103600083015261404a81613ae3565b9050919050565b6000602082019050818103600083015261406a81613b06565b9050919050565b6000602082019050818103600083015261408a81613b29565b9050919050565b600060208201905081810360008301526140aa81613b4c565b9050919050565b600060208201905081810360008301526140ca81613b6f565b9050919050565b600060208201905081810360008301526140ea81613b92565b9050919050565b6000602082019050818103600083015261410a81613bb5565b9050919050565b6000602082019050818103600083015261412a81613bd8565b9050919050565b6000602082019050818103600083015261414a81613bfb565b9050919050565b6000602082019050818103600083015261416a81613c1e565b9050919050565b6000602082019050818103600083015261418a81613c41565b9050919050565b600060208201905081810360008301526141aa81613c64565b9050919050565b600060208201905081810360008301526141ca81613c87565b9050919050565b600060208201905081810360008301526141ea81613caa565b9050919050565b6000602082019050818103600083015261420a81613ccd565b9050919050565b6000602082019050818103600083015261422a81613cf0565b9050919050565b60006020820190506142466000830184613d22565b92915050565b60006040820190506142616000830185613d22565b61426e6020830184613d22565b9392505050565b600061427f614290565b905061428b828261457d565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b5576142b4614684565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142e1576142e0614684565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561430d5761430c614684565b5b614316826146ee565b9050602081019050919050565b600067ffffffffffffffff82111561433e5761433d614684565b5b614347826146ee565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143f0826144ff565b91506143fb836144ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144305761442f6145f7565b5b828201905092915050565b6000614446826144ff565b9150614451836144ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448a576144896145f7565b5b828202905092915050565b60006144a0826144df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561453657808201518184015260208101905061451b565b83811115614545576000848401525b50505050565b6000600282049050600182168061456357607f821691505b6020821081141561457757614576614626565b5b50919050565b614586826146ee565b810181811067ffffffffffffffff821117156145a5576145a4614684565b5b80604052505050565b60006145b9826144ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145ec576145eb6145f7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156146d25760046000803e6146cf6000516146ff565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520524547554c41522053455245554d20544f4b454e2043414e60008201527f204245204d494e54454400000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520554c54524120524152452053455245554d20544f4b454e2060008201527f43414e204245204d494e54454400000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920524152452053455245554d20544f4b454e73000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f494e56414c49442054595045205641524941424c450000000000000000000000600082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920554c54524120524152452053455245554d20544f4b454e73000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f59204845524f424f5820544f4b454e7300000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e4f204d4f524520524152452053455245554d20544f4b454e2043414e20424560008201527f204d494e54454400000000000000000000000000000000000000000000000000602082015250565b7f594f5520444f4e2754204841564520454e4f554748205452415820544f20425560008201527f5920524547554c41522053455245554d20544f4b454e73000000000000000000602082015250565b7f4e4f204d4f5245204845524f424f5820544f4b454e2043414e204245204d494e60008201527f5445440000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614e8a57614f0d565b614e92614290565b60043d036004823e80513d602482011167ffffffffffffffff82111715614eba575050614f0d565b808201805167ffffffffffffffff811115614ed85750505050614f0d565b80602083010160043d038501811115614ef5575050505050614f0d565b614f048260200185018661457d565b82955050505050505b90565b614f1981614495565b8114614f2457600080fd5b50565b614f30816144a7565b8114614f3b57600080fd5b50565b614f47816144b3565b8114614f5257600080fd5b50565b614f5e816144ff565b8114614f6957600080fd5b5056fea26469706673582212206c03a39ffdf15e635754106224b13fbc6e98bae057124b368b8e53835cf3aa7864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e5
-----Decoded View---------------
Arg [0] : _trax (address): 0xFeaf24248e04aC7Ad0Ea6e7e617182cfF429d4e5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000feaf24248e04ac7ad0ea6e7e617182cff429d4e5
Deployed Bytecode Sourcemap
38068:6193:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20080:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19599:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38195:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42808:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38345:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44013:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21810:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43200:65;;;:::i;:::-;;20405:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36778:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38296:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38488:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34432:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38585:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39516:2110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38398:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32518:103;;;:::i;:::-;;38533:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41634:335;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43131:61;;;:::i;:::-;;43004:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38243:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31870:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20974:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38835:673;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36657:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38152:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38440:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21169:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32776:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43499:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41977:472;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20080:317;20211:7;20277:1;20258:21;;:7;:21;;;;20236:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:9;:13;20377:2;20367:13;;;;;;;;;;;:22;20381:7;20367:22;;;;;;;;;;;;;;;;20360:29;;20080:317;;;;:::o;19599:360::-;19746:4;19803:26;19788:41;;;:11;:41;;;;:110;;;;19861:37;19846:52;;;:11;:52;;;;19788:110;:163;;;;19915:36;19939:11;19915:23;:36::i;:::-;19788:163;19768:183;;19599:360;;;:::o;38195:41::-;38232:4;38195:41;:::o;42808:188::-;42932:13;42970:18;42980:7;42970:9;:18::i;:::-;42963:25;;42808:188;;;:::o;38345:46::-;38389:2;38345:46;:::o;44013:245::-;44071:7;44122:1;44113:5;:10;:24;;;;44136:1;44127:5;:10;44113:24;:38;;;;44150:1;44141:5;:10;44113:38;:52;;;;44164:1;44155:5;:10;44113:52;44091:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;44232:18;44244:5;44232:11;:18::i;:::-;44225:25;;44013:245;;;:::o;21810:439::-;22051:12;:10;:12::i;:::-;22043:20;;:4;:20;;;:60;;;;22067:36;22084:4;22090:12;:10;:12::i;:::-;22067:16;:36::i;:::-;22043:60;22021:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:52;22212:4;22218:2;22222:3;22227:7;22236:4;22189:22;:52::i;:::-;21810:439;;;;;:::o;43200:65::-;31756:13;:11;:13::i;:::-;43247:10:::1;:8;:10::i;:::-;43200:65::o:0;20405:561::-;20561:16;20636:3;:10;20617:8;:15;:29;20595:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;20728:30;20775:8;:15;20761:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20728:63;;20809:9;20804:122;20828:8;:15;20824:1;:19;20804:122;;;20884:30;20894:8;20903:1;20894:11;;;;;;;;:::i;:::-;;;;;;;;20907:3;20911:1;20907:6;;;;;;;;:::i;:::-;;;;;;;;20884:9;:30::i;:::-;20865:13;20879:1;20865:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20845:3;;;;:::i;:::-;;;20804:122;;;;20945:13;20938:20;;;20405:561;;;;:::o;36778:122::-;36835:4;36891:1;36859:29;36885:2;36859:25;:29::i;:::-;:33;36852:40;;36778:122;;;:::o;38296:42::-;38335:3;38296:42;:::o;38488:38::-;;;;:::o;34432:86::-;34479:4;34503:7;;;;;;;;;;;34496:14;;34432:86;:::o;38585:45::-;;;;;;;;;;;;;;;;;:::o;39516:2110::-;34037:19;:17;:19::i;:::-;39629:1:::1;39620:5;:10;:24;;;;39643:1;39634:5;:10;39620:24;:38;;;;39657:1;39648:5;:10;39620:38;39598:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;39736:1;39726:6;:11;;39718:20;;;::::0;::::1;;39762:1;39753:5;:10;39749:1759;;;39780:26;39809:14;39821:1;39809:11;:14::i;:::-;39780:43;;38285:4;39886:6;39865:18;:27;;;;:::i;:::-;39864:48;;39838:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;40005:15;40030:9;40023:27;;;40051:10;40023:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40005:57;;40146:6;40136;40115:17;;:28;;;;:::i;:::-;:37;;;;:::i;:::-;40103:7;:50;;40077:167;;;;;;;;;;;;:::i;:::-;;;;;;;;;40266:9;40259:22;;;40282:10;40314:6;40294:17;;:26;;;;:::i;:::-;40259:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39765:568;;39749:1759;;;40352:1;40343:5;:10;40339:1169;;;40370:23;40396:14;40408:1;40396:11;:14::i;:::-;40370:40;;38335:3;40470:6;40452:15;:24;;;;:::i;:::-;40451:42;;40425:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;40583:15;40608:9;40601:27;;;40629:10;40601:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40583:57;;40721:6;40711;40693:14;;:25;;;;:::i;:::-;:34;;;;:::i;:::-;40681:7;:47;;40655:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;40838:9;40831:22;;;40854:10;40883:6;40866:14;;:23;;;;:::i;:::-;40831:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40355:547;;40339:1169;;;40921:1;40912:5;:10;40908:600;;;40939:28;40970:14;40982:1;40970:11;:14::i;:::-;40939:45;;38389:2;41049:6;41026:20;:29;;;;:::i;:::-;41025:52;;40999:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;41173:15;41198:9;41191:27;;;41219:10;41191:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41173:57;;41316:6;41306;41283:19;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;41271:7;:52;;41245:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;41439:9;41432:22;;;41455:10;41489:6;41467:19;;:28;;;;:::i;:::-;41432:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40924:584;;40908:600;40339:1169;39749:1759;41518:40;41524:10;41536:5;41543:6;41518:40;;;;;;;;;;;;;;;;::::0;:5:::1;:40::i;:::-;41611:6;41596:12;;:21;;;;:::i;:::-;41569:10;:22;41580:10;41569:22;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;39516:2110:::0;;:::o;38398:35::-;;;;:::o;32518:103::-;31756:13;:11;:13::i;:::-;32583:30:::1;32610:1;32583:18;:30::i;:::-;32518:103::o:0;38533:43::-;;;;:::o;41634:335::-;34037:19;:17;:19::i;:::-;41793:12:::1;:10;:12::i;:::-;41782:23;;:7;:23;;;:66;;;;41809:39;41826:7;41835:12;:10;:12::i;:::-;41809:16;:39::i;:::-;41782:66;41760:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;41936:25;41942:7;41951:1;41954:6;41936:5;:25::i;:::-;41634:335:::0;;:::o;43131:61::-;31756:13;:11;:13::i;:::-;43176:8:::1;:6;:8::i;:::-;43131:61::o:0;43004:119::-;31756:13;:11;:13::i;:::-;43089:26:::1;43097:7;43106:8;43089:7;:26::i;:::-;43004:119:::0;;:::o;38243:46::-;38285:4;38243:46;:::o;31870:87::-;31916:7;31943:6;;;;;;;;;;;31936:13;;31870:87;:::o;20974:187::-;21101:52;21120:12;:10;:12::i;:::-;21134:8;21144;21101:18;:52::i;:::-;20974:187;;:::o;38835:673::-;34037:19;:17;:19::i;:::-;38922:1:::1;38912:6;:11;;38904:20;;;::::0;::::1;;38935:18;38956:14;38968:1;38956:11;:14::i;:::-;38935:35;;38232:4;39017:6;39004:10;:19;;;;:::i;:::-;39003:35;;38981:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;39112:15;39137:9;39130:27;;;39158:10;39130:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39112:57;;39240:6;39230;39214:12;;:23;;;;:::i;:::-;:32;;;;:::i;:::-;39202:7;:45;;39180:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:9;39334:22;;;39357:10;39384:6;39369:12;;:21;;;;:::i;:::-;39334:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39404:36;39410:10;39422:1;39425:6;39404:36;;;;;;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;39493:6;39478:12;;:21;;;;:::i;:::-;39451:10;:22;39462:10;39451:22;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;38893:615;;38835:673:::0;:::o;36657:113::-;36719:7;36746:12;:16;36759:2;36746:16;;;;;;;;;;;;36739:23;;36657:113;;;:::o;38152:34::-;;;:::o;38440:41::-;;;;:::o;21169:218::-;21313:4;21342:18;:27;21361:7;21342:27;;;;;;;;;;;;;;;:37;21370:8;21342:37;;;;;;;;;;;;;;;;;;;;;;;;;21335:44;;21169:218;;;;:::o;21395:407::-;21611:12;:10;:12::i;:::-;21603:20;;:4;:20;;;:60;;;;21627:36;21644:4;21650:12;:10;:12::i;:::-;21627:16;:36::i;:::-;21603:60;21581:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;21749:45;21767:4;21773:2;21777;21781:6;21789:4;21749:17;:45::i;:::-;21395:407;;;;;:::o;32776:238::-;31756:13;:11;:13::i;:::-;32899:1:::1;32879:22;;:8;:22;;;;32857:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32978:28;32997:8;32978:18;:28::i;:::-;32776:238:::0;:::o;43499:506::-;31756:13;:11;:13::i;:::-;43607:1:::1;43598:5;:10;:24;;;;43621:1;43612:5;:10;43598:24;:38;;;;43635:1;43626:5;:10;43598:38;:52;;;;43649:1;43640:5;:10;43598:52;43576:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;43723:1;43714:5;:10;43710:288;;;43756:6;43741:12;:21;;;;43710:288;;;43793:1;43784:5;:10;43780:218;;;43831:6;43811:17;:26;;;;43780:218;;;43868:1;43859:5;:10;43855:143;;;43903:6;43886:14;:23;;;;43855:143;;;43940:1;43931:5;:10;43927:71;;;43980:6;43958:19;:28;;;;43927:71;43855:143;43780:218;43710:288;43499:506:::0;;:::o;41977:472::-;34037:19;:17;:19::i;:::-;42151:12:::1;:10;:12::i;:::-;42140:23;;:7;:23;;;:66;;;;42167:39;42184:7;42193:12;:10;:12::i;:::-;42167:16;:39::i;:::-;42140:66;42118:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;42323:1;42314:5;:10;:24;;;;42337:1;42328:5;:10;42314:24;:38;;;;42351:1;42342:5;:10;42314:38;42292:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;42412:29;42418:7;42427:5;42434:6;42412:5;:29::i;:::-;41977:472:::0;;;:::o;18697:207::-;18827:4;18871:25;18856:40;;;:11;:40;;;;18849:47;;18697:207;;;:::o;35659:448::-;35772:13;35803:22;35828:10;:19;35839:7;35828:19;;;;;;;;;;;35803:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35996:1;35977:8;35971:22;:26;:128;;36081:18;36091:7;36081:9;:18::i;:::-;35971:128;;;36041:8;36051;36024:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35971:128;35951:148;;;35659:448;;;:::o;18376:98::-;18429:7;18456:10;18449:17;;18376:98;:::o;23276:1321::-;23517:7;:14;23503:3;:10;:28;23481:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;23632:1;23618:16;;:2;:16;;;;23610:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23689:16;23708:12;:10;:12::i;:::-;23689:31;;23733:60;23754:8;23764:4;23770:2;23774:3;23779:7;23788:4;23733:20;:60::i;:::-;23811:9;23806:470;23830:3;:10;23826:1;:14;23806:470;;;23862:10;23875:3;23879:1;23875:6;;;;;;;;:::i;:::-;;;;;;;;23862:19;;23896:14;23913:7;23921:1;23913:10;;;;;;;;:::i;:::-;;;;;;;;23896:27;;23940:19;23962:9;:13;23972:2;23962:13;;;;;;;;;;;:19;23976:4;23962:19;;;;;;;;;;;;;;;;23940:41;;24037:6;24022:11;:21;;23996:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;24201:6;24187:11;:20;24165:9;:13;24175:2;24165:13;;;;;;;;;;;:19;24179:4;24165:19;;;;;;;;;;;;;;;:42;;;;24258:6;24237:9;:13;24247:2;24237:13;;;;;;;;;;;:17;24251:2;24237:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23847:429;;;23842:3;;;;:::i;:::-;;;23806:470;;;;24323:2;24293:47;;24317:4;24293:47;;24307:8;24293:47;;;24327:3;24332:7;24293:47;;;;;;;:::i;:::-;;;;;;;;24353:59;24373:8;24383:4;24389:2;24393:3;24398:7;24407:4;24353:19;:59::i;:::-;24425:164;24475:8;24498:4;24517:2;24534:3;24552:7;24574:4;24425:35;:164::i;:::-;23470:1127;23276:1321;;;;;:::o;32035:132::-;32110:12;:10;:12::i;:::-;32099:23;;:7;:5;:7::i;:::-;:23;;;32091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32035:132::o;35287:120::-;34296:16;:14;:16::i;:::-;35356:5:::1;35346:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;35377:22;35386:12;:10;:12::i;:::-;35377:22;;;;;;:::i;:::-;;;;;;;;35287:120::o:0;34591:108::-;34662:8;:6;:8::i;:::-;34661:9;34653:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34591:108::o;24701:818::-;24868:1;24854:16;;:2;:16;;;;24846:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24921:16;24940:12;:10;:12::i;:::-;24921:31;;24963:20;24986:21;25004:2;24986:17;:21::i;:::-;24963:44;;25018:24;25045:25;25063:6;25045:17;:25::i;:::-;25018:52;;25083:66;25104:8;25122:1;25126:2;25130:3;25135:7;25144:4;25083:20;:66::i;:::-;25183:6;25162:9;:13;25172:2;25162:13;;;;;;;;;;;:17;25176:2;25162:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25242:2;25205:52;;25238:1;25205:52;;25220:8;25205:52;;;25246:2;25250:6;25205:52;;;;;;;:::i;:::-;;;;;;;;25270:65;25290:8;25308:1;25312:2;25316:3;25321:7;25330:4;25270:19;:65::i;:::-;25348:163;25393:8;25424:1;25441:2;25458;25475:6;25496:4;25348:30;:163::i;:::-;24835:684;;;24701:818;;;;:::o;33174:191::-;33248:16;33267:6;;;;;;;;;;;33248:25;;33293:8;33284:6;;:17;;;;;;;;;;;;;;;;;;33348:8;33317:40;;33338:8;33317:40;;;;;;;;;;;;33237:128;33174:191;:::o;26474:808::-;26617:1;26601:18;;:4;:18;;;;26593:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26672:16;26691:12;:10;:12::i;:::-;26672:31;;26714:20;26737:21;26755:2;26737:17;:21::i;:::-;26714:44;;26769:24;26796:25;26814:6;26796:17;:25::i;:::-;26769:52;;26834:66;26855:8;26865:4;26879:1;26883:3;26888:7;26834:66;;;;;;;;;;;;:20;:66::i;:::-;26913:19;26935:9;:13;26945:2;26935:13;;;;;;;;;;;:19;26949:4;26935:19;;;;;;;;;;;;;;;;26913:41;;26988:6;26973:11;:21;;26965:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27107:6;27093:11;:20;27071:9;:13;27081:2;27071:13;;;;;;;;;;;:19;27085:4;27071:19;;;;;;;;;;;;;;;:42;;;;27181:1;27142:54;;27167:4;27142:54;;27157:8;27142:54;;;27185:2;27189:6;27142:54;;;;;;;:::i;:::-;;;;;;;;27209:65;27229:8;27239:4;27253:1;27257:3;27262:7;27209:65;;;;;;;;;;;;:19;:65::i;:::-;26582:700;;;;26474:808;;;:::o;35028:118::-;34037:19;:17;:19::i;:::-;35098:4:::1;35088:7;;:14;;;;;;;;;;;;;;;;;;35118:20;35125:12;:10;:12::i;:::-;35118:20;;;;;;:::i;:::-;;;;;;;;35028:118::o:0;36192:166::-;36300:8;36278:10;:19;36289:7;36278:19;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;36342:7;36324:26;36328:12;36332:7;36328:3;:12::i;:::-;36324:26;;;;;;:::i;:::-;;;;;;;;36192:166;;:::o;28353:331::-;28508:8;28499:17;;:5;:17;;;;28491:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28611:8;28573:18;:25;28592:5;28573:25;;;;;;;;;;;;;;;:35;28599:8;28573:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28657:8;28635:41;;28650:5;28635:41;;;28667:8;28635:41;;;;;;:::i;:::-;;;;;;;;28353:331;;;:::o;22257:1011::-;22459:1;22445:16;;:2;:16;;;;22437:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22516:16;22535:12;:10;:12::i;:::-;22516:31;;22558:20;22581:21;22599:2;22581:17;:21::i;:::-;22558:44;;22613:24;22640:25;22658:6;22640:17;:25::i;:::-;22613:52;;22678:60;22699:8;22709:4;22715:2;22719:3;22724:7;22733:4;22678:20;:60::i;:::-;22751:19;22773:9;:13;22783:2;22773:13;;;;;;;;;;;:19;22787:4;22773:19;;;;;;;;;;;;;;;;22751:41;;22840:6;22825:11;:21;;22803:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:6;22974:11;:20;22952:9;:13;22962:2;22952:13;;;;;;;;;;;:19;22966:4;22952:19;;;;;;;;;;;;;;;:42;;;;23037:6;23016:9;:13;23026:2;23016:13;;;;;;;;;;;:17;23030:2;23016:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23092:2;23061:46;;23086:4;23061:46;;23076:8;23061:46;;;23096:2;23100:6;23061:46;;;;;;;:::i;:::-;;;;;;;;23120:59;23140:8;23150:4;23156:2;23160:3;23165:7;23174:4;23120:19;:59::i;:::-;23192:68;23223:8;23233:4;23239:2;23243;23247:6;23255:4;23192:30;:68::i;:::-;22426:842;;;;22257:1011;;;;;:::o;19967:105::-;20027:13;20060:4;20053:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19967:105;;;:::o;42457:343::-;34037:19;:17;:19::i;:::-;42726:66:::1;42753:8;42763:4;42769:2;42773:3;42778:7;42787:4;42726:26;:66::i;:::-;42457:343:::0;;;;;;:::o;28921:220::-;;;;;;;:::o;30055:975::-;30295:15;:2;:13;;;:15::i;:::-;30291:732;;;30365:2;30348:43;;;30414:8;30445:4;30472:3;30498:7;30528:4;30348:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30327:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30885:6;30878:14;;;;;;;;;;;:::i;:::-;;;;;;;;30327:685;;;30934:62;;;;;;;;;;:::i;:::-;;;;;;;;30327:685;30648:48;;;30636:60;;;:8;:60;;;;30610:199;;30739:50;;;;;;;;;;:::i;:::-;;;;;;;;30610:199;30565:259;30291:732;30055:975;;;;;;:::o;34776:108::-;34843:8;:6;:8::i;:::-;34835:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34776:108::o;31038:230::-;31131:16;31165:22;31204:1;31190:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31165:41;;31228:7;31217:5;31223:1;31217:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;31255:5;31248:12;;;31038:230;;;:::o;29149:898::-;29364:15;:2;:13;;;:15::i;:::-;29360:680;;;29434:2;29417:38;;;29478:8;29509:4;29536:2;29561:6;29590:4;29417:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29396:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29902:6;29895:14;;;;;;;;;;;:::i;:::-;;;;;;;;29396:633;;;29951:62;;;;;;;;;;:::i;:::-;;;;;;;;29396:633;29688:43;;;29676:55;;;:8;:55;;;;29672:154;;29756:50;;;;;;;;;;:::i;:::-;;;;;;;;29672:154;29627:214;29360:680;29149:898;;;;;;:::o;36908:992::-;37147:66;37174:8;37184:4;37190:2;37194:3;37199:7;37208:4;37147:26;:66::i;:::-;37246:1;37230:18;;:4;:18;;;37226:160;;;37270:9;37265:110;37289:3;:10;37285:1;:14;37265:110;;;37349:7;37357:1;37349:10;;;;;;;;:::i;:::-;;;;;;;;37325:12;:20;37338:3;37342:1;37338:6;;;;;;;;:::i;:::-;;;;;;;;37325:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;37301:3;;;;:::i;:::-;;;37265:110;;;;37226:160;37416:1;37402:16;;:2;:16;;;37398:495;;;37440:9;37435:447;37459:3;:10;37455:1;:14;37435:447;;;37495:10;37508:3;37512:1;37508:6;;;;;;;;:::i;:::-;;;;;;;;37495:19;;37533:14;37550:7;37558:1;37550:10;;;;;;;;:::i;:::-;;;;;;;;37533:27;;37579:14;37596:12;:16;37609:2;37596:16;;;;;;;;;;;;37579:33;;37671:6;37661;:16;;37631:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;37841:6;37832;:15;37813:12;:16;37826:2;37813:16;;;;;;;;;;;:34;;;;37476:406;;;37471:3;;;;:::i;:::-;;;37435:447;;;;37398:495;36908:992;;;;;;:::o;8219:326::-;8279:4;8536:1;8514:7;:19;;;:23;8507:30;;8219:326;;;:::o;28692:221::-;;;;;;;:::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::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:143::-;4610:5;4641:6;4635:13;4626:22;;4657:33;4684:5;4657:33;:::i;:::-;4553:143;;;;:::o;4702:329::-;4761:6;4810:2;4798:9;4789:7;4785:23;4781:32;4778:119;;;4816:79;;:::i;:::-;4778:119;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;4702:329;;;;:::o;5037:474::-;5105:6;5113;5162:2;5150:9;5141:7;5137:23;5133:32;5130:119;;;5168:79;;:::i;:::-;5130:119;5288:1;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5259:117;5415:2;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5386:118;5037:474;;;;;:::o;5517:1509::-;5671:6;5679;5687;5695;5703;5752:3;5740:9;5731:7;5727:23;5723:33;5720:120;;;5759:79;;:::i;:::-;5720:120;5879:1;5904:53;5949:7;5940:6;5929:9;5925:22;5904:53;:::i;:::-;5894:63;;5850:117;6006:2;6032:53;6077:7;6068:6;6057:9;6053:22;6032:53;:::i;:::-;6022:63;;5977:118;6162:2;6151:9;6147:18;6134:32;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6320:78;6390:7;6381:6;6370:9;6366:22;6320:78;:::i;:::-;6310:88;;6105:303;6475:2;6464:9;6460:18;6447:32;6506:18;6498:6;6495:30;6492:117;;;6528:79;;:::i;:::-;6492:117;6633:78;6703:7;6694:6;6683:9;6679:22;6633:78;:::i;:::-;6623:88;;6418:303;6788:3;6777:9;6773:19;6760:33;6820:18;6812:6;6809:30;6806:117;;;6842:79;;:::i;:::-;6806:117;6947:62;7001:7;6992:6;6981:9;6977:22;6947:62;:::i;:::-;6937:72;;6731:288;5517:1509;;;;;;;;:::o;7032:1089::-;7136:6;7144;7152;7160;7168;7217:3;7205:9;7196:7;7192:23;7188:33;7185:120;;;7224:79;;:::i;:::-;7185:120;7344:1;7369:53;7414:7;7405:6;7394:9;7390:22;7369:53;:::i;:::-;7359:63;;7315:117;7471:2;7497:53;7542:7;7533:6;7522:9;7518:22;7497:53;:::i;:::-;7487:63;;7442:118;7599:2;7625:53;7670:7;7661:6;7650:9;7646:22;7625:53;:::i;:::-;7615:63;;7570:118;7727:2;7753:53;7798:7;7789:6;7778:9;7774:22;7753:53;:::i;:::-;7743:63;;7698:118;7883:3;7872:9;7868:19;7855:33;7915:18;7907:6;7904:30;7901:117;;;7937:79;;:::i;:::-;7901:117;8042:62;8096:7;8087:6;8076:9;8072:22;8042:62;:::i;:::-;8032:72;;7826:288;7032:1089;;;;;;;;:::o;8127:468::-;8192:6;8200;8249:2;8237:9;8228:7;8224:23;8220:32;8217:119;;;8255:79;;:::i;:::-;8217:119;8375:1;8400:53;8445:7;8436:6;8425:9;8421:22;8400:53;:::i;:::-;8390:63;;8346:117;8502:2;8528:50;8570:7;8561:6;8550:9;8546:22;8528:50;:::i;:::-;8518:60;;8473:115;8127:468;;;;;:::o;8601:474::-;8669:6;8677;8726:2;8714:9;8705:7;8701:23;8697:32;8694:119;;;8732:79;;:::i;:::-;8694:119;8852:1;8877:53;8922:7;8913:6;8902:9;8898:22;8877:53;:::i;:::-;8867:63;;8823:117;8979:2;9005:53;9050:7;9041:6;9030:9;9026:22;9005:53;:::i;:::-;8995:63;;8950:118;8601:474;;;;;:::o;9081:894::-;9199:6;9207;9256:2;9244:9;9235:7;9231:23;9227:32;9224:119;;;9262:79;;:::i;:::-;9224:119;9410:1;9399:9;9395:17;9382:31;9440:18;9432:6;9429:30;9426:117;;;9462:79;;:::i;:::-;9426:117;9567:78;9637:7;9628:6;9617:9;9613:22;9567:78;:::i;:::-;9557:88;;9353:302;9722:2;9711:9;9707:18;9694:32;9753:18;9745:6;9742:30;9739:117;;;9775:79;;:::i;:::-;9739:117;9880:78;9950:7;9941:6;9930:9;9926:22;9880:78;:::i;:::-;9870:88;;9665:303;9081:894;;;;;:::o;9981:327::-;10039:6;10088:2;10076:9;10067:7;10063:23;10059:32;10056:119;;;10094:79;;:::i;:::-;10056:119;10214:1;10239:52;10283:7;10274:6;10263:9;10259:22;10239:52;:::i;:::-;10229:62;;10185:116;9981:327;;;;:::o;10314:349::-;10383:6;10432:2;10420:9;10411:7;10407:23;10403:32;10400:119;;;10438:79;;:::i;:::-;10400:119;10558:1;10583:63;10638:7;10629:6;10618:9;10614:22;10583:63;:::i;:::-;10573:73;;10529:127;10314:349;;;;:::o;10669:329::-;10728:6;10777:2;10765:9;10756:7;10752:23;10748:32;10745:119;;;10783:79;;:::i;:::-;10745:119;10903:1;10928:53;10973:7;10964:6;10953:9;10949:22;10928:53;:::i;:::-;10918:63;;10874:117;10669:329;;;;:::o;11004:351::-;11074:6;11123:2;11111:9;11102:7;11098:23;11094:32;11091:119;;;11129:79;;:::i;:::-;11091:119;11249:1;11274:64;11330:7;11321:6;11310:9;11306:22;11274:64;:::i;:::-;11264:74;;11220:128;11004:351;;;;:::o;11361:619::-;11438:6;11446;11454;11503:2;11491:9;11482:7;11478:23;11474:32;11471:119;;;11509:79;;:::i;:::-;11471:119;11629:1;11654:53;11699:7;11690:6;11679:9;11675:22;11654:53;:::i;:::-;11644:63;;11600:117;11756:2;11782:53;11827:7;11818:6;11807:9;11803:22;11782:53;:::i;:::-;11772:63;;11727:118;11884:2;11910:53;11955:7;11946:6;11935:9;11931:22;11910:53;:::i;:::-;11900:63;;11855:118;11361:619;;;;;:::o;11986:654::-;12064:6;12072;12121:2;12109:9;12100:7;12096:23;12092:32;12089:119;;;12127:79;;:::i;:::-;12089:119;12247:1;12272:53;12317:7;12308:6;12297:9;12293:22;12272:53;:::i;:::-;12262:63;;12218:117;12402:2;12391:9;12387:18;12374:32;12433:18;12425:6;12422:30;12419:117;;;12455:79;;:::i;:::-;12419:117;12560:63;12615:7;12606:6;12595:9;12591:22;12560:63;:::i;:::-;12550:73;;12345:288;11986:654;;;;;:::o;12646:474::-;12714:6;12722;12771:2;12759:9;12750:7;12746:23;12742:32;12739:119;;;12777:79;;:::i;:::-;12739:119;12897:1;12922:53;12967:7;12958:6;12947:9;12943:22;12922:53;:::i;:::-;12912:63;;12868:117;13024:2;13050:53;13095:7;13086:6;13075:9;13071:22;13050:53;:::i;:::-;13040:63;;12995:118;12646:474;;;;;:::o;13126:179::-;13195:10;13216:46;13258:3;13250:6;13216:46;:::i;:::-;13294:4;13289:3;13285:14;13271:28;;13126:179;;;;:::o;13311:118::-;13398:24;13416:5;13398:24;:::i;:::-;13393:3;13386:37;13311:118;;:::o;13465:732::-;13584:3;13613:54;13661:5;13613:54;:::i;:::-;13683:86;13762:6;13757:3;13683:86;:::i;:::-;13676:93;;13793:56;13843:5;13793:56;:::i;:::-;13872:7;13903:1;13888:284;13913:6;13910:1;13907:13;13888:284;;;13989:6;13983:13;14016:63;14075:3;14060:13;14016:63;:::i;:::-;14009:70;;14102:60;14155:6;14102:60;:::i;:::-;14092:70;;13948:224;13935:1;13932;13928:9;13923:14;;13888:284;;;13892:14;14188:3;14181:10;;13589:608;;;13465:732;;;;:::o;14203:109::-;14284:21;14299:5;14284:21;:::i;:::-;14279:3;14272:34;14203:109;;:::o;14318:360::-;14404:3;14432:38;14464:5;14432:38;:::i;:::-;14486:70;14549:6;14544:3;14486:70;:::i;:::-;14479:77;;14565:52;14610:6;14605:3;14598:4;14591:5;14587:16;14565:52;:::i;:::-;14642:29;14664:6;14642:29;:::i;:::-;14637:3;14633:39;14626:46;;14408:270;14318:360;;;;:::o;14684:364::-;14772:3;14800:39;14833:5;14800:39;:::i;:::-;14855:71;14919:6;14914:3;14855:71;:::i;:::-;14848:78;;14935:52;14980:6;14975:3;14968:4;14961:5;14957:16;14935:52;:::i;:::-;15012:29;15034:6;15012:29;:::i;:::-;15007:3;15003:39;14996:46;;14776:272;14684:364;;;;:::o;15054:377::-;15160:3;15188:39;15221:5;15188:39;:::i;:::-;15243:89;15325:6;15320:3;15243:89;:::i;:::-;15236:96;;15341:52;15386:6;15381:3;15374:4;15367:5;15363:16;15341:52;:::i;:::-;15418:6;15413:3;15409:16;15402:23;;15164:267;15054:377;;;;:::o;15461:845::-;15564:3;15601:5;15595:12;15630:36;15656:9;15630:36;:::i;:::-;15682:89;15764:6;15759:3;15682:89;:::i;:::-;15675:96;;15802:1;15791:9;15787:17;15818:1;15813:137;;;;15964:1;15959:341;;;;15780:520;;15813:137;15897:4;15893:9;15882;15878:25;15873:3;15866:38;15933:6;15928:3;15924:16;15917:23;;15813:137;;15959:341;16026:38;16058:5;16026:38;:::i;:::-;16086:1;16100:154;16114:6;16111:1;16108:13;16100:154;;;16188:7;16182:14;16178:1;16173:3;16169:11;16162:35;16238:1;16229:7;16225:15;16214:26;;16136:4;16133:1;16129:12;16124:17;;16100:154;;;16283:6;16278:3;16274:16;16267:23;;15966:334;;15780:520;;15568:738;;15461:845;;;;:::o;16312:366::-;16454:3;16475:67;16539:2;16534:3;16475:67;:::i;:::-;16468:74;;16551:93;16640:3;16551:93;:::i;:::-;16669:2;16664:3;16660:12;16653:19;;16312:366;;;:::o;16684:::-;16826:3;16847:67;16911:2;16906:3;16847:67;:::i;:::-;16840:74;;16923:93;17012:3;16923:93;:::i;:::-;17041:2;17036:3;17032:12;17025:19;;16684:366;;;:::o;17056:::-;17198:3;17219:67;17283:2;17278:3;17219:67;:::i;:::-;17212:74;;17295:93;17384:3;17295:93;:::i;:::-;17413:2;17408:3;17404:12;17397:19;;17056:366;;;:::o;17428:::-;17570:3;17591:67;17655:2;17650:3;17591:67;:::i;:::-;17584:74;;17667:93;17756:3;17667:93;:::i;:::-;17785:2;17780:3;17776:12;17769:19;;17428:366;;;:::o;17800:::-;17942:3;17963:67;18027:2;18022:3;17963:67;:::i;:::-;17956:74;;18039:93;18128:3;18039:93;:::i;:::-;18157:2;18152:3;18148:12;18141:19;;17800:366;;;:::o;18172:::-;18314:3;18335:67;18399:2;18394:3;18335:67;:::i;:::-;18328:74;;18411:93;18500:3;18411:93;:::i;:::-;18529:2;18524:3;18520:12;18513:19;;18172:366;;;:::o;18544:::-;18686:3;18707:67;18771:2;18766:3;18707:67;:::i;:::-;18700:74;;18783:93;18872:3;18783:93;:::i;:::-;18901:2;18896:3;18892:12;18885:19;;18544:366;;;:::o;18916:::-;19058:3;19079:67;19143:2;19138:3;19079:67;:::i;:::-;19072:74;;19155:93;19244:3;19155:93;:::i;:::-;19273:2;19268:3;19264:12;19257:19;;18916:366;;;:::o;19288:::-;19430:3;19451:67;19515:2;19510:3;19451:67;:::i;:::-;19444:74;;19527:93;19616:3;19527:93;:::i;:::-;19645:2;19640:3;19636:12;19629:19;;19288:366;;;:::o;19660:::-;19802:3;19823:67;19887:2;19882:3;19823:67;:::i;:::-;19816:74;;19899:93;19988:3;19899:93;:::i;:::-;20017:2;20012:3;20008:12;20001:19;;19660:366;;;:::o;20032:::-;20174:3;20195:67;20259:2;20254:3;20195:67;:::i;:::-;20188:74;;20271:93;20360:3;20271:93;:::i;:::-;20389:2;20384:3;20380:12;20373:19;;20032:366;;;:::o;20404:::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:::-;20918:3;20939:67;21003:2;20998:3;20939:67;:::i;:::-;20932:74;;21015:93;21104:3;21015:93;:::i;:::-;21133:2;21128:3;21124:12;21117:19;;20776:366;;;:::o;21148:::-;21290:3;21311:67;21375:2;21370:3;21311:67;:::i;:::-;21304:74;;21387:93;21476:3;21387:93;:::i;:::-;21505:2;21500:3;21496:12;21489:19;;21148:366;;;:::o;21520:::-;21662:3;21683:67;21747:2;21742:3;21683:67;:::i;:::-;21676:74;;21759:93;21848:3;21759:93;:::i;:::-;21877:2;21872:3;21868:12;21861:19;;21520:366;;;:::o;21892:::-;22034:3;22055:67;22119:2;22114:3;22055:67;:::i;:::-;22048:74;;22131:93;22220:3;22131:93;:::i;:::-;22249:2;22244:3;22240:12;22233:19;;21892:366;;;:::o;22264:::-;22406:3;22427:67;22491:2;22486:3;22427:67;:::i;:::-;22420:74;;22503:93;22592:3;22503:93;:::i;:::-;22621:2;22616:3;22612:12;22605:19;;22264:366;;;:::o;22636:::-;22778:3;22799:67;22863:2;22858:3;22799:67;:::i;:::-;22792:74;;22875:93;22964:3;22875:93;:::i;:::-;22993:2;22988:3;22984:12;22977:19;;22636:366;;;:::o;23008:::-;23150:3;23171:67;23235:2;23230:3;23171:67;:::i;:::-;23164:74;;23247:93;23336:3;23247:93;:::i;:::-;23365:2;23360:3;23356:12;23349:19;;23008:366;;;:::o;23380:::-;23522:3;23543:67;23607:2;23602:3;23543:67;:::i;:::-;23536:74;;23619:93;23708:3;23619:93;:::i;:::-;23737:2;23732:3;23728:12;23721:19;;23380:366;;;:::o;23752:::-;23894:3;23915:67;23979:2;23974:3;23915:67;:::i;:::-;23908:74;;23991:93;24080:3;23991:93;:::i;:::-;24109:2;24104:3;24100:12;24093:19;;23752:366;;;:::o;24124:::-;24266:3;24287:67;24351:2;24346:3;24287:67;:::i;:::-;24280:74;;24363:93;24452:3;24363:93;:::i;:::-;24481:2;24476:3;24472:12;24465:19;;24124:366;;;:::o;24496:::-;24638:3;24659:67;24723:2;24718:3;24659:67;:::i;:::-;24652:74;;24735:93;24824:3;24735:93;:::i;:::-;24853:2;24848:3;24844:12;24837:19;;24496:366;;;:::o;24868:::-;25010:3;25031:67;25095:2;25090:3;25031:67;:::i;:::-;25024:74;;25107:93;25196:3;25107:93;:::i;:::-;25225:2;25220:3;25216:12;25209:19;;24868:366;;;:::o;25240:::-;25382:3;25403:67;25467:2;25462:3;25403:67;:::i;:::-;25396:74;;25479:93;25568:3;25479:93;:::i;:::-;25597:2;25592:3;25588:12;25581:19;;25240:366;;;:::o;25612:::-;25754:3;25775:67;25839:2;25834:3;25775:67;:::i;:::-;25768:74;;25851:93;25940:3;25851:93;:::i;:::-;25969:2;25964:3;25960:12;25953:19;;25612:366;;;:::o;25984:108::-;26061:24;26079:5;26061:24;:::i;:::-;26056:3;26049:37;25984:108;;:::o;26098:118::-;26185:24;26203:5;26185:24;:::i;:::-;26180:3;26173:37;26098:118;;:::o;26222:429::-;26399:3;26421:92;26509:3;26500:6;26421:92;:::i;:::-;26414:99;;26530:95;26621:3;26612:6;26530:95;:::i;:::-;26523:102;;26642:3;26635:10;;26222:429;;;;;:::o;26657:222::-;26750:4;26788:2;26777:9;26773:18;26765:26;;26801:71;26869:1;26858:9;26854:17;26845:6;26801:71;:::i;:::-;26657:222;;;;:::o;26885:1053::-;27208:4;27246:3;27235:9;27231:19;27223:27;;27260:71;27328:1;27317:9;27313:17;27304:6;27260:71;:::i;:::-;27341:72;27409:2;27398:9;27394:18;27385:6;27341:72;:::i;:::-;27460:9;27454:4;27450:20;27445:2;27434:9;27430:18;27423:48;27488:108;27591:4;27582:6;27488:108;:::i;:::-;27480:116;;27643:9;27637:4;27633:20;27628:2;27617:9;27613:18;27606:48;27671:108;27774:4;27765:6;27671:108;:::i;:::-;27663:116;;27827:9;27821:4;27817:20;27811:3;27800:9;27796:19;27789:49;27855:76;27926:4;27917:6;27855:76;:::i;:::-;27847:84;;26885:1053;;;;;;;;:::o;27944:751::-;28167:4;28205:3;28194:9;28190:19;28182:27;;28219:71;28287:1;28276:9;28272:17;28263:6;28219:71;:::i;:::-;28300:72;28368:2;28357:9;28353:18;28344:6;28300:72;:::i;:::-;28382;28450:2;28439:9;28435:18;28426:6;28382:72;:::i;:::-;28464;28532:2;28521:9;28517:18;28508:6;28464:72;:::i;:::-;28584:9;28578:4;28574:20;28568:3;28557:9;28553:19;28546:49;28612:76;28683:4;28674:6;28612:76;:::i;:::-;28604:84;;27944:751;;;;;;;;:::o;28701:332::-;28822:4;28860:2;28849:9;28845:18;28837:26;;28873:71;28941:1;28930:9;28926:17;28917:6;28873:71;:::i;:::-;28954:72;29022:2;29011:9;29007:18;28998:6;28954:72;:::i;:::-;28701:332;;;;;:::o;29039:373::-;29182:4;29220:2;29209:9;29205:18;29197:26;;29269:9;29263:4;29259:20;29255:1;29244:9;29240:17;29233:47;29297:108;29400:4;29391:6;29297:108;:::i;:::-;29289:116;;29039:373;;;;:::o;29418:634::-;29639:4;29677:2;29666:9;29662:18;29654:26;;29726:9;29720:4;29716:20;29712:1;29701:9;29697:17;29690:47;29754:108;29857:4;29848:6;29754:108;:::i;:::-;29746:116;;29909:9;29903:4;29899:20;29894:2;29883:9;29879:18;29872:48;29937:108;30040:4;30031:6;29937:108;:::i;:::-;29929:116;;29418:634;;;;;:::o;30058:210::-;30145:4;30183:2;30172:9;30168:18;30160:26;;30196:65;30258:1;30247:9;30243:17;30234:6;30196:65;:::i;:::-;30058:210;;;;:::o;30274:313::-;30387:4;30425:2;30414:9;30410:18;30402:26;;30474:9;30468:4;30464:20;30460:1;30449:9;30445:17;30438:47;30502:78;30575:4;30566:6;30502:78;:::i;:::-;30494:86;;30274:313;;;;:::o;30593:419::-;30759:4;30797:2;30786:9;30782:18;30774:26;;30846:9;30840:4;30836:20;30832:1;30821:9;30817:17;30810:47;30874:131;31000:4;30874:131;:::i;:::-;30866:139;;30593:419;;;:::o;31018:::-;31184:4;31222:2;31211:9;31207:18;31199:26;;31271:9;31265:4;31261:20;31257:1;31246:9;31242:17;31235:47;31299:131;31425:4;31299:131;:::i;:::-;31291:139;;31018:419;;;:::o;31443:::-;31609:4;31647:2;31636:9;31632:18;31624:26;;31696:9;31690:4;31686:20;31682:1;31671:9;31667:17;31660:47;31724:131;31850:4;31724:131;:::i;:::-;31716:139;;31443:419;;;:::o;31868:::-;32034:4;32072:2;32061:9;32057:18;32049:26;;32121:9;32115:4;32111:20;32107:1;32096:9;32092:17;32085:47;32149:131;32275:4;32149:131;:::i;:::-;32141:139;;31868:419;;;:::o;32293:::-;32459:4;32497:2;32486:9;32482:18;32474:26;;32546:9;32540:4;32536:20;32532:1;32521:9;32517:17;32510:47;32574:131;32700:4;32574:131;:::i;:::-;32566:139;;32293:419;;;:::o;32718:::-;32884:4;32922:2;32911:9;32907:18;32899:26;;32971:9;32965:4;32961:20;32957:1;32946:9;32942:17;32935:47;32999:131;33125:4;32999:131;:::i;:::-;32991:139;;32718:419;;;:::o;33143:::-;33309:4;33347:2;33336:9;33332:18;33324:26;;33396:9;33390:4;33386:20;33382:1;33371:9;33367:17;33360:47;33424:131;33550:4;33424:131;:::i;:::-;33416:139;;33143:419;;;:::o;33568:::-;33734:4;33772:2;33761:9;33757:18;33749:26;;33821:9;33815:4;33811:20;33807:1;33796:9;33792:17;33785:47;33849:131;33975:4;33849:131;:::i;:::-;33841:139;;33568:419;;;:::o;33993:::-;34159:4;34197:2;34186:9;34182:18;34174:26;;34246:9;34240:4;34236:20;34232:1;34221:9;34217:17;34210:47;34274:131;34400:4;34274:131;:::i;:::-;34266:139;;33993:419;;;:::o;34418:::-;34584:4;34622:2;34611:9;34607:18;34599:26;;34671:9;34665:4;34661:20;34657:1;34646:9;34642:17;34635:47;34699:131;34825:4;34699:131;:::i;:::-;34691:139;;34418:419;;;:::o;34843:::-;35009:4;35047:2;35036:9;35032:18;35024:26;;35096:9;35090:4;35086:20;35082:1;35071:9;35067:17;35060:47;35124:131;35250:4;35124:131;:::i;:::-;35116:139;;34843:419;;;:::o;35268:::-;35434:4;35472:2;35461:9;35457:18;35449:26;;35521:9;35515:4;35511:20;35507:1;35496:9;35492:17;35485:47;35549:131;35675:4;35549:131;:::i;:::-;35541:139;;35268:419;;;:::o;35693:::-;35859:4;35897:2;35886:9;35882:18;35874:26;;35946:9;35940:4;35936:20;35932:1;35921:9;35917:17;35910:47;35974:131;36100:4;35974:131;:::i;:::-;35966:139;;35693:419;;;:::o;36118:::-;36284:4;36322:2;36311:9;36307:18;36299:26;;36371:9;36365:4;36361:20;36357:1;36346:9;36342:17;36335:47;36399:131;36525:4;36399:131;:::i;:::-;36391:139;;36118:419;;;:::o;36543:::-;36709:4;36747:2;36736:9;36732:18;36724:26;;36796:9;36790:4;36786:20;36782:1;36771:9;36767:17;36760:47;36824:131;36950:4;36824:131;:::i;:::-;36816:139;;36543:419;;;:::o;36968:::-;37134:4;37172:2;37161:9;37157:18;37149:26;;37221:9;37215:4;37211:20;37207:1;37196:9;37192:17;37185:47;37249:131;37375:4;37249:131;:::i;:::-;37241:139;;36968:419;;;:::o;37393:::-;37559:4;37597:2;37586:9;37582:18;37574:26;;37646:9;37640:4;37636:20;37632:1;37621:9;37617:17;37610:47;37674:131;37800:4;37674:131;:::i;:::-;37666:139;;37393:419;;;:::o;37818:::-;37984:4;38022:2;38011:9;38007:18;37999:26;;38071:9;38065:4;38061:20;38057:1;38046:9;38042:17;38035:47;38099:131;38225:4;38099:131;:::i;:::-;38091:139;;37818:419;;;:::o;38243:::-;38409:4;38447:2;38436:9;38432:18;38424:26;;38496:9;38490:4;38486:20;38482:1;38471:9;38467:17;38460:47;38524:131;38650:4;38524:131;:::i;:::-;38516:139;;38243:419;;;:::o;38668:::-;38834:4;38872:2;38861:9;38857:18;38849:26;;38921:9;38915:4;38911:20;38907:1;38896:9;38892:17;38885:47;38949:131;39075:4;38949:131;:::i;:::-;38941:139;;38668:419;;;:::o;39093:::-;39259:4;39297:2;39286:9;39282:18;39274:26;;39346:9;39340:4;39336:20;39332:1;39321:9;39317:17;39310:47;39374:131;39500:4;39374:131;:::i;:::-;39366:139;;39093:419;;;:::o;39518:::-;39684:4;39722:2;39711:9;39707:18;39699:26;;39771:9;39765:4;39761:20;39757:1;39746:9;39742:17;39735:47;39799:131;39925:4;39799:131;:::i;:::-;39791:139;;39518:419;;;:::o;39943:::-;40109:4;40147:2;40136:9;40132:18;40124:26;;40196:9;40190:4;40186:20;40182:1;40171:9;40167:17;40160:47;40224:131;40350:4;40224:131;:::i;:::-;40216:139;;39943:419;;;:::o;40368:::-;40534:4;40572:2;40561:9;40557:18;40549:26;;40621:9;40615:4;40611:20;40607:1;40596:9;40592:17;40585:47;40649:131;40775:4;40649:131;:::i;:::-;40641:139;;40368:419;;;:::o;40793:::-;40959:4;40997:2;40986:9;40982:18;40974:26;;41046:9;41040:4;41036:20;41032:1;41021:9;41017:17;41010:47;41074:131;41200:4;41074:131;:::i;:::-;41066:139;;40793:419;;;:::o;41218:::-;41384:4;41422:2;41411:9;41407:18;41399:26;;41471:9;41465:4;41461:20;41457:1;41446:9;41442:17;41435:47;41499:131;41625:4;41499:131;:::i;:::-;41491:139;;41218:419;;;:::o;41643:222::-;41736:4;41774:2;41763:9;41759:18;41751:26;;41787:71;41855:1;41844:9;41840:17;41831:6;41787:71;:::i;:::-;41643:222;;;;:::o;41871:332::-;41992:4;42030:2;42019:9;42015:18;42007:26;;42043:71;42111:1;42100:9;42096:17;42087:6;42043:71;:::i;:::-;42124:72;42192:2;42181:9;42177:18;42168:6;42124:72;:::i;:::-;41871:332;;;;;:::o;42209:129::-;42243:6;42270:20;;:::i;:::-;42260:30;;42299:33;42327:4;42319:6;42299:33;:::i;:::-;42209:129;;;:::o;42344:75::-;42377:6;42410:2;42404:9;42394:19;;42344:75;:::o;42425:311::-;42502:4;42592:18;42584:6;42581:30;42578:56;;;42614:18;;:::i;:::-;42578:56;42664:4;42656:6;42652:17;42644:25;;42724:4;42718;42714:15;42706:23;;42425:311;;;:::o;42742:::-;42819:4;42909:18;42901:6;42898:30;42895:56;;;42931:18;;:::i;:::-;42895:56;42981:4;42973:6;42969:17;42961:25;;43041:4;43035;43031:15;43023:23;;42742:311;;;:::o;43059:307::-;43120:4;43210:18;43202:6;43199:30;43196:56;;;43232:18;;:::i;:::-;43196:56;43270:29;43292:6;43270:29;:::i;:::-;43262:37;;43354:4;43348;43344:15;43336:23;;43059:307;;;:::o;43372:308::-;43434:4;43524:18;43516:6;43513:30;43510:56;;;43546:18;;:::i;:::-;43510:56;43584:29;43606:6;43584:29;:::i;:::-;43576:37;;43668:4;43662;43658:15;43650:23;;43372:308;;;:::o;43686:132::-;43753:4;43776:3;43768:11;;43806:4;43801:3;43797:14;43789:22;;43686:132;;;:::o;43824:141::-;43873:4;43896:3;43888:11;;43919:3;43916:1;43909:14;43953:4;43950:1;43940:18;43932:26;;43824:141;;;:::o;43971:114::-;44038:6;44072:5;44066:12;44056:22;;43971:114;;;:::o;44091:98::-;44142:6;44176:5;44170:12;44160:22;;44091:98;;;:::o;44195:99::-;44247:6;44281:5;44275:12;44265:22;;44195:99;;;:::o;44300:113::-;44370:4;44402;44397:3;44393:14;44385:22;;44300:113;;;:::o;44419:184::-;44518:11;44552:6;44547:3;44540:19;44592:4;44587:3;44583:14;44568:29;;44419:184;;;;:::o;44609:168::-;44692:11;44726:6;44721:3;44714:19;44766:4;44761:3;44757:14;44742:29;;44609:168;;;;:::o;44783:169::-;44867:11;44901:6;44896:3;44889:19;44941:4;44936:3;44932:14;44917:29;;44783:169;;;;:::o;44958:148::-;45060:11;45097:3;45082:18;;44958:148;;;;:::o;45112:305::-;45152:3;45171:20;45189:1;45171:20;:::i;:::-;45166:25;;45205:20;45223:1;45205:20;:::i;:::-;45200:25;;45359:1;45291:66;45287:74;45284:1;45281:81;45278:107;;;45365:18;;:::i;:::-;45278:107;45409:1;45406;45402:9;45395:16;;45112:305;;;;:::o;45423:348::-;45463:7;45486:20;45504:1;45486:20;:::i;:::-;45481:25;;45520:20;45538:1;45520:20;:::i;:::-;45515:25;;45708:1;45640:66;45636:74;45633:1;45630:81;45625:1;45618:9;45611:17;45607:105;45604:131;;;45715:18;;:::i;:::-;45604:131;45763:1;45760;45756:9;45745:20;;45423:348;;;;:::o;45777:96::-;45814:7;45843:24;45861:5;45843:24;:::i;:::-;45832:35;;45777:96;;;:::o;45879:90::-;45913:7;45956:5;45949:13;45942:21;45931:32;;45879:90;;;:::o;45975:149::-;46011:7;46051:66;46044:5;46040:78;46029:89;;45975:149;;;:::o;46130:126::-;46167:7;46207:42;46200:5;46196:54;46185:65;;46130:126;;;:::o;46262:77::-;46299:7;46328:5;46317:16;;46262:77;;;:::o;46345:154::-;46429:6;46424:3;46419;46406:30;46491:1;46482:6;46477:3;46473:16;46466:27;46345:154;;;:::o;46505:307::-;46573:1;46583:113;46597:6;46594:1;46591:13;46583:113;;;46682:1;46677:3;46673:11;46667:18;46663:1;46658:3;46654:11;46647:39;46619:2;46616:1;46612:10;46607:15;;46583:113;;;46714:6;46711:1;46708:13;46705:101;;;46794:1;46785:6;46780:3;46776:16;46769:27;46705:101;46554:258;46505:307;;;:::o;46818:320::-;46862:6;46899:1;46893:4;46889:12;46879:22;;46946:1;46940:4;46936:12;46967:18;46957:81;;47023:4;47015:6;47011:17;47001:27;;46957:81;47085:2;47077:6;47074:14;47054:18;47051:38;47048:84;;;47104:18;;:::i;:::-;47048:84;46869:269;46818:320;;;:::o;47144:281::-;47227:27;47249:4;47227:27;:::i;:::-;47219:6;47215:40;47357:6;47345:10;47342:22;47321:18;47309:10;47306:34;47303:62;47300:88;;;47368:18;;:::i;:::-;47300:88;47408:10;47404:2;47397:22;47187:238;47144:281;;:::o;47431:233::-;47470:3;47493:24;47511:5;47493:24;:::i;:::-;47484:33;;47539:66;47532:5;47529:77;47526:103;;;47609:18;;:::i;:::-;47526:103;47656:1;47649:5;47645:13;47638:20;;47431:233;;;:::o;47670:180::-;47718:77;47715:1;47708:88;47815:4;47812:1;47805:15;47839:4;47836:1;47829:15;47856:180;47904:77;47901:1;47894:88;48001:4;47998:1;47991:15;48025:4;48022:1;48015:15;48042:180;48090:77;48087:1;48080:88;48187:4;48184:1;48177:15;48211:4;48208:1;48201:15;48228:180;48276:77;48273:1;48266:88;48373:4;48370:1;48363:15;48397:4;48394:1;48387:15;48414:183;48449:3;48487:1;48469:16;48466:23;48463:128;;;48525:1;48522;48519;48504:23;48547:34;48578:1;48572:8;48547:34;:::i;:::-;48540:41;;48463:128;48414:183;:::o;48603:117::-;48712:1;48709;48702:12;48726:117;48835:1;48832;48825:12;48849:117;48958:1;48955;48948:12;48972:117;49081:1;49078;49071:12;49095:117;49204:1;49201;49194:12;49218:102;49259:6;49310:2;49306:7;49301:2;49294:5;49290:14;49286:28;49276:38;;49218:102;;;:::o;49326:106::-;49370:8;49419:5;49414:3;49410:15;49389:36;;49326:106;;;:::o;49438:239::-;49578:34;49574:1;49566:6;49562:14;49555:58;49647:22;49642:2;49634:6;49630:15;49623:47;49438:239;:::o;49683:234::-;49823:34;49819:1;49811:6;49807:14;49800:58;49892:17;49887:2;49879:6;49875:15;49868:42;49683:234;:::o;49923:227::-;50063:34;50059:1;50051:6;50047:14;50040:58;50132:10;50127:2;50119:6;50115:15;50108:35;49923:227;:::o;50156:170::-;50296:22;50292:1;50284:6;50280:14;50273:46;50156:170;:::o;50332:225::-;50472:34;50468:1;50460:6;50456:14;50449:58;50541:8;50536:2;50528:6;50524:15;50517:33;50332:225;:::o;50563:223::-;50703:34;50699:1;50691:6;50687:14;50680:58;50772:6;50767:2;50759:6;50755:15;50748:31;50563:223;:::o;50792:229::-;50932:34;50928:1;50920:6;50916:14;50909:58;51001:12;50996:2;50988:6;50984:15;50977:37;50792:229;:::o;51027:232::-;51167:34;51163:1;51155:6;51151:14;51144:58;51236:15;51231:2;51223:6;51219:15;51212:40;51027:232;:::o;51265:229::-;51405:34;51401:1;51393:6;51389:14;51382:58;51474:12;51469:2;51461:6;51457:15;51450:37;51265:229;:::o;51500:239::-;51640:34;51636:1;51628:6;51624:14;51617:58;51709:22;51704:2;51696:6;51692:15;51685:47;51500:239;:::o;51745:166::-;51885:18;51881:1;51873:6;51869:14;51862:42;51745:166;:::o;51917:224::-;52057:34;52053:1;52045:6;52041:14;52034:58;52126:7;52121:2;52113:6;52109:15;52102:32;51917:224;:::o;52147:171::-;52287:23;52283:1;52275:6;52271:14;52264:47;52147:171;:::o;52324:245::-;52464:34;52460:1;52452:6;52448:14;52441:58;52533:28;52528:2;52520:6;52516:15;52509:53;52324:245;:::o;52575:222::-;52715:34;52711:1;52703:6;52699:14;52692:58;52784:5;52779:2;52771:6;52767:15;52760:30;52575:222;:::o;52803:229::-;52943:34;52939:1;52931:6;52927:14;52920:58;53012:12;53007:2;52999:6;52995:15;52988:37;52803:229;:::o;53038:182::-;53178:34;53174:1;53166:6;53162:14;53155:58;53038:182;:::o;53226:227::-;53366:34;53362:1;53354:6;53350:14;53343:58;53435:10;53430:2;53422:6;53418:15;53411:35;53226:227;:::o;53459:228::-;53599:34;53595:1;53587:6;53583:14;53576:58;53668:11;53663:2;53655:6;53651:15;53644:36;53459:228;:::o;53693:::-;53833:34;53829:1;53821:6;53817:14;53810:58;53902:11;53897:2;53889:6;53885:15;53878:36;53693:228;:::o;53927:235::-;54067:34;54063:1;54055:6;54051:14;54044:58;54136:18;54131:2;54123:6;54119:15;54112:43;53927:235;:::o;54168:227::-;54308:34;54304:1;54296:6;54292:14;54285:58;54377:10;54372:2;54364:6;54360:15;54353:35;54168:227;:::o;54401:220::-;54541:34;54537:1;54529:6;54525:14;54518:58;54610:3;54605:2;54597:6;54593:15;54586:28;54401:220;:::o;54627:226::-;54767:34;54763:1;54755:6;54751:14;54744:58;54836:9;54831:2;54823:6;54819:15;54812:34;54627:226;:::o;54859:242::-;54999:34;54995:1;54987:6;54983:14;54976:58;55068:25;55063:2;55055:6;55051:15;55044:50;54859:242;:::o;55107:222::-;55247:34;55243:1;55235:6;55231:14;55224:58;55316:5;55311:2;55303:6;55299:15;55292:30;55107:222;:::o;55335:711::-;55374:3;55412:4;55394:16;55391:26;55388:39;;;55420:5;;55388:39;55449:20;;:::i;:::-;55524:1;55506:16;55502:24;55499:1;55493:4;55478:49;55557:4;55551:11;55656:16;55649:4;55641:6;55637:17;55634:39;55601:18;55593:6;55590:30;55574:113;55571:146;;;55702:5;;;;55571:146;55748:6;55742:4;55738:17;55784:3;55778:10;55811:18;55803:6;55800:30;55797:43;;;55833:5;;;;;;55797:43;55881:6;55874:4;55869:3;55865:14;55861:27;55940:1;55922:16;55918:24;55912:4;55908:35;55903:3;55900:44;55897:57;;;55947:5;;;;;;;55897:57;55964;56012:6;56006:4;56002:17;55994:6;55990:30;55984:4;55964:57;:::i;:::-;56037:3;56030:10;;55378:668;;;;;55335:711;;:::o;56052:122::-;56125:24;56143:5;56125:24;:::i;:::-;56118:5;56115:35;56105:63;;56164:1;56161;56154:12;56105:63;56052:122;:::o;56180:116::-;56250:21;56265:5;56250:21;:::i;:::-;56243:5;56240:32;56230:60;;56286:1;56283;56276:12;56230:60;56180:116;:::o;56302:120::-;56374:23;56391:5;56374:23;:::i;:::-;56367:5;56364:34;56354:62;;56412:1;56409;56402:12;56354:62;56302:120;:::o;56428:122::-;56501:24;56519:5;56501:24;:::i;:::-;56494:5;56491:35;56481:63;;56540:1;56537;56530:12;56481:63;56428:122;:::o
Swarm Source
ipfs://6c03a39ffdf15e635754106224b13fbc6e98bae057124b368b8e53835cf3aa78
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.