Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 201 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13575423 | 1177 days ago | IN | 0 ETH | 0.00234945 | ||||
Token Mint | 13421592 | 1201 days ago | IN | 0 ETH | 0.01247397 | ||||
Token Mint | 13421453 | 1201 days ago | IN | 0 ETH | 0.01263526 | ||||
Token Mint | 13408810 | 1203 days ago | IN | 0 ETH | 0.01119999 | ||||
Token Mint | 13408381 | 1203 days ago | IN | 0 ETH | 0.01844999 | ||||
Token Mint | 13396685 | 1205 days ago | IN | 0 ETH | 0.01404217 | ||||
Token Mint | 13396669 | 1205 days ago | IN | 0 ETH | 0.01273312 | ||||
Token Mint | 13396635 | 1205 days ago | IN | 0 ETH | 0.01288105 | ||||
Token Mint | 13396605 | 1205 days ago | IN | 0 ETH | 0.01245112 | ||||
Token Mint | 13396589 | 1205 days ago | IN | 0 ETH | 0.01154917 | ||||
Token Mint | 13396586 | 1205 days ago | IN | 0 ETH | 0.01164408 | ||||
Token Mint | 13396578 | 1205 days ago | IN | 0 ETH | 0.01117162 | ||||
Token Mint | 13396547 | 1205 days ago | IN | 0 ETH | 0.01143153 | ||||
Token Mint | 13396527 | 1205 days ago | IN | 0 ETH | 0.01306929 | ||||
Token Mint | 13383970 | 1207 days ago | IN | 0 ETH | 0.00823275 | ||||
Token Mint | 13366042 | 1210 days ago | IN | 0 ETH | 0.01217984 | ||||
Token Mint | 13178011 | 1239 days ago | IN | 0 ETH | 0.01868253 | ||||
Token Mint | 13177550 | 1239 days ago | IN | 0 ETH | 0.01232668 | ||||
Token Mint | 13176217 | 1240 days ago | IN | 0 ETH | 0.01451087 | ||||
Safe Transfer Fr... | 13116006 | 1249 days ago | IN | 0 ETH | 0.00341223 | ||||
Safe Transfer Fr... | 13115933 | 1249 days ago | IN | 0 ETH | 0.00275676 | ||||
Safe Transfer Fr... | 13115559 | 1249 days ago | IN | 0 ETH | 0.00342462 | ||||
Safe Transfer Fr... | 13115427 | 1249 days ago | IN | 0 ETH | 0.0051491 | ||||
Safe Transfer Fr... | 13115390 | 1249 days ago | IN | 0 ETH | 0.00299699 | ||||
Safe Transfer Fr... | 13115177 | 1249 days ago | IN | 0 ETH | 0.00421026 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Infinity8
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-04 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT // SPDX-License-Identifier: Something Else pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. 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. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ // function renounceOwnership() public virtual onlyOwner { // emit OwnershipTransferred(_owner, address(0)); // _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI,Ownable { 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 () { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); _balances[id][from] = fromBalance - amount; _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); 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"); _balances[id][from] = fromBalance - amount; _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn(address account, uint256 id, uint256 amount) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); _balances[id][account] = accountBalance - amount; } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( 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(to).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(to).onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/GameItems.sol // contracts/GameItems.sol pragma solidity ^0.8.0; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol"; contract Infinity8 is ERC1155 { using Counters for Counters.Counter; Counters.Counter private _tokenIds; uint256[] private _lastGeneratedToken; mapping(uint256=>bool) private tokenCheck; mapping(uint256=>string) private tokenHash; mapping(uint256=>string) private tokenName; constructor() { } function TokenMint(address account,uint256 newItemId, uint256 amount, string memory metadata, string memory name) public onlyOwner returns (uint256){ require(!tokenCheck[newItemId],"TokenID already exists"); _mint(account,newItemId,amount,''); tokenCheck[newItemId] = true; tokenHash[newItemId] = metadata; tokenName[newItemId] = name; delete _lastGeneratedToken; _lastGeneratedToken.push(newItemId); return newItemId; } function getTokenName(uint256 newItemId) public view returns(string memory){ return tokenName[newItemId]; } function getTokenMetadataHash(uint256 newItemId) public view returns(string memory){ return tokenHash[newItemId]; } function TokenMintBatch(address account,uint256[] memory newItemId, uint256[] memory amounts, string[] memory metadata, string[] memory name) public onlyOwner returns (uint256[] memory){ uint256 _length= amounts.length; uint256[] memory arrIds = new uint256[](_length); delete _lastGeneratedToken; for(uint i = 0; i < amounts.length; i++){ require(!tokenCheck[newItemId[i]],"TokenID already exists"); arrIds[i]=newItemId[i]; tokenCheck[newItemId[i]] = true; tokenHash[newItemId[i]] = metadata[i]; tokenName[newItemId[i]] = name[i]; _lastGeneratedToken.push(newItemId[i]); } _mintBatch(account,arrIds,amounts, ''); return arrIds; } function TokenBurn(address account,uint256 id, uint256 amount) public onlyOwner returns (bool){ _burn(account,id,amount); return true; } function TokenBurnBatch(address account,uint256[] memory id, uint256[] memory amount) public onlyOwner returns (bool){ _burnBatch(account,id,amount); return true; } function lastGeneratedToken() public view returns (uint256[] memory){ return _lastGeneratedToken; } } library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"id","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"TokenBurnBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newItemId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"string","name":"name","type":"string"}],"name":"TokenMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"newItemId","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"string[]","name":"metadata","type":"string[]"},{"internalType":"string[]","name":"name","type":"string[]"}],"name":"TokenMintBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newItemId","type":"uint256"}],"name":"getTokenMetadataHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newItemId","type":"uint256"}],"name":"getTokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastGeneratedToken","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600062000024620000c860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620000d0565b600033905090565b61444180620000e06000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063837c5962116100a2578063dbe16c0711610071578063dbe16c0714610303578063e985e9c514610333578063f242432a14610363578063f2fde38b1461037f578063fe9e0b0c1461039b5761010a565b8063837c59621461027b5780638da5cb5b146102ab578063a22cb465146102c9578063d9056f9d146102e55761010a565b8063175c8d05116100de578063175c8d05146101cf578063231064df146101ff5780632eb2c2d61461022f5780634e1273f41461024b5761010a565b8062fdd58e1461010f57806301ffc9a71461013f5780630e89341c1461016f5780631080ff531461019f575b600080fd5b6101296004803603810190610124919061311c565b6103cb565b60405161013691906139fc565b60405180910390f35b610159600480360381019061015491906132ba565b610495565b60405161016691906137bf565b60405180910390f35b6101896004803603810190610184919061330c565b610577565b60405161019691906137da565b60405180910390f35b6101b960048036038101906101b49190612f8a565b61060b565b6040516101c691906137bf565b60405180910390f35b6101e960048036038101906101e491906131a7565b61069f565b6040516101f691906139fc565b60405180910390f35b61021960048036038101906102149190613009565b610858565b6040516102269190613766565b60405180910390f35b61024960048036038101906102449190612e3c565b610cf2565b005b6102656004803603810190610260919061324e565b6110eb565b6040516102729190613766565b60405180910390f35b6102956004803603810190610290919061330c565b61129c565b6040516102a291906137da565b60405180910390f35b6102b3611341565b6040516102c09190613689565b60405180910390f35b6102e360048036038101906102de91906130e0565b61136a565b005b6102ed6114eb565b6040516102fa9190613766565b60405180910390f35b61031d6004803603810190610318919061330c565b611543565b60405161032a91906137da565b60405180910390f35b61034d60048036038101906103489190612e00565b6115e8565b60405161035a91906137bf565b60405180910390f35b61037d60048036038101906103789190612efb565b61167c565b005b61039960048036038101906103949190612dd7565b611997565b005b6103b560048036038101906103b09190613158565b611b40565b6040516103c291906137bf565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104339061383c565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82611bd4565b5b9050919050565b60606003805461058690613cfc565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290613cfc565b80156105ff5780601f106105d4576101008083540402835291602001916105ff565b820191906000526020600020905b8154815290600101906020018083116105e257829003601f168201915b50505050509050919050565b6000610615611c3e565b73ffffffffffffffffffffffffffffffffffffffff16610633611341565b73ffffffffffffffffffffffffffffffffffffffff1614610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061395c565b60405180910390fd5b610694848484611c46565b600190509392505050565b60006106a9611c3e565b73ffffffffffffffffffffffffffffffffffffffff166106c7611341565b73ffffffffffffffffffffffffffffffffffffffff161461071d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107149061395c565b60405180910390fd5b6006600086815260200190815260200160002060009054906101000a900460ff161561077e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107759061385c565b60405180910390fd5b61079986868660405180602001604052806000815250611f4e565b60016006600087815260200190815260200160002060006101000a81548160ff021916908315150217905550826007600087815260200190815260200160002090805190602001906107ec929190612a27565b5081600860008781526020019081526020016000209080519060200190610814929190612a27565b50600560006108239190612aad565b600585908060018154018082558091505060019003906000526020600020016000909190919091505584905095945050505050565b6060610862611c3e565b73ffffffffffffffffffffffffffffffffffffffff16610880611341565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd9061395c565b60405180910390fd5b60008451905060008167ffffffffffffffff81111561091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561094c5781602001602082028036833780820191505090505b5090506005600061095d9190612aad565b60005b8651811015610cc857600660008983815181106109a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061385c565b60405180910390fd5b878181518110610a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151828281518110610a84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001600660008a8481518110610acf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550858181518110610b35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600760008a8481518110610b7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000209080519060200190610ba3929190612a27565b50848181518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600860008a8481518110610c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000209080519060200190610c4b929190612a27565b506005888281518110610c87577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150558080610cc090613d5f565b915050610960565b50610ce4888288604051806020016040528060008152506120e5565b809250505095945050505050565b8151835114610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d906139bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d906138dc565b60405180910390fd5b610dae611c3e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610df45750610df385610dee611c3e565b6115e8565b5b610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906138fc565b60405180910390fd5b6000610e3d611c3e565b9050610e4d818787878787612350565b60005b8451811015611056576000858281518110610e94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610ed9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f729061393c565b60405180910390fd5b8181610f879190613c12565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461103b9190613bbc565b925050819055505050508061104f90613d5f565b9050610e50565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110cd929190613788565b60405180910390a46110e3818787878787612358565b505050505050565b60608151835114611131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111289061399c565b60405180910390fd5b6000835167ffffffffffffffff811115611174577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111a25781602001602082028036833780820191505090505b50905060005b84518110156112915761123b8582815181106111ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061122e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103cb565b828281518110611274577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061128a90613d5f565b90506111a8565b508091505092915050565b60606007600083815260200190815260200160002080546112bc90613cfc565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890613cfc565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b50505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16611389611c3e565b73ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d79061397c565b60405180910390fd5b80600260006113ed611c3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149a611c3e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114df91906137bf565b60405180910390a35050565b6060600580548060200260200160405190810160405280929190818152602001828054801561153957602002820191906000526020600020905b815481526020019060010190808311611525575b5050505050905090565b606060086000838152602001908152602001600020805461156390613cfc565b80601f016020809104026020016040519081016040528092919081815260200182805461158f90613cfc565b80156115dc5780601f106115b1576101008083540402835291602001916115dc565b820191906000526020600020905b8154815290600101906020018083116115bf57829003601f168201915b50505050509050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906138dc565b60405180910390fd5b6116f4611c3e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061173a575061173985611734611c3e565b6115e8565b5b611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906138bc565b60405180910390fd5b6000611783611c3e565b90506117a38187876117948861253f565b61179d8861253f565b87612350565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561183b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329061393c565b60405180910390fd5b83816118479190613c12565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118fb9190613bbc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611978929190613a17565b60405180910390a461198e828888888888612605565b50505050505050565b61199f611c3e565b73ffffffffffffffffffffffffffffffffffffffff166119bd611341565b73ffffffffffffffffffffffffffffffffffffffff1614611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a9061395c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a9061387c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611b4a611c3e565b73ffffffffffffffffffffffffffffffffffffffff16611b68611341565b73ffffffffffffffffffffffffffffffffffffffff1614611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb59061395c565b60405180910390fd5b611bc98484846127ec565b600190509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad9061391c565b60405180910390fd5b8051825114611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906139bc565b60405180910390fd5b6000611d04611c3e565b9050611d2481856000868660405180602001604052806000815250612350565b60005b8351811015611ec8576000848281518110611d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611db0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499061389c565b60405180910390fd5b8181611e5e9190613c12565b6001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611ec090613d5f565b915050611d27565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611f40929190613788565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb5906139dc565b60405180910390fd5b6000611fc8611c3e565b9050611fe981600087611fda8861253f565b611fe38861253f565b87612350565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613bbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516120c7929190613a17565b60405180910390a46120de81600087878787612605565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906139dc565b60405180910390fd5b8151835114612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906139bc565b60405180910390fd5b60006121a3611c3e565b90506121b481600087878787612350565b60005b84518110156122ba578381815181106121f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001600087848151811061223e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a09190613bbc565b9250508190555080806122b290613d5f565b9150506121b7565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612332929190613788565b60405180910390a461234981600087878787612358565b5050505050565b505050505050565b6123778473ffffffffffffffffffffffffffffffffffffffff16612a14565b15612537578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123bd9594939291906136a4565b602060405180830381600087803b1580156123d757600080fd5b505af192505050801561240857506040513d601f19601f8201168201806040525081019061240591906132e3565b60015b6124ae57612414613e35565b806308c379a014156124715750612429614319565b806124345750612473565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246891906137da565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a5906137fc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c9061381c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612584577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125b25781602001602082028036833780820191505090505b50905082816000815181106125f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6126248473ffffffffffffffffffffffffffffffffffffffff16612a14565b156127e4578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161266a95949392919061370c565b602060405180830381600087803b15801561268457600080fd5b505af19250505080156126b557506040513d601f19601f820116820180604052508101906126b291906132e3565b60015b61275b576126c1613e35565b806308c379a0141561271e57506126d6614319565b806126e15750612720565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271591906137da565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612752906137fc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061381c565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128539061391c565b60405180910390fd5b6000612866611c3e565b9050612896818560006128788761253f565b6128818761253f565b60405180602001604052806000815250612350565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561292e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129259061389c565b60405180910390fd5b828161293a9190613c12565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612a05929190613a17565b60405180910390a45050505050565b600080823b905060008111915050919050565b828054612a3390613cfc565b90600052602060002090601f016020900481019282612a555760008555612a9c565b82601f10612a6e57805160ff1916838001178555612a9c565b82800160010185558215612a9c579182015b82811115612a9b578251825591602001919060010190612a80565b5b509050612aa99190612ace565b5090565b5080546000825590600052602060002090810190612acb9190612ace565b50565b5b80821115612ae7576000816000905550600101612acf565b5090565b6000612afe612af984613a65565b613a40565b90508083825260208201905082856020860282011115612b1d57600080fd5b60005b85811015612b4d5781612b338882612c9c565b845260208401935060208301925050600181019050612b20565b5050509392505050565b6000612b6a612b6584613a91565b613a40565b9050808382526020820190508260005b85811015612baa5781358501612b908882612d98565b845260208401935060208301925050600181019050612b7a565b5050509392505050565b6000612bc7612bc284613abd565b613a40565b90508083825260208201905082856020860282011115612be657600080fd5b60005b85811015612c165781612bfc8882612dc2565b845260208401935060208301925050600181019050612be9565b5050509392505050565b6000612c33612c2e84613ae9565b613a40565b905082815260208101848484011115612c4b57600080fd5b612c56848285613cba565b509392505050565b6000612c71612c6c84613b1a565b613a40565b905082815260208101848484011115612c8957600080fd5b612c94848285613cba565b509392505050565b600081359050612cab816143af565b92915050565b600082601f830112612cc257600080fd5b8135612cd2848260208601612aeb565b91505092915050565b600082601f830112612cec57600080fd5b8135612cfc848260208601612b57565b91505092915050565b600082601f830112612d1657600080fd5b8135612d26848260208601612bb4565b91505092915050565b600081359050612d3e816143c6565b92915050565b600081359050612d53816143dd565b92915050565b600081519050612d68816143dd565b92915050565b600082601f830112612d7f57600080fd5b8135612d8f848260208601612c20565b91505092915050565b600082601f830112612da957600080fd5b8135612db9848260208601612c5e565b91505092915050565b600081359050612dd1816143f4565b92915050565b600060208284031215612de957600080fd5b6000612df784828501612c9c565b91505092915050565b60008060408385031215612e1357600080fd5b6000612e2185828601612c9c565b9250506020612e3285828601612c9c565b9150509250929050565b600080600080600060a08688031215612e5457600080fd5b6000612e6288828901612c9c565b9550506020612e7388828901612c9c565b945050604086013567ffffffffffffffff811115612e9057600080fd5b612e9c88828901612d05565b935050606086013567ffffffffffffffff811115612eb957600080fd5b612ec588828901612d05565b925050608086013567ffffffffffffffff811115612ee257600080fd5b612eee88828901612d6e565b9150509295509295909350565b600080600080600060a08688031215612f1357600080fd5b6000612f2188828901612c9c565b9550506020612f3288828901612c9c565b9450506040612f4388828901612dc2565b9350506060612f5488828901612dc2565b925050608086013567ffffffffffffffff811115612f7157600080fd5b612f7d88828901612d6e565b9150509295509295909350565b600080600060608486031215612f9f57600080fd5b6000612fad86828701612c9c565b935050602084013567ffffffffffffffff811115612fca57600080fd5b612fd686828701612d05565b925050604084013567ffffffffffffffff811115612ff357600080fd5b612fff86828701612d05565b9150509250925092565b600080600080600060a0868803121561302157600080fd5b600061302f88828901612c9c565b955050602086013567ffffffffffffffff81111561304c57600080fd5b61305888828901612d05565b945050604086013567ffffffffffffffff81111561307557600080fd5b61308188828901612d05565b935050606086013567ffffffffffffffff81111561309e57600080fd5b6130aa88828901612cdb565b925050608086013567ffffffffffffffff8111156130c757600080fd5b6130d388828901612cdb565b9150509295509295909350565b600080604083850312156130f357600080fd5b600061310185828601612c9c565b925050602061311285828601612d2f565b9150509250929050565b6000806040838503121561312f57600080fd5b600061313d85828601612c9c565b925050602061314e85828601612dc2565b9150509250929050565b60008060006060848603121561316d57600080fd5b600061317b86828701612c9c565b935050602061318c86828701612dc2565b925050604061319d86828701612dc2565b9150509250925092565b600080600080600060a086880312156131bf57600080fd5b60006131cd88828901612c9c565b95505060206131de88828901612dc2565b94505060406131ef88828901612dc2565b935050606086013567ffffffffffffffff81111561320c57600080fd5b61321888828901612d98565b925050608086013567ffffffffffffffff81111561323557600080fd5b61324188828901612d98565b9150509295509295909350565b6000806040838503121561326157600080fd5b600083013567ffffffffffffffff81111561327b57600080fd5b61328785828601612cb1565b925050602083013567ffffffffffffffff8111156132a457600080fd5b6132b085828601612d05565b9150509250929050565b6000602082840312156132cc57600080fd5b60006132da84828501612d44565b91505092915050565b6000602082840312156132f557600080fd5b600061330384828501612d59565b91505092915050565b60006020828403121561331e57600080fd5b600061332c84828501612dc2565b91505092915050565b6000613341838361366b565b60208301905092915050565b61335681613c46565b82525050565b600061336782613b5b565b6133718185613b89565b935061337c83613b4b565b8060005b838110156133ad5781516133948882613335565b975061339f83613b7c565b925050600181019050613380565b5085935050505092915050565b6133c381613c58565b82525050565b60006133d482613b66565b6133de8185613b9a565b93506133ee818560208601613cc9565b6133f781613e57565b840191505092915050565b600061340d82613b71565b6134178185613bab565b9350613427818560208601613cc9565b61343081613e57565b840191505092915050565b6000613448603483613bab565b915061345382613e75565b604082019050919050565b600061346b602883613bab565b915061347682613ec4565b604082019050919050565b600061348e602b83613bab565b915061349982613f13565b604082019050919050565b60006134b1601683613bab565b91506134bc82613f62565b602082019050919050565b60006134d4602683613bab565b91506134df82613f8b565b604082019050919050565b60006134f7602483613bab565b915061350282613fda565b604082019050919050565b600061351a602983613bab565b915061352582614029565b604082019050919050565b600061353d602583613bab565b915061354882614078565b604082019050919050565b6000613560603283613bab565b915061356b826140c7565b604082019050919050565b6000613583602383613bab565b915061358e82614116565b604082019050919050565b60006135a6602a83613bab565b91506135b182614165565b604082019050919050565b60006135c9602083613bab565b91506135d4826141b4565b602082019050919050565b60006135ec602983613bab565b91506135f7826141dd565b604082019050919050565b600061360f602983613bab565b915061361a8261422c565b604082019050919050565b6000613632602883613bab565b915061363d8261427b565b604082019050919050565b6000613655602183613bab565b9150613660826142ca565b604082019050919050565b61367481613cb0565b82525050565b61368381613cb0565b82525050565b600060208201905061369e600083018461334d565b92915050565b600060a0820190506136b9600083018861334d565b6136c6602083018761334d565b81810360408301526136d8818661335c565b905081810360608301526136ec818561335c565b9050818103608083015261370081846133c9565b90509695505050505050565b600060a082019050613721600083018861334d565b61372e602083018761334d565b61373b604083018661367a565b613748606083018561367a565b818103608083015261375a81846133c9565b90509695505050505050565b60006020820190508181036000830152613780818461335c565b905092915050565b600060408201905081810360008301526137a2818561335c565b905081810360208301526137b6818461335c565b90509392505050565b60006020820190506137d460008301846133ba565b92915050565b600060208201905081810360008301526137f48184613402565b905092915050565b600060208201905081810360008301526138158161343b565b9050919050565b600060208201905081810360008301526138358161345e565b9050919050565b6000602082019050818103600083015261385581613481565b9050919050565b60006020820190508181036000830152613875816134a4565b9050919050565b60006020820190508181036000830152613895816134c7565b9050919050565b600060208201905081810360008301526138b5816134ea565b9050919050565b600060208201905081810360008301526138d58161350d565b9050919050565b600060208201905081810360008301526138f581613530565b9050919050565b6000602082019050818103600083015261391581613553565b9050919050565b6000602082019050818103600083015261393581613576565b9050919050565b6000602082019050818103600083015261395581613599565b9050919050565b60006020820190508181036000830152613975816135bc565b9050919050565b60006020820190508181036000830152613995816135df565b9050919050565b600060208201905081810360008301526139b581613602565b9050919050565b600060208201905081810360008301526139d581613625565b9050919050565b600060208201905081810360008301526139f581613648565b9050919050565b6000602082019050613a11600083018461367a565b92915050565b6000604082019050613a2c600083018561367a565b613a39602083018461367a565b9392505050565b6000613a4a613a5b565b9050613a568282613d2e565b919050565b6000604051905090565b600067ffffffffffffffff821115613a8057613a7f613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613aac57613aab613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ad857613ad7613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b0457613b03613e06565b5b613b0d82613e57565b9050602081019050919050565b600067ffffffffffffffff821115613b3557613b34613e06565b5b613b3e82613e57565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613bc782613cb0565b9150613bd283613cb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0757613c06613da8565b5b828201905092915050565b6000613c1d82613cb0565b9150613c2883613cb0565b925082821015613c3b57613c3a613da8565b5b828203905092915050565b6000613c5182613c90565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ce7578082015181840152602081019050613ccc565b83811115613cf6576000848401525b50505050565b60006002820490506001821680613d1457607f821691505b60208210811415613d2857613d27613dd7565b5b50919050565b613d3782613e57565b810181811067ffffffffffffffff82111715613d5657613d55613e06565b5b80604052505050565b6000613d6a82613cb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9d57613d9c613da8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613e545760046000803e613e51600051613e68565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e494420616c72656164792065786973747300000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614329576143ac565b614331613a5b565b60043d036004823e80513d602482011167ffffffffffffffff821117156143595750506143ac565b808201805167ffffffffffffffff81111561437757505050506143ac565b80602083010160043d0385018111156143945750505050506143ac565b6143a382602001850186613d2e565b82955050505050505b90565b6143b881613c46565b81146143c357600080fd5b50565b6143cf81613c58565b81146143da57600080fd5b50565b6143e681613c64565b81146143f157600080fd5b50565b6143fd81613cb0565b811461440857600080fd5b5056fea2646970667358221220876f6da444c1af1fe1516dbf7e62b0439cd9b1a400bd5e508e706202669dccd064736f6c63430008010033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010a5760003560e01c8063837c5962116100a2578063dbe16c0711610071578063dbe16c0714610303578063e985e9c514610333578063f242432a14610363578063f2fde38b1461037f578063fe9e0b0c1461039b5761010a565b8063837c59621461027b5780638da5cb5b146102ab578063a22cb465146102c9578063d9056f9d146102e55761010a565b8063175c8d05116100de578063175c8d05146101cf578063231064df146101ff5780632eb2c2d61461022f5780634e1273f41461024b5761010a565b8062fdd58e1461010f57806301ffc9a71461013f5780630e89341c1461016f5780631080ff531461019f575b600080fd5b6101296004803603810190610124919061311c565b6103cb565b60405161013691906139fc565b60405180910390f35b610159600480360381019061015491906132ba565b610495565b60405161016691906137bf565b60405180910390f35b6101896004803603810190610184919061330c565b610577565b60405161019691906137da565b60405180910390f35b6101b960048036038101906101b49190612f8a565b61060b565b6040516101c691906137bf565b60405180910390f35b6101e960048036038101906101e491906131a7565b61069f565b6040516101f691906139fc565b60405180910390f35b61021960048036038101906102149190613009565b610858565b6040516102269190613766565b60405180910390f35b61024960048036038101906102449190612e3c565b610cf2565b005b6102656004803603810190610260919061324e565b6110eb565b6040516102729190613766565b60405180910390f35b6102956004803603810190610290919061330c565b61129c565b6040516102a291906137da565b60405180910390f35b6102b3611341565b6040516102c09190613689565b60405180910390f35b6102e360048036038101906102de91906130e0565b61136a565b005b6102ed6114eb565b6040516102fa9190613766565b60405180910390f35b61031d6004803603810190610318919061330c565b611543565b60405161032a91906137da565b60405180910390f35b61034d60048036038101906103489190612e00565b6115e8565b60405161035a91906137bf565b60405180910390f35b61037d60048036038101906103789190612efb565b61167c565b005b61039960048036038101906103949190612dd7565b611997565b005b6103b560048036038101906103b09190613158565b611b40565b6040516103c291906137bf565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104339061383c565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82611bd4565b5b9050919050565b60606003805461058690613cfc565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290613cfc565b80156105ff5780601f106105d4576101008083540402835291602001916105ff565b820191906000526020600020905b8154815290600101906020018083116105e257829003601f168201915b50505050509050919050565b6000610615611c3e565b73ffffffffffffffffffffffffffffffffffffffff16610633611341565b73ffffffffffffffffffffffffffffffffffffffff1614610689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106809061395c565b60405180910390fd5b610694848484611c46565b600190509392505050565b60006106a9611c3e565b73ffffffffffffffffffffffffffffffffffffffff166106c7611341565b73ffffffffffffffffffffffffffffffffffffffff161461071d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107149061395c565b60405180910390fd5b6006600086815260200190815260200160002060009054906101000a900460ff161561077e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107759061385c565b60405180910390fd5b61079986868660405180602001604052806000815250611f4e565b60016006600087815260200190815260200160002060006101000a81548160ff021916908315150217905550826007600087815260200190815260200160002090805190602001906107ec929190612a27565b5081600860008781526020019081526020016000209080519060200190610814929190612a27565b50600560006108239190612aad565b600585908060018154018082558091505060019003906000526020600020016000909190919091505584905095945050505050565b6060610862611c3e565b73ffffffffffffffffffffffffffffffffffffffff16610880611341565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd9061395c565b60405180910390fd5b60008451905060008167ffffffffffffffff81111561091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561094c5781602001602082028036833780820191505090505b5090506005600061095d9190612aad565b60005b8651811015610cc857600660008983815181106109a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061385c565b60405180910390fd5b878181518110610a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151828281518110610a84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001600660008a8481518110610acf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550858181518110610b35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600760008a8481518110610b7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000209080519060200190610ba3929190612a27565b50848181518110610bdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600860008a8481518110610c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000209080519060200190610c4b929190612a27565b506005888281518110610c87577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150558080610cc090613d5f565b915050610960565b50610ce4888288604051806020016040528060008152506120e5565b809250505095945050505050565b8151835114610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d906139bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d906138dc565b60405180910390fd5b610dae611c3e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610df45750610df385610dee611c3e565b6115e8565b5b610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906138fc565b60405180910390fd5b6000610e3d611c3e565b9050610e4d818787878787612350565b60005b8451811015611056576000858281518110610e94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110610ed9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f729061393c565b60405180910390fd5b8181610f879190613c12565b6001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461103b9190613bbc565b925050819055505050508061104f90613d5f565b9050610e50565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110cd929190613788565b60405180910390a46110e3818787878787612358565b505050505050565b60608151835114611131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111289061399c565b60405180910390fd5b6000835167ffffffffffffffff811115611174577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111a25781602001602082028036833780820191505090505b50905060005b84518110156112915761123b8582815181106111ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061122e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516103cb565b828281518110611274577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061128a90613d5f565b90506111a8565b508091505092915050565b60606007600083815260200190815260200160002080546112bc90613cfc565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890613cfc565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b50505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16611389611c3e565b73ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d79061397c565b60405180910390fd5b80600260006113ed611c3e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149a611c3e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114df91906137bf565b60405180910390a35050565b6060600580548060200260200160405190810160405280929190818152602001828054801561153957602002820191906000526020600020905b815481526020019060010190808311611525575b5050505050905090565b606060086000838152602001908152602001600020805461156390613cfc565b80601f016020809104026020016040519081016040528092919081815260200182805461158f90613cfc565b80156115dc5780601f106115b1576101008083540402835291602001916115dc565b820191906000526020600020905b8154815290600101906020018083116115bf57829003601f168201915b50505050509050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e3906138dc565b60405180910390fd5b6116f4611c3e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061173a575061173985611734611c3e565b6115e8565b5b611779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611770906138bc565b60405180910390fd5b6000611783611c3e565b90506117a38187876117948861253f565b61179d8861253f565b87612350565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561183b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118329061393c565b60405180910390fd5b83816118479190613c12565b6001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118fb9190613bbc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611978929190613a17565b60405180910390a461198e828888888888612605565b50505050505050565b61199f611c3e565b73ffffffffffffffffffffffffffffffffffffffff166119bd611341565b73ffffffffffffffffffffffffffffffffffffffff1614611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a9061395c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a9061387c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611b4a611c3e565b73ffffffffffffffffffffffffffffffffffffffff16611b68611341565b73ffffffffffffffffffffffffffffffffffffffff1614611bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb59061395c565b60405180910390fd5b611bc98484846127ec565b600190509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad9061391c565b60405180910390fd5b8051825114611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906139bc565b60405180910390fd5b6000611d04611c3e565b9050611d2481856000868660405180602001604052806000815250612350565b60005b8351811015611ec8576000848281518110611d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110611db0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499061389c565b60405180910390fd5b8181611e5e9190613c12565b6001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611ec090613d5f565b915050611d27565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611f40929190613788565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb5906139dc565b60405180910390fd5b6000611fc8611c3e565b9050611fe981600087611fda8861253f565b611fe38861253f565b87612350565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613bbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516120c7929190613a17565b60405180910390a46120de81600087878787612605565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906139dc565b60405180910390fd5b8151835114612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906139bc565b60405180910390fd5b60006121a3611c3e565b90506121b481600087878787612350565b60005b84518110156122ba578381815181106121f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001600087848151811061223e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a09190613bbc565b9250508190555080806122b290613d5f565b9150506121b7565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612332929190613788565b60405180910390a461234981600087878787612358565b5050505050565b505050505050565b6123778473ffffffffffffffffffffffffffffffffffffffff16612a14565b15612537578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123bd9594939291906136a4565b602060405180830381600087803b1580156123d757600080fd5b505af192505050801561240857506040513d601f19601f8201168201806040525081019061240591906132e3565b60015b6124ae57612414613e35565b806308c379a014156124715750612429614319565b806124345750612473565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246891906137da565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a5906137fc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c9061381c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612584577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125b25781602001602082028036833780820191505090505b50905082816000815181106125f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6126248473ffffffffffffffffffffffffffffffffffffffff16612a14565b156127e4578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161266a95949392919061370c565b602060405180830381600087803b15801561268457600080fd5b505af19250505080156126b557506040513d601f19601f820116820180604052508101906126b291906132e3565b60015b61275b576126c1613e35565b806308c379a0141561271e57506126d6614319565b806126e15750612720565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271591906137da565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612752906137fc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061381c565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561285c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128539061391c565b60405180910390fd5b6000612866611c3e565b9050612896818560006128788761253f565b6128818761253f565b60405180602001604052806000815250612350565b60006001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561292e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129259061389c565b60405180910390fd5b828161293a9190613c12565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612a05929190613a17565b60405180910390a45050505050565b600080823b905060008111915050919050565b828054612a3390613cfc565b90600052602060002090601f016020900481019282612a555760008555612a9c565b82601f10612a6e57805160ff1916838001178555612a9c565b82800160010185558215612a9c579182015b82811115612a9b578251825591602001919060010190612a80565b5b509050612aa99190612ace565b5090565b5080546000825590600052602060002090810190612acb9190612ace565b50565b5b80821115612ae7576000816000905550600101612acf565b5090565b6000612afe612af984613a65565b613a40565b90508083825260208201905082856020860282011115612b1d57600080fd5b60005b85811015612b4d5781612b338882612c9c565b845260208401935060208301925050600181019050612b20565b5050509392505050565b6000612b6a612b6584613a91565b613a40565b9050808382526020820190508260005b85811015612baa5781358501612b908882612d98565b845260208401935060208301925050600181019050612b7a565b5050509392505050565b6000612bc7612bc284613abd565b613a40565b90508083825260208201905082856020860282011115612be657600080fd5b60005b85811015612c165781612bfc8882612dc2565b845260208401935060208301925050600181019050612be9565b5050509392505050565b6000612c33612c2e84613ae9565b613a40565b905082815260208101848484011115612c4b57600080fd5b612c56848285613cba565b509392505050565b6000612c71612c6c84613b1a565b613a40565b905082815260208101848484011115612c8957600080fd5b612c94848285613cba565b509392505050565b600081359050612cab816143af565b92915050565b600082601f830112612cc257600080fd5b8135612cd2848260208601612aeb565b91505092915050565b600082601f830112612cec57600080fd5b8135612cfc848260208601612b57565b91505092915050565b600082601f830112612d1657600080fd5b8135612d26848260208601612bb4565b91505092915050565b600081359050612d3e816143c6565b92915050565b600081359050612d53816143dd565b92915050565b600081519050612d68816143dd565b92915050565b600082601f830112612d7f57600080fd5b8135612d8f848260208601612c20565b91505092915050565b600082601f830112612da957600080fd5b8135612db9848260208601612c5e565b91505092915050565b600081359050612dd1816143f4565b92915050565b600060208284031215612de957600080fd5b6000612df784828501612c9c565b91505092915050565b60008060408385031215612e1357600080fd5b6000612e2185828601612c9c565b9250506020612e3285828601612c9c565b9150509250929050565b600080600080600060a08688031215612e5457600080fd5b6000612e6288828901612c9c565b9550506020612e7388828901612c9c565b945050604086013567ffffffffffffffff811115612e9057600080fd5b612e9c88828901612d05565b935050606086013567ffffffffffffffff811115612eb957600080fd5b612ec588828901612d05565b925050608086013567ffffffffffffffff811115612ee257600080fd5b612eee88828901612d6e565b9150509295509295909350565b600080600080600060a08688031215612f1357600080fd5b6000612f2188828901612c9c565b9550506020612f3288828901612c9c565b9450506040612f4388828901612dc2565b9350506060612f5488828901612dc2565b925050608086013567ffffffffffffffff811115612f7157600080fd5b612f7d88828901612d6e565b9150509295509295909350565b600080600060608486031215612f9f57600080fd5b6000612fad86828701612c9c565b935050602084013567ffffffffffffffff811115612fca57600080fd5b612fd686828701612d05565b925050604084013567ffffffffffffffff811115612ff357600080fd5b612fff86828701612d05565b9150509250925092565b600080600080600060a0868803121561302157600080fd5b600061302f88828901612c9c565b955050602086013567ffffffffffffffff81111561304c57600080fd5b61305888828901612d05565b945050604086013567ffffffffffffffff81111561307557600080fd5b61308188828901612d05565b935050606086013567ffffffffffffffff81111561309e57600080fd5b6130aa88828901612cdb565b925050608086013567ffffffffffffffff8111156130c757600080fd5b6130d388828901612cdb565b9150509295509295909350565b600080604083850312156130f357600080fd5b600061310185828601612c9c565b925050602061311285828601612d2f565b9150509250929050565b6000806040838503121561312f57600080fd5b600061313d85828601612c9c565b925050602061314e85828601612dc2565b9150509250929050565b60008060006060848603121561316d57600080fd5b600061317b86828701612c9c565b935050602061318c86828701612dc2565b925050604061319d86828701612dc2565b9150509250925092565b600080600080600060a086880312156131bf57600080fd5b60006131cd88828901612c9c565b95505060206131de88828901612dc2565b94505060406131ef88828901612dc2565b935050606086013567ffffffffffffffff81111561320c57600080fd5b61321888828901612d98565b925050608086013567ffffffffffffffff81111561323557600080fd5b61324188828901612d98565b9150509295509295909350565b6000806040838503121561326157600080fd5b600083013567ffffffffffffffff81111561327b57600080fd5b61328785828601612cb1565b925050602083013567ffffffffffffffff8111156132a457600080fd5b6132b085828601612d05565b9150509250929050565b6000602082840312156132cc57600080fd5b60006132da84828501612d44565b91505092915050565b6000602082840312156132f557600080fd5b600061330384828501612d59565b91505092915050565b60006020828403121561331e57600080fd5b600061332c84828501612dc2565b91505092915050565b6000613341838361366b565b60208301905092915050565b61335681613c46565b82525050565b600061336782613b5b565b6133718185613b89565b935061337c83613b4b565b8060005b838110156133ad5781516133948882613335565b975061339f83613b7c565b925050600181019050613380565b5085935050505092915050565b6133c381613c58565b82525050565b60006133d482613b66565b6133de8185613b9a565b93506133ee818560208601613cc9565b6133f781613e57565b840191505092915050565b600061340d82613b71565b6134178185613bab565b9350613427818560208601613cc9565b61343081613e57565b840191505092915050565b6000613448603483613bab565b915061345382613e75565b604082019050919050565b600061346b602883613bab565b915061347682613ec4565b604082019050919050565b600061348e602b83613bab565b915061349982613f13565b604082019050919050565b60006134b1601683613bab565b91506134bc82613f62565b602082019050919050565b60006134d4602683613bab565b91506134df82613f8b565b604082019050919050565b60006134f7602483613bab565b915061350282613fda565b604082019050919050565b600061351a602983613bab565b915061352582614029565b604082019050919050565b600061353d602583613bab565b915061354882614078565b604082019050919050565b6000613560603283613bab565b915061356b826140c7565b604082019050919050565b6000613583602383613bab565b915061358e82614116565b604082019050919050565b60006135a6602a83613bab565b91506135b182614165565b604082019050919050565b60006135c9602083613bab565b91506135d4826141b4565b602082019050919050565b60006135ec602983613bab565b91506135f7826141dd565b604082019050919050565b600061360f602983613bab565b915061361a8261422c565b604082019050919050565b6000613632602883613bab565b915061363d8261427b565b604082019050919050565b6000613655602183613bab565b9150613660826142ca565b604082019050919050565b61367481613cb0565b82525050565b61368381613cb0565b82525050565b600060208201905061369e600083018461334d565b92915050565b600060a0820190506136b9600083018861334d565b6136c6602083018761334d565b81810360408301526136d8818661335c565b905081810360608301526136ec818561335c565b9050818103608083015261370081846133c9565b90509695505050505050565b600060a082019050613721600083018861334d565b61372e602083018761334d565b61373b604083018661367a565b613748606083018561367a565b818103608083015261375a81846133c9565b90509695505050505050565b60006020820190508181036000830152613780818461335c565b905092915050565b600060408201905081810360008301526137a2818561335c565b905081810360208301526137b6818461335c565b90509392505050565b60006020820190506137d460008301846133ba565b92915050565b600060208201905081810360008301526137f48184613402565b905092915050565b600060208201905081810360008301526138158161343b565b9050919050565b600060208201905081810360008301526138358161345e565b9050919050565b6000602082019050818103600083015261385581613481565b9050919050565b60006020820190508181036000830152613875816134a4565b9050919050565b60006020820190508181036000830152613895816134c7565b9050919050565b600060208201905081810360008301526138b5816134ea565b9050919050565b600060208201905081810360008301526138d58161350d565b9050919050565b600060208201905081810360008301526138f581613530565b9050919050565b6000602082019050818103600083015261391581613553565b9050919050565b6000602082019050818103600083015261393581613576565b9050919050565b6000602082019050818103600083015261395581613599565b9050919050565b60006020820190508181036000830152613975816135bc565b9050919050565b60006020820190508181036000830152613995816135df565b9050919050565b600060208201905081810360008301526139b581613602565b9050919050565b600060208201905081810360008301526139d581613625565b9050919050565b600060208201905081810360008301526139f581613648565b9050919050565b6000602082019050613a11600083018461367a565b92915050565b6000604082019050613a2c600083018561367a565b613a39602083018461367a565b9392505050565b6000613a4a613a5b565b9050613a568282613d2e565b919050565b6000604051905090565b600067ffffffffffffffff821115613a8057613a7f613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613aac57613aab613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ad857613ad7613e06565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613b0457613b03613e06565b5b613b0d82613e57565b9050602081019050919050565b600067ffffffffffffffff821115613b3557613b34613e06565b5b613b3e82613e57565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613bc782613cb0565b9150613bd283613cb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0757613c06613da8565b5b828201905092915050565b6000613c1d82613cb0565b9150613c2883613cb0565b925082821015613c3b57613c3a613da8565b5b828203905092915050565b6000613c5182613c90565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ce7578082015181840152602081019050613ccc565b83811115613cf6576000848401525b50505050565b60006002820490506001821680613d1457607f821691505b60208210811415613d2857613d27613dd7565b5b50919050565b613d3782613e57565b810181811067ffffffffffffffff82111715613d5657613d55613e06565b5b80604052505050565b6000613d6a82613cb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9d57613d9c613da8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613e545760046000803e613e51600051613e68565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e494420616c72656164792065786973747300000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614329576143ac565b614331613a5b565b60043d036004823e80513d602482011167ffffffffffffffff821117156143595750506143ac565b808201805167ffffffffffffffff81111561437757505050506143ac565b80602083010160043d0385018111156143945750505050506143ac565b6143a382602001850186613d2e565b82955050505050505b90565b6143b881613c46565b81146143c357600080fd5b50565b6143cf81613c58565b81146143da57600080fd5b50565b6143e681613c64565b81146143f157600080fd5b50565b6143fd81613cb0565b811461440857600080fd5b5056fea2646970667358221220876f6da444c1af1fe1516dbf7e62b0439cd9b1a400bd5e508e706202669dccd064736f6c63430008010033
Deployed Bytecode Sourcemap
33580:2336:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21597:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20633:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21341:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35610:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33945:471;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34685:759;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24300:1239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21994:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34549:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17462:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22616:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35800:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34428:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22999:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23239:984;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18428:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35452:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21597:231;21683:7;21730:1;21711:21;;:7;:21;;;;21703:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21798:9;:13;21808:2;21798:13;;;;;;;;;;;:22;21812:7;21798:22;;;;;;;;;;;;;;;;21791:29;;21597:231;;;;:::o;20633:297::-;20735:4;20774:26;20759:41;;;:11;:41;;;;:110;;;;20832:37;20817:52;;;:11;:52;;;;20759:110;:163;;;;20886:36;20910:11;20886:23;:36::i;:::-;20759:163;20752:170;;20633:297;;;:::o;21341:105::-;21401:13;21434:4;21427:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21341:105;;;:::o;35610:178::-;35722:4;17693:12;:10;:12::i;:::-;17682:23;;:7;:5;:7::i;:::-;:23;;;17674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35735:29:::1;35746:7;35754:2;35757:6;35735:10;:29::i;:::-;35776:4;35769:11;;35610:178:::0;;;;;:::o;33945:471::-;34093:7;17693:12;:10;:12::i;:::-;17682:23;;:7;:5;:7::i;:::-;:23;;;17674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34123:10:::1;:21;34134:9;34123:21;;;;;;;;;;;;;;;;;;;;;34122:22;34114:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34175:34;34181:7;34189:9;34199:6;34175:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;34238:4;34214:10;:21;34225:9;34214:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34270:8;34247:9;:20;34257:9;34247:20;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;34306:4;34283:9;:20;34293:9;34283:20;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;34322:19;;34315:26;;;;:::i;:::-;34352:19;34377:9;34352:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34399:9;34392:16;;33945:471:::0;;;;;;;:::o;34685:759::-;34853:16;17693:12;:10;:12::i;:::-;17682:23;;:7;:5;:7::i;:::-;:23;;;17674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34878:15:::1;34895:7;:14;34878:31;;34917:23;34957:7;34943:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34917:48;;34980:19;;34973:26;;;;:::i;:::-;35019:6;35015:343;35035:7;:14;35031:1;:18;35015:343;;;35074:10;:24;35085:9;35095:1;35085:12;;;;;;;;;;;;;;;;;;;;;;35074:24;;;;;;;;;;;;;;;;;;;;;35073:25;35065:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35147:9;35157:1;35147:12;;;;;;;;;;;;;;;;;;;;;;35137:6;35144:1;35137:9;;;;;;;;;;;;;;;;;;;;;:22;;;::::0;::::1;35199:4;35172:10;:24;35183:9;35193:1;35183:12;;;;;;;;;;;;;;;;;;;;;;35172:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;35236:8;35245:1;35236:11;;;;;;;;;;;;;;;;;;;;;;35210:9;:23;35220:9;35230:1;35220:12;;;;;;;;;;;;;;;;;;;;;;35210:23;;;;;;;;;;;:37;;;;;;;;;;;;:::i;:::-;;35280:4;35285:1;35280:7;;;;;;;;;;;;;;;;;;;;;;35254:9;:23;35264:9;35274:1;35264:12;;;;;;;;;;;;;;;;;;;;;;35254:23;;;;;;;;;;;:33;;;;;;;;;;;;:::i;:::-;;35310:19;35335:9;35345:1;35335:12;;;;;;;;;;;;;;;;;;;;;;35310:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35051:3;;;;;:::i;:::-;;;;35015:343;;;;35367:38;35378:7;35386:6;35393:7;35367:38;;;;;;;;;;;::::0;:10:::1;:38::i;:::-;35429:6;35422:13;;;;34685:759:::0;;;;;;;:::o;24300:1239::-;24565:7;:14;24551:3;:10;:28;24543:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24657:1;24643:16;;:2;:16;;;;24635:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24742:12;:10;:12::i;:::-;24734:20;;:4;:20;;;:60;;;;24758:36;24775:4;24781:12;:10;:12::i;:::-;24758:16;:36::i;:::-;24734:60;24712:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24885:16;24904:12;:10;:12::i;:::-;24885:31;;24929:60;24950:8;24960:4;24966:2;24970:3;24975:7;24984:4;24929:20;:60::i;:::-;25007:9;25002:377;25026:3;:10;25022:1;:14;25002:377;;;25058:10;25071:3;25075:1;25071:6;;;;;;;;;;;;;;;;;;;;;;25058:19;;25092:14;25109:7;25117:1;25109:10;;;;;;;;;;;;;;;;;;;;;;25092:27;;25136:19;25158:9;:13;25168:2;25158:13;;;;;;;;;;;:19;25172:4;25158:19;;;;;;;;;;;;;;;;25136:41;;25215:6;25200:11;:21;;25192:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25319:6;25305:11;:20;;;;:::i;:::-;25283:9;:13;25293:2;25283:13;;;;;;;;;;;:19;25297:4;25283:19;;;;;;;;;;;;;;;:42;;;;25361:6;25340:9;:13;25350:2;25340:13;;;;;;;;;;;:17;25354:2;25340:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25002:377;;;25038:3;;;;:::i;:::-;;;25002:377;;;;25426:2;25396:47;;25420:4;25396:47;;25410:8;25396:47;;;25430:3;25435:7;25396:47;;;;;;;:::i;:::-;;;;;;;;25456:75;25492:8;25502:4;25508:2;25512:3;25517:7;25526:4;25456:35;:75::i;:::-;24300:1239;;;;;;:::o;21994:549::-;22175:16;22236:3;:10;22217:8;:15;:29;22209:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22305:30;22352:8;:15;22338:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22305:63;;22386:9;22381:122;22405:8;:15;22401:1;:19;22381:122;;;22461:30;22471:8;22480:1;22471:11;;;;;;;;;;;;;;;;;;;;;;22484:3;22488:1;22484:6;;;;;;;;;;;;;;;;;;;;;;22461:9;:30::i;:::-;22442:13;22456:1;22442:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;22422:3;;;;:::i;:::-;;;22381:122;;;;22522:13;22515:20;;;21994:549;;;;:::o;34549:123::-;34618:13;34644:9;:20;34654:9;34644:20;;;;;;;;;;;34637:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34549:123;;;:::o;17462:87::-;17508:7;17535:6;;;;;;;;;;;17528:13;;17462:87;:::o;22616:311::-;22735:8;22719:24;;:12;:10;:12::i;:::-;:24;;;;22711:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22847:8;22802:18;:32;22821:12;:10;:12::i;:::-;22802:32;;;;;;;;;;;;;;;:42;22835:8;22802:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22900:8;22871:48;;22886:12;:10;:12::i;:::-;22871:48;;;22910:8;22871:48;;;;;;:::i;:::-;;;;;;;;22616:311;;:::o;35800:113::-;35851:16;35886:19;35879:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35800:113;:::o;34428:115::-;34489:13;34515:9;:20;34525:9;34515:20;;;;;;;;;;;34508:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34428:115;;;:::o;22999:168::-;23098:4;23122:18;:27;23141:7;23122:27;;;;;;;;;;;;;;;:37;23150:8;23122:37;;;;;;;;;;;;;;;;;;;;;;;;;23115:44;;22999:168;;;;:::o;23239:984::-;23479:1;23465:16;;:2;:16;;;;23457:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23564:12;:10;:12::i;:::-;23556:20;;:4;:20;;;:60;;;;23580:36;23597:4;23603:12;:10;:12::i;:::-;23580:16;:36::i;:::-;23556:60;23534:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;23698:16;23717:12;:10;:12::i;:::-;23698:31;;23742:96;23763:8;23773:4;23779:2;23783:21;23801:2;23783:17;:21::i;:::-;23806:25;23824:6;23806:17;:25::i;:::-;23833:4;23742:20;:96::i;:::-;23851:19;23873:9;:13;23883:2;23873:13;;;;;;;;;;;:19;23887:4;23873:19;;;;;;;;;;;;;;;;23851:41;;23926:6;23911:11;:21;;23903:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24026:6;24012:11;:20;;;;:::i;:::-;23990:9;:13;24000:2;23990:13;;;;;;;;;;;:19;24004:4;23990:19;;;;;;;;;;;;;;;:42;;;;24064:6;24043:9;:13;24053:2;24043:13;;;;;;;;;;;:17;24057:2;24043:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24119:2;24088:46;;24113:4;24088:46;;24103:8;24088:46;;;24123:2;24127:6;24088:46;;;;;;;:::i;:::-;;;;;;;;24147:68;24178:8;24188:4;24194:2;24198;24202:6;24210:4;24147:30;:68::i;:::-;23239:984;;;;;;;:::o;18428:244::-;17693:12;:10;:12::i;:::-;17682:23;;:7;:5;:7::i;:::-;:23;;;17674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18537:1:::1;18517:22;;:8;:22;;;;18509:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18627:8;18598:38;;18619:6;::::0;::::1;;;;;;;;18598:38;;;;;;;;;;;;18656:8;18647:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18428:244:::0;:::o;35452:150::-;35541:4;17693:12;:10;:12::i;:::-;17682:23;;:7;:5;:7::i;:::-;:23;;;17674:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35554:24:::1;35560:7;35568:2;35571:6;35554:5;:24::i;:::-;35590:4;35583:11;;35452:150:::0;;;;;:::o;19475:157::-;19560:4;19599:25;19584:40;;;:11;:40;;;;19577:47;;19475:157;;;:::o;16611:98::-;16664:7;16691:10;16684:17;;16611:98;:::o;29540:837::-;29680:1;29661:21;;:7;:21;;;;29653:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29755:7;:14;29741:3;:10;:28;29733:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29827:16;29846:12;:10;:12::i;:::-;29827:31;;29871:69;29892:8;29902:7;29919:1;29923:3;29928:7;29871:69;;;;;;;;;;;;:20;:69::i;:::-;29958:6;29953:341;29974:3;:10;29970:1;:14;29953:341;;;30006:10;30019:3;30023:1;30019:6;;;;;;;;;;;;;;;;;;;;;;30006:19;;30040:14;30057:7;30065:1;30057:10;;;;;;;;;;;;;;;;;;;;;;30040:27;;30084:22;30109:9;:13;30119:2;30109:13;;;;;;;;;;;:22;30123:7;30109:22;;;;;;;;;;;;;;;;30084:47;;30172:6;30154:14;:24;;30146:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30276:6;30259:14;:23;;;;:::i;:::-;30234:9;:13;30244:2;30234:13;;;;;;;;;;;:22;30248:7;30234:22;;;;;;;;;;;;;;;:48;;;;29953:341;;;29986:3;;;;;:::i;:::-;;;;29953:341;;;;30352:1;30311:58;;30335:7;30311:58;;30325:8;30311:58;;;30356:3;30361:7;30311:58;;;;;;;:::i;:::-;;;;;;;;29540:837;;;;:::o;26872:556::-;27006:1;26987:21;;:7;:21;;;;26979:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27059:16;27078:12;:10;:12::i;:::-;27059:31;;27103:107;27124:8;27142:1;27146:7;27155:21;27173:2;27155:17;:21::i;:::-;27178:25;27196:6;27178:17;:25::i;:::-;27205:4;27103:20;:107::i;:::-;27249:6;27223:9;:13;27233:2;27223:13;;;;;;;;;;;:22;27237:7;27223:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;27308:7;27271:57;;27304:1;27271:57;;27286:8;27271:57;;;27317:2;27321:6;27271:57;;;;;;;:::i;:::-;;;;;;;;27341:79;27372:8;27390:1;27394:7;27403:2;27407:6;27415:4;27341:30;:79::i;:::-;26872:556;;;;;:::o;27784:689::-;27933:1;27919:16;;:2;:16;;;;27911:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28006:7;:14;27992:3;:10;:28;27984:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28078:16;28097:12;:10;:12::i;:::-;28078:31;;28122:66;28143:8;28161:1;28165:2;28169:3;28174:7;28183:4;28122:20;:66::i;:::-;28206:6;28201:100;28222:3;:10;28218:1;:14;28201:100;;;28279:7;28287:1;28279:10;;;;;;;;;;;;;;;;;;;;;;28254:9;:17;28264:3;28268:1;28264:6;;;;;;;;;;;;;;;;;;;;;;28254:17;;;;;;;;;;;:21;28272:2;28254:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;28234:3;;;;;:::i;:::-;;;;28201:100;;;;28354:2;28318:53;;28350:1;28318:53;;28332:8;28318:53;;;28358:3;28363:7;28318:53;;;;;;;:::i;:::-;;;;;;;;28384:81;28420:8;28438:1;28442:2;28446:3;28451:7;28460:4;28384:35;:81::i;:::-;27784:689;;;;;:::o;31333:245::-;;;;;;;:::o;32356:799::-;32610:15;:2;:13;;;:15::i;:::-;32606:542;;;32663:2;32646:43;;;32690:8;32700:4;32706:3;32711:7;32720:4;32646:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32642:495;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33010:6;33003:14;;;;;;;;;;;:::i;:::-;;;;;;;;32642:495;;;33059:62;;;;;;;;;;:::i;:::-;;;;;;;;32642:495;32787:52;;;32775:64;;;:8;:64;;;;32771:163;;32864:50;;;;;;;;;;:::i;:::-;;;;;;;;32771:163;32726:223;32606:542;32356:799;;;;;;:::o;33163:198::-;33229:16;33258:22;33297:1;33283:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33258:41;;33321:7;33310:5;33316:1;33310:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;33348:5;33341:12;;;33163:198;;;:::o;31586:762::-;31815:15;:2;:13;;;:15::i;:::-;31811:530;;;31868:2;31851:38;;;31890:8;31900:4;31906:2;31910:6;31918:4;31851:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31847:483;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32203:6;32196:14;;;;;;;;;;;:::i;:::-;;;;;;;;31847:483;;;32252:62;;;;;;;;;;:::i;:::-;;;;;;;;31847:483;31985:47;;;31973:59;;;:8;:59;;;;31969:158;;32057:50;;;;;;;;;;:::i;:::-;;;;;;;;31969:158;31924:218;31811:530;31586:762;;;;;;:::o;28732:605::-;28847:1;28828:21;;:7;:21;;;;28820:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28902:16;28921:12;:10;:12::i;:::-;28902:31;;28946:105;28967:8;28977:7;28994:1;28998:21;29016:2;28998:17;:21::i;:::-;29021:25;29039:6;29021:17;:25::i;:::-;28946:105;;;;;;;;;;;;:20;:105::i;:::-;29064:22;29089:9;:13;29099:2;29089:13;;;;;;;;;;;:22;29103:7;29089:22;;;;;;;;;;;;;;;;29064:47;;29148:6;29130:14;:24;;29122:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29248:6;29231:14;:23;;;;:::i;:::-;29206:9;:13;29216:2;29206:13;;;;;;;;;;;:22;29220:7;29206:22;;;;;;;;;;;;;;;:48;;;;29314:1;29272:57;;29297:7;29272:57;;29287:8;29272:57;;;29318:2;29322:6;29272:57;;;;;;;:::i;:::-;;;;;;;;28732:605;;;;;:::o;8728:422::-;8788:4;8996:12;9107:7;9095:20;9087:28;;9141:1;9134:4;:8;9127:15;;;8728:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;669:616::-;;800:91;816:74;883:6;816:74;:::i;:::-;800:91;:::i;:::-;791:100;;911:5;939:6;932:5;925:21;965:4;958:5;954:16;947:23;;990:6;1021:1;1006:273;1031:6;1028:1;1025:13;1006:273;;;1123:3;1110:17;1102:6;1098:30;1153:47;1196:3;1184:10;1153:47;:::i;:::-;1148:3;1141:60;1230:4;1225:3;1221:14;1214:21;;1264:4;1259:3;1255:14;1248:21;;1066:213;1053:1;1050;1046:9;1041:14;;1006:273;;;1010:14;781:504;;;;;;;:::o;1308:623::-;;1429:81;1445:64;1502:6;1445:64;:::i;:::-;1429:81;:::i;:::-;1420:90;;1530:5;1558:6;1551:5;1544:21;1584:4;1577:5;1573:16;1566:23;;1609:6;1659:3;1651:4;1643:6;1639:17;1634:3;1630:27;1627:36;1624:2;;;1676:1;1673;1666:12;1624:2;1704:1;1689:236;1714:6;1711:1;1708:13;1689:236;;;1781:3;1809:37;1842:3;1830:10;1809:37;:::i;:::-;1804:3;1797:50;1876:4;1871:3;1867:14;1860:21;;1910:4;1905:3;1901:14;1894:21;;1749:176;1736:1;1733;1729:9;1724:14;;1689:236;;;1693:14;1410:521;;;;;;;:::o;1937:343::-;;2039:65;2055:48;2096:6;2055:48;:::i;:::-;2039:65;:::i;:::-;2030:74;;2127:6;2120:5;2113:21;2165:4;2158:5;2154:16;2203:3;2194:6;2189:3;2185:16;2182:25;2179:2;;;2220:1;2217;2210:12;2179:2;2233:41;2267:6;2262:3;2257;2233:41;:::i;:::-;2020:260;;;;;;:::o;2286:345::-;;2389:66;2405:49;2447:6;2405:49;:::i;:::-;2389:66;:::i;:::-;2380:75;;2478:6;2471:5;2464:21;2516:4;2509:5;2505:16;2554:3;2545:6;2540:3;2536:16;2533:25;2530:2;;;2571:1;2568;2561:12;2530:2;2584:41;2618:6;2613:3;2608;2584:41;:::i;:::-;2370:261;;;;;;:::o;2637:139::-;;2721:6;2708:20;2699:29;;2737:33;2764:5;2737:33;:::i;:::-;2689:87;;;;:::o;2799:303::-;;2919:3;2912:4;2904:6;2900:17;2896:27;2886:2;;2937:1;2934;2927:12;2886:2;2977:6;2964:20;3002:94;3092:3;3084:6;3077:4;3069:6;3065:17;3002:94;:::i;:::-;2993:103;;2876:226;;;;;:::o;3124:323::-;;3254:3;3247:4;3239:6;3235:17;3231:27;3221:2;;3272:1;3269;3262:12;3221:2;3312:6;3299:20;3337:104;3437:3;3429:6;3422:4;3414:6;3410:17;3337:104;:::i;:::-;3328:113;;3211:236;;;;;:::o;3470:303::-;;3590:3;3583:4;3575:6;3571:17;3567:27;3557:2;;3608:1;3605;3598:12;3557:2;3648:6;3635:20;3673:94;3763:3;3755:6;3748:4;3740:6;3736:17;3673:94;:::i;:::-;3664:103;;3547:226;;;;;:::o;3779:133::-;;3860:6;3847:20;3838:29;;3876:30;3900:5;3876:30;:::i;:::-;3828:84;;;;:::o;3918:137::-;;4001:6;3988:20;3979:29;;4017:32;4043:5;4017:32;:::i;:::-;3969:86;;;;:::o;4061:141::-;;4148:6;4142:13;4133:22;;4164:32;4190:5;4164:32;:::i;:::-;4123:79;;;;:::o;4221:271::-;;4325:3;4318:4;4310:6;4306:17;4302:27;4292:2;;4343:1;4340;4333:12;4292:2;4383:6;4370:20;4408:78;4482:3;4474:6;4467:4;4459:6;4455:17;4408:78;:::i;:::-;4399:87;;4282:210;;;;;:::o;4512:273::-;;4617:3;4610:4;4602:6;4598:17;4594:27;4584:2;;4635:1;4632;4625:12;4584:2;4675:6;4662:20;4700:79;4775:3;4767:6;4760:4;4752:6;4748:17;4700:79;:::i;:::-;4691:88;;4574:211;;;;;:::o;4791:139::-;;4875:6;4862:20;4853:29;;4891:33;4918:5;4891:33;:::i;:::-;4843:87;;;;:::o;4936:262::-;;5044:2;5032:9;5023:7;5019:23;5015:32;5012:2;;;5060:1;5057;5050:12;5012:2;5103:1;5128:53;5173:7;5164:6;5153:9;5149:22;5128:53;:::i;:::-;5118:63;;5074:117;5002:196;;;;:::o;5204:407::-;;;5329:2;5317:9;5308:7;5304:23;5300:32;5297:2;;;5345:1;5342;5335:12;5297:2;5388:1;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5359:117;5515:2;5541:53;5586:7;5577:6;5566:9;5562:22;5541:53;:::i;:::-;5531:63;;5486:118;5287:324;;;;;:::o;5617:1241::-;;;;;;5852:3;5840:9;5831:7;5827:23;5823:33;5820:2;;;5869:1;5866;5859:12;5820:2;5912:1;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5883:117;6039:2;6065:53;6110:7;6101:6;6090:9;6086:22;6065:53;:::i;:::-;6055:63;;6010:118;6195:2;6184:9;6180:18;6167:32;6226:18;6218:6;6215:30;6212:2;;;6258:1;6255;6248:12;6212:2;6286:78;6356:7;6347:6;6336:9;6332:22;6286:78;:::i;:::-;6276:88;;6138:236;6441:2;6430:9;6426:18;6413:32;6472:18;6464:6;6461:30;6458:2;;;6504:1;6501;6494:12;6458:2;6532:78;6602:7;6593:6;6582:9;6578:22;6532:78;:::i;:::-;6522:88;;6384:236;6687:3;6676:9;6672:19;6659:33;6719:18;6711:6;6708:30;6705:2;;;6751:1;6748;6741:12;6705:2;6779:62;6833:7;6824:6;6813:9;6809:22;6779:62;:::i;:::-;6769:72;;6630:221;5810:1048;;;;;;;;:::o;6864:955::-;;;;;;7049:3;7037:9;7028:7;7024:23;7020:33;7017:2;;;7066:1;7063;7056:12;7017:2;7109:1;7134:53;7179:7;7170:6;7159:9;7155:22;7134:53;:::i;:::-;7124:63;;7080:117;7236:2;7262:53;7307:7;7298:6;7287:9;7283:22;7262:53;:::i;:::-;7252:63;;7207:118;7364:2;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7335:118;7492:2;7518:53;7563:7;7554:6;7543:9;7539:22;7518:53;:::i;:::-;7508:63;;7463:118;7648:3;7637:9;7633:19;7620:33;7680:18;7672:6;7669:30;7666:2;;;7712:1;7709;7702:12;7666:2;7740:62;7794:7;7785:6;7774:9;7770:22;7740:62;:::i;:::-;7730:72;;7591:221;7007:812;;;;;;;;:::o;7825:838::-;;;;8017:2;8005:9;7996:7;7992:23;7988:32;7985:2;;;8033:1;8030;8023:12;7985:2;8076:1;8101:53;8146:7;8137:6;8126:9;8122:22;8101:53;:::i;:::-;8091:63;;8047:117;8231:2;8220:9;8216:18;8203:32;8262:18;8254:6;8251:30;8248:2;;;8294:1;8291;8284:12;8248:2;8322:78;8392:7;8383:6;8372:9;8368:22;8322:78;:::i;:::-;8312:88;;8174:236;8477:2;8466:9;8462:18;8449:32;8508:18;8500:6;8497:30;8494:2;;;8540:1;8537;8530:12;8494:2;8568:78;8638:7;8629:6;8618:9;8614:22;8568:78;:::i;:::-;8558:88;;8420:236;7975:688;;;;;:::o;8669:1456::-;;;;;;8965:3;8953:9;8944:7;8940:23;8936:33;8933:2;;;8982:1;8979;8972:12;8933:2;9025:1;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8996:117;9180:2;9169:9;9165:18;9152:32;9211:18;9203:6;9200:30;9197:2;;;9243:1;9240;9233:12;9197:2;9271:78;9341:7;9332:6;9321:9;9317:22;9271:78;:::i;:::-;9261:88;;9123:236;9426:2;9415:9;9411:18;9398:32;9457:18;9449:6;9446:30;9443:2;;;9489:1;9486;9479:12;9443:2;9517:78;9587:7;9578:6;9567:9;9563:22;9517:78;:::i;:::-;9507:88;;9369:236;9672:2;9661:9;9657:18;9644:32;9703:18;9695:6;9692:30;9689:2;;;9735:1;9732;9725:12;9689:2;9763:88;9843:7;9834:6;9823:9;9819:22;9763:88;:::i;:::-;9753:98;;9615:246;9928:3;9917:9;9913:19;9900:33;9960:18;9952:6;9949:30;9946:2;;;9992:1;9989;9982:12;9946:2;10020:88;10100:7;10091:6;10080:9;10076:22;10020:88;:::i;:::-;10010:98;;9871:247;8923:1202;;;;;;;;:::o;10131:401::-;;;10253:2;10241:9;10232:7;10228:23;10224:32;10221:2;;;10269:1;10266;10259:12;10221:2;10312:1;10337:53;10382:7;10373:6;10362:9;10358:22;10337:53;:::i;:::-;10327:63;;10283:117;10439:2;10465:50;10507:7;10498:6;10487:9;10483:22;10465:50;:::i;:::-;10455:60;;10410:115;10211:321;;;;;:::o;10538:407::-;;;10663:2;10651:9;10642:7;10638:23;10634:32;10631:2;;;10679:1;10676;10669:12;10631:2;10722:1;10747:53;10792:7;10783:6;10772:9;10768:22;10747:53;:::i;:::-;10737:63;;10693:117;10849:2;10875:53;10920:7;10911:6;10900:9;10896:22;10875:53;:::i;:::-;10865:63;;10820:118;10621:324;;;;;:::o;10951:552::-;;;;11093:2;11081:9;11072:7;11068:23;11064:32;11061:2;;;11109:1;11106;11099:12;11061:2;11152:1;11177:53;11222:7;11213:6;11202:9;11198:22;11177:53;:::i;:::-;11167:63;;11123:117;11279:2;11305:53;11350:7;11341:6;11330:9;11326:22;11305:53;:::i;:::-;11295:63;;11250:118;11407:2;11433:53;11478:7;11469:6;11458:9;11454:22;11433:53;:::i;:::-;11423:63;;11378:118;11051:452;;;;;:::o;11509:1070::-;;;;;;11705:3;11693:9;11684:7;11680:23;11676:33;11673:2;;;11722:1;11719;11712:12;11673:2;11765:1;11790:53;11835:7;11826:6;11815:9;11811:22;11790:53;:::i;:::-;11780:63;;11736:117;11892:2;11918:53;11963:7;11954:6;11943:9;11939:22;11918:53;:::i;:::-;11908:63;;11863:118;12020:2;12046:53;12091:7;12082:6;12071:9;12067:22;12046:53;:::i;:::-;12036:63;;11991:118;12176:2;12165:9;12161:18;12148:32;12207:18;12199:6;12196:30;12193:2;;;12239:1;12236;12229:12;12193:2;12267:63;12322:7;12313:6;12302:9;12298:22;12267:63;:::i;:::-;12257:73;;12119:221;12407:3;12396:9;12392:19;12379:33;12439:18;12431:6;12428:30;12425:2;;;12471:1;12468;12461:12;12425:2;12499:63;12554:7;12545:6;12534:9;12530:22;12499:63;:::i;:::-;12489:73;;12350:222;11663:916;;;;;;;;:::o;12585:693::-;;;12760:2;12748:9;12739:7;12735:23;12731:32;12728:2;;;12776:1;12773;12766:12;12728:2;12847:1;12836:9;12832:17;12819:31;12877:18;12869:6;12866:30;12863:2;;;12909:1;12906;12899:12;12863:2;12937:78;13007:7;12998:6;12987:9;12983:22;12937:78;:::i;:::-;12927:88;;12790:235;13092:2;13081:9;13077:18;13064:32;13123:18;13115:6;13112:30;13109:2;;;13155:1;13152;13145:12;13109:2;13183:78;13253:7;13244:6;13233:9;13229:22;13183:78;:::i;:::-;13173:88;;13035:236;12718:560;;;;;:::o;13284:260::-;;13391:2;13379:9;13370:7;13366:23;13362:32;13359:2;;;13407:1;13404;13397:12;13359:2;13450:1;13475:52;13519:7;13510:6;13499:9;13495:22;13475:52;:::i;:::-;13465:62;;13421:116;13349:195;;;;:::o;13550:282::-;;13668:2;13656:9;13647:7;13643:23;13639:32;13636:2;;;13684:1;13681;13674:12;13636:2;13727:1;13752:63;13807:7;13798:6;13787:9;13783:22;13752:63;:::i;:::-;13742:73;;13698:127;13626:206;;;;:::o;13838:262::-;;13946:2;13934:9;13925:7;13921:23;13917:32;13914:2;;;13962:1;13959;13952:12;13914:2;14005:1;14030:53;14075:7;14066:6;14055:9;14051:22;14030:53;:::i;:::-;14020:63;;13976:117;13904:196;;;;:::o;14106:179::-;;14196:46;14238:3;14230:6;14196:46;:::i;:::-;14274:4;14269:3;14265:14;14251:28;;14186:99;;;;:::o;14291:118::-;14378:24;14396:5;14378:24;:::i;:::-;14373:3;14366:37;14356:53;;:::o;14445:732::-;;14593:54;14641:5;14593:54;:::i;:::-;14663:86;14742:6;14737:3;14663:86;:::i;:::-;14656:93;;14773:56;14823:5;14773:56;:::i;:::-;14852:7;14883:1;14868:284;14893:6;14890:1;14887:13;14868:284;;;14969:6;14963:13;14996:63;15055:3;15040:13;14996:63;:::i;:::-;14989:70;;15082:60;15135:6;15082:60;:::i;:::-;15072:70;;14928:224;14915:1;14912;14908:9;14903:14;;14868:284;;;14872:14;15168:3;15161:10;;14569:608;;;;;;;:::o;15183:109::-;15264:21;15279:5;15264:21;:::i;:::-;15259:3;15252:34;15242:50;;:::o;15298:360::-;;15412:38;15444:5;15412:38;:::i;:::-;15466:70;15529:6;15524:3;15466:70;:::i;:::-;15459:77;;15545:52;15590:6;15585:3;15578:4;15571:5;15567:16;15545:52;:::i;:::-;15622:29;15644:6;15622:29;:::i;:::-;15617:3;15613:39;15606:46;;15388:270;;;;;:::o;15664:364::-;;15780:39;15813:5;15780:39;:::i;:::-;15835:71;15899:6;15894:3;15835:71;:::i;:::-;15828:78;;15915:52;15960:6;15955:3;15948:4;15941:5;15937:16;15915:52;:::i;:::-;15992:29;16014:6;15992:29;:::i;:::-;15987:3;15983:39;15976:46;;15756:272;;;;;:::o;16034:366::-;;16197:67;16261:2;16256:3;16197:67;:::i;:::-;16190:74;;16273:93;16362:3;16273:93;:::i;:::-;16391:2;16386:3;16382:12;16375:19;;16180:220;;;:::o;16406:366::-;;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16645:93;16734:3;16645:93;:::i;:::-;16763:2;16758:3;16754:12;16747:19;;16552:220;;;:::o;16778:366::-;;16941:67;17005:2;17000:3;16941:67;:::i;:::-;16934:74;;17017:93;17106:3;17017:93;:::i;:::-;17135:2;17130:3;17126:12;17119:19;;16924:220;;;:::o;17150:366::-;;17313:67;17377:2;17372:3;17313:67;:::i;:::-;17306:74;;17389:93;17478:3;17389:93;:::i;:::-;17507:2;17502:3;17498:12;17491:19;;17296:220;;;:::o;17522:366::-;;17685:67;17749:2;17744:3;17685:67;:::i;:::-;17678:74;;17761:93;17850:3;17761:93;:::i;:::-;17879:2;17874:3;17870:12;17863:19;;17668:220;;;:::o;17894:366::-;;18057:67;18121:2;18116:3;18057:67;:::i;:::-;18050:74;;18133:93;18222:3;18133:93;:::i;:::-;18251:2;18246:3;18242:12;18235:19;;18040:220;;;:::o;18266:366::-;;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18412:220;;;:::o;18638:366::-;;18801:67;18865:2;18860:3;18801:67;:::i;:::-;18794:74;;18877:93;18966:3;18877:93;:::i;:::-;18995:2;18990:3;18986:12;18979:19;;18784:220;;;:::o;19010:366::-;;19173:67;19237:2;19232:3;19173:67;:::i;:::-;19166:74;;19249:93;19338:3;19249:93;:::i;:::-;19367:2;19362:3;19358:12;19351:19;;19156:220;;;:::o;19382:366::-;;19545:67;19609:2;19604:3;19545:67;:::i;:::-;19538:74;;19621:93;19710:3;19621:93;:::i;:::-;19739:2;19734:3;19730:12;19723:19;;19528:220;;;:::o;19754:366::-;;19917:67;19981:2;19976:3;19917:67;:::i;:::-;19910:74;;19993:93;20082:3;19993:93;:::i;:::-;20111:2;20106:3;20102:12;20095:19;;19900:220;;;:::o;20126:366::-;;20289:67;20353:2;20348:3;20289:67;:::i;:::-;20282:74;;20365:93;20454:3;20365:93;:::i;:::-;20483:2;20478:3;20474:12;20467:19;;20272:220;;;:::o;20498:366::-;;20661:67;20725:2;20720:3;20661:67;:::i;:::-;20654:74;;20737:93;20826:3;20737:93;:::i;:::-;20855:2;20850:3;20846:12;20839:19;;20644:220;;;:::o;20870:366::-;;21033:67;21097:2;21092:3;21033:67;:::i;:::-;21026:74;;21109:93;21198:3;21109:93;:::i;:::-;21227:2;21222:3;21218:12;21211:19;;21016:220;;;:::o;21242:366::-;;21405:67;21469:2;21464:3;21405:67;:::i;:::-;21398:74;;21481:93;21570:3;21481:93;:::i;:::-;21599:2;21594:3;21590:12;21583:19;;21388:220;;;:::o;21614:366::-;;21777:67;21841:2;21836:3;21777:67;:::i;:::-;21770:74;;21853:93;21942:3;21853:93;:::i;:::-;21971:2;21966:3;21962:12;21955:19;;21760:220;;;:::o;21986:108::-;22063:24;22081:5;22063:24;:::i;:::-;22058:3;22051:37;22041:53;;:::o;22100:118::-;22187:24;22205:5;22187:24;:::i;:::-;22182:3;22175:37;22165:53;;:::o;22224:222::-;;22355:2;22344:9;22340:18;22332:26;;22368:71;22436:1;22425:9;22421:17;22412:6;22368:71;:::i;:::-;22322:124;;;;:::o;22452:1053::-;;22813:3;22802:9;22798:19;22790:27;;22827:71;22895:1;22884:9;22880:17;22871:6;22827:71;:::i;:::-;22908:72;22976:2;22965:9;22961:18;22952:6;22908:72;:::i;:::-;23027:9;23021:4;23017:20;23012:2;23001:9;22997:18;22990:48;23055:108;23158:4;23149:6;23055:108;:::i;:::-;23047:116;;23210:9;23204:4;23200:20;23195:2;23184:9;23180:18;23173:48;23238:108;23341:4;23332:6;23238:108;:::i;:::-;23230:116;;23394:9;23388:4;23384:20;23378:3;23367:9;23363:19;23356:49;23422:76;23493:4;23484:6;23422:76;:::i;:::-;23414:84;;22780:725;;;;;;;;:::o;23511:751::-;;23772:3;23761:9;23757:19;23749:27;;23786:71;23854:1;23843:9;23839:17;23830:6;23786:71;:::i;:::-;23867:72;23935:2;23924:9;23920:18;23911:6;23867:72;:::i;:::-;23949;24017:2;24006:9;24002:18;23993:6;23949:72;:::i;:::-;24031;24099:2;24088:9;24084:18;24075:6;24031:72;:::i;:::-;24151:9;24145:4;24141:20;24135:3;24124:9;24120:19;24113:49;24179:76;24250:4;24241:6;24179:76;:::i;:::-;24171:84;;23739:523;;;;;;;;:::o;24268:373::-;;24449:2;24438:9;24434:18;24426:26;;24498:9;24492:4;24488:20;24484:1;24473:9;24469:17;24462:47;24526:108;24629:4;24620:6;24526:108;:::i;:::-;24518:116;;24416:225;;;;:::o;24647:634::-;;24906:2;24895:9;24891:18;24883:26;;24955:9;24949:4;24945:20;24941:1;24930:9;24926:17;24919:47;24983:108;25086:4;25077:6;24983:108;:::i;:::-;24975:116;;25138:9;25132:4;25128:20;25123:2;25112:9;25108:18;25101:48;25166:108;25269:4;25260:6;25166:108;:::i;:::-;25158:116;;24873:408;;;;;:::o;25287:210::-;;25412:2;25401:9;25397:18;25389:26;;25425:65;25487:1;25476:9;25472:17;25463:6;25425:65;:::i;:::-;25379:118;;;;:::o;25503:313::-;;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:78;25804:4;25795:6;25731:78;:::i;:::-;25723:86;;25621:195;;;;:::o;25822:419::-;;26026:2;26015:9;26011:18;26003:26;;26075:9;26069:4;26065:20;26061:1;26050:9;26046:17;26039:47;26103:131;26229:4;26103:131;:::i;:::-;26095:139;;25993:248;;;:::o;26247:419::-;;26451:2;26440:9;26436:18;26428:26;;26500:9;26494:4;26490:20;26486:1;26475:9;26471:17;26464:47;26528:131;26654:4;26528:131;:::i;:::-;26520:139;;26418:248;;;:::o;26672:419::-;;26876:2;26865:9;26861:18;26853:26;;26925:9;26919:4;26915:20;26911:1;26900:9;26896:17;26889:47;26953:131;27079:4;26953:131;:::i;:::-;26945:139;;26843:248;;;:::o;27097:419::-;;27301:2;27290:9;27286:18;27278:26;;27350:9;27344:4;27340:20;27336:1;27325:9;27321:17;27314:47;27378:131;27504:4;27378:131;:::i;:::-;27370:139;;27268:248;;;:::o;27522:419::-;;27726:2;27715:9;27711:18;27703:26;;27775:9;27769:4;27765:20;27761:1;27750:9;27746:17;27739:47;27803:131;27929:4;27803:131;:::i;:::-;27795:139;;27693:248;;;:::o;27947:419::-;;28151:2;28140:9;28136:18;28128:26;;28200:9;28194:4;28190:20;28186:1;28175:9;28171:17;28164:47;28228:131;28354:4;28228:131;:::i;:::-;28220:139;;28118:248;;;:::o;28372:419::-;;28576:2;28565:9;28561:18;28553:26;;28625:9;28619:4;28615:20;28611:1;28600:9;28596:17;28589:47;28653:131;28779:4;28653:131;:::i;:::-;28645:139;;28543:248;;;:::o;28797:419::-;;29001:2;28990:9;28986:18;28978:26;;29050:9;29044:4;29040:20;29036:1;29025:9;29021:17;29014:47;29078:131;29204:4;29078:131;:::i;:::-;29070:139;;28968:248;;;:::o;29222:419::-;;29426:2;29415:9;29411:18;29403:26;;29475:9;29469:4;29465:20;29461:1;29450:9;29446:17;29439:47;29503:131;29629:4;29503:131;:::i;:::-;29495:139;;29393:248;;;:::o;29647:419::-;;29851:2;29840:9;29836:18;29828:26;;29900:9;29894:4;29890:20;29886:1;29875:9;29871:17;29864:47;29928:131;30054:4;29928:131;:::i;:::-;29920:139;;29818:248;;;:::o;30072:419::-;;30276:2;30265:9;30261:18;30253:26;;30325:9;30319:4;30315:20;30311:1;30300:9;30296:17;30289:47;30353:131;30479:4;30353:131;:::i;:::-;30345:139;;30243:248;;;:::o;30497:419::-;;30701:2;30690:9;30686:18;30678:26;;30750:9;30744:4;30740:20;30736:1;30725:9;30721:17;30714:47;30778:131;30904:4;30778:131;:::i;:::-;30770:139;;30668:248;;;:::o;30922:419::-;;31126:2;31115:9;31111:18;31103:26;;31175:9;31169:4;31165:20;31161:1;31150:9;31146:17;31139:47;31203:131;31329:4;31203:131;:::i;:::-;31195:139;;31093:248;;;:::o;31347:419::-;;31551:2;31540:9;31536:18;31528:26;;31600:9;31594:4;31590:20;31586:1;31575:9;31571:17;31564:47;31628:131;31754:4;31628:131;:::i;:::-;31620:139;;31518:248;;;:::o;31772:419::-;;31976:2;31965:9;31961:18;31953:26;;32025:9;32019:4;32015:20;32011:1;32000:9;31996:17;31989:47;32053:131;32179:4;32053:131;:::i;:::-;32045:139;;31943:248;;;:::o;32197:419::-;;32401:2;32390:9;32386:18;32378:26;;32450:9;32444:4;32440:20;32436:1;32425:9;32421:17;32414:47;32478:131;32604:4;32478:131;:::i;:::-;32470:139;;32368:248;;;:::o;32622:222::-;;32753:2;32742:9;32738:18;32730:26;;32766:71;32834:1;32823:9;32819:17;32810:6;32766:71;:::i;:::-;32720:124;;;;:::o;32850:332::-;;33009:2;32998:9;32994:18;32986:26;;33022:71;33090:1;33079:9;33075:17;33066:6;33022:71;:::i;:::-;33103:72;33171:2;33160:9;33156:18;33147:6;33103:72;:::i;:::-;32976:206;;;;;:::o;33188:129::-;;33249:20;;:::i;:::-;33239:30;;33278:33;33306:4;33298:6;33278:33;:::i;:::-;33229:88;;;:::o;33323:75::-;;33389:2;33383:9;33373:19;;33363:35;:::o;33404:311::-;;33571:18;33563:6;33560:30;33557:2;;;33593:18;;:::i;:::-;33557:2;33643:4;33635:6;33631:17;33623:25;;33703:4;33697;33693:15;33685:23;;33486:229;;;:::o;33721:321::-;;33898:18;33890:6;33887:30;33884:2;;;33920:18;;:::i;:::-;33884:2;33970:4;33962:6;33958:17;33950:25;;34030:4;34024;34020:15;34012:23;;33813:229;;;:::o;34048:311::-;;34215:18;34207:6;34204:30;34201:2;;;34237:18;;:::i;:::-;34201:2;34287:4;34279:6;34275:17;34267:25;;34347:4;34341;34337:15;34329:23;;34130:229;;;:::o;34365:307::-;;34516:18;34508:6;34505:30;34502:2;;;34538:18;;:::i;:::-;34502:2;34576:29;34598:6;34576:29;:::i;:::-;34568:37;;34660:4;34654;34650:15;34642:23;;34431:241;;;:::o;34678:308::-;;34830:18;34822:6;34819:30;34816:2;;;34852:18;;:::i;:::-;34816:2;34890:29;34912:6;34890:29;:::i;:::-;34882:37;;34974:4;34968;34964:15;34956:23;;34745:241;;;:::o;34992:132::-;;35082:3;35074:11;;35112:4;35107:3;35103:14;35095:22;;35064:60;;;:::o;35130:114::-;;35231:5;35225:12;35215:22;;35204:40;;;:::o;35250:98::-;;35335:5;35329:12;35319:22;;35308:40;;;:::o;35354:99::-;;35440:5;35434:12;35424:22;;35413:40;;;:::o;35459:113::-;;35561:4;35556:3;35552:14;35544:22;;35534:38;;;:::o;35578:184::-;;35711:6;35706:3;35699:19;35751:4;35746:3;35742:14;35727:29;;35689:73;;;;:::o;35768:168::-;;35885:6;35880:3;35873:19;35925:4;35920:3;35916:14;35901:29;;35863:73;;;;:::o;35942:169::-;;36060:6;36055:3;36048:19;36100:4;36095:3;36091:14;36076:29;;36038:73;;;;:::o;36117:305::-;;36176:20;36194:1;36176:20;:::i;:::-;36171:25;;36210:20;36228:1;36210:20;:::i;:::-;36205:25;;36364:1;36296:66;36292:74;36289:1;36286:81;36283:2;;;36370:18;;:::i;:::-;36283:2;36414:1;36411;36407:9;36400:16;;36161:261;;;;:::o;36428:191::-;;36488:20;36506:1;36488:20;:::i;:::-;36483:25;;36522:20;36540:1;36522:20;:::i;:::-;36517:25;;36561:1;36558;36555:8;36552:2;;;36566:18;;:::i;:::-;36552:2;36611:1;36608;36604:9;36596:17;;36473:146;;;;:::o;36625:96::-;;36691:24;36709:5;36691:24;:::i;:::-;36680:35;;36670:51;;;:::o;36727:90::-;;36804:5;36797:13;36790:21;36779:32;;36769:48;;;:::o;36823:149::-;;36899:66;36892:5;36888:78;36877:89;;36867:105;;;:::o;36978:126::-;;37055:42;37048:5;37044:54;37033:65;;37023:81;;;:::o;37110:77::-;;37176:5;37165:16;;37155:32;;;:::o;37193:154::-;37277:6;37272:3;37267;37254:30;37339:1;37330:6;37325:3;37321:16;37314:27;37244:103;;;:::o;37353:307::-;37421:1;37431:113;37445:6;37442:1;37439:13;37431:113;;;37530:1;37525:3;37521:11;37515:18;37511:1;37506:3;37502:11;37495:39;37467:2;37464:1;37460:10;37455:15;;37431:113;;;37562:6;37559:1;37556:13;37553:2;;;37642:1;37633:6;37628:3;37624:16;37617:27;37553:2;37402:258;;;;:::o;37666:320::-;;37747:1;37741:4;37737:12;37727:22;;37794:1;37788:4;37784:12;37815:18;37805:2;;37871:4;37863:6;37859:17;37849:27;;37805:2;37933;37925:6;37922:14;37902:18;37899:38;37896:2;;;37952:18;;:::i;:::-;37896:2;37717:269;;;;:::o;37992:281::-;38075:27;38097:4;38075:27;:::i;:::-;38067:6;38063:40;38205:6;38193:10;38190:22;38169:18;38157:10;38154:34;38151:62;38148:2;;;38216:18;;:::i;:::-;38148:2;38256:10;38252:2;38245:22;38035:238;;;:::o;38279:233::-;;38341:24;38359:5;38341:24;:::i;:::-;38332:33;;38387:66;38380:5;38377:77;38374:2;;;38457:18;;:::i;:::-;38374:2;38504:1;38497:5;38493:13;38486:20;;38322:190;;;:::o;38518:180::-;38566:77;38563:1;38556:88;38663:4;38660:1;38653:15;38687:4;38684:1;38677:15;38704:180;38752:77;38749:1;38742:88;38849:4;38846:1;38839:15;38873:4;38870:1;38863:15;38890:180;38938:77;38935:1;38928:88;39035:4;39032:1;39025:15;39059:4;39056:1;39049:15;39076:183;;39149:1;39131:16;39128:23;39125:2;;;39187:1;39184;39181;39166:23;39209:34;39240:1;39234:8;39209:34;:::i;:::-;39202:41;;39125:2;39115:144;:::o;39265:102::-;;39357:2;39353:7;39348:2;39341:5;39337:14;39333:28;39323:38;;39313:54;;;:::o;39373:106::-;;39466:5;39461:3;39457:15;39436:36;;39426:53;;;:::o;39485:239::-;39625:34;39621:1;39613:6;39609:14;39602:58;39694:22;39689:2;39681:6;39677:15;39670:47;39591:133;:::o;39730:227::-;39870:34;39866:1;39858:6;39854:14;39847:58;39939:10;39934:2;39926:6;39922:15;39915:35;39836:121;:::o;39963:230::-;40103:34;40099:1;40091:6;40087:14;40080:58;40172:13;40167:2;40159:6;40155:15;40148:38;40069:124;:::o;40199:172::-;40339:24;40335:1;40327:6;40323:14;40316:48;40305:66;:::o;40377:225::-;40517:34;40513:1;40505:6;40501:14;40494:58;40586:8;40581:2;40573:6;40569:15;40562:33;40483:119;:::o;40608:223::-;40748:34;40744:1;40736:6;40732:14;40725:58;40817:6;40812:2;40804:6;40800:15;40793:31;40714:117;:::o;40837:228::-;40977:34;40973:1;40965:6;40961:14;40954:58;41046:11;41041:2;41033:6;41029:15;41022:36;40943:122;:::o;41071:224::-;41211:34;41207:1;41199:6;41195:14;41188:58;41280:7;41275:2;41267:6;41263:15;41256:32;41177:118;:::o;41301:237::-;41441:34;41437:1;41429:6;41425:14;41418:58;41510:20;41505:2;41497:6;41493:15;41486:45;41407:131;:::o;41544:222::-;41684:34;41680:1;41672:6;41668:14;41661:58;41753:5;41748:2;41740:6;41736:15;41729:30;41650:116;:::o;41772:229::-;41912:34;41908:1;41900:6;41896:14;41889:58;41981:12;41976:2;41968:6;41964:15;41957:37;41878:123;:::o;42007:182::-;42147:34;42143:1;42135:6;42131:14;42124:58;42113:76;:::o;42195:228::-;42335:34;42331:1;42323:6;42319:14;42312:58;42404:11;42399:2;42391:6;42387:15;42380:36;42301:122;:::o;42429:228::-;42569:34;42565:1;42557:6;42553:14;42546:58;42638:11;42633:2;42625:6;42621:15;42614:36;42535:122;:::o;42663:227::-;42803:34;42799:1;42791:6;42787:14;42780:58;42872:10;42867:2;42859:6;42855:15;42848:35;42769:121;:::o;42896:220::-;43036:34;43032:1;43024:6;43020:14;43013:58;43105:3;43100:2;43092:6;43088:15;43081:28;43002:114;:::o;43122:711::-;;43199:4;43181:16;43178:26;43175:2;;;43207:5;;43175:2;43236:20;;:::i;:::-;43311:1;43293:16;43289:24;43286:1;43280:4;43265:49;43344:4;43338:11;43443:16;43436:4;43428:6;43424:17;43421:39;43388:18;43380:6;43377:30;43361:113;43358:2;;;43489:5;;;;43358:2;43535:6;43529:4;43525:17;43571:3;43565:10;43598:18;43590:6;43587:30;43584:2;;;43620:5;;;;;;43584:2;43668:6;43661:4;43656:3;43652:14;43648:27;43727:1;43709:16;43705:24;43699:4;43695:35;43690:3;43687:44;43684:2;;;43734:5;;;;;;;43684:2;43751:57;43799:6;43793:4;43789:17;43781:6;43777:30;43771:4;43751:57;:::i;:::-;43824:3;43817:10;;43165:668;;;;;;;:::o;43839:122::-;43912:24;43930:5;43912:24;:::i;:::-;43905:5;43902:35;43892:2;;43951:1;43948;43941:12;43892:2;43882:79;:::o;43967:116::-;44037:21;44052:5;44037:21;:::i;:::-;44030:5;44027:32;44017:2;;44073:1;44070;44063:12;44017:2;44007:76;:::o;44089:120::-;44161:23;44178:5;44161:23;:::i;:::-;44154:5;44151:34;44141:2;;44199:1;44196;44189:12;44141:2;44131:78;:::o;44215:122::-;44288:24;44306:5;44288:24;:::i;:::-;44281:5;44278:35;44268:2;;44327:1;44324;44317:12;44268:2;44258:79;:::o
Swarm Source
ipfs://876f6da444c1af1fe1516dbf7e62b0439cd9b1a400bd5e508e706202669dccd0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.