More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 333 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 60074166 | 171 days ago | IN | 0 POL | 0.00232935 | ||||
Set Approval For... | 56420183 | 265 days ago | IN | 0 POL | 0.00284585 | ||||
Set Approval For... | 56183100 | 271 days ago | IN | 0 POL | 0.0053591 | ||||
Safe Transfer Fr... | 56076134 | 274 days ago | IN | 0 POL | 0.00463526 | ||||
Set Approval For... | 54395056 | 318 days ago | IN | 0 POL | 0.00445502 | ||||
Set Approval For... | 54291657 | 321 days ago | IN | 0 POL | 0.00634461 | ||||
Set Approval For... | 53887487 | 331 days ago | IN | 0 POL | 0.00409911 | ||||
Set Approval For... | 53793504 | 333 days ago | IN | 0 POL | 0.00463696 | ||||
Set Approval For... | 51686775 | 388 days ago | IN | 0 POL | 0.00511033 | ||||
Set Approval For... | 51582324 | 390 days ago | IN | 0 POL | 0.00543106 | ||||
Safe Batch Trans... | 51153709 | 402 days ago | IN | 0 POL | 0.07283616 | ||||
Mint | 51153692 | 402 days ago | IN | 0 POL | 0.19316202 | ||||
Mint | 51153686 | 402 days ago | IN | 0 POL | 0.2677543 | ||||
Mint | 51153682 | 402 days ago | IN | 0 POL | 0.17836611 | ||||
Safe Batch Trans... | 51153664 | 402 days ago | IN | 0 POL | 0.02733904 | ||||
Safe Batch Trans... | 51153641 | 402 days ago | IN | 0 POL | 0.05962955 | ||||
Safe Batch Trans... | 51153621 | 402 days ago | IN | 0 POL | 0.07785784 | ||||
Mint | 51153569 | 402 days ago | IN | 0 POL | 0.17900664 | ||||
Mint | 51153557 | 402 days ago | IN | 0 POL | 0.36992721 | ||||
Mint | 51153411 | 402 days ago | IN | 0 POL | 0.14886147 | ||||
Mint | 51153399 | 402 days ago | IN | 0 POL | 0.15885447 | ||||
Withdraw Balance | 50892003 | 408 days ago | IN | 0 POL | 0.02660465 | ||||
Set Approval For... | 50650420 | 415 days ago | IN | 0 POL | 0.00233355 | ||||
Set Approval For... | 50563974 | 417 days ago | IN | 0 POL | 0.01595637 | ||||
Set Approval For... | 50550966 | 417 days ago | IN | 0 POL | 0.01088632 |
Latest 11 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
50892003 | 408 days ago | 8.3904713 POL | ||||
47156673 | 503 days ago | 0.00099195 POL | ||||
47131230 | 504 days ago | 0.00099165 POL | ||||
47114291 | 504 days ago | 0.00099157 POL | ||||
47056640 | 505 days ago | 0.00099153 POL | ||||
46930865 | 509 days ago | 0.00099271 POL | ||||
46930865 | 509 days ago | 0.29119456 POL | ||||
46407664 | 522 days ago | 0.40943469 POL | ||||
45255958 | 551 days ago | 4.7140012 POL | ||||
44924482 | 559 days ago | 0.67527053 POL | ||||
44923681 | 559 days ago | 0.67072825 POL |
Loading...
Loading
Contract Name:
HeroesBattleArena
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-06-30 */ // SPDX-License-Identifier: MIT // File: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } pragma solidity >=0.4.22 <0.9.0; pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; address private _admin; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); transferAdmin(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } function admin() public view virtual returns (address) { return _admin; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyAdmin() { require(admin() == _msgSender(), "Admin: caller is not the admin"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function transferAdmin(address newAdmin) public virtual onlyOwner { _admin = newAdmin; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (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/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256 tokenId) public view virtual override returns (string memory) { return ( string(abi.encodePacked(_uri, Strings.toString(tokenId), ".json")) ); } /** * @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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer( operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data ); uint256 fromBalance = _balances[id][from]; require( fromBalance >= amount, "ERC1155: insufficient balance for transfer" ); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require( fromBalance >= amount, "ERC1155: insufficient balance for transfer" ); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck( operator, from, to, ids, amounts, data ); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer( operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data ); _balances[id][to] += amount; for (uint256 i = 0; i < amount; i++) { emit TransferSingle(operator, address(0), to, id, 1); _doSafeTransferAcceptanceCheck( operator, address(0), to, id, 1, 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 (uint256 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 `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer( operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "" ); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require( fromBalance >= amount, "ERC1155: burn amount exceeds balance" ); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `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.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, amounts, data ) returns (bytes4 response) { if ( response != IERC1155Receiver.onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } pragma solidity ^0.8; pragma experimental ABIEncoderV2; interface IStdReference { /// A structure returned whenever someone requests for standard reference data. struct ReferenceData { uint256 rate; // base/quote exchange rate, multiplied by 1e18. uint256 lastUpdatedBase; // UNIX epoch of the last time when base price gets updated. uint256 lastUpdatedQuote; // UNIX epoch of the last time when quote price gets updated. } /// Returns the price data for the given base/quote pair. Revert if not available. function getReferenceData(string memory _base, string memory _quote) external view returns (ReferenceData memory); /// Similar to getReferenceData, but with multiple base/quote pairs at once. function getReferenceDataBulk( string[] memory _bases, string[] memory _quotes ) external view returns (ReferenceData[] memory); } pragma solidity ^0.8.7; abstract contract PriceConsumerV3 { AggregatorV3Interface internal priceFeed; constructor() { priceFeed = AggregatorV3Interface( 0xAB594600376Ec9fD91F8e885dADF0CE036862dE0 ); } /** * Returns the latest price */ function getLatestPrice() public view returns (int256) { ( , /*uint80 roundID*/ int256 price, /*uint startedAt*/ /*uint timeStamp*/ , , ) = /*uint80 answeredInRound*/ priceFeed.latestRoundData(); return price; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155, Ownable { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()) || _msgSender() == admin(), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @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) { 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.4; contract HeroesBattleArena is ERC1155, Ownable, ERC1155Burnable, PriceConsumerV3 { struct PartWithPrice { string name; uint256 price; string herotype; } string public name; using SafeMath for uint256; mapping(uint256 => PartWithPrice) allParts; uint256[] public partIds; uint256 public earlyHeroesSupply; uint256 public olympHeroesSupply; uint256 public nordHeroesSupply; uint256 public freeStonesSupply; uint256 public earlyHeroesNumber; uint256 public olympHeroesNumber; uint256 public nordHeroesNumber; bool reentrancyGuardFlag = false; constructor(string memory _url) ERC1155(_url) { name = "HEROES BATTLE ARENA"; earlyHeroesSupply = 70000; olympHeroesSupply = 50000; nordHeroesSupply = 30000; freeStonesSupply = 6; } function addPart( string memory nftName, uint256 id, uint256 price, string memory herotype ) public onlyAdmin { PartWithPrice storage newPart = allParts[id]; newPart.name = nftName; newPart.herotype = herotype; newPart.price = price; partIds.push(id); } function getPartById(uint256 id) public view returns (string memory, uint256) { PartWithPrice storage s = allParts[id]; return (s.name, s.price); } function getPartByName(string memory _name) public view returns (uint256) { for (uint256 i = 0; i <= partIds.length; i++) { PartWithPrice storage s = allParts[i]; if ( keccak256(abi.encodePacked(s.name)) == keccak256(abi.encodePacked(_name)) ) { return s.price; } } return 0; } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(string memory _name, uint256 amount) public payable { require(!reentrancyGuardFlag, "Reentrancy Guard Activated"); reentrancyGuardFlag = true; uint256 resultPrice = uint256(getLatestPrice()); uint256 maticAmount = msg.value; for (uint256 i = 0; i <= partIds.length; ++i) { PartWithPrice storage s = allParts[i]; if (keccak256(abi.encodePacked(s.name)) == keccak256(abi.encodePacked(_name))) { uint256 cost = amount.mul(s.price.mul(10**8)).div(resultPrice); if (msg.sender != owner()) { require(cost <= msg.value,"Value sent is not correct"); if (maticAmount > cost) { address payable refundAccount = payable(msg.sender); refundAccount.transfer(maticAmount.sub(cost)); maticAmount = cost; } } if (keccak256(abi.encodePacked((s.herotype))) == keccak256(abi.encodePacked(("Free")))) { require(balanceOf(msg.sender, i) + amount < freeStonesSupply,"You already have maximum free stone."); _mint(msg.sender, i, amount, "0x0"); continue; } else if (keccak256(abi.encodePacked((s.herotype))) == keccak256(abi.encodePacked(("Early")))) { require(earlyHeroesNumber.add(amount) <= earlyHeroesSupply,"There is no supply, right now."); _mint(msg.sender, i, amount, "0x0"); earlyHeroesNumber.add(amount); } else if (keccak256(abi.encodePacked((s.herotype))) == keccak256(abi.encodePacked(("Olymp")))) { require(earlyHeroesNumber.add(amount) <= olympHeroesSupply, "There is no supply, right now."); _mint(msg.sender, i, amount, "0x0"); olympHeroesNumber.add(amount); } else if (keccak256(abi.encodePacked((s.herotype))) ==keccak256(abi.encodePacked(("North")))) { require(nordHeroesNumber.add(amount) <= nordHeroesSupply,"There is no supply, right now."); _mint(msg.sender, i, amount, "0x0"); nordHeroesNumber.add(amount); } else { _mint(msg.sender, i, amount, "0x0"); } } } reentrancyGuardFlag = false; } function changeEarlySupply(uint256 supply) public onlyOwner { earlyHeroesSupply = supply; } function changeOlympSupply(uint256 supply) public onlyOwner { olympHeroesSupply = supply; } function changeNordSupply(uint256 supply) public onlyOwner { nordHeroesSupply = supply; } function changeFreeSupply(uint256 supply) public onlyOwner { freeStonesSupply = supply; } function withdrawBalance() public onlyOwner { payable(owner()).transfer(address(this).balance); } function getEstimatedMaticAmountForMint(uint256 amount , uint256 partId) public view returns (uint256) { uint256 resultPrice = uint256(getLatestPrice()); PartWithPrice storage s = allParts[partId]; return amount.mul(s.price.mul(10**8)).div(resultPrice); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_url","type":"string"}],"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":"string","name":"nftName","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"herotype","type":"string"}],"name":"addPart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"changeEarlySupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"changeFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"changeNordSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"changeOlympSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyHeroesNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyHeroesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeStonesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"partId","type":"uint256"}],"name":"getEstimatedMaticAmountForMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getPartById","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"getPartByName","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nordHeroesNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nordHeroesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"olympHeroesNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"olympHeroesSupply","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":"uint256","name":"","type":"uint256"}],"name":"partIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000601060006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162006084380380620060848339818101604052810190620000529190620004df565b8062000064816200016c60201b60201c565b5062000085620000796200018160201b60201c565b6200018960201b60201c565b620000a5620000996200018160201b60201c565b6200024f60201b60201c565b73ab594600376ec9fd91f8e885dadf0ce036862de0600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601381526020017f4845524f455320424154544c45204152454e4100000000000000000000000000815250600690816200014091906200077b565b506201117060098190555061c350600a81905550617530600b819055506006600c8190555050620008e5565b80600290816200017d91906200077b565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025f6200018160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002856200032260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d590620008c3565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003b5826200036a565b810181811067ffffffffffffffff82111715620003d757620003d66200037b565b5b80604052505050565b6000620003ec6200034c565b9050620003fa8282620003aa565b919050565b600067ffffffffffffffff8211156200041d576200041c6200037b565b5b62000428826200036a565b9050602081019050919050565b60005b838110156200045557808201518184015260208101905062000438565b60008484015250505050565b6000620004786200047284620003ff565b620003e0565b90508281526020810184848401111562000497576200049662000365565b5b620004a484828562000435565b509392505050565b600082601f830112620004c457620004c362000360565b5b8151620004d684826020860162000461565b91505092915050565b600060208284031215620004f857620004f762000356565b5b600082015167ffffffffffffffff8111156200051957620005186200035b565b5b6200052784828501620004ac565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058357607f821691505b6020821081036200059957620005986200053b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005c4565b6200060f8683620005c4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200065c62000656620006508462000627565b62000631565b62000627565b9050919050565b6000819050919050565b62000678836200063b565b62000690620006878262000663565b848454620005d1565b825550505050565b600090565b620006a762000698565b620006b48184846200066d565b505050565b5b81811015620006dc57620006d06000826200069d565b600181019050620006ba565b5050565b601f8211156200072b57620006f5816200059f565b6200070084620005b4565b8101602085101562000710578190505b620007286200071f85620005b4565b830182620006b9565b50505b505050565b600082821c905092915050565b6000620007506000198460080262000730565b1980831691505092915050565b60006200076b83836200073d565b9150826002028217905092915050565b620007868262000530565b67ffffffffffffffff811115620007a257620007a16200037b565b5b620007ae82546200056a565b620007bb828285620006e0565b600060209050601f831160018114620007f35760008415620007de578287015190505b620007ea85826200075d565b8655506200085a565b601f19841662000803866200059f565b60005b828110156200082d5784890151825560018201915060208501945060208101905062000806565b868310156200084d578489015162000849601f8916826200073d565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008ab60208362000862565b9150620008b88262000873565b602082019050919050565b60006020820190508181036000830152620008de816200089c565b9050919050565b61578f80620008f56000396000f3fe60806040526004361061020e5760003560e01c80635fd8c71011610118578063a22cb465116100a0578063f11a6b1a1161006f578063f11a6b1a146107a0578063f242432a146107cb578063f2fde38b146107f4578063f5298aca1461081d578063f851a440146108465761020e565b8063a22cb465146106e6578063a736e1331461070f578063c51bc9351461073a578063e985e9c5146107635761020e565b806375829def116100e757806375829def1461061357806387887bc61461063c57806387d7dbd9146106675780638da5cb5b146106905780638e15f473146106bb5761020e565b80635fd8c7101461057e5780636b20c454146105955780636ea34ce4146105be578063715018a6146105fc5761020e565b80632cbce36a1161019b5780633cb7ed581161016a5780633cb7ed581461048557806349ea5b4d146104b05780634e1273f4146104ed57806352fe38e61461052a5780635b391aba146105535761020e565b80632cbce36a146103cb5780632eb2c2d6146104085780633bd1b485146104315780633bf2abe31461045a5761020e565b80630399e445116101e25780630399e445146102f3578063056b01ce1461031e57806306fdde031461033a5780630e89341c146103655780631ff06178146103a25761020e565b8062fdd58e1461021357806301e427c81461025057806301ffc9a71461028d57806302fe5305146102ca575b600080fd5b34801561021f57600080fd5b5061023a6004803603810190610235919061353e565b610871565b604051610247919061358d565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906135a8565b610939565b604051610284919061358d565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061362d565b61095d565b6040516102c19190613675565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137d6565b610a3f565b005b3480156102ff57600080fd5b50610308610ac7565b604051610315919061358d565b60405180910390f35b6103386004803603810190610333919061381f565b610acd565b005b34801561034657600080fd5b5061034f61117b565b60405161035c91906138fa565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906135a8565b611209565b60405161039991906138fa565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906135a8565b61123d565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906137d6565b6112c3565b6040516103ff919061358d565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613a85565b611371565b005b34801561043d57600080fd5b50610458600480360381019061045391906135a8565b611412565b005b34801561046657600080fd5b5061046f611498565b60405161047c919061358d565b60405180910390f35b34801561049157600080fd5b5061049a61149e565b6040516104a7919061358d565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613b54565b6114a4565b6040516104e4919061358d565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613c57565b611511565b6040516105219190613d8d565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613daf565b61162a565b005b34801561055f57600080fd5b5061056861171a565b604051610575919061358d565b60405180910390f35b34801561058a57600080fd5b50610593611720565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613e4e565b6117ec565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906135a8565b611889565b6040516105f3929190613ed9565b60405180910390f35b34801561060857600080fd5b50610611611942565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613f09565b6119ca565b005b34801561064857600080fd5b50610651611a8a565b60405161065e919061358d565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906135a8565b611a90565b005b34801561069c57600080fd5b506106a5611b16565b6040516106b29190613f45565b60405180910390f35b3480156106c757600080fd5b506106d0611b40565b6040516106dd9190613f79565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613fc0565b611be1565b005b34801561071b57600080fd5b50610724611bf7565b604051610731919061358d565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906135a8565b611bfd565b005b34801561076f57600080fd5b5061078a60048036038101906107859190614000565b611c83565b6040516107979190613675565b60405180910390f35b3480156107ac57600080fd5b506107b5611d17565b6040516107c2919061358d565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190614040565b611d1d565b005b34801561080057600080fd5b5061081b60048036038101906108169190613f09565b611dbe565b005b34801561082957600080fd5b50610844600480360381019061083f91906140d7565b611eb5565b005b34801561085257600080fd5b5061085b611f96565b6040516108689190613f45565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d89061419c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6008818154811061094957600080fd5b906000526020600020016000915090505481565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a385750610a3782611fc0565b5b9050919050565b610a4761202a565b73ffffffffffffffffffffffffffffffffffffffff16610a65611b16565b73ffffffffffffffffffffffffffffffffffffffff1614610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290614208565b60405180910390fd5b610ac481612032565b50565b600b5481565b601060009054906101000a900460ff1615610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490614274565b60405180910390fd5b6001601060006101000a81548160ff0219169083151502179055506000610b42611b40565b9050600034905060005b600880549050811161115957600060076000838152602001908152602001600020905085604051602001610b8091906142d0565b6040516020818303038152906040528051906020012081600001604051602001610baa91906143df565b6040516020818303038152906040528051906020012003611146576000610c0685610bf8610be96305f5e100866001015461204590919063ffffffff16565b8961204590919063ffffffff16565b61205b90919063ffffffff16565b9050610c10611b16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cf15734811115610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614442565b60405180910390fd5b80841115610cf05760003390508073ffffffffffffffffffffffffffffffffffffffff166108fc610cbf848861207190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610cea573d6000803e3d6000fd5b50819450505b5b604051602001610d00906144ae565b6040516020818303038152906040528051906020012082600201604051602001610d2a91906143df565b6040516020818303038152906040528051906020012003610de557600c5486610d533386610871565b610d5d91906144f2565b10610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490614598565b60405180910390fd5b610dde3384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b5050611148565b604051602001610df490614604565b6040516020818303038152906040528051906020012082600201604051602001610e1e91906143df565b6040516020818303038152906040528051906020012003610eee57600954610e5187600d5461223d90919063ffffffff16565b1115610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614665565b60405180910390fd5b610ed33384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b610ee886600d5461223d90919063ffffffff16565b50611144565b604051602001610efd906146d1565b6040516020818303038152906040528051906020012082600201604051602001610f2791906143df565b6040516020818303038152906040528051906020012003610ff757600a54610f5a87600d5461223d90919063ffffffff16565b1115610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290614665565b60405180910390fd5b610fdc3384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b610ff186600e5461223d90919063ffffffff16565b50611143565b60405160200161100690614732565b604051602081830303815290604052805190602001208260020160405160200161103091906143df565b604051602081830303815290604052805190602001200361110057600b5461106387600f5461223d90919063ffffffff16565b11156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614665565b60405180910390fd5b6110e53384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b6110fa86600f5461223d90919063ffffffff16565b50611142565b6111413384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b5b5b5b505b505b8061115290614747565b9050610b4c565b506000601060006101000a81548160ff02191690831515021790555050505050565b6006805461118890614316565b80601f01602080910402602001604051908101604052809291908181526020018280546111b490614316565b80156112015780601f106111d657610100808354040283529160200191611201565b820191906000526020600020905b8154815290600101906020018083116111e457829003601f168201915b505050505081565b6060600261121683612253565b6040516020016112279291906147db565b6040516020818303038152906040529050919050565b61124561202a565b73ffffffffffffffffffffffffffffffffffffffff16611263611b16565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090614208565b60405180910390fd5b80600a8190555050565b600080600090505b6008805490508111611366576000600760008381526020019081526020016000209050836040516020016112ff91906142d0565b604051602081830303815290604052805190602001208160000160405160200161132991906143df565b60405160208183030381529060405280519060200120036113525780600101549250505061136c565b50808061135e90614747565b9150506112cb565b50600090505b919050565b61137961202a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806113bf57506113be856113b961202a565b611c83565b5b6113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f59061487c565b60405180910390fd5b61140b85858585856123b3565b5050505050565b61141a61202a565b73ffffffffffffffffffffffffffffffffffffffff16611438611b16565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614208565b60405180910390fd5b80600b8190555050565b600d5481565b600f5481565b6000806114af611b40565b90506000600760008581526020019081526020016000209050611507826114f96114ea6305f5e100856001015461204590919063ffffffff16565b8861204590919063ffffffff16565b61205b90919063ffffffff16565b9250505092915050565b60608151835114611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061490e565b60405180910390fd5b6000835167ffffffffffffffff811115611574576115736136ab565b5b6040519080825280602002602001820160405280156115a25781602001602082028036833780820191505090505b50905060005b845181101561161f576115ef8582815181106115c7576115c661492e565b5b60200260200101518583815181106115e2576115e161492e565b5b6020026020010151610871565b8282815181106116025761160161492e565b5b6020026020010181815250508061161890614747565b90506115a8565b508091505092915050565b61163261202a565b73ffffffffffffffffffffffffffffffffffffffff16611650611f96565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906149a9565b60405180910390fd5b6000600760008581526020019081526020016000209050848160000190816116ce9190614b60565b50818160020190816116e09190614b60565b5082816001018190555060088490806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b600e5481565b61172861202a565b73ffffffffffffffffffffffffffffffffffffffff16611746611b16565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614208565b60405180910390fd5b6117a4611b16565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117e9573d6000803e3d6000fd5b50565b6117f461202a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061183a57506118398361183461202a565b611c83565b5b611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614ca4565b60405180910390fd5b6118848383836126c6565b505050565b60606000806007600085815260200190815260200160002090508060000181600101548180546118b890614316565b80601f01602080910402602001604051908101604052809291908181526020018280546118e490614316565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b505050505091509250925050915091565b61194a61202a565b73ffffffffffffffffffffffffffffffffffffffff16611968611b16565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614208565b60405180910390fd5b6119c86000612974565b565b6119d261202a565b73ffffffffffffffffffffffffffffffffffffffff166119f0611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614208565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b611a9861202a565b73ffffffffffffffffffffffffffffffffffffffff16611ab6611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614208565b60405180910390fd5b80600c8190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd49190614d47565b5050509150508091505090565b611bf3611bec61202a565b8383612a3a565b5050565b60095481565b611c0561202a565b73ffffffffffffffffffffffffffffffffffffffff16611c23611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614208565b60405180910390fd5b8060098190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611d2561202a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611d6b5750611d6a85611d6561202a565b611c83565b5b611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614ca4565b60405180910390fd5b611db78585858585612ba6565b5050505050565b611dc661202a565b73ffffffffffffffffffffffffffffffffffffffff16611de4611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614e34565b60405180910390fd5b611eb281612974565b50565b611ebd61202a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611f035750611f0283611efd61202a565b611c83565b5b80611f475750611f11611f96565b73ffffffffffffffffffffffffffffffffffffffff16611f2f61202a565b73ffffffffffffffffffffffffffffffffffffffff16145b611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90614ca4565b60405180910390fd5b611f91838383612e27565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290816120419190614b60565b5050565b600081836120539190614e54565b905092915050565b600081836120699190614ec5565b905092915050565b6000818361207f9190614ef6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614f9c565b60405180910390fd5b600061210061202a565b90506121218160008761211288613043565b61211b88613043565b876130bd565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218091906144f2565b9250508190555060005b83811015612235578573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288600160405161220a929190614ff7565b60405180910390a461222282600088886001886130c5565b808061222d90614747565b91505061218a565b505050505050565b6000818361224b91906144f2565b905092915050565b60606000820361229a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123ae565b600082905060005b600082146122cc5780806122b590614747565b915050600a826122c59190614ec5565b91506122a2565b60008167ffffffffffffffff8111156122e8576122e76136ab565b5b6040519080825280601f01601f19166020018201604052801561231a5781602001600182028036833780820191505090505b5090505b600085146123a7576001826123339190614ef6565b9150600a856123429190615020565b603061234e91906144f2565b60f81b8183815181106123645761236361492e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123a09190614ec5565b945061231e565b8093505050505b919050565b81518351146123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee906150c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90615155565b60405180910390fd5b600061247061202a565b90506124808187878787876130bd565b60005b84518110156126315760008582815181106124a1576124a061492e565b5b6020026020010151905060008583815181106124c0576124bf61492e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906151e7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261691906144f2565b925050819055505050508061262a90614747565b9050612483565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126a8929190615207565b60405180910390a46126be81878787878761329c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c906152b0565b60405180910390fd5b8051825114612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906150c3565b60405180910390fd5b600061278361202a565b90506127a3818560008686604051806020016040528060008152506130bd565b60005b83518110156128ee5760008482815181106127c4576127c361492e565b5b6020026020010151905060008483815181106127e3576127e261492e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b90615342565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050806128e790614747565b90506127a6565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612966929190615207565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f906153d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b999190613675565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615155565b60405180910390fd5b6000612c1f61202a565b9050612c3f818787612c3088613043565b612c3988613043565b876130bd565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccd906151e7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d8b91906144f2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612e089291906153f4565b60405180910390a4612e1e8288888888886130c5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906152b0565b60405180910390fd5b6000612ea061202a565b9050612ed081856000612eb287613043565b612ebb87613043565b604051806020016040528060008152506130bd565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90615342565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130349291906153f4565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115613062576130616136ab565b5b6040519080825280602002602001820160405280156130905781602001602082028036833780820191505090505b50905082816000815181106130a8576130a761492e565b5b60200260200101818152505080915050919050565b505050505050565b6130e48473ffffffffffffffffffffffffffffffffffffffff16613473565b15613294578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161312a959493929190615472565b6020604051808303816000875af192505050801561316657506040513d601f19601f8201168201806040525081019061316391906154e1565b60015b61320b5761317261551b565b806308c379a0036131ce575061318661553d565b8061319157506131d0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c591906138fa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132029061563f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613289906156d1565b60405180910390fd5b505b505050505050565b6132bb8473ffffffffffffffffffffffffffffffffffffffff16613473565b1561346b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016133019594939291906156f1565b6020604051808303816000875af192505050801561333d57506040513d601f19601f8201168201806040525081019061333a91906154e1565b60015b6133e25761334961551b565b806308c379a0036133a5575061335d61553d565b8061336857506133a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339c91906138fa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061563f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906156d1565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134d5826134aa565b9050919050565b6134e5816134ca565b81146134f057600080fd5b50565b600081359050613502816134dc565b92915050565b6000819050919050565b61351b81613508565b811461352657600080fd5b50565b60008135905061353881613512565b92915050565b60008060408385031215613555576135546134a0565b5b6000613563858286016134f3565b925050602061357485828601613529565b9150509250929050565b61358781613508565b82525050565b60006020820190506135a2600083018461357e565b92915050565b6000602082840312156135be576135bd6134a0565b5b60006135cc84828501613529565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61360a816135d5565b811461361557600080fd5b50565b60008135905061362781613601565b92915050565b600060208284031215613643576136426134a0565b5b600061365184828501613618565b91505092915050565b60008115159050919050565b61366f8161365a565b82525050565b600060208201905061368a6000830184613666565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136e38261369a565b810181811067ffffffffffffffff82111715613702576137016136ab565b5b80604052505050565b6000613715613496565b905061372182826136da565b919050565b600067ffffffffffffffff821115613741576137406136ab565b5b61374a8261369a565b9050602081019050919050565b82818337600083830152505050565b600061377961377484613726565b61370b565b90508281526020810184848401111561379557613794613695565b5b6137a0848285613757565b509392505050565b600082601f8301126137bd576137bc613690565b5b81356137cd848260208601613766565b91505092915050565b6000602082840312156137ec576137eb6134a0565b5b600082013567ffffffffffffffff81111561380a576138096134a5565b5b613816848285016137a8565b91505092915050565b60008060408385031215613836576138356134a0565b5b600083013567ffffffffffffffff811115613854576138536134a5565b5b613860858286016137a8565b925050602061387185828601613529565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138b557808201518184015260208101905061389a565b60008484015250505050565b60006138cc8261387b565b6138d68185613886565b93506138e6818560208601613897565b6138ef8161369a565b840191505092915050565b6000602082019050818103600083015261391481846138c1565b905092915050565b600067ffffffffffffffff821115613937576139366136ab565b5b602082029050602081019050919050565b600080fd5b600061396061395b8461391c565b61370b565b9050808382526020820190506020840283018581111561398357613982613948565b5b835b818110156139ac57806139988882613529565b845260208401935050602081019050613985565b5050509392505050565b600082601f8301126139cb576139ca613690565b5b81356139db84826020860161394d565b91505092915050565b600067ffffffffffffffff8211156139ff576139fe6136ab565b5b613a088261369a565b9050602081019050919050565b6000613a28613a23846139e4565b61370b565b905082815260208101848484011115613a4457613a43613695565b5b613a4f848285613757565b509392505050565b600082601f830112613a6c57613a6b613690565b5b8135613a7c848260208601613a15565b91505092915050565b600080600080600060a08688031215613aa157613aa06134a0565b5b6000613aaf888289016134f3565b9550506020613ac0888289016134f3565b945050604086013567ffffffffffffffff811115613ae157613ae06134a5565b5b613aed888289016139b6565b935050606086013567ffffffffffffffff811115613b0e57613b0d6134a5565b5b613b1a888289016139b6565b925050608086013567ffffffffffffffff811115613b3b57613b3a6134a5565b5b613b4788828901613a57565b9150509295509295909350565b60008060408385031215613b6b57613b6a6134a0565b5b6000613b7985828601613529565b9250506020613b8a85828601613529565b9150509250929050565b600067ffffffffffffffff821115613baf57613bae6136ab565b5b602082029050602081019050919050565b6000613bd3613bce84613b94565b61370b565b90508083825260208201905060208402830185811115613bf657613bf5613948565b5b835b81811015613c1f5780613c0b88826134f3565b845260208401935050602081019050613bf8565b5050509392505050565b600082601f830112613c3e57613c3d613690565b5b8135613c4e848260208601613bc0565b91505092915050565b60008060408385031215613c6e57613c6d6134a0565b5b600083013567ffffffffffffffff811115613c8c57613c8b6134a5565b5b613c9885828601613c29565b925050602083013567ffffffffffffffff811115613cb957613cb86134a5565b5b613cc5858286016139b6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d0481613508565b82525050565b6000613d168383613cfb565b60208301905092915050565b6000602082019050919050565b6000613d3a82613ccf565b613d448185613cda565b9350613d4f83613ceb565b8060005b83811015613d80578151613d678882613d0a565b9750613d7283613d22565b925050600181019050613d53565b5085935050505092915050565b60006020820190508181036000830152613da78184613d2f565b905092915050565b60008060008060808587031215613dc957613dc86134a0565b5b600085013567ffffffffffffffff811115613de757613de66134a5565b5b613df3878288016137a8565b9450506020613e0487828801613529565b9350506040613e1587828801613529565b925050606085013567ffffffffffffffff811115613e3657613e356134a5565b5b613e42878288016137a8565b91505092959194509250565b600080600060608486031215613e6757613e666134a0565b5b6000613e75868287016134f3565b935050602084013567ffffffffffffffff811115613e9657613e956134a5565b5b613ea2868287016139b6565b925050604084013567ffffffffffffffff811115613ec357613ec26134a5565b5b613ecf868287016139b6565b9150509250925092565b60006040820190508181036000830152613ef381856138c1565b9050613f02602083018461357e565b9392505050565b600060208284031215613f1f57613f1e6134a0565b5b6000613f2d848285016134f3565b91505092915050565b613f3f816134ca565b82525050565b6000602082019050613f5a6000830184613f36565b92915050565b6000819050919050565b613f7381613f60565b82525050565b6000602082019050613f8e6000830184613f6a565b92915050565b613f9d8161365a565b8114613fa857600080fd5b50565b600081359050613fba81613f94565b92915050565b60008060408385031215613fd757613fd66134a0565b5b6000613fe5858286016134f3565b9250506020613ff685828601613fab565b9150509250929050565b60008060408385031215614017576140166134a0565b5b6000614025858286016134f3565b9250506020614036858286016134f3565b9150509250929050565b600080600080600060a0868803121561405c5761405b6134a0565b5b600061406a888289016134f3565b955050602061407b888289016134f3565b945050604061408c88828901613529565b935050606061409d88828901613529565b925050608086013567ffffffffffffffff8111156140be576140bd6134a5565b5b6140ca88828901613a57565b9150509295509295909350565b6000806000606084860312156140f0576140ef6134a0565b5b60006140fe868287016134f3565b935050602061410f86828701613529565b925050604061412086828701613529565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614186602b83613886565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141f2602083613886565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f5265656e7472616e637920477561726420416374697661746564000000000000600082015250565b600061425e601a83613886565b915061426982614228565b602082019050919050565b6000602082019050818103600083015261428d81614251565b9050919050565b600081905092915050565b60006142aa8261387b565b6142b48185614294565b93506142c4818560208601613897565b80840191505092915050565b60006142dc828461429f565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061432e57607f821691505b602082108103614341576143406142e7565b5b50919050565b60008190508160005260206000209050919050565b6000815461436981614316565b6143738186614294565b9450600182166000811461438e57600181146143a3576143d6565b60ff19831686528115158202860193506143d6565b6143ac85614347565b60005b838110156143ce578154818901526001820191506020810190506143af565b838801955050505b50505092915050565b60006143eb828461435c565b915081905092915050565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b600061442c601983613886565b9150614437826143f6565b602082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f4672656500000000000000000000000000000000000000000000000000000000600082015250565b6000614498600483614294565b91506144a382614462565b600482019050919050565b60006144b98261448b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144fd82613508565b915061450883613508565b92508282019050808211156145205761451f6144c3565b5b92915050565b7f596f7520616c72656164792068617665206d6178696d756d206672656520737460008201527f6f6e652e00000000000000000000000000000000000000000000000000000000602082015250565b6000614582602483613886565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4561726c79000000000000000000000000000000000000000000000000000000600082015250565b60006145ee600583614294565b91506145f9826145b8565b600582019050919050565b600061460f826145e1565b9150819050919050565b7f5468657265206973206e6f20737570706c792c207269676874206e6f772e0000600082015250565b600061464f601e83613886565b915061465a82614619565b602082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f4f6c796d70000000000000000000000000000000000000000000000000000000600082015250565b60006146bb600583614294565b91506146c682614685565b600582019050919050565b60006146dc826146ae565b9150819050919050565b7f4e6f727468000000000000000000000000000000000000000000000000000000600082015250565b600061471c600583614294565b9150614727826146e6565b600582019050919050565b600061473d8261470f565b9150819050919050565b600061475282613508565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614784576147836144c3565b5b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006147c5600583614294565b91506147d08261478f565b600582019050919050565b60006147e7828561435c565b91506147f3828461429f565b91506147fe826147b8565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614866603283613886565b91506148718261480a565b604082019050919050565b6000602082019050818103600083015261489581614859565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006148f8602983613886565b91506149038261489c565b604082019050919050565b60006020820190508181036000830152614927816148eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f41646d696e3a2063616c6c6572206973206e6f74207468652061646d696e0000600082015250565b6000614993601e83613886565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614a167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149d9565b614a2086836149d9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614a5d614a58614a5384613508565b614a38565b613508565b9050919050565b6000819050919050565b614a7783614a42565b614a8b614a8382614a64565b8484546149e6565b825550505050565b600090565b614aa0614a93565b614aab818484614a6e565b505050565b5b81811015614acf57614ac4600082614a98565b600181019050614ab1565b5050565b601f821115614b1457614ae581614347565b614aee846149c9565b81016020851015614afd578190505b614b11614b09856149c9565b830182614ab0565b50505b505050565b600082821c905092915050565b6000614b3760001984600802614b19565b1980831691505092915050565b6000614b508383614b26565b9150826002028217905092915050565b614b698261387b565b67ffffffffffffffff811115614b8257614b816136ab565b5b614b8c8254614316565b614b97828285614ad3565b600060209050601f831160018114614bca5760008415614bb8578287015190505b614bc28582614b44565b865550614c2a565b601f198416614bd886614347565b60005b82811015614c0057848901518255600182019150602085019450602081019050614bdb565b86831015614c1d5784890151614c19601f891682614b26565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614c8e602983613886565b9150614c9982614c32565b604082019050919050565b60006020820190508181036000830152614cbd81614c81565b9050919050565b600069ffffffffffffffffffff82169050919050565b614ce381614cc4565b8114614cee57600080fd5b50565b600081519050614d0081614cda565b92915050565b614d0f81613f60565b8114614d1a57600080fd5b50565b600081519050614d2c81614d06565b92915050565b600081519050614d4181613512565b92915050565b600080600080600060a08688031215614d6357614d626134a0565b5b6000614d7188828901614cf1565b9550506020614d8288828901614d1d565b9450506040614d9388828901614d32565b9350506060614da488828901614d32565b9250506080614db588828901614cf1565b9150509295509295909350565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e1e602683613886565b9150614e2982614dc2565b604082019050919050565b60006020820190508181036000830152614e4d81614e11565b9050919050565b6000614e5f82613508565b9150614e6a83613508565b9250828202614e7881613508565b91508282048414831517614e8f57614e8e6144c3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ed082613508565b9150614edb83613508565b925082614eeb57614eea614e96565b5b828204905092915050565b6000614f0182613508565b9150614f0c83613508565b9250828203905081811115614f2457614f236144c3565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f86602183613886565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b6000819050919050565b6000614fe1614fdc614fd784614fbc565b614a38565b613508565b9050919050565b614ff181614fc6565b82525050565b600060408201905061500c600083018561357e565b6150196020830184614fe8565b9392505050565b600061502b82613508565b915061503683613508565b92508261504657615045614e96565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006150ad602883613886565b91506150b882615051565b604082019050919050565b600060208201905081810360008301526150dc816150a0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061513f602583613886565b915061514a826150e3565b604082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006151d1602a83613886565b91506151dc82615175565b604082019050919050565b60006020820190508181036000830152615200816151c4565b9050919050565b600060408201905081810360008301526152218185613d2f565b905081810360208301526152358184613d2f565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061529a602383613886565b91506152a58261523e565b604082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061532c602483613886565b9150615337826152d0565b604082019050919050565b6000602082019050818103600083015261535b8161531f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006153be602983613886565b91506153c982615362565b604082019050919050565b600060208201905081810360008301526153ed816153b1565b9050919050565b6000604082019050615409600083018561357e565b615416602083018461357e565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006154448261541d565b61544e8185615428565b935061545e818560208601613897565b6154678161369a565b840191505092915050565b600060a0820190506154876000830188613f36565b6154946020830187613f36565b6154a1604083018661357e565b6154ae606083018561357e565b81810360808301526154c08184615439565b90509695505050505050565b6000815190506154db81613601565b92915050565b6000602082840312156154f7576154f66134a0565b5b6000615505848285016154cc565b91505092915050565b60008160e01c9050919050565b600060033d111561553a5760046000803e61553760005161550e565b90505b90565b600060443d106155ca5761554f613496565b60043d036004823e80513d602482011167ffffffffffffffff821117156155775750506155ca565b808201805167ffffffffffffffff81111561559557505050506155ca565b80602083010160043d0385018111156155b25750505050506155ca565b6155c1826020018501866136da565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615629603483613886565b9150615634826155cd565b604082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006156bb602883613886565b91506156c68261565f565b604082019050919050565b600060208201905081810360008301526156ea816156ae565b9050919050565b600060a0820190506157066000830188613f36565b6157136020830187613f36565b81810360408301526157258186613d2f565b905081810360608301526157398185613d2f565b9050818103608083015261574d8184615439565b9050969550505050505056fea264697066735822122035843e63d2816896b0c6e5878dabc51405bd837a468d54ea72fcdfa5ed13985564736f6c634300081300330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006168747470733a2f2f656d6572616c642d6661722d636f72616c2d3738302e6d7970696e6174612e636c6f75642f697066732f516d5452534e34424a716d524a426b57467674716d39436b79423138434d44486d50696a577067754763657a786a2f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020e5760003560e01c80635fd8c71011610118578063a22cb465116100a0578063f11a6b1a1161006f578063f11a6b1a146107a0578063f242432a146107cb578063f2fde38b146107f4578063f5298aca1461081d578063f851a440146108465761020e565b8063a22cb465146106e6578063a736e1331461070f578063c51bc9351461073a578063e985e9c5146107635761020e565b806375829def116100e757806375829def1461061357806387887bc61461063c57806387d7dbd9146106675780638da5cb5b146106905780638e15f473146106bb5761020e565b80635fd8c7101461057e5780636b20c454146105955780636ea34ce4146105be578063715018a6146105fc5761020e565b80632cbce36a1161019b5780633cb7ed581161016a5780633cb7ed581461048557806349ea5b4d146104b05780634e1273f4146104ed57806352fe38e61461052a5780635b391aba146105535761020e565b80632cbce36a146103cb5780632eb2c2d6146104085780633bd1b485146104315780633bf2abe31461045a5761020e565b80630399e445116101e25780630399e445146102f3578063056b01ce1461031e57806306fdde031461033a5780630e89341c146103655780631ff06178146103a25761020e565b8062fdd58e1461021357806301e427c81461025057806301ffc9a71461028d57806302fe5305146102ca575b600080fd5b34801561021f57600080fd5b5061023a6004803603810190610235919061353e565b610871565b604051610247919061358d565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906135a8565b610939565b604051610284919061358d565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061362d565b61095d565b6040516102c19190613675565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137d6565b610a3f565b005b3480156102ff57600080fd5b50610308610ac7565b604051610315919061358d565b60405180910390f35b6103386004803603810190610333919061381f565b610acd565b005b34801561034657600080fd5b5061034f61117b565b60405161035c91906138fa565b60405180910390f35b34801561037157600080fd5b5061038c600480360381019061038791906135a8565b611209565b60405161039991906138fa565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906135a8565b61123d565b005b3480156103d757600080fd5b506103f260048036038101906103ed91906137d6565b6112c3565b6040516103ff919061358d565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613a85565b611371565b005b34801561043d57600080fd5b50610458600480360381019061045391906135a8565b611412565b005b34801561046657600080fd5b5061046f611498565b60405161047c919061358d565b60405180910390f35b34801561049157600080fd5b5061049a61149e565b6040516104a7919061358d565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613b54565b6114a4565b6040516104e4919061358d565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613c57565b611511565b6040516105219190613d8d565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613daf565b61162a565b005b34801561055f57600080fd5b5061056861171a565b604051610575919061358d565b60405180910390f35b34801561058a57600080fd5b50610593611720565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190613e4e565b6117ec565b005b3480156105ca57600080fd5b506105e560048036038101906105e091906135a8565b611889565b6040516105f3929190613ed9565b60405180910390f35b34801561060857600080fd5b50610611611942565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613f09565b6119ca565b005b34801561064857600080fd5b50610651611a8a565b60405161065e919061358d565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906135a8565b611a90565b005b34801561069c57600080fd5b506106a5611b16565b6040516106b29190613f45565b60405180910390f35b3480156106c757600080fd5b506106d0611b40565b6040516106dd9190613f79565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613fc0565b611be1565b005b34801561071b57600080fd5b50610724611bf7565b604051610731919061358d565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906135a8565b611bfd565b005b34801561076f57600080fd5b5061078a60048036038101906107859190614000565b611c83565b6040516107979190613675565b60405180910390f35b3480156107ac57600080fd5b506107b5611d17565b6040516107c2919061358d565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190614040565b611d1d565b005b34801561080057600080fd5b5061081b60048036038101906108169190613f09565b611dbe565b005b34801561082957600080fd5b50610844600480360381019061083f91906140d7565b611eb5565b005b34801561085257600080fd5b5061085b611f96565b6040516108689190613f45565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d89061419c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6008818154811061094957600080fd5b906000526020600020016000915090505481565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a385750610a3782611fc0565b5b9050919050565b610a4761202a565b73ffffffffffffffffffffffffffffffffffffffff16610a65611b16565b73ffffffffffffffffffffffffffffffffffffffff1614610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290614208565b60405180910390fd5b610ac481612032565b50565b600b5481565b601060009054906101000a900460ff1615610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490614274565b60405180910390fd5b6001601060006101000a81548160ff0219169083151502179055506000610b42611b40565b9050600034905060005b600880549050811161115957600060076000838152602001908152602001600020905085604051602001610b8091906142d0565b6040516020818303038152906040528051906020012081600001604051602001610baa91906143df565b6040516020818303038152906040528051906020012003611146576000610c0685610bf8610be96305f5e100866001015461204590919063ffffffff16565b8961204590919063ffffffff16565b61205b90919063ffffffff16565b9050610c10611b16565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cf15734811115610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90614442565b60405180910390fd5b80841115610cf05760003390508073ffffffffffffffffffffffffffffffffffffffff166108fc610cbf848861207190919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610cea573d6000803e3d6000fd5b50819450505b5b604051602001610d00906144ae565b6040516020818303038152906040528051906020012082600201604051602001610d2a91906143df565b6040516020818303038152906040528051906020012003610de557600c5486610d533386610871565b610d5d91906144f2565b10610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490614598565b60405180910390fd5b610dde3384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b5050611148565b604051602001610df490614604565b6040516020818303038152906040528051906020012082600201604051602001610e1e91906143df565b6040516020818303038152906040528051906020012003610eee57600954610e5187600d5461223d90919063ffffffff16565b1115610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990614665565b60405180910390fd5b610ed33384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b610ee886600d5461223d90919063ffffffff16565b50611144565b604051602001610efd906146d1565b6040516020818303038152906040528051906020012082600201604051602001610f2791906143df565b6040516020818303038152906040528051906020012003610ff757600a54610f5a87600d5461223d90919063ffffffff16565b1115610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290614665565b60405180910390fd5b610fdc3384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b610ff186600e5461223d90919063ffffffff16565b50611143565b60405160200161100690614732565b604051602081830303815290604052805190602001208260020160405160200161103091906143df565b604051602081830303815290604052805190602001200361110057600b5461106387600f5461223d90919063ffffffff16565b11156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614665565b60405180910390fd5b6110e53384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b6110fa86600f5461223d90919063ffffffff16565b50611142565b6111413384886040518060400160405280600381526020017f3078300000000000000000000000000000000000000000000000000000000000815250612087565b5b5b5b505b505b8061115290614747565b9050610b4c565b506000601060006101000a81548160ff02191690831515021790555050505050565b6006805461118890614316565b80601f01602080910402602001604051908101604052809291908181526020018280546111b490614316565b80156112015780601f106111d657610100808354040283529160200191611201565b820191906000526020600020905b8154815290600101906020018083116111e457829003601f168201915b505050505081565b6060600261121683612253565b6040516020016112279291906147db565b6040516020818303038152906040529050919050565b61124561202a565b73ffffffffffffffffffffffffffffffffffffffff16611263611b16565b73ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090614208565b60405180910390fd5b80600a8190555050565b600080600090505b6008805490508111611366576000600760008381526020019081526020016000209050836040516020016112ff91906142d0565b604051602081830303815290604052805190602001208160000160405160200161132991906143df565b60405160208183030381529060405280519060200120036113525780600101549250505061136c565b50808061135e90614747565b9150506112cb565b50600090505b919050565b61137961202a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806113bf57506113be856113b961202a565b611c83565b5b6113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f59061487c565b60405180910390fd5b61140b85858585856123b3565b5050505050565b61141a61202a565b73ffffffffffffffffffffffffffffffffffffffff16611438611b16565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148590614208565b60405180910390fd5b80600b8190555050565b600d5481565b600f5481565b6000806114af611b40565b90506000600760008581526020019081526020016000209050611507826114f96114ea6305f5e100856001015461204590919063ffffffff16565b8861204590919063ffffffff16565b61205b90919063ffffffff16565b9250505092915050565b60608151835114611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9061490e565b60405180910390fd5b6000835167ffffffffffffffff811115611574576115736136ab565b5b6040519080825280602002602001820160405280156115a25781602001602082028036833780820191505090505b50905060005b845181101561161f576115ef8582815181106115c7576115c661492e565b5b60200260200101518583815181106115e2576115e161492e565b5b6020026020010151610871565b8282815181106116025761160161492e565b5b6020026020010181815250508061161890614747565b90506115a8565b508091505092915050565b61163261202a565b73ffffffffffffffffffffffffffffffffffffffff16611650611f96565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906149a9565b60405180910390fd5b6000600760008581526020019081526020016000209050848160000190816116ce9190614b60565b50818160020190816116e09190614b60565b5082816001018190555060088490806001815401808255809150506001900390600052602060002001600090919091909150555050505050565b600e5481565b61172861202a565b73ffffffffffffffffffffffffffffffffffffffff16611746611b16565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390614208565b60405180910390fd5b6117a4611b16565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156117e9573d6000803e3d6000fd5b50565b6117f461202a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061183a57506118398361183461202a565b611c83565b5b611879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187090614ca4565b60405180910390fd5b6118848383836126c6565b505050565b60606000806007600085815260200190815260200160002090508060000181600101548180546118b890614316565b80601f01602080910402602001604051908101604052809291908181526020018280546118e490614316565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b505050505091509250925050915091565b61194a61202a565b73ffffffffffffffffffffffffffffffffffffffff16611968611b16565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590614208565b60405180910390fd5b6119c86000612974565b565b6119d261202a565b73ffffffffffffffffffffffffffffffffffffffff166119f0611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90614208565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b611a9861202a565b73ffffffffffffffffffffffffffffffffffffffff16611ab6611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614208565b60405180910390fd5b80600c8190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd49190614d47565b5050509150508091505090565b611bf3611bec61202a565b8383612a3a565b5050565b60095481565b611c0561202a565b73ffffffffffffffffffffffffffffffffffffffff16611c23611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614208565b60405180910390fd5b8060098190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611d2561202a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611d6b5750611d6a85611d6561202a565b611c83565b5b611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614ca4565b60405180910390fd5b611db78585858585612ba6565b5050505050565b611dc661202a565b73ffffffffffffffffffffffffffffffffffffffff16611de4611b16565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614e34565b60405180910390fd5b611eb281612974565b50565b611ebd61202a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611f035750611f0283611efd61202a565b611c83565b5b80611f475750611f11611f96565b73ffffffffffffffffffffffffffffffffffffffff16611f2f61202a565b73ffffffffffffffffffffffffffffffffffffffff16145b611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90614ca4565b60405180910390fd5b611f91838383612e27565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290816120419190614b60565b5050565b600081836120539190614e54565b905092915050565b600081836120699190614ec5565b905092915050565b6000818361207f9190614ef6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614f9c565b60405180910390fd5b600061210061202a565b90506121218160008761211288613043565b61211b88613043565b876130bd565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461218091906144f2565b9250508190555060005b83811015612235578573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288600160405161220a929190614ff7565b60405180910390a461222282600088886001886130c5565b808061222d90614747565b91505061218a565b505050505050565b6000818361224b91906144f2565b905092915050565b60606000820361229a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123ae565b600082905060005b600082146122cc5780806122b590614747565b915050600a826122c59190614ec5565b91506122a2565b60008167ffffffffffffffff8111156122e8576122e76136ab565b5b6040519080825280601f01601f19166020018201604052801561231a5781602001600182028036833780820191505090505b5090505b600085146123a7576001826123339190614ef6565b9150600a856123429190615020565b603061234e91906144f2565b60f81b8183815181106123645761236361492e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123a09190614ec5565b945061231e565b8093505050505b919050565b81518351146123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee906150c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90615155565b60405180910390fd5b600061247061202a565b90506124808187878787876130bd565b60005b84518110156126315760008582815181106124a1576124a061492e565b5b6020026020010151905060008583815181106124c0576124bf61492e565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906151e7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261691906144f2565b925050819055505050508061262a90614747565b9050612483565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126a8929190615207565b60405180910390a46126be81878787878761329c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c906152b0565b60405180910390fd5b8051825114612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906150c3565b60405180910390fd5b600061278361202a565b90506127a3818560008686604051806020016040528060008152506130bd565b60005b83518110156128ee5760008482815181106127c4576127c361492e565b5b6020026020010151905060008483815181106127e3576127e261492e565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b90615342565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050806128e790614747565b90506127a6565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612966929190615207565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f906153d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b999190613675565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90615155565b60405180910390fd5b6000612c1f61202a565b9050612c3f818787612c3088613043565b612c3988613043565b876130bd565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccd906151e7565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d8b91906144f2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612e089291906153f4565b60405180910390a4612e1e8288888888886130c5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d906152b0565b60405180910390fd5b6000612ea061202a565b9050612ed081856000612eb287613043565b612ebb87613043565b604051806020016040528060008152506130bd565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90615342565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516130349291906153f4565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115613062576130616136ab565b5b6040519080825280602002602001820160405280156130905781602001602082028036833780820191505090505b50905082816000815181106130a8576130a761492e565b5b60200260200101818152505080915050919050565b505050505050565b6130e48473ffffffffffffffffffffffffffffffffffffffff16613473565b15613294578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161312a959493929190615472565b6020604051808303816000875af192505050801561316657506040513d601f19601f8201168201806040525081019061316391906154e1565b60015b61320b5761317261551b565b806308c379a0036131ce575061318661553d565b8061319157506131d0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c591906138fa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132029061563f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613289906156d1565b60405180910390fd5b505b505050505050565b6132bb8473ffffffffffffffffffffffffffffffffffffffff16613473565b1561346b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016133019594939291906156f1565b6020604051808303816000875af192505050801561333d57506040513d601f19601f8201168201806040525081019061333a91906154e1565b60015b6133e25761334961551b565b806308c379a0036133a5575061335d61553d565b8061336857506133a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339c91906138fa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d99061563f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906156d1565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134d5826134aa565b9050919050565b6134e5816134ca565b81146134f057600080fd5b50565b600081359050613502816134dc565b92915050565b6000819050919050565b61351b81613508565b811461352657600080fd5b50565b60008135905061353881613512565b92915050565b60008060408385031215613555576135546134a0565b5b6000613563858286016134f3565b925050602061357485828601613529565b9150509250929050565b61358781613508565b82525050565b60006020820190506135a2600083018461357e565b92915050565b6000602082840312156135be576135bd6134a0565b5b60006135cc84828501613529565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61360a816135d5565b811461361557600080fd5b50565b60008135905061362781613601565b92915050565b600060208284031215613643576136426134a0565b5b600061365184828501613618565b91505092915050565b60008115159050919050565b61366f8161365a565b82525050565b600060208201905061368a6000830184613666565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136e38261369a565b810181811067ffffffffffffffff82111715613702576137016136ab565b5b80604052505050565b6000613715613496565b905061372182826136da565b919050565b600067ffffffffffffffff821115613741576137406136ab565b5b61374a8261369a565b9050602081019050919050565b82818337600083830152505050565b600061377961377484613726565b61370b565b90508281526020810184848401111561379557613794613695565b5b6137a0848285613757565b509392505050565b600082601f8301126137bd576137bc613690565b5b81356137cd848260208601613766565b91505092915050565b6000602082840312156137ec576137eb6134a0565b5b600082013567ffffffffffffffff81111561380a576138096134a5565b5b613816848285016137a8565b91505092915050565b60008060408385031215613836576138356134a0565b5b600083013567ffffffffffffffff811115613854576138536134a5565b5b613860858286016137a8565b925050602061387185828601613529565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138b557808201518184015260208101905061389a565b60008484015250505050565b60006138cc8261387b565b6138d68185613886565b93506138e6818560208601613897565b6138ef8161369a565b840191505092915050565b6000602082019050818103600083015261391481846138c1565b905092915050565b600067ffffffffffffffff821115613937576139366136ab565b5b602082029050602081019050919050565b600080fd5b600061396061395b8461391c565b61370b565b9050808382526020820190506020840283018581111561398357613982613948565b5b835b818110156139ac57806139988882613529565b845260208401935050602081019050613985565b5050509392505050565b600082601f8301126139cb576139ca613690565b5b81356139db84826020860161394d565b91505092915050565b600067ffffffffffffffff8211156139ff576139fe6136ab565b5b613a088261369a565b9050602081019050919050565b6000613a28613a23846139e4565b61370b565b905082815260208101848484011115613a4457613a43613695565b5b613a4f848285613757565b509392505050565b600082601f830112613a6c57613a6b613690565b5b8135613a7c848260208601613a15565b91505092915050565b600080600080600060a08688031215613aa157613aa06134a0565b5b6000613aaf888289016134f3565b9550506020613ac0888289016134f3565b945050604086013567ffffffffffffffff811115613ae157613ae06134a5565b5b613aed888289016139b6565b935050606086013567ffffffffffffffff811115613b0e57613b0d6134a5565b5b613b1a888289016139b6565b925050608086013567ffffffffffffffff811115613b3b57613b3a6134a5565b5b613b4788828901613a57565b9150509295509295909350565b60008060408385031215613b6b57613b6a6134a0565b5b6000613b7985828601613529565b9250506020613b8a85828601613529565b9150509250929050565b600067ffffffffffffffff821115613baf57613bae6136ab565b5b602082029050602081019050919050565b6000613bd3613bce84613b94565b61370b565b90508083825260208201905060208402830185811115613bf657613bf5613948565b5b835b81811015613c1f5780613c0b88826134f3565b845260208401935050602081019050613bf8565b5050509392505050565b600082601f830112613c3e57613c3d613690565b5b8135613c4e848260208601613bc0565b91505092915050565b60008060408385031215613c6e57613c6d6134a0565b5b600083013567ffffffffffffffff811115613c8c57613c8b6134a5565b5b613c9885828601613c29565b925050602083013567ffffffffffffffff811115613cb957613cb86134a5565b5b613cc5858286016139b6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d0481613508565b82525050565b6000613d168383613cfb565b60208301905092915050565b6000602082019050919050565b6000613d3a82613ccf565b613d448185613cda565b9350613d4f83613ceb565b8060005b83811015613d80578151613d678882613d0a565b9750613d7283613d22565b925050600181019050613d53565b5085935050505092915050565b60006020820190508181036000830152613da78184613d2f565b905092915050565b60008060008060808587031215613dc957613dc86134a0565b5b600085013567ffffffffffffffff811115613de757613de66134a5565b5b613df3878288016137a8565b9450506020613e0487828801613529565b9350506040613e1587828801613529565b925050606085013567ffffffffffffffff811115613e3657613e356134a5565b5b613e42878288016137a8565b91505092959194509250565b600080600060608486031215613e6757613e666134a0565b5b6000613e75868287016134f3565b935050602084013567ffffffffffffffff811115613e9657613e956134a5565b5b613ea2868287016139b6565b925050604084013567ffffffffffffffff811115613ec357613ec26134a5565b5b613ecf868287016139b6565b9150509250925092565b60006040820190508181036000830152613ef381856138c1565b9050613f02602083018461357e565b9392505050565b600060208284031215613f1f57613f1e6134a0565b5b6000613f2d848285016134f3565b91505092915050565b613f3f816134ca565b82525050565b6000602082019050613f5a6000830184613f36565b92915050565b6000819050919050565b613f7381613f60565b82525050565b6000602082019050613f8e6000830184613f6a565b92915050565b613f9d8161365a565b8114613fa857600080fd5b50565b600081359050613fba81613f94565b92915050565b60008060408385031215613fd757613fd66134a0565b5b6000613fe5858286016134f3565b9250506020613ff685828601613fab565b9150509250929050565b60008060408385031215614017576140166134a0565b5b6000614025858286016134f3565b9250506020614036858286016134f3565b9150509250929050565b600080600080600060a0868803121561405c5761405b6134a0565b5b600061406a888289016134f3565b955050602061407b888289016134f3565b945050604061408c88828901613529565b935050606061409d88828901613529565b925050608086013567ffffffffffffffff8111156140be576140bd6134a5565b5b6140ca88828901613a57565b9150509295509295909350565b6000806000606084860312156140f0576140ef6134a0565b5b60006140fe868287016134f3565b935050602061410f86828701613529565b925050604061412086828701613529565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614186602b83613886565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141f2602083613886565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b7f5265656e7472616e637920477561726420416374697661746564000000000000600082015250565b600061425e601a83613886565b915061426982614228565b602082019050919050565b6000602082019050818103600083015261428d81614251565b9050919050565b600081905092915050565b60006142aa8261387b565b6142b48185614294565b93506142c4818560208601613897565b80840191505092915050565b60006142dc828461429f565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061432e57607f821691505b602082108103614341576143406142e7565b5b50919050565b60008190508160005260206000209050919050565b6000815461436981614316565b6143738186614294565b9450600182166000811461438e57600181146143a3576143d6565b60ff19831686528115158202860193506143d6565b6143ac85614347565b60005b838110156143ce578154818901526001820191506020810190506143af565b838801955050505b50505092915050565b60006143eb828461435c565b915081905092915050565b7f56616c75652073656e74206973206e6f7420636f727265637400000000000000600082015250565b600061442c601983613886565b9150614437826143f6565b602082019050919050565b6000602082019050818103600083015261445b8161441f565b9050919050565b7f4672656500000000000000000000000000000000000000000000000000000000600082015250565b6000614498600483614294565b91506144a382614462565b600482019050919050565b60006144b98261448b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144fd82613508565b915061450883613508565b92508282019050808211156145205761451f6144c3565b5b92915050565b7f596f7520616c72656164792068617665206d6178696d756d206672656520737460008201527f6f6e652e00000000000000000000000000000000000000000000000000000000602082015250565b6000614582602483613886565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4561726c79000000000000000000000000000000000000000000000000000000600082015250565b60006145ee600583614294565b91506145f9826145b8565b600582019050919050565b600061460f826145e1565b9150819050919050565b7f5468657265206973206e6f20737570706c792c207269676874206e6f772e0000600082015250565b600061464f601e83613886565b915061465a82614619565b602082019050919050565b6000602082019050818103600083015261467e81614642565b9050919050565b7f4f6c796d70000000000000000000000000000000000000000000000000000000600082015250565b60006146bb600583614294565b91506146c682614685565b600582019050919050565b60006146dc826146ae565b9150819050919050565b7f4e6f727468000000000000000000000000000000000000000000000000000000600082015250565b600061471c600583614294565b9150614727826146e6565b600582019050919050565b600061473d8261470f565b9150819050919050565b600061475282613508565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614784576147836144c3565b5b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006147c5600583614294565b91506147d08261478f565b600582019050919050565b60006147e7828561435c565b91506147f3828461429f565b91506147fe826147b8565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614866603283613886565b91506148718261480a565b604082019050919050565b6000602082019050818103600083015261489581614859565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006148f8602983613886565b91506149038261489c565b604082019050919050565b60006020820190508181036000830152614927816148eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f41646d696e3a2063616c6c6572206973206e6f74207468652061646d696e0000600082015250565b6000614993601e83613886565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614a167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149d9565b614a2086836149d9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614a5d614a58614a5384613508565b614a38565b613508565b9050919050565b6000819050919050565b614a7783614a42565b614a8b614a8382614a64565b8484546149e6565b825550505050565b600090565b614aa0614a93565b614aab818484614a6e565b505050565b5b81811015614acf57614ac4600082614a98565b600181019050614ab1565b5050565b601f821115614b1457614ae581614347565b614aee846149c9565b81016020851015614afd578190505b614b11614b09856149c9565b830182614ab0565b50505b505050565b600082821c905092915050565b6000614b3760001984600802614b19565b1980831691505092915050565b6000614b508383614b26565b9150826002028217905092915050565b614b698261387b565b67ffffffffffffffff811115614b8257614b816136ab565b5b614b8c8254614316565b614b97828285614ad3565b600060209050601f831160018114614bca5760008415614bb8578287015190505b614bc28582614b44565b865550614c2a565b601f198416614bd886614347565b60005b82811015614c0057848901518255600182019150602085019450602081019050614bdb565b86831015614c1d5784890151614c19601f891682614b26565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614c8e602983613886565b9150614c9982614c32565b604082019050919050565b60006020820190508181036000830152614cbd81614c81565b9050919050565b600069ffffffffffffffffffff82169050919050565b614ce381614cc4565b8114614cee57600080fd5b50565b600081519050614d0081614cda565b92915050565b614d0f81613f60565b8114614d1a57600080fd5b50565b600081519050614d2c81614d06565b92915050565b600081519050614d4181613512565b92915050565b600080600080600060a08688031215614d6357614d626134a0565b5b6000614d7188828901614cf1565b9550506020614d8288828901614d1d565b9450506040614d9388828901614d32565b9350506060614da488828901614d32565b9250506080614db588828901614cf1565b9150509295509295909350565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e1e602683613886565b9150614e2982614dc2565b604082019050919050565b60006020820190508181036000830152614e4d81614e11565b9050919050565b6000614e5f82613508565b9150614e6a83613508565b9250828202614e7881613508565b91508282048414831517614e8f57614e8e6144c3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ed082613508565b9150614edb83613508565b925082614eeb57614eea614e96565b5b828204905092915050565b6000614f0182613508565b9150614f0c83613508565b9250828203905081811115614f2457614f236144c3565b5b92915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f86602183613886565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b6000819050919050565b6000614fe1614fdc614fd784614fbc565b614a38565b613508565b9050919050565b614ff181614fc6565b82525050565b600060408201905061500c600083018561357e565b6150196020830184614fe8565b9392505050565b600061502b82613508565b915061503683613508565b92508261504657615045614e96565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006150ad602883613886565b91506150b882615051565b604082019050919050565b600060208201905081810360008301526150dc816150a0565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061513f602583613886565b915061514a826150e3565b604082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006151d1602a83613886565b91506151dc82615175565b604082019050919050565b60006020820190508181036000830152615200816151c4565b9050919050565b600060408201905081810360008301526152218185613d2f565b905081810360208301526152358184613d2f565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061529a602383613886565b91506152a58261523e565b604082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061532c602483613886565b9150615337826152d0565b604082019050919050565b6000602082019050818103600083015261535b8161531f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006153be602983613886565b91506153c982615362565b604082019050919050565b600060208201905081810360008301526153ed816153b1565b9050919050565b6000604082019050615409600083018561357e565b615416602083018461357e565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006154448261541d565b61544e8185615428565b935061545e818560208601613897565b6154678161369a565b840191505092915050565b600060a0820190506154876000830188613f36565b6154946020830187613f36565b6154a1604083018661357e565b6154ae606083018561357e565b81810360808301526154c08184615439565b90509695505050505050565b6000815190506154db81613601565b92915050565b6000602082840312156154f7576154f66134a0565b5b6000615505848285016154cc565b91505092915050565b60008160e01c9050919050565b600060033d111561553a5760046000803e61553760005161550e565b90505b90565b600060443d106155ca5761554f613496565b60043d036004823e80513d602482011167ffffffffffffffff821117156155775750506155ca565b808201805167ffffffffffffffff81111561559557505050506155ca565b80602083010160043d0385018111156155b25750505050506155ca565b6155c1826020018501866136da565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615629603483613886565b9150615634826155cd565b604082019050919050565b600060208201905081810360008301526156588161561c565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006156bb602883613886565b91506156c68261565f565b604082019050919050565b600060208201905081810360008301526156ea816156ae565b9050919050565b600060a0820190506157066000830188613f36565b6157136020830187613f36565b81810360408301526157258186613d2f565b905081810360608301526157398185613d2f565b9050818103608083015261574d8184615439565b9050969550505050505056fea264697066735822122035843e63d2816896b0c6e5878dabc51405bd837a468d54ea72fcdfa5ed13985564736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000006168747470733a2f2f656d6572616c642d6661722d636f72616c2d3738302e6d7970696e6174612e636c6f75642f697066732f516d5452534e34424a716d524a426b57467674716d39436b79423138434d44486d50696a577067754763657a786a2f00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _url (string): https://emerald-far-coral-780.mypinata.cloud/ipfs/QmTRSN4BJqmRJBkWFvtqm9CkyB18CMDHmPijWpguGcezxj/
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000061
Arg [2] : 68747470733a2f2f656d6572616c642d6661722d636f72616c2d3738302e6d79
Arg [3] : 70696e6174612e636c6f75642f697066732f516d5452534e34424a716d524a42
Arg [4] : 6b57467674716d39436b79423138434d44486d50696a577067754763657a786a
Arg [5] : 2f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51932:5435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25363:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52259:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24190:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53830:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52370:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53927:2574;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52150:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24961:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56622:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53410:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27508:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56735:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52448:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52526:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57074:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25847:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52848:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52487:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56957:111;;;;;;;;;;;;;:::i;:::-;;42707:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53200:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3626:103;;;;;;;;;;;;;:::i;:::-;;4130:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52331:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56846:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2754:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41553:323;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52292:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56509:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26740:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52408:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27030:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3884:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42317:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2849:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25363:318;25494:7;25560:1;25541:21;;:7;:21;;;25519:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;25651:9;:13;25661:2;25651:13;;;;;;;;;;;:22;25665:7;25651:22;;;;;;;;;;;;;;;;25644:29;;25363:318;;;;:::o;52259:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24190:360::-;24337:4;24394:26;24379:41;;;:11;:41;;;;:110;;;;24452:37;24437:52;;;:11;:52;;;;24379:110;:163;;;;24506:36;24530:11;24506:23;:36::i;:::-;24379:163;24359:183;;24190:360;;;:::o;53830:89::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53896:15:::1;53904:6;53896:7;:15::i;:::-;53830:89:::0;:::o;52370:31::-;;;;:::o;53927:2574::-;54013:19;;;;;;;;;;;54012:20;54004:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54096:4;54074:19;;:26;;;;;;;;;;;;;;;;;;54111:19;54141:16;:14;:16::i;:::-;54111:47;;54170:19;54192:9;54170:31;;54217:9;54212:2235;54237:7;:14;;;;54232:1;:19;54212:2235;;54273:23;54299:8;:11;54308:1;54299:11;;;;;;;;;;;54273:37;;54395:5;54378:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;54368:34;;;;;;54356:1;:6;;54339:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;54329:35;;;;;;:73;54325:2107;;54423:12;54439:47;54474:11;54439:30;54450:18;54462:5;54450:1;:7;;;:11;;:18;;;;:::i;:::-;54439:6;:10;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;54423:63;;54523:7;:5;:7::i;:::-;54509:21;;:10;:21;;;54505:412;;54575:9;54567:4;:17;;54559:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;54660:4;54646:11;:18;54642:256;;;54697:29;54737:10;54697:51;;54776:13;:22;;:45;54799:21;54815:4;54799:11;:15;;:21;;;;:::i;:::-;54776:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54866:4;54852:18;;54666:232;54642:256;54505:412;54994:26;;;;;;;:::i;:::-;;;;;;;;;;;;;54984:37;;;;;;54967:1;:10;;54949:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;54939:41;;;;;;:82;54935:1478;;55090:16;;55081:6;55054:24;55064:10;55076:1;55054:9;:24::i;:::-;:33;;;;:::i;:::-;:52;55046:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;55169:35;55175:10;55187:1;55190:6;55169:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;55227:8;;;;54935:1478;55320:27;;;;;;;:::i;:::-;;;;;;;;;;;;;55310:38;;;;;;55293:1;:10;;55275:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;55265:41;;;;;;:83;55261:1152;;55419:17;;55386:29;55408:6;55386:17;;:21;;:29;;;;:::i;:::-;:50;;55378:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;55497:35;55503:10;55515:1;55518:6;55497:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;55559:29;55581:6;55559:17;;:21;;:29;;;;:::i;:::-;;55261:1152;;;55677:27;;;;;;;:::i;:::-;;;;;;;;;;;;;55667:38;;;;;;55650:1;:10;;55632:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;55622:41;;;;;;:83;55618:795;;55775:17;;55742:29;55764:6;55742:17;;:21;;:29;;;;:::i;:::-;:50;;55734:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;55854:35;55860:10;55872:1;55875:6;55854:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;55916:29;55938:6;55916:17;;:21;;:29;;;;:::i;:::-;;55618:795;;;56033:27;;;;;;;:::i;:::-;;;;;;;;;;;;;56023:38;;;;;;56007:1;:10;;55989:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;55979:41;;;;;;:82;55975:438;;56130:16;;56098:28;56119:6;56098:16;;:20;;:28;;;;:::i;:::-;:48;;56090:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;56207:35;56213:10;56225:1;56228:6;56207:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;56269:28;56290:6;56269:16;;:20;;:28;;;;:::i;:::-;;55975:438;;;56354:35;56360:10;56372:1;56375:6;56354:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;55975:438;55618:795;55261:1152;54404:2028;54325:2107;54258:2189;54212:2235;54253:3;;;;:::i;:::-;;;54212:2235;;;;56484:5;56462:19;;:27;;;;;;;;;;;;;;;;;;53993:2508;;53927:2574;;:::o;52150:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24961:251::-;25074:13;25151:4;25157:25;25174:7;25157:16;:25::i;:::-;25134:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25105:99;;24961:251;;;:::o;56622:105::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56713:6:::1;56693:17;:26;;;;56622:105:::0;:::o;53410:412::-;53475:7;53500:9;53512:1;53500:13;;53495:301;53520:7;:14;;;;53515:1;:19;53495:301;;53556:23;53582:8;:11;53591:1;53582:11;;;;;;;;;;;53556:37;;53713:5;53696:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;53686:34;;;;;;53657:1;:6;;53640:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;53630:35;;;;;;:90;53608:177;;53762:1;:7;;;53755:14;;;;;;53608:177;53541:255;53536:3;;;;;:::i;:::-;;;;53495:301;;;;53813:1;53806:8;;53410:412;;;;:::o;27508:442::-;27749:12;:10;:12::i;:::-;27741:20;;:4;:20;;;:60;;;;27765:36;27782:4;27788:12;:10;:12::i;:::-;27765:16;:36::i;:::-;27741:60;27719:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27890:52;27913:4;27919:2;27923:3;27928:7;27937:4;27890:22;:52::i;:::-;27508:442;;;;;:::o;56735:103::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56824:6:::1;56805:16;:25;;;;56735:103:::0;:::o;52448:32::-;;;;:::o;52526:31::-;;;;:::o;57074:290::-;57168:7;57189:19;57219:16;:14;:16::i;:::-;57189:47;;57249:23;57275:8;:16;57284:6;57275:16;;;;;;;;;;;57249:42;;57309:47;57344:11;57309:30;57320:18;57332:5;57320:1;:7;;;:11;;:18;;;;:::i;:::-;57309:6;:10;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;57302:54;;;;57074:290;;;;:::o;25847:561::-;26003:16;26078:3;:10;26059:8;:15;:29;26037:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;26170:30;26217:8;:15;26203:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26170:63;;26251:9;26246:122;26270:8;:15;26266:1;:19;26246:122;;;26326:30;26336:8;26345:1;26336:11;;;;;;;;:::i;:::-;;;;;;;;26349:3;26353:1;26349:6;;;;;;;;:::i;:::-;;;;;;;;26326:9;:30::i;:::-;26307:13;26321:1;26307:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26287:3;;;;:::i;:::-;;;26246:122;;;;26387:13;26380:20;;;25847:561;;;;:::o;52848:344::-;3208:12;:10;:12::i;:::-;3197:23;;:7;:5;:7::i;:::-;:23;;;3189:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;53010:29:::1;53042:8;:12;53051:2;53042:12;;;;;;;;;;;53010:44;;53080:7;53065;:12;;:22;;;;;;:::i;:::-;;53117:8;53098:7;:16;;:27;;;;;;:::i;:::-;;53152:5;53136:7;:13;;:21;;;;53168:7;53181:2;53168:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52999:193;52848:344:::0;;;;:::o;52487:32::-;;;;:::o;56957:111::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57020:7:::1;:5;:7::i;:::-;57012:25;;:48;57038:21;57012:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56957:111::o:0;42707:353::-;42883:12;:10;:12::i;:::-;42872:23;;:7;:23;;;:66;;;;42899:39;42916:7;42925:12;:10;:12::i;:::-;42899:16;:39::i;:::-;42872:66;42850:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;43020:32;43031:7;43040:3;43045:6;43020:10;:32::i;:::-;42707:353;;;:::o;53200:202::-;53281:13;53296:7;53321:23;53347:8;:12;53356:2;53347:12;;;;;;;;;;;53321:38;;53378:1;:6;;53386:1;:7;;;53370:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53200:202;;;:::o;3626:103::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:30:::1;3718:1;3691:18;:30::i;:::-;3626:103::o:0;4130:102::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4216:8:::1;4207:6;;:17;;;;;;;;;;;;;;;;;;4130:102:::0;:::o;52331:32::-;;;;:::o;56846:103::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56935:6:::1;56916:16;:25;;;;56846:103:::0;:::o;2754:87::-;2800:7;2827:6;;;;;;;;;;;2820:13;;2754:87;:::o;41553:323::-;41600:6;41681:12;41818:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41619:226;;;;;;41863:5;41856:12;;;41553:323;:::o;26481:187::-;26608:52;26627:12;:10;:12::i;:::-;26641:8;26651;26608:18;:52::i;:::-;26481:187;;:::o;52292:32::-;;;;:::o;56509:105::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56600:6:::1;56580:17;:26;;;;56509:105:::0;:::o;26740:218::-;26884:4;26913:18;:27;26932:7;26913:27;;;;;;;;;;;;;;;:37;26941:8;26913:37;;;;;;;;;;;;;;;;;;;;;;;;;26906:44;;26740:218;;;;:::o;52408:31::-;;;;:::o;27030:401::-;27246:12;:10;:12::i;:::-;27238:20;;:4;:20;;;:60;;;;27262:36;27279:4;27285:12;:10;:12::i;:::-;27262:16;:36::i;:::-;27238:60;27216:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27378:45;27396:4;27402:2;27406;27410:6;27418:4;27378:17;:45::i;:::-;27030:401;;;;;:::o;3884:238::-;3080:12;:10;:12::i;:::-;3069:23;;:7;:5;:7::i;:::-;:23;;;3061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4007:1:::1;3987:22;;:8;:22;;::::0;3965:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4086:28;4105:8;4086:18;:28::i;:::-;3884:238:::0;:::o;42317:382::-;42468:12;:10;:12::i;:::-;42457:23;;:7;:23;;;:83;;;;42501:39;42518:7;42527:12;:10;:12::i;:::-;42501:16;:39::i;:::-;42457:83;:127;;;;42577:7;:5;:7::i;:::-;42561:23;;:12;:10;:12::i;:::-;:23;;;42457:127;42435:218;;;;;;;;;;;;:::i;:::-;;;;;;;;;42666:25;42672:7;42681:2;42685:5;42666;:25::i;:::-;42317:382;;;:::o;2849:87::-;2895:7;2922:6;;;;;;;;;;;2915:13;;2849:87;:::o;15334:207::-;15464:4;15508:25;15493:40;;;:11;:40;;;;15486:47;;15334:207;;;:::o;1390:98::-;1443:7;1470:10;1463:17;;1390:98;:::o;31811:88::-;31885:6;31878:4;:13;;;;;;:::i;:::-;;31811:88;:::o;46538:98::-;46596:7;46627:1;46623;:5;;;;:::i;:::-;46616:12;;46538:98;;;;:::o;46937:::-;46995:7;47026:1;47022;:5;;;;:::i;:::-;47015:12;;46937:98;;;;:::o;46181:::-;46239:7;46270:1;46266;:5;;;;:::i;:::-;46259:12;;46181:98;;;;:::o;32285:834::-;32452:1;32438:16;;:2;:16;;;32430:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32505:16;32524:12;:10;:12::i;:::-;32505:31;;32549:191;32584:8;32615:1;32632:2;32649:21;32667:2;32649:17;:21::i;:::-;32685:25;32703:6;32685:17;:25::i;:::-;32725:4;32549:20;:191::i;:::-;32774:6;32753:9;:13;32763:2;32753:13;;;;;;;;;;;:17;32767:2;32753:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32798:9;32793:319;32817:6;32813:1;:10;32793:319;;;32887:2;32850:47;;32883:1;32850:47;;32865:8;32850:47;;;32891:2;32895:1;32850:47;;;;;;;:::i;:::-;;;;;;;;32914:186;32963:8;32998:1;33019:2;33040;33061:1;33081:4;32914:30;:186::i;:::-;32825:3;;;;;:::i;:::-;;;;32793:319;;;;32419:700;32285:834;;;;:::o;45800:98::-;45858:7;45889:1;45885;:5;;;;:::i;:::-;45878:12;;45800:98;;;;:::o;50114:723::-;50170:13;50400:1;50391:5;:10;50387:53;;50418:10;;;;;;;;;;;;;;;;;;;;;50387:53;50450:12;50465:5;50450:20;;50481:14;50506:78;50521:1;50513:4;:9;50506:78;;50539:8;;;;;:::i;:::-;;;;50570:2;50562:10;;;;;:::i;:::-;;;50506:78;;;50594:19;50626:6;50616:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50594:39;;50644:154;50660:1;50651:5;:10;50644:154;;50688:1;50678:11;;;;;:::i;:::-;;;50755:2;50747:5;:10;;;;:::i;:::-;50734:2;:24;;;;:::i;:::-;50721:39;;50704:6;50711;50704:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;50784:2;50775:11;;;;;:::i;:::-;;;50644:154;;;50822:6;50808:21;;;;;50114:723;;;;:::o;29718:1249::-;29959:7;:14;29945:3;:10;:28;29923:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;30074:1;30060:16;;:2;:16;;;30052:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30131:16;30150:12;:10;:12::i;:::-;30131:31;;30175:60;30196:8;30206:4;30212:2;30216:3;30221:7;30230:4;30175:20;:60::i;:::-;30253:9;30248:470;30272:3;:10;30268:1;:14;30248:470;;;30304:10;30317:3;30321:1;30317:6;;;;;;;;:::i;:::-;;;;;;;;30304:19;;30338:14;30355:7;30363:1;30355:10;;;;;;;;:::i;:::-;;;;;;;;30338:27;;30382:19;30404:9;:13;30414:2;30404:13;;;;;;;;;;;:19;30418:4;30404:19;;;;;;;;;;;;;;;;30382:41;;30479:6;30464:11;:21;;30438:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;30643:6;30629:11;:20;30607:9;:13;30617:2;30607:13;;;;;;;;;;;:19;30621:4;30607:19;;;;;;;;;;;;;;;:42;;;;30700:6;30679:9;:13;30689:2;30679:13;;;;;;;;;;;:17;30693:2;30679:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30289:429;;;30284:3;;;;:::i;:::-;;;30248:470;;;;30765:2;30735:47;;30759:4;30735:47;;30749:8;30735:47;;;30769:3;30774:7;30735:47;;;;;;;:::i;:::-;;;;;;;;30795:164;30845:8;30868:4;30887:2;30904:3;30922:7;30944:4;30795:35;:164::i;:::-;29912:1055;29718:1249;;;;;:::o;35526:977::-;35694:1;35678:18;;:4;:18;;;35670:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35783:7;:14;35769:3;:10;:28;35747:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;35878:16;35897:12;:10;:12::i;:::-;35878:31;;35922:66;35943:8;35953:4;35967:1;35971:3;35976:7;35922:66;;;;;;;;;;;;:20;:66::i;:::-;36006:9;36001:422;36025:3;:10;36021:1;:14;36001:422;;;36057:10;36070:3;36074:1;36070:6;;;;;;;;:::i;:::-;;;;;;;;36057:19;;36091:14;36108:7;36116:1;36108:10;;;;;;;;:::i;:::-;;;;;;;;36091:27;;36135:19;36157:9;:13;36167:2;36157:13;;;;;;;;;;;:19;36171:4;36157:19;;;;;;;;;;;;;;;;36135:41;;36232:6;36217:11;:21;;36191:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;36390:6;36376:11;:20;36354:9;:13;36364:2;36354:13;;;;;;;;;;;:19;36368:4;36354:19;;;;;;;;;;;;;;;:42;;;;36042:381;;;36037:3;;;;:::i;:::-;;;36001:422;;;;36478:1;36440:55;;36464:4;36440:55;;36454:8;36440:55;;;36482:3;36487:7;36440:55;;;;;;;:::i;:::-;;;;;;;;35659:844;35526:977;;;:::o;4392:191::-;4466:16;4485:6;;;;;;;;;;;4466:25;;4511:8;4502:6;;:17;;;;;;;;;;;;;;;;;;4566:8;4535:40;;4556:8;4535:40;;;;;;;;;;;;4455:128;4392:191;:::o;36645:331::-;36800:8;36791:17;;:5;:17;;;36783:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36903:8;36865:18;:25;36884:5;36865:25;;;;;;;;;;;;;;;:35;36891:8;36865:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36949:8;36927:41;;36942:5;36927:41;;;36959:8;36927:41;;;;;;:::i;:::-;;;;;;;;36645:331;;;:::o;28414:946::-;28616:1;28602:16;;:2;:16;;;28594:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28673:16;28692:12;:10;:12::i;:::-;28673:31;;28717:185;28752:8;28775:4;28794:2;28811:21;28829:2;28811:17;:21::i;:::-;28847:25;28865:6;28847:17;:25::i;:::-;28887:4;28717:20;:185::i;:::-;28915:19;28937:9;:13;28947:2;28937:13;;;;;;;;;;;:19;28951:4;28937:19;;;;;;;;;;;;;;;;28915:41;;29004:6;28989:11;:21;;28967:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29152:6;29138:11;:20;29116:9;:13;29126:2;29116:13;;;;;;;;;;;:19;29130:4;29116:19;;;;;;;;;;;;;;;:42;;;;29201:6;29180:9;:13;29190:2;29180:13;;;;;;;;;;;:17;29194:2;29180:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29256:2;29225:46;;29250:4;29225:46;;29240:8;29225:46;;;29260:2;29264:6;29225:46;;;;;;;:::i;:::-;;;;;;;;29284:68;29315:8;29325:4;29331:2;29335;29339:6;29347:4;29284:30;:68::i;:::-;28583:777;;28414:946;;;;;:::o;34586:737::-;34729:1;34713:18;;:4;:18;;;34705:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34784:16;34803:12;:10;:12::i;:::-;34784:31;;34828:191;34863:8;34886:4;34913:1;34930:21;34948:2;34930:17;:21::i;:::-;34966:25;34984:6;34966:17;:25::i;:::-;34828:191;;;;;;;;;;;;:20;:191::i;:::-;35032:19;35054:9;:13;35064:2;35054:13;;;;;;;;;;;:19;35068:4;35054:19;;;;;;;;;;;;;;;;35032:41;;35107:6;35092:11;:21;;35084:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35226:6;35212:11;:20;35190:9;:13;35200:2;35190:13;;;;;;;;;;;:19;35204:4;35190:19;;;;;;;;;;;;;;;:42;;;;35300:1;35261:54;;35286:4;35261:54;;35276:8;35261:54;;;35304:2;35308:6;35261:54;;;;;;;:::i;:::-;;;;;;;;34694:629;;34586:737;;;:::o;40050:230::-;40143:16;40177:22;40216:1;40202:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40177:41;;40240:7;40229:5;40235:1;40229:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40267:5;40260:12;;;40050:230;;;:::o;37932:221::-;;;;;;;:::o;38161:898::-;38376:15;:2;:13;;;:15::i;:::-;38372:680;;;38446:2;38429:38;;;38490:8;38521:4;38548:2;38573:6;38602:4;38429:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38408:633;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38914:6;38907:14;;;;;;;;;;;:::i;:::-;;;;;;;;38408:633;;;38963:62;;;;;;;;;;:::i;:::-;;;;;;;;38408:633;38700:43;;;38688:55;;;:8;:55;;;;38684:154;;38768:50;;;;;;;;;;:::i;:::-;;;;;;;;38684:154;38639:214;38372:680;38161:898;;;;;;:::o;39067:975::-;39307:15;:2;:13;;;:15::i;:::-;39303:732;;;39377:2;39360:43;;;39426:8;39457:4;39484:3;39510:7;39540:4;39360:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39339:685;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39897:6;39890:14;;;;;;;;;;;:::i;:::-;;;;;;;;39339:685;;;39946:62;;;;;;;;;;:::i;:::-;;;;;;;;39339:685;39660:48;;;39648:60;;;:8;:60;;;;39622:199;;39751:50;;;;;;;;;;:::i;:::-;;;;;;;;39622:199;39577:259;39303:732;39067:975;;;;;;:::o;5821:326::-;5881:4;6138:1;6116:7;:19;;;:23;6109:30;;5821:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:149::-;2400:7;2440:66;2433:5;2429:78;2418:89;;2364:149;;;:::o;2519:120::-;2591:23;2608:5;2591:23;:::i;:::-;2584:5;2581:34;2571:62;;2629:1;2626;2619:12;2571:62;2519:120;:::o;2645:137::-;2690:5;2728:6;2715:20;2706:29;;2744:32;2770:5;2744:32;:::i;:::-;2645:137;;;;:::o;2788:327::-;2846:6;2895:2;2883:9;2874:7;2870:23;2866:32;2863:119;;;2901:79;;:::i;:::-;2863:119;3021:1;3046:52;3090:7;3081:6;3070:9;3066:22;3046:52;:::i;:::-;3036:62;;2992:116;2788:327;;;;:::o;3121:90::-;3155:7;3198:5;3191:13;3184:21;3173:32;;3121:90;;;:::o;3217:109::-;3298:21;3313:5;3298:21;:::i;:::-;3293:3;3286:34;3217:109;;:::o;3332:210::-;3419:4;3457:2;3446:9;3442:18;3434:26;;3470:65;3532:1;3521:9;3517:17;3508:6;3470:65;:::i;:::-;3332:210;;;;:::o;3548:117::-;3657:1;3654;3647:12;3671:117;3780:1;3777;3770:12;3794:102;3835:6;3886:2;3882:7;3877:2;3870:5;3866:14;3862:28;3852:38;;3794:102;;;:::o;3902:180::-;3950:77;3947:1;3940:88;4047:4;4044:1;4037:15;4071:4;4068:1;4061:15;4088:281;4171:27;4193:4;4171:27;:::i;:::-;4163:6;4159:40;4301:6;4289:10;4286:22;4265:18;4253:10;4250:34;4247:62;4244:88;;;4312:18;;:::i;:::-;4244:88;4352:10;4348:2;4341:22;4131:238;4088:281;;:::o;4375:129::-;4409:6;4436:20;;:::i;:::-;4426:30;;4465:33;4493:4;4485:6;4465:33;:::i;:::-;4375:129;;;:::o;4510:308::-;4572:4;4662:18;4654:6;4651:30;4648:56;;;4684:18;;:::i;:::-;4648:56;4722:29;4744:6;4722:29;:::i;:::-;4714:37;;4806:4;4800;4796:15;4788:23;;4510:308;;;:::o;4824:146::-;4921:6;4916:3;4911;4898:30;4962:1;4953:6;4948:3;4944:16;4937:27;4824:146;;;:::o;4976:425::-;5054:5;5079:66;5095:49;5137:6;5095:49;:::i;:::-;5079:66;:::i;:::-;5070:75;;5168:6;5161:5;5154:21;5206:4;5199:5;5195:16;5244:3;5235:6;5230:3;5226:16;5223:25;5220:112;;;5251:79;;:::i;:::-;5220:112;5341:54;5388:6;5383:3;5378;5341:54;:::i;:::-;5060:341;4976:425;;;;;:::o;5421:340::-;5477:5;5526:3;5519:4;5511:6;5507:17;5503:27;5493:122;;5534:79;;:::i;:::-;5493:122;5651:6;5638:20;5676:79;5751:3;5743:6;5736:4;5728:6;5724:17;5676:79;:::i;:::-;5667:88;;5483:278;5421:340;;;;:::o;5767:509::-;5836:6;5885:2;5873:9;5864:7;5860:23;5856:32;5853:119;;;5891:79;;:::i;:::-;5853:119;6039:1;6028:9;6024:17;6011:31;6069:18;6061:6;6058:30;6055:117;;;6091:79;;:::i;:::-;6055:117;6196:63;6251:7;6242:6;6231:9;6227:22;6196:63;:::i;:::-;6186:73;;5982:287;5767:509;;;;:::o;6282:654::-;6360:6;6368;6417:2;6405:9;6396:7;6392:23;6388:32;6385:119;;;6423:79;;:::i;:::-;6385:119;6571:1;6560:9;6556:17;6543:31;6601:18;6593:6;6590:30;6587:117;;;6623:79;;:::i;:::-;6587:117;6728:63;6783:7;6774:6;6763:9;6759:22;6728:63;:::i;:::-;6718:73;;6514:287;6840:2;6866:53;6911:7;6902:6;6891:9;6887:22;6866:53;:::i;:::-;6856:63;;6811:118;6282:654;;;;;:::o;6942:99::-;6994:6;7028:5;7022:12;7012:22;;6942:99;;;:::o;7047:169::-;7131:11;7165:6;7160:3;7153:19;7205:4;7200:3;7196:14;7181:29;;7047:169;;;;:::o;7222:246::-;7303:1;7313:113;7327:6;7324:1;7321:13;7313:113;;;7412:1;7407:3;7403:11;7397:18;7393:1;7388:3;7384:11;7377:39;7349:2;7346:1;7342:10;7337:15;;7313:113;;;7460:1;7451:6;7446:3;7442:16;7435:27;7284:184;7222:246;;;:::o;7474:377::-;7562:3;7590:39;7623:5;7590:39;:::i;:::-;7645:71;7709:6;7704:3;7645:71;:::i;:::-;7638:78;;7725:65;7783:6;7778:3;7771:4;7764:5;7760:16;7725:65;:::i;:::-;7815:29;7837:6;7815:29;:::i;:::-;7810:3;7806:39;7799:46;;7566:285;7474:377;;;;:::o;7857:313::-;7970:4;8008:2;7997:9;7993:18;7985:26;;8057:9;8051:4;8047:20;8043:1;8032:9;8028:17;8021:47;8085:78;8158:4;8149:6;8085:78;:::i;:::-;8077:86;;7857:313;;;;:::o;8176:311::-;8253:4;8343:18;8335:6;8332:30;8329:56;;;8365:18;;:::i;:::-;8329:56;8415:4;8407:6;8403:17;8395:25;;8475:4;8469;8465:15;8457:23;;8176:311;;;:::o;8493:117::-;8602:1;8599;8592:12;8633:710;8729:5;8754:81;8770:64;8827:6;8770:64;:::i;:::-;8754:81;:::i;:::-;8745:90;;8855:5;8884:6;8877:5;8870:21;8918:4;8911:5;8907:16;8900:23;;8971:4;8963:6;8959:17;8951:6;8947:30;9000:3;8992:6;8989:15;8986:122;;;9019:79;;:::i;:::-;8986:122;9134:6;9117:220;9151:6;9146:3;9143:15;9117:220;;;9226:3;9255:37;9288:3;9276:10;9255:37;:::i;:::-;9250:3;9243:50;9322:4;9317:3;9313:14;9306:21;;9193:144;9177:4;9172:3;9168:14;9161:21;;9117:220;;;9121:21;8735:608;;8633:710;;;;;:::o;9366:370::-;9437:5;9486:3;9479:4;9471:6;9467:17;9463:27;9453:122;;9494:79;;:::i;:::-;9453:122;9611:6;9598:20;9636:94;9726:3;9718:6;9711:4;9703:6;9699:17;9636:94;:::i;:::-;9627:103;;9443:293;9366:370;;;;:::o;9742:307::-;9803:4;9893:18;9885:6;9882:30;9879:56;;;9915:18;;:::i;:::-;9879:56;9953:29;9975:6;9953:29;:::i;:::-;9945:37;;10037:4;10031;10027:15;10019:23;;9742:307;;;:::o;10055:423::-;10132:5;10157:65;10173:48;10214:6;10173:48;:::i;:::-;10157:65;:::i;:::-;10148:74;;10245:6;10238:5;10231:21;10283:4;10276:5;10272:16;10321:3;10312:6;10307:3;10303:16;10300:25;10297:112;;;10328:79;;:::i;:::-;10297:112;10418:54;10465:6;10460:3;10455;10418:54;:::i;:::-;10138:340;10055:423;;;;;:::o;10497:338::-;10552:5;10601:3;10594:4;10586:6;10582:17;10578:27;10568:122;;10609:79;;:::i;:::-;10568:122;10726:6;10713:20;10751:78;10825:3;10817:6;10810:4;10802:6;10798:17;10751:78;:::i;:::-;10742:87;;10558:277;10497:338;;;;:::o;10841:1509::-;10995:6;11003;11011;11019;11027;11076:3;11064:9;11055:7;11051:23;11047:33;11044:120;;;11083:79;;:::i;:::-;11044:120;11203:1;11228:53;11273:7;11264:6;11253:9;11249:22;11228:53;:::i;:::-;11218:63;;11174:117;11330:2;11356:53;11401:7;11392:6;11381:9;11377:22;11356:53;:::i;:::-;11346:63;;11301:118;11486:2;11475:9;11471:18;11458:32;11517:18;11509:6;11506:30;11503:117;;;11539:79;;:::i;:::-;11503:117;11644:78;11714:7;11705:6;11694:9;11690:22;11644:78;:::i;:::-;11634:88;;11429:303;11799:2;11788:9;11784:18;11771:32;11830:18;11822:6;11819:30;11816:117;;;11852:79;;:::i;:::-;11816:117;11957:78;12027:7;12018:6;12007:9;12003:22;11957:78;:::i;:::-;11947:88;;11742:303;12112:3;12101:9;12097:19;12084:33;12144:18;12136:6;12133:30;12130:117;;;12166:79;;:::i;:::-;12130:117;12271:62;12325:7;12316:6;12305:9;12301:22;12271:62;:::i;:::-;12261:72;;12055:288;10841:1509;;;;;;;;:::o;12356:474::-;12424:6;12432;12481:2;12469:9;12460:7;12456:23;12452:32;12449:119;;;12487:79;;:::i;:::-;12449:119;12607:1;12632:53;12677:7;12668:6;12657:9;12653:22;12632:53;:::i;:::-;12622:63;;12578:117;12734:2;12760:53;12805:7;12796:6;12785:9;12781:22;12760:53;:::i;:::-;12750:63;;12705:118;12356:474;;;;;:::o;12836:311::-;12913:4;13003:18;12995:6;12992:30;12989:56;;;13025:18;;:::i;:::-;12989:56;13075:4;13067:6;13063:17;13055:25;;13135:4;13129;13125:15;13117:23;;12836:311;;;:::o;13170:710::-;13266:5;13291:81;13307:64;13364:6;13307:64;:::i;:::-;13291:81;:::i;:::-;13282:90;;13392:5;13421:6;13414:5;13407:21;13455:4;13448:5;13444:16;13437:23;;13508:4;13500:6;13496:17;13488:6;13484:30;13537:3;13529:6;13526:15;13523:122;;;13556:79;;:::i;:::-;13523:122;13671:6;13654:220;13688:6;13683:3;13680:15;13654:220;;;13763:3;13792:37;13825:3;13813:10;13792:37;:::i;:::-;13787:3;13780:50;13859:4;13854:3;13850:14;13843:21;;13730:144;13714:4;13709:3;13705:14;13698:21;;13654:220;;;13658:21;13272:608;;13170:710;;;;;:::o;13903:370::-;13974:5;14023:3;14016:4;14008:6;14004:17;14000:27;13990:122;;14031:79;;:::i;:::-;13990:122;14148:6;14135:20;14173:94;14263:3;14255:6;14248:4;14240:6;14236:17;14173:94;:::i;:::-;14164:103;;13980:293;13903:370;;;;:::o;14279:894::-;14397:6;14405;14454:2;14442:9;14433:7;14429:23;14425:32;14422:119;;;14460:79;;:::i;:::-;14422:119;14608:1;14597:9;14593:17;14580:31;14638:18;14630:6;14627:30;14624:117;;;14660:79;;:::i;:::-;14624:117;14765:78;14835:7;14826:6;14815:9;14811:22;14765:78;:::i;:::-;14755:88;;14551:302;14920:2;14909:9;14905:18;14892:32;14951:18;14943:6;14940:30;14937:117;;;14973:79;;:::i;:::-;14937:117;15078:78;15148:7;15139:6;15128:9;15124:22;15078:78;:::i;:::-;15068:88;;14863:303;14279:894;;;;;:::o;15179:114::-;15246:6;15280:5;15274:12;15264:22;;15179:114;;;:::o;15299:184::-;15398:11;15432:6;15427:3;15420:19;15472:4;15467:3;15463:14;15448:29;;15299:184;;;;:::o;15489:132::-;15556:4;15579:3;15571:11;;15609:4;15604:3;15600:14;15592:22;;15489:132;;;:::o;15627:108::-;15704:24;15722:5;15704:24;:::i;:::-;15699:3;15692:37;15627:108;;:::o;15741:179::-;15810:10;15831:46;15873:3;15865:6;15831:46;:::i;:::-;15909:4;15904:3;15900:14;15886:28;;15741:179;;;;:::o;15926:113::-;15996:4;16028;16023:3;16019:14;16011:22;;15926:113;;;:::o;16075:732::-;16194:3;16223:54;16271:5;16223:54;:::i;:::-;16293:86;16372:6;16367:3;16293:86;:::i;:::-;16286:93;;16403:56;16453:5;16403:56;:::i;:::-;16482:7;16513:1;16498:284;16523:6;16520:1;16517:13;16498:284;;;16599:6;16593:13;16626:63;16685:3;16670:13;16626:63;:::i;:::-;16619:70;;16712:60;16765:6;16712:60;:::i;:::-;16702:70;;16558:224;16545:1;16542;16538:9;16533:14;;16498:284;;;16502:14;16798:3;16791:10;;16199:608;;;16075:732;;;;:::o;16813:373::-;16956:4;16994:2;16983:9;16979:18;16971:26;;17043:9;17037:4;17033:20;17029:1;17018:9;17014:17;17007:47;17071:108;17174:4;17165:6;17071:108;:::i;:::-;17063:116;;16813:373;;;;:::o;17192:1125::-;17298:6;17306;17314;17322;17371:3;17359:9;17350:7;17346:23;17342:33;17339:120;;;17378:79;;:::i;:::-;17339:120;17526:1;17515:9;17511:17;17498:31;17556:18;17548:6;17545:30;17542:117;;;17578:79;;:::i;:::-;17542:117;17683:63;17738:7;17729:6;17718:9;17714:22;17683:63;:::i;:::-;17673:73;;17469:287;17795:2;17821:53;17866:7;17857:6;17846:9;17842:22;17821:53;:::i;:::-;17811:63;;17766:118;17923:2;17949:53;17994:7;17985:6;17974:9;17970:22;17949:53;:::i;:::-;17939:63;;17894:118;18079:2;18068:9;18064:18;18051:32;18110:18;18102:6;18099:30;18096:117;;;18132:79;;:::i;:::-;18096:117;18237:63;18292:7;18283:6;18272:9;18268:22;18237:63;:::i;:::-;18227:73;;18022:288;17192:1125;;;;;;;:::o;18323:1039::-;18450:6;18458;18466;18515:2;18503:9;18494:7;18490:23;18486:32;18483:119;;;18521:79;;:::i;:::-;18483:119;18641:1;18666:53;18711:7;18702:6;18691:9;18687:22;18666:53;:::i;:::-;18656:63;;18612:117;18796:2;18785:9;18781:18;18768:32;18827:18;18819:6;18816:30;18813:117;;;18849:79;;:::i;:::-;18813:117;18954:78;19024:7;19015:6;19004:9;19000:22;18954:78;:::i;:::-;18944:88;;18739:303;19109:2;19098:9;19094:18;19081:32;19140:18;19132:6;19129:30;19126:117;;;19162:79;;:::i;:::-;19126:117;19267:78;19337:7;19328:6;19317:9;19313:22;19267:78;:::i;:::-;19257:88;;19052:303;18323:1039;;;;;:::o;19368:423::-;19509:4;19547:2;19536:9;19532:18;19524:26;;19596:9;19590:4;19586:20;19582:1;19571:9;19567:17;19560:47;19624:78;19697:4;19688:6;19624:78;:::i;:::-;19616:86;;19712:72;19780:2;19769:9;19765:18;19756:6;19712:72;:::i;:::-;19368:423;;;;;:::o;19797:329::-;19856:6;19905:2;19893:9;19884:7;19880:23;19876:32;19873:119;;;19911:79;;:::i;:::-;19873:119;20031:1;20056:53;20101:7;20092:6;20081:9;20077:22;20056:53;:::i;:::-;20046:63;;20002:117;19797:329;;;;:::o;20132:118::-;20219:24;20237:5;20219:24;:::i;:::-;20214:3;20207:37;20132:118;;:::o;20256:222::-;20349:4;20387:2;20376:9;20372:18;20364:26;;20400:71;20468:1;20457:9;20453:17;20444:6;20400:71;:::i;:::-;20256:222;;;;:::o;20484:76::-;20520:7;20549:5;20538:16;;20484:76;;;:::o;20566:115::-;20651:23;20668:5;20651:23;:::i;:::-;20646:3;20639:36;20566:115;;:::o;20687:218::-;20778:4;20816:2;20805:9;20801:18;20793:26;;20829:69;20895:1;20884:9;20880:17;20871:6;20829:69;:::i;:::-;20687:218;;;;:::o;20911:116::-;20981:21;20996:5;20981:21;:::i;:::-;20974:5;20971:32;20961:60;;21017:1;21014;21007:12;20961:60;20911:116;:::o;21033:133::-;21076:5;21114:6;21101:20;21092:29;;21130:30;21154:5;21130:30;:::i;:::-;21033:133;;;;:::o;21172:468::-;21237:6;21245;21294:2;21282:9;21273:7;21269:23;21265:32;21262:119;;;21300:79;;:::i;:::-;21262:119;21420:1;21445:53;21490:7;21481:6;21470:9;21466:22;21445:53;:::i;:::-;21435:63;;21391:117;21547:2;21573:50;21615:7;21606:6;21595:9;21591:22;21573:50;:::i;:::-;21563:60;;21518:115;21172:468;;;;;:::o;21646:474::-;21714:6;21722;21771:2;21759:9;21750:7;21746:23;21742:32;21739:119;;;21777:79;;:::i;:::-;21739:119;21897:1;21922:53;21967:7;21958:6;21947:9;21943:22;21922:53;:::i;:::-;21912:63;;21868:117;22024:2;22050:53;22095:7;22086:6;22075:9;22071:22;22050:53;:::i;:::-;22040:63;;21995:118;21646:474;;;;;:::o;22126:1089::-;22230:6;22238;22246;22254;22262;22311:3;22299:9;22290:7;22286:23;22282:33;22279:120;;;22318:79;;:::i;:::-;22279:120;22438:1;22463:53;22508:7;22499:6;22488:9;22484:22;22463:53;:::i;:::-;22453:63;;22409:117;22565:2;22591:53;22636:7;22627:6;22616:9;22612:22;22591:53;:::i;:::-;22581:63;;22536:118;22693:2;22719:53;22764:7;22755:6;22744:9;22740:22;22719:53;:::i;:::-;22709:63;;22664:118;22821:2;22847:53;22892:7;22883:6;22872:9;22868:22;22847:53;:::i;:::-;22837:63;;22792:118;22977:3;22966:9;22962:19;22949:33;23009:18;23001:6;22998:30;22995:117;;;23031:79;;:::i;:::-;22995:117;23136:62;23190:7;23181:6;23170:9;23166:22;23136:62;:::i;:::-;23126:72;;22920:288;22126:1089;;;;;;;;:::o;23221:619::-;23298:6;23306;23314;23363:2;23351:9;23342:7;23338:23;23334:32;23331:119;;;23369:79;;:::i;:::-;23331:119;23489:1;23514:53;23559:7;23550:6;23539:9;23535:22;23514:53;:::i;:::-;23504:63;;23460:117;23616:2;23642:53;23687:7;23678:6;23667:9;23663:22;23642:53;:::i;:::-;23632:63;;23587:118;23744:2;23770:53;23815:7;23806:6;23795:9;23791:22;23770:53;:::i;:::-;23760:63;;23715:118;23221:619;;;;;:::o;23846:230::-;23986:34;23982:1;23974:6;23970:14;23963:58;24055:13;24050:2;24042:6;24038:15;24031:38;23846:230;:::o;24082:366::-;24224:3;24245:67;24309:2;24304:3;24245:67;:::i;:::-;24238:74;;24321:93;24410:3;24321:93;:::i;:::-;24439:2;24434:3;24430:12;24423:19;;24082:366;;;:::o;24454:419::-;24620:4;24658:2;24647:9;24643:18;24635:26;;24707:9;24701:4;24697:20;24693:1;24682:9;24678:17;24671:47;24735:131;24861:4;24735:131;:::i;:::-;24727:139;;24454:419;;;:::o;24879:182::-;25019:34;25015:1;25007:6;25003:14;24996:58;24879:182;:::o;25067:366::-;25209:3;25230:67;25294:2;25289:3;25230:67;:::i;:::-;25223:74;;25306:93;25395:3;25306:93;:::i;:::-;25424:2;25419:3;25415:12;25408:19;;25067:366;;;:::o;25439:419::-;25605:4;25643:2;25632:9;25628:18;25620:26;;25692:9;25686:4;25682:20;25678:1;25667:9;25663:17;25656:47;25720:131;25846:4;25720:131;:::i;:::-;25712:139;;25439:419;;;:::o;25864:176::-;26004:28;26000:1;25992:6;25988:14;25981:52;25864:176;:::o;26046:366::-;26188:3;26209:67;26273:2;26268:3;26209:67;:::i;:::-;26202:74;;26285:93;26374:3;26285:93;:::i;:::-;26403:2;26398:3;26394:12;26387:19;;26046:366;;;:::o;26418:419::-;26584:4;26622:2;26611:9;26607:18;26599:26;;26671:9;26665:4;26661:20;26657:1;26646:9;26642:17;26635:47;26699:131;26825:4;26699:131;:::i;:::-;26691:139;;26418:419;;;:::o;26843:148::-;26945:11;26982:3;26967:18;;26843:148;;;;:::o;26997:390::-;27103:3;27131:39;27164:5;27131:39;:::i;:::-;27186:89;27268:6;27263:3;27186:89;:::i;:::-;27179:96;;27284:65;27342:6;27337:3;27330:4;27323:5;27319:16;27284:65;:::i;:::-;27374:6;27369:3;27365:16;27358:23;;27107:280;26997:390;;;;:::o;27393:275::-;27525:3;27547:95;27638:3;27629:6;27547:95;:::i;:::-;27540:102;;27659:3;27652:10;;27393:275;;;;:::o;27674:180::-;27722:77;27719:1;27712:88;27819:4;27816:1;27809:15;27843:4;27840:1;27833:15;27860:320;27904:6;27941:1;27935:4;27931:12;27921:22;;27988:1;27982:4;27978:12;28009:18;27999:81;;28065:4;28057:6;28053:17;28043:27;;27999:81;28127:2;28119:6;28116:14;28096:18;28093:38;28090:84;;28146:18;;:::i;:::-;28090:84;27911:269;27860:320;;;:::o;28186:141::-;28235:4;28258:3;28250:11;;28281:3;28278:1;28271:14;28315:4;28312:1;28302:18;28294:26;;28186:141;;;:::o;28357:874::-;28460:3;28497:5;28491:12;28526:36;28552:9;28526:36;:::i;:::-;28578:89;28660:6;28655:3;28578:89;:::i;:::-;28571:96;;28698:1;28687:9;28683:17;28714:1;28709:166;;;;28889:1;28884:341;;;;28676:549;;28709:166;28793:4;28789:9;28778;28774:25;28769:3;28762:38;28855:6;28848:14;28841:22;28833:6;28829:35;28824:3;28820:45;28813:52;;28709:166;;28884:341;28951:38;28983:5;28951:38;:::i;:::-;29011:1;29025:154;29039:6;29036:1;29033:13;29025:154;;;29113:7;29107:14;29103:1;29098:3;29094:11;29087:35;29163:1;29154:7;29150:15;29139:26;;29061:4;29058:1;29054:12;29049:17;;29025:154;;;29208:6;29203:3;29199:16;29192:23;;28891:334;;28676:549;;28464:767;;28357:874;;;;:::o;29237:269::-;29366:3;29388:92;29476:3;29467:6;29388:92;:::i;:::-;29381:99;;29497:3;29490:10;;29237:269;;;;:::o;29512:175::-;29652:27;29648:1;29640:6;29636:14;29629:51;29512:175;:::o;29693:366::-;29835:3;29856:67;29920:2;29915:3;29856:67;:::i;:::-;29849:74;;29932:93;30021:3;29932:93;:::i;:::-;30050:2;30045:3;30041:12;30034:19;;29693:366;;;:::o;30065:419::-;30231:4;30269:2;30258:9;30254:18;30246:26;;30318:9;30312:4;30308:20;30304:1;30293:9;30289:17;30282:47;30346:131;30472:4;30346:131;:::i;:::-;30338:139;;30065:419;;;:::o;30490:154::-;30630:6;30626:1;30618:6;30614:14;30607:30;30490:154;:::o;30650:400::-;30810:3;30831:84;30913:1;30908:3;30831:84;:::i;:::-;30824:91;;30924:93;31013:3;30924:93;:::i;:::-;31042:1;31037:3;31033:11;31026:18;;30650:400;;;:::o;31056:381::-;31241:3;31263:148;31407:3;31263:148;:::i;:::-;31256:155;;31428:3;31421:10;;31056:381;;;:::o;31443:180::-;31491:77;31488:1;31481:88;31588:4;31585:1;31578:15;31612:4;31609:1;31602:15;31629:191;31669:3;31688:20;31706:1;31688:20;:::i;:::-;31683:25;;31722:20;31740:1;31722:20;:::i;:::-;31717:25;;31765:1;31762;31758:9;31751:16;;31786:3;31783:1;31780:10;31777:36;;;31793:18;;:::i;:::-;31777:36;31629:191;;;;:::o;31826:223::-;31966:34;31962:1;31954:6;31950:14;31943:58;32035:6;32030:2;32022:6;32018:15;32011:31;31826:223;:::o;32055:366::-;32197:3;32218:67;32282:2;32277:3;32218:67;:::i;:::-;32211:74;;32294:93;32383:3;32294:93;:::i;:::-;32412:2;32407:3;32403:12;32396:19;;32055:366;;;:::o;32427:419::-;32593:4;32631:2;32620:9;32616:18;32608:26;;32680:9;32674:4;32670:20;32666:1;32655:9;32651:17;32644:47;32708:131;32834:4;32708:131;:::i;:::-;32700:139;;32427:419;;;:::o;32852:155::-;32992:7;32988:1;32980:6;32976:14;32969:31;32852:155;:::o;33013:400::-;33173:3;33194:84;33276:1;33271:3;33194:84;:::i;:::-;33187:91;;33287:93;33376:3;33287:93;:::i;:::-;33405:1;33400:3;33396:11;33389:18;;33013:400;;;:::o;33419:381::-;33604:3;33626:148;33770:3;33626:148;:::i;:::-;33619:155;;33791:3;33784:10;;33419:381;;;:::o;33806:180::-;33946:32;33942:1;33934:6;33930:14;33923:56;33806:180;:::o;33992:366::-;34134:3;34155:67;34219:2;34214:3;34155:67;:::i;:::-;34148:74;;34231:93;34320:3;34231:93;:::i;:::-;34349:2;34344:3;34340:12;34333:19;;33992:366;;;:::o;34364:419::-;34530:4;34568:2;34557:9;34553:18;34545:26;;34617:9;34611:4;34607:20;34603:1;34592:9;34588:17;34581:47;34645:131;34771:4;34645:131;:::i;:::-;34637:139;;34364:419;;;:::o;34789:155::-;34929:7;34925:1;34917:6;34913:14;34906:31;34789:155;:::o;34950:400::-;35110:3;35131:84;35213:1;35208:3;35131:84;:::i;:::-;35124:91;;35224:93;35313:3;35224:93;:::i;:::-;35342:1;35337:3;35333:11;35326:18;;34950:400;;;:::o;35356:381::-;35541:3;35563:148;35707:3;35563:148;:::i;:::-;35556:155;;35728:3;35721:10;;35356:381;;;:::o;35743:155::-;35883:7;35879:1;35871:6;35867:14;35860:31;35743:155;:::o;35904:400::-;36064:3;36085:84;36167:1;36162:3;36085:84;:::i;:::-;36078:91;;36178:93;36267:3;36178:93;:::i;:::-;36296:1;36291:3;36287:11;36280:18;;35904:400;;;:::o;36310:381::-;36495:3;36517:148;36661:3;36517:148;:::i;:::-;36510:155;;36682:3;36675:10;;36310:381;;;:::o;36697:233::-;36736:3;36759:24;36777:5;36759:24;:::i;:::-;36750:33;;36805:66;36798:5;36795:77;36792:103;;36875:18;;:::i;:::-;36792:103;36922:1;36915:5;36911:13;36904:20;;36697:233;;;:::o;36936:155::-;37076:7;37072:1;37064:6;37060:14;37053:31;36936:155;:::o;37097:400::-;37257:3;37278:84;37360:1;37355:3;37278:84;:::i;:::-;37271:91;;37371:93;37460:3;37371:93;:::i;:::-;37489:1;37484:3;37480:11;37473:18;;37097:400;;;:::o;37503:695::-;37781:3;37803:92;37891:3;37882:6;37803:92;:::i;:::-;37796:99;;37912:95;38003:3;37994:6;37912:95;:::i;:::-;37905:102;;38024:148;38168:3;38024:148;:::i;:::-;38017:155;;38189:3;38182:10;;37503:695;;;;;:::o;38204:237::-;38344:34;38340:1;38332:6;38328:14;38321:58;38413:20;38408:2;38400:6;38396:15;38389:45;38204:237;:::o;38447:366::-;38589:3;38610:67;38674:2;38669:3;38610:67;:::i;:::-;38603:74;;38686:93;38775:3;38686:93;:::i;:::-;38804:2;38799:3;38795:12;38788:19;;38447:366;;;:::o;38819:419::-;38985:4;39023:2;39012:9;39008:18;39000:26;;39072:9;39066:4;39062:20;39058:1;39047:9;39043:17;39036:47;39100:131;39226:4;39100:131;:::i;:::-;39092:139;;38819:419;;;:::o;39244:228::-;39384:34;39380:1;39372:6;39368:14;39361:58;39453:11;39448:2;39440:6;39436:15;39429:36;39244:228;:::o;39478:366::-;39620:3;39641:67;39705:2;39700:3;39641:67;:::i;:::-;39634:74;;39717:93;39806:3;39717:93;:::i;:::-;39835:2;39830:3;39826:12;39819:19;;39478:366;;;:::o;39850:419::-;40016:4;40054:2;40043:9;40039:18;40031:26;;40103:9;40097:4;40093:20;40089:1;40078:9;40074:17;40067:47;40131:131;40257:4;40131:131;:::i;:::-;40123:139;;39850:419;;;:::o;40275:180::-;40323:77;40320:1;40313:88;40420:4;40417:1;40410:15;40444:4;40441:1;40434:15;40461:180;40601:32;40597:1;40589:6;40585:14;40578:56;40461:180;:::o;40647:366::-;40789:3;40810:67;40874:2;40869:3;40810:67;:::i;:::-;40803:74;;40886:93;40975:3;40886:93;:::i;:::-;41004:2;40999:3;40995:12;40988:19;;40647:366;;;:::o;41019:419::-;41185:4;41223:2;41212:9;41208:18;41200:26;;41272:9;41266:4;41262:20;41258:1;41247:9;41243:17;41236:47;41300:131;41426:4;41300:131;:::i;:::-;41292:139;;41019:419;;;:::o;41444:93::-;41481:6;41528:2;41523;41516:5;41512:14;41508:23;41498:33;;41444:93;;;:::o;41543:107::-;41587:8;41637:5;41631:4;41627:16;41606:37;;41543:107;;;;:::o;41656:393::-;41725:6;41775:1;41763:10;41759:18;41798:97;41828:66;41817:9;41798:97;:::i;:::-;41916:39;41946:8;41935:9;41916:39;:::i;:::-;41904:51;;41988:4;41984:9;41977:5;41973:21;41964:30;;42037:4;42027:8;42023:19;42016:5;42013:30;42003:40;;41732:317;;41656:393;;;;;:::o;42055:60::-;42083:3;42104:5;42097:12;;42055:60;;;:::o;42121:142::-;42171:9;42204:53;42222:34;42231:24;42249:5;42231:24;:::i;:::-;42222:34;:::i;:::-;42204:53;:::i;:::-;42191:66;;42121:142;;;:::o;42269:75::-;42312:3;42333:5;42326:12;;42269:75;;;:::o;42350:269::-;42460:39;42491:7;42460:39;:::i;:::-;42521:91;42570:41;42594:16;42570:41;:::i;:::-;42562:6;42555:4;42549:11;42521:91;:::i;:::-;42515:4;42508:105;42426:193;42350:269;;;:::o;42625:73::-;42670:3;42625:73;:::o;42704:189::-;42781:32;;:::i;:::-;42822:65;42880:6;42872;42866:4;42822:65;:::i;:::-;42757:136;42704:189;;:::o;42899:186::-;42959:120;42976:3;42969:5;42966:14;42959:120;;;43030:39;43067:1;43060:5;43030:39;:::i;:::-;43003:1;42996:5;42992:13;42983:22;;42959:120;;;42899:186;;:::o;43091:543::-;43192:2;43187:3;43184:11;43181:446;;;43226:38;43258:5;43226:38;:::i;:::-;43310:29;43328:10;43310:29;:::i;:::-;43300:8;43296:44;43493:2;43481:10;43478:18;43475:49;;;43514:8;43499:23;;43475:49;43537:80;43593:22;43611:3;43593:22;:::i;:::-;43583:8;43579:37;43566:11;43537:80;:::i;:::-;43196:431;;43181:446;43091:543;;;:::o;43640:117::-;43694:8;43744:5;43738:4;43734:16;43713:37;;43640:117;;;;:::o;43763:169::-;43807:6;43840:51;43888:1;43884:6;43876:5;43873:1;43869:13;43840:51;:::i;:::-;43836:56;43921:4;43915;43911:15;43901:25;;43814:118;43763:169;;;;:::o;43937:295::-;44013:4;44159:29;44184:3;44178:4;44159:29;:::i;:::-;44151:37;;44221:3;44218:1;44214:11;44208:4;44205:21;44197:29;;43937:295;;;;:::o;44237:1395::-;44354:37;44387:3;44354:37;:::i;:::-;44456:18;44448:6;44445:30;44442:56;;;44478:18;;:::i;:::-;44442:56;44522:38;44554:4;44548:11;44522:38;:::i;:::-;44607:67;44667:6;44659;44653:4;44607:67;:::i;:::-;44701:1;44725:4;44712:17;;44757:2;44749:6;44746:14;44774:1;44769:618;;;;45431:1;45448:6;45445:77;;;45497:9;45492:3;45488:19;45482:26;45473:35;;45445:77;45548:67;45608:6;45601:5;45548:67;:::i;:::-;45542:4;45535:81;45404:222;44739:887;;44769:618;44821:4;44817:9;44809:6;44805:22;44855:37;44887:4;44855:37;:::i;:::-;44914:1;44928:208;44942:7;44939:1;44936:14;44928:208;;;45021:9;45016:3;45012:19;45006:26;44998:6;44991:42;45072:1;45064:6;45060:14;45050:24;;45119:2;45108:9;45104:18;45091:31;;44965:4;44962:1;44958:12;44953:17;;44928:208;;;45164:6;45155:7;45152:19;45149:179;;;45222:9;45217:3;45213:19;45207:26;45265:48;45307:4;45299:6;45295:17;45284:9;45265:48;:::i;:::-;45257:6;45250:64;45172:156;45149:179;45374:1;45370;45362:6;45358:14;45354:22;45348:4;45341:36;44776:611;;;44739:887;;44329:1303;;;44237:1395;;:::o;45638:228::-;45778:34;45774:1;45766:6;45762:14;45755:58;45847:11;45842:2;45834:6;45830:15;45823:36;45638:228;:::o;45872:366::-;46014:3;46035:67;46099:2;46094:3;46035:67;:::i;:::-;46028:74;;46111:93;46200:3;46111:93;:::i;:::-;46229:2;46224:3;46220:12;46213:19;;45872:366;;;:::o;46244:419::-;46410:4;46448:2;46437:9;46433:18;46425:26;;46497:9;46491:4;46487:20;46483:1;46472:9;46468:17;46461:47;46525:131;46651:4;46525:131;:::i;:::-;46517:139;;46244:419;;;:::o;46669:105::-;46705:7;46745:22;46738:5;46734:34;46723:45;;46669:105;;;:::o;46780:120::-;46852:23;46869:5;46852:23;:::i;:::-;46845:5;46842:34;46832:62;;46890:1;46887;46880:12;46832:62;46780:120;:::o;46906:141::-;46962:5;46993:6;46987:13;46978:22;;47009:32;47035:5;47009:32;:::i;:::-;46906:141;;;;:::o;47053:120::-;47125:23;47142:5;47125:23;:::i;:::-;47118:5;47115:34;47105:62;;47163:1;47160;47153:12;47105:62;47053:120;:::o;47179:141::-;47235:5;47266:6;47260:13;47251:22;;47282:32;47308:5;47282:32;:::i;:::-;47179:141;;;;:::o;47326:143::-;47383:5;47414:6;47408:13;47399:22;;47430:33;47457:5;47430:33;:::i;:::-;47326:143;;;;:::o;47475:971::-;47578:6;47586;47594;47602;47610;47659:3;47647:9;47638:7;47634:23;47630:33;47627:120;;;47666:79;;:::i;:::-;47627:120;47786:1;47811:63;47866:7;47857:6;47846:9;47842:22;47811:63;:::i;:::-;47801:73;;47757:127;47923:2;47949:63;48004:7;47995:6;47984:9;47980:22;47949:63;:::i;:::-;47939:73;;47894:128;48061:2;48087:64;48143:7;48134:6;48123:9;48119:22;48087:64;:::i;:::-;48077:74;;48032:129;48200:2;48226:64;48282:7;48273:6;48262:9;48258:22;48226:64;:::i;:::-;48216:74;;48171:129;48339:3;48366:63;48421:7;48412:6;48401:9;48397:22;48366:63;:::i;:::-;48356:73;;48310:129;47475:971;;;;;;;;:::o;48452:225::-;48592:34;48588:1;48580:6;48576:14;48569:58;48661:8;48656:2;48648:6;48644:15;48637:33;48452:225;:::o;48683:366::-;48825:3;48846:67;48910:2;48905:3;48846:67;:::i;:::-;48839:74;;48922:93;49011:3;48922:93;:::i;:::-;49040:2;49035:3;49031:12;49024:19;;48683:366;;;:::o;49055:419::-;49221:4;49259:2;49248:9;49244:18;49236:26;;49308:9;49302:4;49298:20;49294:1;49283:9;49279:17;49272:47;49336:131;49462:4;49336:131;:::i;:::-;49328:139;;49055:419;;;:::o;49480:410::-;49520:7;49543:20;49561:1;49543:20;:::i;:::-;49538:25;;49577:20;49595:1;49577:20;:::i;:::-;49572:25;;49632:1;49629;49625:9;49654:30;49672:11;49654:30;:::i;:::-;49643:41;;49833:1;49824:7;49820:15;49817:1;49814:22;49794:1;49787:9;49767:83;49744:139;;49863:18;;:::i;:::-;49744:139;49528:362;49480:410;;;;:::o;49896:180::-;49944:77;49941:1;49934:88;50041:4;50038:1;50031:15;50065:4;50062:1;50055:15;50082:185;50122:1;50139:20;50157:1;50139:20;:::i;:::-;50134:25;;50173:20;50191:1;50173:20;:::i;:::-;50168:25;;50212:1;50202:35;;50217:18;;:::i;:::-;50202:35;50259:1;50256;50252:9;50247:14;;50082:185;;;;:::o;50273:194::-;50313:4;50333:20;50351:1;50333:20;:::i;:::-;50328:25;;50367:20;50385:1;50367:20;:::i;:::-;50362:25;;50411:1;50408;50404:9;50396:17;;50435:1;50429:4;50426:11;50423:37;;;50440:18;;:::i;:::-;50423:37;50273:194;;;;:::o;50473:220::-;50613:34;50609:1;50601:6;50597:14;50590:58;50682:3;50677:2;50669:6;50665:15;50658:28;50473:220;:::o;50699:366::-;50841:3;50862:67;50926:2;50921:3;50862:67;:::i;:::-;50855:74;;50938:93;51027:3;50938:93;:::i;:::-;51056:2;51051:3;51047:12;51040:19;;50699:366;;;:::o;51071:419::-;51237:4;51275:2;51264:9;51260:18;51252:26;;51324:9;51318:4;51314:20;51310:1;51299:9;51295:17;51288:47;51352:131;51478:4;51352:131;:::i;:::-;51344:139;;51071:419;;;:::o;51496:85::-;51541:7;51570:5;51559:16;;51496:85;;;:::o;51587:158::-;51645:9;51678:61;51696:42;51705:32;51731:5;51705:32;:::i;:::-;51696:42;:::i;:::-;51678:61;:::i;:::-;51665:74;;51587:158;;;:::o;51751:147::-;51846:45;51885:5;51846:45;:::i;:::-;51841:3;51834:58;51751:147;;:::o;51904:348::-;52033:4;52071:2;52060:9;52056:18;52048:26;;52084:71;52152:1;52141:9;52137:17;52128:6;52084:71;:::i;:::-;52165:80;52241:2;52230:9;52226:18;52217:6;52165:80;:::i;:::-;51904:348;;;;;:::o;52258:176::-;52290:1;52307:20;52325:1;52307:20;:::i;:::-;52302:25;;52341:20;52359:1;52341:20;:::i;:::-;52336:25;;52380:1;52370:35;;52385:18;;:::i;:::-;52370:35;52426:1;52423;52419:9;52414:14;;52258:176;;;;:::o;52440:227::-;52580:34;52576:1;52568:6;52564:14;52557:58;52649:10;52644:2;52636:6;52632:15;52625:35;52440:227;:::o;52673:366::-;52815:3;52836:67;52900:2;52895:3;52836:67;:::i;:::-;52829:74;;52912:93;53001:3;52912:93;:::i;:::-;53030:2;53025:3;53021:12;53014:19;;52673:366;;;:::o;53045:419::-;53211:4;53249:2;53238:9;53234:18;53226:26;;53298:9;53292:4;53288:20;53284:1;53273:9;53269:17;53262:47;53326:131;53452:4;53326:131;:::i;:::-;53318:139;;53045:419;;;:::o;53470:224::-;53610:34;53606:1;53598:6;53594:14;53587:58;53679:7;53674:2;53666:6;53662:15;53655:32;53470:224;:::o;53700:366::-;53842:3;53863:67;53927:2;53922:3;53863:67;:::i;:::-;53856:74;;53939:93;54028:3;53939:93;:::i;:::-;54057:2;54052:3;54048:12;54041:19;;53700:366;;;:::o;54072:419::-;54238:4;54276:2;54265:9;54261:18;54253:26;;54325:9;54319:4;54315:20;54311:1;54300:9;54296:17;54289:47;54353:131;54479:4;54353:131;:::i;:::-;54345:139;;54072:419;;;:::o;54497:229::-;54637:34;54633:1;54625:6;54621:14;54614:58;54706:12;54701:2;54693:6;54689:15;54682:37;54497:229;:::o;54732:366::-;54874:3;54895:67;54959:2;54954:3;54895:67;:::i;:::-;54888:74;;54971:93;55060:3;54971:93;:::i;:::-;55089:2;55084:3;55080:12;55073:19;;54732:366;;;:::o;55104:419::-;55270:4;55308:2;55297:9;55293:18;55285:26;;55357:9;55351:4;55347:20;55343:1;55332:9;55328:17;55321:47;55385:131;55511:4;55385:131;:::i;:::-;55377:139;;55104:419;;;:::o;55529:634::-;55750:4;55788:2;55777:9;55773:18;55765:26;;55837:9;55831:4;55827:20;55823:1;55812:9;55808:17;55801:47;55865:108;55968:4;55959:6;55865:108;:::i;:::-;55857:116;;56020:9;56014:4;56010:20;56005:2;55994:9;55990:18;55983:48;56048:108;56151:4;56142:6;56048:108;:::i;:::-;56040:116;;55529:634;;;;;:::o;56169:222::-;56309:34;56305:1;56297:6;56293:14;56286:58;56378:5;56373:2;56365:6;56361:15;56354:30;56169:222;:::o;56397:366::-;56539:3;56560:67;56624:2;56619:3;56560:67;:::i;:::-;56553:74;;56636:93;56725:3;56636:93;:::i;:::-;56754:2;56749:3;56745:12;56738:19;;56397:366;;;:::o;56769:419::-;56935:4;56973:2;56962:9;56958:18;56950:26;;57022:9;57016:4;57012:20;57008:1;56997:9;56993:17;56986:47;57050:131;57176:4;57050:131;:::i;:::-;57042:139;;56769:419;;;:::o;57194:223::-;57334:34;57330:1;57322:6;57318:14;57311:58;57403:6;57398:2;57390:6;57386:15;57379:31;57194:223;:::o;57423:366::-;57565:3;57586:67;57650:2;57645:3;57586:67;:::i;:::-;57579:74;;57662:93;57751:3;57662:93;:::i;:::-;57780:2;57775:3;57771:12;57764:19;;57423:366;;;:::o;57795:419::-;57961:4;57999:2;57988:9;57984:18;57976:26;;58048:9;58042:4;58038:20;58034:1;58023:9;58019:17;58012:47;58076:131;58202:4;58076:131;:::i;:::-;58068:139;;57795:419;;;:::o;58220:228::-;58360:34;58356:1;58348:6;58344:14;58337:58;58429:11;58424:2;58416:6;58412:15;58405:36;58220:228;:::o;58454:366::-;58596:3;58617:67;58681:2;58676:3;58617:67;:::i;:::-;58610:74;;58693:93;58782:3;58693:93;:::i;:::-;58811:2;58806:3;58802:12;58795:19;;58454:366;;;:::o;58826:419::-;58992:4;59030:2;59019:9;59015:18;59007:26;;59079:9;59073:4;59069:20;59065:1;59054:9;59050:17;59043:47;59107:131;59233:4;59107:131;:::i;:::-;59099:139;;58826:419;;;:::o;59251:332::-;59372:4;59410:2;59399:9;59395:18;59387:26;;59423:71;59491:1;59480:9;59476:17;59467:6;59423:71;:::i;:::-;59504:72;59572:2;59561:9;59557:18;59548:6;59504:72;:::i;:::-;59251:332;;;;;:::o;59589:98::-;59640:6;59674:5;59668:12;59658:22;;59589:98;;;:::o;59693:168::-;59776:11;59810:6;59805:3;59798:19;59850:4;59845:3;59841:14;59826:29;;59693:168;;;;:::o;59867:373::-;59953:3;59981:38;60013:5;59981:38;:::i;:::-;60035:70;60098:6;60093:3;60035:70;:::i;:::-;60028:77;;60114:65;60172:6;60167:3;60160:4;60153:5;60149:16;60114:65;:::i;:::-;60204:29;60226:6;60204:29;:::i;:::-;60199:3;60195:39;60188:46;;59957:283;59867:373;;;;:::o;60246:751::-;60469:4;60507:3;60496:9;60492:19;60484:27;;60521:71;60589:1;60578:9;60574:17;60565:6;60521:71;:::i;:::-;60602:72;60670:2;60659:9;60655:18;60646:6;60602:72;:::i;:::-;60684;60752:2;60741:9;60737:18;60728:6;60684:72;:::i;:::-;60766;60834:2;60823:9;60819:18;60810:6;60766:72;:::i;:::-;60886:9;60880:4;60876:20;60870:3;60859:9;60855:19;60848:49;60914:76;60985:4;60976:6;60914:76;:::i;:::-;60906:84;;60246:751;;;;;;;;:::o;61003:141::-;61059:5;61090:6;61084:13;61075:22;;61106:32;61132:5;61106:32;:::i;:::-;61003:141;;;;:::o;61150:349::-;61219:6;61268:2;61256:9;61247:7;61243:23;61239:32;61236:119;;;61274:79;;:::i;:::-;61236:119;61394:1;61419:63;61474:7;61465:6;61454:9;61450:22;61419:63;:::i;:::-;61409:73;;61365:127;61150:349;;;;:::o;61505:106::-;61549:8;61598:5;61593:3;61589:15;61568:36;;61505:106;;;:::o;61617:183::-;61652:3;61690:1;61672:16;61669:23;61666:128;;;61728:1;61725;61722;61707:23;61750:34;61781:1;61775:8;61750:34;:::i;:::-;61743:41;;61666:128;61617:183;:::o;61806:711::-;61845:3;61883:4;61865:16;61862:26;61891:5;61859:39;61920:20;;:::i;:::-;61995:1;61977:16;61973:24;61970:1;61964:4;61949:49;62028:4;62022:11;62127:16;62120:4;62112:6;62108:17;62105:39;62072:18;62064:6;62061:30;62045:113;62042:146;;;62173:5;;;;62042:146;62219:6;62213:4;62209:17;62255:3;62249:10;62282:18;62274:6;62271:30;62268:43;;;62304:5;;;;;;62268:43;62352:6;62345:4;62340:3;62336:14;62332:27;62411:1;62393:16;62389:24;62383:4;62379:35;62374:3;62371:44;62368:57;;;62418:5;;;;;;;62368:57;62435;62483:6;62477:4;62473:17;62465:6;62461:30;62455:4;62435:57;:::i;:::-;62508:3;62501:10;;61849:668;;;;;61806:711;;:::o;62523:239::-;62663:34;62659:1;62651:6;62647:14;62640:58;62732:22;62727:2;62719:6;62715:15;62708:47;62523:239;:::o;62768:366::-;62910:3;62931:67;62995:2;62990:3;62931:67;:::i;:::-;62924:74;;63007:93;63096:3;63007:93;:::i;:::-;63125:2;63120:3;63116:12;63109:19;;62768:366;;;:::o;63140:419::-;63306:4;63344:2;63333:9;63329:18;63321:26;;63393:9;63387:4;63383:20;63379:1;63368:9;63364:17;63357:47;63421:131;63547:4;63421:131;:::i;:::-;63413:139;;63140:419;;;:::o;63565:227::-;63705:34;63701:1;63693:6;63689:14;63682:58;63774:10;63769:2;63761:6;63757:15;63750:35;63565:227;:::o;63798:366::-;63940:3;63961:67;64025:2;64020:3;63961:67;:::i;:::-;63954:74;;64037:93;64126:3;64037:93;:::i;:::-;64155:2;64150:3;64146:12;64139:19;;63798:366;;;:::o;64170:419::-;64336:4;64374:2;64363:9;64359:18;64351:26;;64423:9;64417:4;64413:20;64409:1;64398:9;64394:17;64387:47;64451:131;64577:4;64451:131;:::i;:::-;64443:139;;64170:419;;;:::o;64595:1053::-;64918:4;64956:3;64945:9;64941:19;64933:27;;64970:71;65038:1;65027:9;65023:17;65014:6;64970:71;:::i;:::-;65051:72;65119:2;65108:9;65104:18;65095:6;65051:72;:::i;:::-;65170:9;65164:4;65160:20;65155:2;65144:9;65140:18;65133:48;65198:108;65301:4;65292:6;65198:108;:::i;:::-;65190:116;;65353:9;65347:4;65343:20;65338:2;65327:9;65323:18;65316:48;65381:108;65484:4;65475:6;65381:108;:::i;:::-;65373:116;;65537:9;65531:4;65527:20;65521:3;65510:9;65506:19;65499:49;65565:76;65636:4;65627:6;65565:76;:::i;:::-;65557:84;;64595:1053;;;;;;;;:::o
Swarm Source
ipfs://35843e63d2816896b0c6e5878dabc51405bd837a468d54ea72fcdfa5ed139855
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ZKSYNC | 100.00% | $3,329.13 | 0.00101 | $3.36 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.