Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 157 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 15086162 | 1359 days ago | IN | 0 ETH | 0.00120906 | ||||
| Buy Token | 15074938 | 1361 days ago | IN | 0 ETH | 0.00436534 | ||||
| Buy Token | 15074781 | 1361 days ago | IN | 0 ETH | 0.00146162 | ||||
| Buy Token | 15074781 | 1361 days ago | IN | 0 ETH | 0.00367856 | ||||
| Buy Token | 15074701 | 1361 days ago | IN | 0.4 ETH | 0.00296918 | ||||
| Buy Token | 15074697 | 1361 days ago | IN | 0.08 ETH | 0.00265427 | ||||
| Safe Transfer Fr... | 14575454 | 1443 days ago | IN | 0 ETH | 0.00106835 | ||||
| Safe Transfer Fr... | 14575448 | 1443 days ago | IN | 0 ETH | 0.00150838 | ||||
| Safe Transfer Fr... | 14575443 | 1443 days ago | IN | 0 ETH | 0.00106975 | ||||
| Mint Token | 14403144 | 1470 days ago | IN | 0 ETH | 0.00527573 | ||||
| Mint Token | 14403016 | 1470 days ago | IN | 0 ETH | 0.00540461 | ||||
| Mint Token | 14402949 | 1470 days ago | IN | 0 ETH | 0.00726011 | ||||
| Mint Token | 14402937 | 1470 days ago | IN | 0 ETH | 0.00712248 | ||||
| Mint Token | 14402919 | 1470 days ago | IN | 0 ETH | 0.00498906 | ||||
| Mint Token | 14402857 | 1470 days ago | IN | 0 ETH | 0.00669695 | ||||
| Mint Token | 14402829 | 1470 days ago | IN | 0 ETH | 0.0061118 | ||||
| Mint Token | 14402816 | 1470 days ago | IN | 0 ETH | 0.00599346 | ||||
| Mint Token | 14395739 | 1471 days ago | IN | 0 ETH | 0.00852875 | ||||
| Mint Token | 14395720 | 1471 days ago | IN | 0 ETH | 0.00845751 | ||||
| Mint Token | 14395679 | 1471 days ago | IN | 0 ETH | 0.00640254 | ||||
| Mint Token | 14395668 | 1471 days ago | IN | 0 ETH | 0.00844157 | ||||
| Mint Token | 14395657 | 1471 days ago | IN | 0 ETH | 0.00725021 | ||||
| Mint Token | 14395635 | 1471 days ago | IN | 0 ETH | 0.00791888 | ||||
| Mint Token | 14395624 | 1471 days ago | IN | 0 ETH | 0.00625367 | ||||
| Mint Token | 14395533 | 1471 days ago | IN | 0 ETH | 0.00995114 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15074701 | 1361 days ago | 0.362 ETH | ||||
| Transfer | 15074701 | 1361 days ago | 0.028 ETH | ||||
| Transfer | 15074701 | 1361 days ago | 0.0045 ETH | ||||
| Transfer | 15074701 | 1361 days ago | 0.0055 ETH | ||||
| Transfer | 15074697 | 1361 days ago | 0.0724 ETH | ||||
| Transfer | 15074697 | 1361 days ago | 0.0056 ETH | ||||
| Transfer | 15074697 | 1361 days ago | 0.0009 ETH | ||||
| Transfer | 15074697 | 1361 days ago | 0.0011 ETH | ||||
| - | 14394885 | 1471 days ago | 0.0724 ETH | ||||
| - | 14394885 | 1471 days ago | 0.0056 ETH | ||||
| - | 14394885 | 1471 days ago | 0.0009 ETH | ||||
| - | 14394885 | 1471 days ago | 0.0011 ETH | ||||
| - | 14394729 | 1471 days ago | 0.0362 ETH | ||||
| - | 14394729 | 1471 days ago | 0.0028 ETH | ||||
| - | 14394729 | 1471 days ago | 0.00045 ETH | ||||
| - | 14394729 | 1471 days ago | 0.00055 ETH | ||||
| - | 14389919 | 1472 days ago | 0.0362 ETH | ||||
| - | 14389919 | 1472 days ago | 0.0028 ETH | ||||
| - | 14389919 | 1472 days ago | 0.00045 ETH | ||||
| - | 14389919 | 1472 days ago | 0.00055 ETH | ||||
| - | 14201543 | 1501 days ago | 1.11315 ETH | ||||
| - | 14201543 | 1501 days ago | 0.0861 ETH | ||||
| - | 14201543 | 1501 days ago | 0.0138375 ETH | ||||
| - | 14201543 | 1501 days ago | 0.0169125 ETH | ||||
| - | 14201486 | 1501 days ago | 0.4344 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Hancom1155
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
pragma solidity ^0.8.0;
contract Hancom1155 is ERC1155, Ownable {
string public name = "Hancom Artpia";
string public symbol = "HCAP";
uint256 public tokenIdCounter = 0;
uint256 public saleIdCounter = 0;
address payable private _addressA;
address payable private _addressB;
uint16 private _shareRateA = 55;
uint16 private _fee = 250;
string private _baseURIExtended;
string private _contractMetadataURI;
address private _distributor;
struct Token {
bool isPresent;
string tokenURI;
uint16 royalty;
address payable minter;
uint256 amount;
}
struct Hold {
bool isPresent;
uint256 amount;
}
struct Sale {
bool isPresent;
address payable seller;
uint256 tokenId;
uint16 currencyId;
uint256 price;
uint256 amount;
}
mapping(uint256 => Token) public tokens;
mapping(uint256 => mapping(address => Hold)) public holds;
mapping(uint256 => Sale) public sales;
mapping(uint16 => address) private _currencyAddresses;
constructor(string memory baseURI_, string memory contractMetadataURI_)
ERC1155(string(abi.encodePacked(baseURI_, "{id}"))) payable {
_baseURIExtended = baseURI_;
_contractMetadataURI = contractMetadataURI_;
}
function uri(uint256 tokenId) public view override returns (string memory) {
require(tokens[tokenId].isPresent);
return string(abi.encodePacked(_baseURIExtended, tokens[tokenId].tokenURI));
}
function contractURI() public view returns (string memory) {
return string(abi.encodePacked(_baseURIExtended, _contractMetadataURI));
}
function setDistributor(address distributor) public onlyOwner {
_distributor = distributor;
}
function getDistributor() public view onlyOwner returns (address) {
return _distributor;
}
function addCurrencyAddress(uint16 currencyId, address currencyAddress) public onlyOwner {
_currencyAddresses[currencyId] = currencyAddress;
}
function setShares(address payable addressA, address payable addressB, uint16 rate, uint16 fee) public onlyOwner {
_addressA = addressA;
_addressB = addressB;
_shareRateA = rate;
_fee = fee;
}
function getShares() public view onlyOwner returns (address, address, uint16, uint16) {
return (_addressA, _addressB, _shareRateA, _fee);
}
function changeToken(uint256 tokenId, bool isPresent) public onlyOwner {
tokens[tokenId].isPresent = isPresent;
}
function changeSale(uint256 saleId, bool isPresent) public onlyOwner {
tokens[saleId].isPresent = isPresent;
}
function changeTokenURI(uint256 tokenId, string memory tokenURI) public onlyOwner {
tokens[tokenId].tokenURI = tokenURI;
}
function totalSupply(uint256 tokenId) public view returns (uint256) {
return tokens[tokenId].amount;
}
event Minted(
uint256 tokenId, string title, string tokenURI, uint16 royalty, uint256 amount,
bool putOnSale, uint256 saleId, uint16 currencyId, uint256 price, uint256 saleAmount,
uint256 indexed dataId
);
function mintToken(string memory title, string memory uri, uint16 royalty, uint256 amount,
bool putOnSale, uint16 currencyId, uint256 price, uint256 saleAmount, uint256 dataId) external {
require(
amount >= saleAmount
&& bytes(uri).length > 0);
uint256 tokenId = tokenIdCounter;
require(!tokens[tokenId + 1].isPresent);
tokenId = ++tokenIdCounter;
setApprovalForAll(address(this), true);
_mint(_msgSender(), tokenId, amount, "");
tokens[tokenId] = Token(true, uri, royalty, payable(_msgSender()), amount);
uint256 saleId = 0;
if (putOnSale) {
require(
currencyId > 0
&& price > 0
&& saleAmount > 0
&& !sales[saleIdCounter + 1].isPresent
);
saleId = ++saleIdCounter;
sales[saleId] = Sale(true, payable(_msgSender()), tokenId, currencyId, price, saleAmount);
if (amount > saleAmount) {
holds[tokenId][_msgSender()] = Hold(true, amount - saleAmount);
}
} else {
holds[tokenId][_msgSender()] = Hold(true, amount);
}
emit Minted(tokenId, title, uri, royalty, amount, putOnSale, saleId, currencyId, price, saleAmount, dataId);
}
event Sold(uint256 saleId, address seller, uint256 tokenId, uint16 currencyId, uint256 price, uint256 amount, uint256 indexed dataId);
function buyToken(uint256 saleId, uint256 amount, uint256 dataId) external payable {
Sale memory sale = sales[saleId];
Token memory token = tokens[sale.tokenId];
require(
amount > 0
&& sale.amount >= amount
&& sale.seller != _msgSender()
&& token.isPresent
);
{
(bool success,) = _distributor.delegatecall(
abi.encodeWithSignature("distribute(address,uint16,uint256,address,uint16,uint16,address,address,uint16,address)",
sale.seller, sale.currencyId, (sale.price * amount), token.minter, token.royalty, _fee, _addressA, _addressB, _shareRateA, _currencyAddresses[sale.currencyId]));
require(success);
}
{
setApprovalForAll(address(this), true);
_safeTransferFrom(sale.seller, _msgSender(), sale.tokenId, amount, "0x0");
}
{
if (sale.amount > amount) {
sales[saleId].amount = sale.amount - amount;
} else {
delete sales[saleId];
}
}
{
if (!holds[sale.tokenId][_msgSender()].isPresent) {
holds[sale.tokenId][_msgSender()] = Hold(true, amount);
} else {
holds[sale.tokenId][_msgSender()].amount = holds[sale.tokenId][_msgSender()].amount + amount;
}
}
emit Sold(saleId, sale.seller, sale.tokenId, sale.currencyId, sale.price, amount, dataId);
}
event SaleChanged(uint256 tokenId, uint256 saleId, bool putOnSale, uint16 currencyId, uint256 price, uint256 amount, uint256 holdAmount, uint256 indexed dataId);
function changeSale(uint256 tokenId, uint256 saleId, bool putOnSale, uint16 currencyId, uint256 price, uint256 amount, uint256 dataId) external {
require(_msgSender() != address(0)
&& tokens[tokenId].isPresent
&& currencyId > 0
&& price > 0
&& amount >= 0);
uint256 changeSaleId = saleId;
uint256 holdAmount = 0;
if (holds[tokenId][_msgSender()].isPresent) {
holdAmount = holds[tokenId][_msgSender()].amount;
}
if (putOnSale) {
require(holdAmount >= amount);
require(!sales[saleIdCounter + 1].isPresent);
changeSaleId = ++saleIdCounter;
sales[changeSaleId] = Sale(true, payable(_msgSender()), tokenId, currencyId, price, amount);
uint256 restHoldAmount = holdAmount - amount;
if (restHoldAmount > 0) {
holds[tokenId][_msgSender()].amount = restHoldAmount;
} else {
delete holds[tokenId][_msgSender()];
}
} else {
require(_msgSender() == sales[changeSaleId].seller);
if (holdAmount == 0) {
holds[tokenId][_msgSender()] = Hold(true, sales[changeSaleId].amount);
} else {
holds[tokenId][_msgSender()].amount = holdAmount + sales[changeSaleId].amount;
}
delete sales[changeSaleId];
}
emit SaleChanged(tokenId, changeSaleId, putOnSale, currencyId, price, amount, holdAmount, dataId);
}
function burn(address account, uint256 tokenId, uint256 amount) public {
require(tokens[tokenId].isPresent
&& tokens[tokenId].amount == amount);
if (_msgSender() == owner()) {
_burn(account, tokenId, amount);
} else {
require(_msgSender() == account);
_burn(account, tokenId, amount);
}
delete tokens[tokenId];
}
}// SPDX-License-Identifier: MIT
// 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(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);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
pragma solidity ^0.8.0;
import "../IERC1155.sol";
/**
* @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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
@dev Handles the receipt of a single ERC1155 token type. This function is
called at the end of a `safeTransferFrom` after the balance has been updated.
To accept the transfer, this must return
`bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
(i.e. 0xf23a6e61, or its own function selector).
@param operator The address which initiated the transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param id The ID of the token being transferred
@param value The amount of tokens being transferred
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
@dev Handles the receipt of a multiple ERC1155 token types. This function
is called at the end of a `safeBatchTransferFrom` after the balances have
been updated. To accept the transfer(s), this must return
`bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
(i.e. 0xbc197c81, or its own function selector).
@param operator The address which initiated the batch transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param ids An array containing ids of each token being transferred (order and length must match values array)
@param values An array containing amounts of each token being transferred (order and length must match ids array)
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @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;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)
pragma solidity ^0.8.0;
import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";
/**
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*/
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using Address for address;
// Mapping from token ID to account balances
mapping(uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;
/**
* @dev See {_setURI}.
*/
constructor(string memory uri_) {
_setURI(uri_);
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC1155).interfaceId ||
interfaceId == type(IERC1155MetadataURI).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*
* This implementation returns the same URI for *all* token types. It relies
* on the token type ID substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID.
*/
function uri(uint256) public view virtual override returns (string memory) {
return _uri;
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
require(account != address(0), "ERC1155: 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;
emit TransferSingle(operator, address(0), to, id, amount);
_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _mintBatch(
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
for (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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}{
"remappings": [],
"optimizer": {
"enabled": false,
"runs": 200
},
"evmVersion": "london",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"contractMetadataURI_","type":"string"}],"stateMutability":"payable","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"title","type":"string"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"},{"indexed":false,"internalType":"uint16","name":"royalty","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"putOnSale","type":"bool"},{"indexed":false,"internalType":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"currencyId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"putOnSale","type":"bool"},{"indexed":false,"internalType":"uint16","name":"currencyId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"SaleChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"currencyId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"Sold","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":"uint16","name":"currencyId","type":"uint16"},{"internalType":"address","name":"currencyAddress","type":"address"}],"name":"addCurrencyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"saleId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"saleId","type":"uint256"},{"internalType":"bool","name":"putOnSale","type":"bool"},{"internalType":"uint16","name":"currencyId","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"changeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"saleId","type":"uint256"},{"internalType":"bool","name":"isPresent","type":"bool"}],"name":"changeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"isPresent","type":"bool"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"changeTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getShares","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"holds","outputs":[{"internalType":"bool","name":"isPresent","type":"bool"},{"internalType":"uint256","name":"amount","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":"title","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint16","name":"royalty","type":"uint16"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"putOnSale","type":"bool"},{"internalType":"uint16","name":"currencyId","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"saleAmount","type":"uint256"},{"internalType":"uint256","name":"dataId","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"saleIdCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sales","outputs":[{"internalType":"bool","name":"isPresent","type":"bool"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint16","name":"currencyId","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"distributor","type":"address"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addressA","type":"address"},{"internalType":"address payable","name":"addressB","type":"address"},{"internalType":"uint16","name":"rate","type":"uint16"},{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bool","name":"isPresent","type":"bool"},{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"uint16","name":"royalty","type":"uint16"},{"internalType":"address payable","name":"minter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526040518060400160405280600d81526020017f48616e636f6d2041727470696100000000000000000000000000000000000000815250600490805190602001906200005192919062000283565b506040518060400160405280600481526020017f4843415000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f92919062000283565b50600060065560006007556037600960146101000a81548161ffff021916908361ffff16021790555060fa600960166101000a81548161ffff021916908361ffff160217905550604051620064483803806200644883398181016040528101906200010b9190620004d0565b816040516020016200011e9190620005f2565b6040516020818303038152906040526200013e816200019960201b60201c565b506200015f62000153620001b560201b60201c565b620001bd60201b60201c565b81600a90805190602001906200017792919062000283565b5080600b90805190602001906200019092919062000283565b5050506200067d565b8060029080519060200190620001b192919062000283565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002919062000647565b90600052602060002090601f016020900481019282620002b5576000855562000301565b82601f10620002d057805160ff191683800117855562000301565b8280016001018555821562000301579182015b8281111562000300578251825591602001919060010190620002e3565b5b50905062000310919062000314565b5090565b5b808211156200032f57600081600090555060010162000315565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200039c8262000351565b810181811067ffffffffffffffff82111715620003be57620003bd62000362565b5b80604052505050565b6000620003d362000333565b9050620003e1828262000391565b919050565b600067ffffffffffffffff82111562000404576200040362000362565b5b6200040f8262000351565b9050602081019050919050565b60005b838110156200043c5780820151818401526020810190506200041f565b838111156200044c576000848401525b50505050565b6000620004696200046384620003e6565b620003c7565b9050828152602081018484840111156200048857620004876200034c565b5b620004958482856200041c565b509392505050565b600082601f830112620004b557620004b462000347565b5b8151620004c784826020860162000452565b91505092915050565b60008060408385031215620004ea57620004e96200033d565b5b600083015167ffffffffffffffff8111156200050b576200050a62000342565b5b62000519858286016200049d565b925050602083015167ffffffffffffffff8111156200053d576200053c62000342565b5b6200054b858286016200049d565b9150509250929050565b600081519050919050565b600081905092915050565b6000620005788262000555565b62000584818562000560565b9350620005968185602086016200041c565b80840191505092915050565b7f7b69647d00000000000000000000000000000000000000000000000000000000600082015250565b6000620005da60048362000560565b9150620005e782620005a2565b600482019050919050565b60006200060082846200056b565b91506200060d82620005cb565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200066057607f821691505b6020821081141562000677576200067662000618565b5b50919050565b615dbb806200068d6000396000f3fe6080604052600436106101e25760003560e01c806375619ab511610102578063d73fe0aa11610095578063e985e9c511610064578063e985e9c514610701578063f242432a1461073e578063f2fde38b14610767578063f5298aca14610790576101e2565b8063d73fe0aa14610663578063ddc5866d14610691578063de2d554b146106ba578063e8a3d485146106d6576101e2565b806398bdf6f5116100d157806398bdf6f514610590578063a22cb465146105bb578063b5f522f7146105e4578063bd85b03914610626576101e2565b806375619ab5146104e85780637fb3a9a2146105115780638da5cb5b1461053a57806395d89b4114610565576101e2565b8063442fcbdf1161017a5780635884965f116101495780635884965f1461043d5780635b42dc33146104685780635e09aa27146104a6578063715018a6146104d1576101e2565b8063442fcbdf1461036d5780634becdd18146103965780634e1273f4146103bf5780634f64b2be146103fc576101e2565b806313367680116101b657806313367680146102c95780632a4248b2146102f25780632eb2c2d61461031b5780633ef89ec314610344576101e2565b8062fdd58e146101e757806301ffc9a71461022457806306fdde03146102615780630e89341c1461028c575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190613e6d565b6107b9565b60405161021b9190613ebc565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613f2f565b610882565b6040516102589190613f77565b60405180910390f35b34801561026d57600080fd5b50610276610964565b604051610283919061402b565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061404d565b6109f2565b6040516102c0919061402b565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906140f2565b610a60565b005b3480156102fe57600080fd5b50610319600480360381019061031491906142ba565b610b9e565b005b34801561032757600080fd5b50610342600480360381019061033d9190614525565b61108a565b005b34801561035057600080fd5b5061036b600480360381019061036691906145f4565b61112b565b005b34801561037957600080fd5b50610394600480360381019061038f9190614634565b611205565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190614674565b6112b3565b005b3480156103cb57600080fd5b506103e660048036038101906103e191906147d9565b61190e565b6040516103f3919061490f565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061404d565b611a27565b60405161043495949392919061494f565b60405180910390f35b34801561044957600080fd5b50610452611b20565b60405161045f91906149b8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906149d3565b611bc6565b60405161049d929190614a13565b60405180910390f35b3480156104b257600080fd5b506104bb611c04565b6040516104c89190613ebc565b60405180910390f35b3480156104dd57600080fd5b506104e6611c0a565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190614a3c565b611c92565b005b34801561051d57600080fd5b5061053860048036038101906105339190614a69565b611d52565b005b34801561054657600080fd5b5061054f611dfd565b60405161055c91906149b8565b60405180910390f35b34801561057157600080fd5b5061057a611e27565b604051610587919061402b565b60405180910390f35b34801561059c57600080fd5b506105a5611eb5565b6040516105b29190613ebc565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190614ac5565b611ebb565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061404d565b611ed1565b60405161061d96959493929190614b05565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061404d565b611f48565b60405161065a9190613ebc565b60405180910390f35b34801561066f57600080fd5b50610678611f68565b6040516106889493929190614b66565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190614634565b612060565b005b6106d460048036038101906106cf9190614bab565b61210e565b005b3480156106e257600080fd5b506106eb6128e9565b6040516106f8919061402b565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190614bfe565b612914565b6040516107359190613f77565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614c3e565b6129a8565b005b34801561077357600080fd5b5061078e60048036038101906107899190614a3c565b612a49565b005b34801561079c57600080fd5b506107b760048036038101906107b29190614cd5565b612b41565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561082a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082190614d9a565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095d575061095c82612caf565b5b9050919050565b6004805461097190614de9565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90614de9565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b505050505081565b6060600d600083815260200190815260200160002060000160009054906101000a900460ff16610a2157600080fd5b600a600d6000848152602001908152602001600020600101604051602001610a4a929190614eba565b6040516020818303038152906040529050919050565b610a68612d19565b73ffffffffffffffffffffffffffffffffffffffff16610a86611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390614f2a565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960146101000a81548161ffff021916908361ffff16021790555080600960166101000a81548161ffff021916908361ffff16021790555050505050565b818610158015610baf575060008851115b610bb857600080fd5b60006006549050600d6000600183610bd09190614f79565b815260200190815260200160002060000160009054906101000a900460ff1615610bf957600080fd5b600660008154610c0890614fcf565b9190508190559050610c1b306001611ebb565b610c3d610c26612d19565b828960405180602001604052806000815250612d21565b6040518060a001604052806001151581526020018a81526020018961ffff168152602001610c69612d19565b73ffffffffffffffffffffffffffffffffffffffff16815260200188815250600d600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001019080519060200190610cd7929190613ce2565b5060408201518160020160006101000a81548161ffff021916908361ffff16021790555060608201518160020160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816003015590505060008615610f965760008661ffff16118015610d6b5750600085115b8015610d775750600084115b8015610db25750600f60006001600754610d919190614f79565b815260200190815260200160002060000160009054906101000a900460ff16155b610dbb57600080fd5b600760008154610dca90614fcf565b91905081905590506040518060c00160405280600115158152602001610dee612d19565b73ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018761ffff16815260200186815260200185815250600f600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015560608201518160020160006101000a81548161ffff021916908361ffff1602179055506080820151816003015560a0820151816004015590505083881115610f91576040518060400160405280600115158152602001858a610f099190615018565b815250600e60008481526020019081526020016000206000610f29612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505b611033565b604051806040016040528060011515815260200189815250600e60008481526020019081526020016000206000610fcb612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505b827f6008bdb6f9ceef3f30846f8655cc1a93a0e5476a35c5cd7a74aa7aa6f7c02b1d838d8d8d8d8d888e8e8e6040516110759a9998979695949392919061504c565b60405180910390a25050505050505050505050565b611092612d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110d857506110d7856110d2612d19565b612914565b5b611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90615168565b60405180910390fd5b6111248585858585612eb7565b5050505050565b611133612d19565b73ffffffffffffffffffffffffffffffffffffffff16611151611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90614f2a565b60405180910390fd5b80601060008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61120d612d19565b73ffffffffffffffffffffffffffffffffffffffff1661122b611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890614f2a565b60405180910390fd5b80600d600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166112d3612d19565b73ffffffffffffffffffffffffffffffffffffffff16141580156113175750600d600088815260200190815260200160002060000160009054906101000a900460ff165b8015611327575060008461ffff16115b80156113335750600083115b8015611340575060008210155b61134957600080fd5b60008690506000600e60008a8152602001908152602001600020600061136d612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161561141b57600e60008a815260200190815260200160002060006113da612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b861561168a578381101561142e57600080fd5b600f600060016007546114419190614f79565b815260200190815260200160002060000160009054906101000a900460ff161561146a57600080fd5b60076000815461147990614fcf565b91905081905591506040518060c0016040528060011515815260200161149d612d19565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018761ffff16815260200186815260200185815250600f600084815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015560608201518160020160006101000a81548161ffff021916908361ffff1602179055506080820151816003015560a082015181600401559050506000848261159e9190615018565b9050600081111561160d5780600e60008c815260200190815260200160002060006115c7612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611684565b600e60008b8152602001908152602001600020600061162a612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905550505b506118bf565b600f600083815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116df612d19565b73ffffffffffffffffffffffffffffffffffffffff16146116ff57600080fd5b60008114156117bf576040518060400160405280600115158152602001600f600085815260200190815260200160002060040154815250600e60008b81526020019081526020016000206000611753612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155905050611840565b600f600083815260200190815260200160002060040154816117e19190614f79565b600e60008b815260200190815260200160002060006117fe612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b600f6000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549061ffff02191690556003820160009055600482016000905550505b827f65c9510d7df2b0e7c8c02ae5447daa8a4a81f1251543931dd3628b2eacd3111f8a848a8a8a8a886040516118fb9796959493929190615188565b60405180910390a2505050505050505050565b60608151835114611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b90615269565b60405180910390fd5b6000835167ffffffffffffffff81111561197157611970614163565b5b60405190808252806020026020018201604052801561199f5781602001602082028036833780820191505090505b50905060005b8451811015611a1c576119ec8582815181106119c4576119c3615289565b5b60200260200101518583815181106119df576119de615289565b5b60200260200101516107b9565b8282815181106119ff576119fe615289565b5b60200260200101818152505080611a1590614fcf565b90506119a5565b508091505092915050565b600d6020528060005260406000206000915090508060000160009054906101000a900460ff1690806001018054611a5d90614de9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8990614de9565b8015611ad65780601f10611aab57610100808354040283529160200191611ad6565b820191906000526020600020905b815481529060010190602001808311611ab957829003601f168201915b5050505050908060020160009054906101000a900461ffff16908060020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905085565b6000611b2a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611b48611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590614f2a565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154905082565b60075481565b611c12612d19565b73ffffffffffffffffffffffffffffffffffffffff16611c30611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614f2a565b60405180910390fd5b611c9060006131cb565b565b611c9a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611cb8611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614f2a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d5a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611d78611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590614f2a565b60405180910390fd5b80600d60008481526020019081526020016000206001019080519060200190611df8929190613ce2565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054611e3490614de9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6090614de9565b8015611ead5780601f10611e8257610100808354040283529160200191611ead565b820191906000526020600020905b815481529060010190602001808311611e9057829003601f168201915b505050505081565b60065481565b611ecd611ec6612d19565b8383613291565b5050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900461ffff16908060030154908060040154905086565b6000600d6000838152602001908152602001600020600301549050919050565b600080600080611f76612d19565b73ffffffffffffffffffffffffffffffffffffffff16611f94611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe190614f2a565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960149054906101000a900461ffff16600960169054906101000a900461ffff16935093509350935090919293565b612068612d19565b73ffffffffffffffffffffffffffffffffffffffff16612086611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614f2a565b60405180910390fd5b80600d600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505050565b6000600f60008581526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820154815260200160048201548152505090506000600d6000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201805461222e90614de9565b80601f016020809104026020016040519081016040528092919081815260200182805461225a90614de9565b80156122a75780601f1061227c576101008083540402835291602001916122a7565b820191906000526020600020905b81548152906001019060200180831161228a57829003601f168201915b505050505081526020016002820160009054906101000a900461ffff1661ffff1661ffff1681526020016002820160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506000841180156123465750838260a0015110155b80156123895750612355612d19565b73ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614155b8015612396575080600001515b61239f57600080fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836020015184606001518786608001516123f491906152b8565b85606001518660400151600960169054906101000a900461ffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960149054906101000a900461ffff16601060008e6060015161ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516024016124bf9a99989796959493929190615312565b6040516020818303038152906040527f94fba784000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161254991906153f5565b600060405180830381855af49150503d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b505090508061259757600080fd5b506125a3306001611ebb565b6125f482602001516125b3612d19565b8460400151876040518060400160405280600381526020017f30783000000000000000000000000000000000000000000000000000000000008152506133fe565b838260a00151111561262f57838260a001516126109190615018565b600f6000878152602001908152602001600020600401819055506126ae565b600f6000868152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549061ffff02191690556003820160009055600482016000905550505b600e60008360400151815260200190815260200160002060006126cf612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166127c357604051806040016040528060011515815260200185815250600e6000846040015181526020019081526020016000206000612757612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155905050612890565b83600e60008460400151815260200190815260200160002060006127e5612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461282d9190614f79565b600e600084604001518152602001908152602001600020600061284e612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b827f241965d5d3258ac80887a5c8663983235b77c5fdf60e05f679f5258b4964c2268684602001518560400151866060015187608001518a6040516128da9695949392919061546b565b60405180910390a25050505050565b6060600a600b604051602001612900929190614eba565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129b0612d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806129f657506129f5856129f0612d19565b612914565b5b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061553e565b60405180910390fd5b612a4285858585856133fe565b5050505050565b612a51612d19565b73ffffffffffffffffffffffffffffffffffffffff16612a6f611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906155d0565b60405180910390fd5b612b3e816131cb565b50565b600d600083815260200190815260200160002060000160009054906101000a900460ff168015612b86575080600d600084815260200190815260200160002060030154145b612b8f57600080fd5b612b97611dfd565b73ffffffffffffffffffffffffffffffffffffffff16612bb5612d19565b73ffffffffffffffffffffffffffffffffffffffff161415612be157612bdc838383613680565b612c2c565b8273ffffffffffffffffffffffffffffffffffffffff16612c00612d19565b73ffffffffffffffffffffffffffffffffffffffff1614612c2057600080fd5b612c2b838383613680565b5b600d6000838152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000612c649190613d68565b6002820160006101000a81549061ffff02191690556002820160026101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560038201600090555050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8890615662565b60405180910390fd5b6000612d9b612d19565b9050612dbc81600087612dad8861389d565b612db68861389d565b87613917565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1b9190614f79565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e99929190615682565b60405180910390a4612eb08160008787878761391f565b5050505050565b8151835114612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef29061571d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f62906157af565b60405180910390fd5b6000612f75612d19565b9050612f85818787878787613917565b60005b8451811015613136576000858281518110612fa657612fa5615289565b5b602002602001015190506000858381518110612fc557612fc4615289565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615841565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311b9190614f79565b925050819055505050508061312f90614fcf565b9050612f88565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516131ad929190615861565b60405180910390a46131c3818787878787613af7565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f79061590a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133f19190613f77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561346e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613465906157af565b60405180910390fd5b6000613478612d19565b90506134988187876134898861389d565b6134928861389d565b87613917565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615841565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135e49190614f79565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051613661929190615682565b60405180910390a461367782888888888861391f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e79061599c565b60405180910390fd5b60006136fa612d19565b905061372a8185600061370c8761389d565b6137158761389d565b60405180602001604052806000815250613917565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156137c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b890615a2e565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161388e929190615682565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156138bc576138bb614163565b5b6040519080825280602002602001820160405280156138ea5781602001602082028036833780820191505090505b509050828160008151811061390257613901615289565b5b60200260200101818152505080915050919050565b505050505050565b61393e8473ffffffffffffffffffffffffffffffffffffffff16613ccf565b15613aef578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613984959493929190615a98565b6020604051808303816000875af19250505080156139c057506040513d601f19601f820116820180604052508101906139bd9190615b07565b60015b613a66576139cc615b41565b806308c379a01415613a2957506139e1615b63565b806139ec5750613a2b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a20919061402b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5d90615c6b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae490615cfd565b60405180910390fd5b505b505050505050565b613b168473ffffffffffffffffffffffffffffffffffffffff16613ccf565b15613cc7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613b5c959493929190615d1d565b6020604051808303816000875af1925050508015613b9857506040513d601f19601f82011682018060405250810190613b959190615b07565b60015b613c3e57613ba4615b41565b806308c379a01415613c015750613bb9615b63565b80613bc45750613c03565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf8919061402b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3590615c6b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbc90615cfd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054613cee90614de9565b90600052602060002090601f016020900481019282613d105760008555613d57565b82601f10613d2957805160ff1916838001178555613d57565b82800160010185558215613d57579182015b82811115613d56578251825591602001919060010190613d3b565b5b509050613d649190613da8565b5090565b508054613d7490614de9565b6000825580601f10613d865750613da5565b601f016020900490600052602060002090810190613da49190613da8565b5b50565b5b80821115613dc1576000816000905550600101613da9565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0482613dd9565b9050919050565b613e1481613df9565b8114613e1f57600080fd5b50565b600081359050613e3181613e0b565b92915050565b6000819050919050565b613e4a81613e37565b8114613e5557600080fd5b50565b600081359050613e6781613e41565b92915050565b60008060408385031215613e8457613e83613dcf565b5b6000613e9285828601613e22565b9250506020613ea385828601613e58565b9150509250929050565b613eb681613e37565b82525050565b6000602082019050613ed16000830184613ead565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f0c81613ed7565b8114613f1757600080fd5b50565b600081359050613f2981613f03565b92915050565b600060208284031215613f4557613f44613dcf565b5b6000613f5384828501613f1a565b91505092915050565b60008115159050919050565b613f7181613f5c565b82525050565b6000602082019050613f8c6000830184613f68565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fcc578082015181840152602081019050613fb1565b83811115613fdb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ffd82613f92565b6140078185613f9d565b9350614017818560208601613fae565b61402081613fe1565b840191505092915050565b600060208201905081810360008301526140458184613ff2565b905092915050565b60006020828403121561406357614062613dcf565b5b600061407184828501613e58565b91505092915050565b600061408582613dd9565b9050919050565b6140958161407a565b81146140a057600080fd5b50565b6000813590506140b28161408c565b92915050565b600061ffff82169050919050565b6140cf816140b8565b81146140da57600080fd5b50565b6000813590506140ec816140c6565b92915050565b6000806000806080858703121561410c5761410b613dcf565b5b600061411a878288016140a3565b945050602061412b878288016140a3565b935050604061413c878288016140dd565b925050606061414d878288016140dd565b91505092959194509250565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61419b82613fe1565b810181811067ffffffffffffffff821117156141ba576141b9614163565b5b80604052505050565b60006141cd613dc5565b90506141d98282614192565b919050565b600067ffffffffffffffff8211156141f9576141f8614163565b5b61420282613fe1565b9050602081019050919050565b82818337600083830152505050565b600061423161422c846141de565b6141c3565b90508281526020810184848401111561424d5761424c61415e565b5b61425884828561420f565b509392505050565b600082601f83011261427557614274614159565b5b813561428584826020860161421e565b91505092915050565b61429781613f5c565b81146142a257600080fd5b50565b6000813590506142b48161428e565b92915050565b60008060008060008060008060006101208a8c0312156142dd576142dc613dcf565b5b60008a013567ffffffffffffffff8111156142fb576142fa613dd4565b5b6143078c828d01614260565b99505060208a013567ffffffffffffffff81111561432857614327613dd4565b5b6143348c828d01614260565b98505060406143458c828d016140dd565b97505060606143568c828d01613e58565b96505060806143678c828d016142a5565b95505060a06143788c828d016140dd565b94505060c06143898c828d01613e58565b93505060e061439a8c828d01613e58565b9250506101006143ac8c828d01613e58565b9150509295985092959850929598565b600067ffffffffffffffff8211156143d7576143d6614163565b5b602082029050602081019050919050565b600080fd5b60006144006143fb846143bc565b6141c3565b90508083825260208201905060208402830185811115614423576144226143e8565b5b835b8181101561444c57806144388882613e58565b845260208401935050602081019050614425565b5050509392505050565b600082601f83011261446b5761446a614159565b5b813561447b8482602086016143ed565b91505092915050565b600067ffffffffffffffff82111561449f5761449e614163565b5b6144a882613fe1565b9050602081019050919050565b60006144c86144c384614484565b6141c3565b9050828152602081018484840111156144e4576144e361415e565b5b6144ef84828561420f565b509392505050565b600082601f83011261450c5761450b614159565b5b813561451c8482602086016144b5565b91505092915050565b600080600080600060a0868803121561454157614540613dcf565b5b600061454f88828901613e22565b955050602061456088828901613e22565b945050604086013567ffffffffffffffff81111561458157614580613dd4565b5b61458d88828901614456565b935050606086013567ffffffffffffffff8111156145ae576145ad613dd4565b5b6145ba88828901614456565b925050608086013567ffffffffffffffff8111156145db576145da613dd4565b5b6145e7888289016144f7565b9150509295509295909350565b6000806040838503121561460b5761460a613dcf565b5b6000614619858286016140dd565b925050602061462a85828601613e22565b9150509250929050565b6000806040838503121561464b5761464a613dcf565b5b600061465985828601613e58565b925050602061466a858286016142a5565b9150509250929050565b600080600080600080600060e0888a03121561469357614692613dcf565b5b60006146a18a828b01613e58565b97505060206146b28a828b01613e58565b96505060406146c38a828b016142a5565b95505060606146d48a828b016140dd565b94505060806146e58a828b01613e58565b93505060a06146f68a828b01613e58565b92505060c06147078a828b01613e58565b91505092959891949750929550565b600067ffffffffffffffff82111561473157614730614163565b5b602082029050602081019050919050565b600061475561475084614716565b6141c3565b90508083825260208201905060208402830185811115614778576147776143e8565b5b835b818110156147a1578061478d8882613e22565b84526020840193505060208101905061477a565b5050509392505050565b600082601f8301126147c0576147bf614159565b5b81356147d0848260208601614742565b91505092915050565b600080604083850312156147f0576147ef613dcf565b5b600083013567ffffffffffffffff81111561480e5761480d613dd4565b5b61481a858286016147ab565b925050602083013567ffffffffffffffff81111561483b5761483a613dd4565b5b61484785828601614456565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61488681613e37565b82525050565b6000614898838361487d565b60208301905092915050565b6000602082019050919050565b60006148bc82614851565b6148c6818561485c565b93506148d18361486d565b8060005b838110156149025781516148e9888261488c565b97506148f4836148a4565b9250506001810190506148d5565b5085935050505092915050565b6000602082019050818103600083015261492981846148b1565b905092915050565b61493a816140b8565b82525050565b6149498161407a565b82525050565b600060a0820190506149646000830188613f68565b81810360208301526149768187613ff2565b90506149856040830186614931565b6149926060830185614940565b61499f6080830184613ead565b9695505050505050565b6149b281613df9565b82525050565b60006020820190506149cd60008301846149a9565b92915050565b600080604083850312156149ea576149e9613dcf565b5b60006149f885828601613e58565b9250506020614a0985828601613e22565b9150509250929050565b6000604082019050614a286000830185613f68565b614a356020830184613ead565b9392505050565b600060208284031215614a5257614a51613dcf565b5b6000614a6084828501613e22565b91505092915050565b60008060408385031215614a8057614a7f613dcf565b5b6000614a8e85828601613e58565b925050602083013567ffffffffffffffff811115614aaf57614aae613dd4565b5b614abb85828601614260565b9150509250929050565b60008060408385031215614adc57614adb613dcf565b5b6000614aea85828601613e22565b9250506020614afb858286016142a5565b9150509250929050565b600060c082019050614b1a6000830189613f68565b614b276020830188614940565b614b346040830187613ead565b614b416060830186614931565b614b4e6080830185613ead565b614b5b60a0830184613ead565b979650505050505050565b6000608082019050614b7b60008301876149a9565b614b8860208301866149a9565b614b956040830185614931565b614ba26060830184614931565b95945050505050565b600080600060608486031215614bc457614bc3613dcf565b5b6000614bd286828701613e58565b9350506020614be386828701613e58565b9250506040614bf486828701613e58565b9150509250925092565b60008060408385031215614c1557614c14613dcf565b5b6000614c2385828601613e22565b9250506020614c3485828601613e22565b9150509250929050565b600080600080600060a08688031215614c5a57614c59613dcf565b5b6000614c6888828901613e22565b9550506020614c7988828901613e22565b9450506040614c8a88828901613e58565b9350506060614c9b88828901613e58565b925050608086013567ffffffffffffffff811115614cbc57614cbb613dd4565b5b614cc8888289016144f7565b9150509295509295909350565b600080600060608486031215614cee57614ced613dcf565b5b6000614cfc86828701613e22565b9350506020614d0d86828701613e58565b9250506040614d1e86828701613e58565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614d84602b83613f9d565b9150614d8f82614d28565b604082019050919050565b60006020820190508181036000830152614db381614d77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e0157607f821691505b60208210811415614e1557614e14614dba565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614e4881614de9565b614e528186614e1b565b94506001821660008114614e6d5760018114614e7e57614eb1565b60ff19831686528186019350614eb1565b614e8785614e26565b60005b83811015614ea957815481890152600182019150602081019050614e8a565b838801955050505b50505092915050565b6000614ec68285614e3b565b9150614ed28284614e3b565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f14602083613f9d565b9150614f1f82614ede565b602082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f8482613e37565b9150614f8f83613e37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fc457614fc3614f4a565b5b828201905092915050565b6000614fda82613e37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500d5761500c614f4a565b5b600182019050919050565b600061502382613e37565b915061502e83613e37565b92508282101561504157615040614f4a565b5b828203905092915050565b600061014082019050615062600083018d613ead565b8181036020830152615074818c613ff2565b90508181036040830152615088818b613ff2565b9050615097606083018a614931565b6150a46080830189613ead565b6150b160a0830188613f68565b6150be60c0830187613ead565b6150cb60e0830186614931565b6150d9610100830185613ead565b6150e7610120830184613ead565b9b9a5050505050505050505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615152603283613f9d565b915061515d826150f6565b604082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b600060e08201905061519d600083018a613ead565b6151aa6020830189613ead565b6151b76040830188613f68565b6151c46060830187614931565b6151d16080830186613ead565b6151de60a0830185613ead565b6151eb60c0830184613ead565b98975050505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000615253602983613f9d565b915061525e826151f7565b604082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006152c382613e37565b91506152ce83613e37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561530757615306614f4a565b5b828202905092915050565b600061014082019050615328600083018d614940565b615335602083018c614931565b615342604083018b613ead565b61534f606083018a614940565b61535c6080830189614931565b61536960a0830188614931565b61537660c0830187614940565b61538360e0830186614940565b615391610100830185614931565b61539f6101208301846149a9565b9b9a5050505050505050505050565b600081519050919050565b600081905092915050565b60006153cf826153ae565b6153d981856153b9565b93506153e9818560208601613fae565b80840191505092915050565b600061540182846153c4565b915081905092915050565b6000819050919050565b600061543161542c61542784613dd9565b61540c565b613dd9565b9050919050565b600061544382615416565b9050919050565b600061545582615438565b9050919050565b6154658161544a565b82525050565b600060c0820190506154806000830189613ead565b61548d602083018861545c565b61549a6040830187613ead565b6154a76060830186614931565b6154b46080830185613ead565b6154c160a0830184613ead565b979650505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000615528602983613f9d565b9150615533826154cc565b604082019050919050565b600060208201905081810360008301526155578161551b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155ba602683613f9d565b91506155c58261555e565b604082019050919050565b600060208201905081810360008301526155e9816155ad565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061564c602183613f9d565b9150615657826155f0565b604082019050919050565b6000602082019050818103600083015261567b8161563f565b9050919050565b60006040820190506156976000830185613ead565b6156a46020830184613ead565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615707602883613f9d565b9150615712826156ab565b604082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615799602583613f9d565b91506157a48261573d565b604082019050919050565b600060208201905081810360008301526157c88161578c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061582b602a83613f9d565b9150615836826157cf565b604082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b6000604082019050818103600083015261587b81856148b1565b9050818103602083015261588f81846148b1565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006158f4602983613f9d565b91506158ff82615898565b604082019050919050565b60006020820190508181036000830152615923816158e7565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615986602383613f9d565b91506159918261592a565b604082019050919050565b600060208201905081810360008301526159b581615979565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000615a18602483613f9d565b9150615a23826159bc565b604082019050919050565b60006020820190508181036000830152615a4781615a0b565b9050919050565b600082825260208201905092915050565b6000615a6a826153ae565b615a748185615a4e565b9350615a84818560208601613fae565b615a8d81613fe1565b840191505092915050565b600060a082019050615aad60008301886149a9565b615aba60208301876149a9565b615ac76040830186613ead565b615ad46060830185613ead565b8181036080830152615ae68184615a5f565b90509695505050505050565b600081519050615b0181613f03565b92915050565b600060208284031215615b1d57615b1c613dcf565b5b6000615b2b84828501615af2565b91505092915050565b60008160e01c9050919050565b600060033d1115615b605760046000803e615b5d600051615b34565b90505b90565b600060443d1015615b7357615bf6565b615b7b613dc5565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba3575050615bf6565b808201805167ffffffffffffffff811115615bc15750505050615bf6565b80602083010160043d038501811115615bde575050505050615bf6565b615bed82602001850186614192565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615c55603483613f9d565b9150615c6082615bf9565b604082019050919050565b60006020820190508181036000830152615c8481615c48565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000615ce7602883613f9d565b9150615cf282615c8b565b604082019050919050565b60006020820190508181036000830152615d1681615cda565b9050919050565b600060a082019050615d3260008301886149a9565b615d3f60208301876149a9565b8181036040830152615d5181866148b1565b90508181036060830152615d6581856148b1565b90508181036080830152615d798184615a5f565b9050969550505050505056fea264697066735822122045267c3cf54622b9cc5cc7508757000145e31dd1a0f964b608871a190493dda864736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c697066733a2f2f697066732f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356261666b7a767a6163646a7464633678646269796277617235326470693773336a6b6e6e797172623335356a7564793562736f6d710000000000000000000000
Deployed Bytecode
0x6080604052600436106101e25760003560e01c806375619ab511610102578063d73fe0aa11610095578063e985e9c511610064578063e985e9c514610701578063f242432a1461073e578063f2fde38b14610767578063f5298aca14610790576101e2565b8063d73fe0aa14610663578063ddc5866d14610691578063de2d554b146106ba578063e8a3d485146106d6576101e2565b806398bdf6f5116100d157806398bdf6f514610590578063a22cb465146105bb578063b5f522f7146105e4578063bd85b03914610626576101e2565b806375619ab5146104e85780637fb3a9a2146105115780638da5cb5b1461053a57806395d89b4114610565576101e2565b8063442fcbdf1161017a5780635884965f116101495780635884965f1461043d5780635b42dc33146104685780635e09aa27146104a6578063715018a6146104d1576101e2565b8063442fcbdf1461036d5780634becdd18146103965780634e1273f4146103bf5780634f64b2be146103fc576101e2565b806313367680116101b657806313367680146102c95780632a4248b2146102f25780632eb2c2d61461031b5780633ef89ec314610344576101e2565b8062fdd58e146101e757806301ffc9a71461022457806306fdde03146102615780630e89341c1461028c575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190613e6d565b6107b9565b60405161021b9190613ebc565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613f2f565b610882565b6040516102589190613f77565b60405180910390f35b34801561026d57600080fd5b50610276610964565b604051610283919061402b565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061404d565b6109f2565b6040516102c0919061402b565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906140f2565b610a60565b005b3480156102fe57600080fd5b50610319600480360381019061031491906142ba565b610b9e565b005b34801561032757600080fd5b50610342600480360381019061033d9190614525565b61108a565b005b34801561035057600080fd5b5061036b600480360381019061036691906145f4565b61112b565b005b34801561037957600080fd5b50610394600480360381019061038f9190614634565b611205565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190614674565b6112b3565b005b3480156103cb57600080fd5b506103e660048036038101906103e191906147d9565b61190e565b6040516103f3919061490f565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e919061404d565b611a27565b60405161043495949392919061494f565b60405180910390f35b34801561044957600080fd5b50610452611b20565b60405161045f91906149b8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906149d3565b611bc6565b60405161049d929190614a13565b60405180910390f35b3480156104b257600080fd5b506104bb611c04565b6040516104c89190613ebc565b60405180910390f35b3480156104dd57600080fd5b506104e6611c0a565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190614a3c565b611c92565b005b34801561051d57600080fd5b5061053860048036038101906105339190614a69565b611d52565b005b34801561054657600080fd5b5061054f611dfd565b60405161055c91906149b8565b60405180910390f35b34801561057157600080fd5b5061057a611e27565b604051610587919061402b565b60405180910390f35b34801561059c57600080fd5b506105a5611eb5565b6040516105b29190613ebc565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190614ac5565b611ebb565b005b3480156105f057600080fd5b5061060b6004803603810190610606919061404d565b611ed1565b60405161061d96959493929190614b05565b60405180910390f35b34801561063257600080fd5b5061064d6004803603810190610648919061404d565b611f48565b60405161065a9190613ebc565b60405180910390f35b34801561066f57600080fd5b50610678611f68565b6040516106889493929190614b66565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190614634565b612060565b005b6106d460048036038101906106cf9190614bab565b61210e565b005b3480156106e257600080fd5b506106eb6128e9565b6040516106f8919061402b565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190614bfe565b612914565b6040516107359190613f77565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614c3e565b6129a8565b005b34801561077357600080fd5b5061078e60048036038101906107899190614a3c565b612a49565b005b34801561079c57600080fd5b506107b760048036038101906107b29190614cd5565b612b41565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561082a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082190614d9a565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095d575061095c82612caf565b5b9050919050565b6004805461097190614de9565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90614de9565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b505050505081565b6060600d600083815260200190815260200160002060000160009054906101000a900460ff16610a2157600080fd5b600a600d6000848152602001908152602001600020600101604051602001610a4a929190614eba565b6040516020818303038152906040529050919050565b610a68612d19565b73ffffffffffffffffffffffffffffffffffffffff16610a86611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390614f2a565b60405180910390fd5b83600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960146101000a81548161ffff021916908361ffff16021790555080600960166101000a81548161ffff021916908361ffff16021790555050505050565b818610158015610baf575060008851115b610bb857600080fd5b60006006549050600d6000600183610bd09190614f79565b815260200190815260200160002060000160009054906101000a900460ff1615610bf957600080fd5b600660008154610c0890614fcf565b9190508190559050610c1b306001611ebb565b610c3d610c26612d19565b828960405180602001604052806000815250612d21565b6040518060a001604052806001151581526020018a81526020018961ffff168152602001610c69612d19565b73ffffffffffffffffffffffffffffffffffffffff16815260200188815250600d600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001019080519060200190610cd7929190613ce2565b5060408201518160020160006101000a81548161ffff021916908361ffff16021790555060608201518160020160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816003015590505060008615610f965760008661ffff16118015610d6b5750600085115b8015610d775750600084115b8015610db25750600f60006001600754610d919190614f79565b815260200190815260200160002060000160009054906101000a900460ff16155b610dbb57600080fd5b600760008154610dca90614fcf565b91905081905590506040518060c00160405280600115158152602001610dee612d19565b73ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018761ffff16815260200186815260200185815250600f600083815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015560608201518160020160006101000a81548161ffff021916908361ffff1602179055506080820151816003015560a0820151816004015590505083881115610f91576040518060400160405280600115158152602001858a610f099190615018565b815250600e60008481526020019081526020016000206000610f29612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505b611033565b604051806040016040528060011515815260200189815250600e60008481526020019081526020016000206000610fcb612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505b827f6008bdb6f9ceef3f30846f8655cc1a93a0e5476a35c5cd7a74aa7aa6f7c02b1d838d8d8d8d8d888e8e8e6040516110759a9998979695949392919061504c565b60405180910390a25050505050505050505050565b611092612d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110d857506110d7856110d2612d19565b612914565b5b611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90615168565b60405180910390fd5b6111248585858585612eb7565b5050505050565b611133612d19565b73ffffffffffffffffffffffffffffffffffffffff16611151611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90614f2a565b60405180910390fd5b80601060008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61120d612d19565b73ffffffffffffffffffffffffffffffffffffffff1661122b611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890614f2a565b60405180910390fd5b80600d600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff166112d3612d19565b73ffffffffffffffffffffffffffffffffffffffff16141580156113175750600d600088815260200190815260200160002060000160009054906101000a900460ff165b8015611327575060008461ffff16115b80156113335750600083115b8015611340575060008210155b61134957600080fd5b60008690506000600e60008a8152602001908152602001600020600061136d612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161561141b57600e60008a815260200190815260200160002060006113da612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b861561168a578381101561142e57600080fd5b600f600060016007546114419190614f79565b815260200190815260200160002060000160009054906101000a900460ff161561146a57600080fd5b60076000815461147990614fcf565b91905081905591506040518060c0016040528060011515815260200161149d612d19565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018761ffff16815260200186815260200185815250600f600084815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816001015560608201518160020160006101000a81548161ffff021916908361ffff1602179055506080820151816003015560a082015181600401559050506000848261159e9190615018565b9050600081111561160d5780600e60008c815260200190815260200160002060006115c7612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611684565b600e60008b8152602001908152602001600020600061162a612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000905550505b506118bf565b600f600083815260200190815260200160002060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116df612d19565b73ffffffffffffffffffffffffffffffffffffffff16146116ff57600080fd5b60008114156117bf576040518060400160405280600115158152602001600f600085815260200190815260200160002060040154815250600e60008b81526020019081526020016000206000611753612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155905050611840565b600f600083815260200190815260200160002060040154816117e19190614f79565b600e60008b815260200190815260200160002060006117fe612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b600f6000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549061ffff02191690556003820160009055600482016000905550505b827f65c9510d7df2b0e7c8c02ae5447daa8a4a81f1251543931dd3628b2eacd3111f8a848a8a8a8a886040516118fb9796959493929190615188565b60405180910390a2505050505050505050565b60608151835114611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b90615269565b60405180910390fd5b6000835167ffffffffffffffff81111561197157611970614163565b5b60405190808252806020026020018201604052801561199f5781602001602082028036833780820191505090505b50905060005b8451811015611a1c576119ec8582815181106119c4576119c3615289565b5b60200260200101518583815181106119df576119de615289565b5b60200260200101516107b9565b8282815181106119ff576119fe615289565b5b60200260200101818152505080611a1590614fcf565b90506119a5565b508091505092915050565b600d6020528060005260406000206000915090508060000160009054906101000a900460ff1690806001018054611a5d90614de9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8990614de9565b8015611ad65780601f10611aab57610100808354040283529160200191611ad6565b820191906000526020600020905b815481529060010190602001808311611ab957829003601f168201915b5050505050908060020160009054906101000a900461ffff16908060020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905085565b6000611b2a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611b48611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590614f2a565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154905082565b60075481565b611c12612d19565b73ffffffffffffffffffffffffffffffffffffffff16611c30611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7d90614f2a565b60405180910390fd5b611c9060006131cb565b565b611c9a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611cb8611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614f2a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d5a612d19565b73ffffffffffffffffffffffffffffffffffffffff16611d78611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590614f2a565b60405180910390fd5b80600d60008481526020019081526020016000206001019080519060200190611df8929190613ce2565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054611e3490614de9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6090614de9565b8015611ead5780601f10611e8257610100808354040283529160200191611ead565b820191906000526020600020905b815481529060010190602001808311611e9057829003601f168201915b505050505081565b60065481565b611ecd611ec6612d19565b8383613291565b5050565b600f6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900461ffff16908060030154908060040154905086565b6000600d6000838152602001908152602001600020600301549050919050565b600080600080611f76612d19565b73ffffffffffffffffffffffffffffffffffffffff16611f94611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe190614f2a565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960149054906101000a900461ffff16600960169054906101000a900461ffff16935093509350935090919293565b612068612d19565b73ffffffffffffffffffffffffffffffffffffffff16612086611dfd565b73ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614f2a565b60405180910390fd5b80600d600084815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505050565b6000600f60008581526020019081526020016000206040518060c00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820160009054906101000a900461ffff1661ffff1661ffff1681526020016003820154815260200160048201548152505090506000600d6000836040015181526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201805461222e90614de9565b80601f016020809104026020016040519081016040528092919081815260200182805461225a90614de9565b80156122a75780601f1061227c576101008083540402835291602001916122a7565b820191906000526020600020905b81548152906001019060200180831161228a57829003601f168201915b505050505081526020016002820160009054906101000a900461ffff1661ffff1661ffff1681526020016002820160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506000841180156123465750838260a0015110155b80156123895750612355612d19565b73ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614155b8015612396575080600001515b61239f57600080fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836020015184606001518786608001516123f491906152b8565b85606001518660400151600960169054906101000a900461ffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960149054906101000a900461ffff16601060008e6060015161ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516024016124bf9a99989796959493929190615312565b6040516020818303038152906040527f94fba784000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161254991906153f5565b600060405180830381855af49150503d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b505090508061259757600080fd5b506125a3306001611ebb565b6125f482602001516125b3612d19565b8460400151876040518060400160405280600381526020017f30783000000000000000000000000000000000000000000000000000000000008152506133fe565b838260a00151111561262f57838260a001516126109190615018565b600f6000878152602001908152602001600020600401819055506126ae565b600f6000868152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549061ffff02191690556003820160009055600482016000905550505b600e60008360400151815260200190815260200160002060006126cf612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166127c357604051806040016040528060011515815260200185815250600e6000846040015181526020019081526020016000206000612757612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155905050612890565b83600e60008460400151815260200190815260200160002060006127e5612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461282d9190614f79565b600e600084604001518152602001908152602001600020600061284e612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b827f241965d5d3258ac80887a5c8663983235b77c5fdf60e05f679f5258b4964c2268684602001518560400151866060015187608001518a6040516128da9695949392919061546b565b60405180910390a25050505050565b6060600a600b604051602001612900929190614eba565b604051602081830303815290604052905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129b0612d19565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806129f657506129f5856129f0612d19565b612914565b5b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c9061553e565b60405180910390fd5b612a4285858585856133fe565b5050505050565b612a51612d19565b73ffffffffffffffffffffffffffffffffffffffff16612a6f611dfd565b73ffffffffffffffffffffffffffffffffffffffff1614612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906155d0565b60405180910390fd5b612b3e816131cb565b50565b600d600083815260200190815260200160002060000160009054906101000a900460ff168015612b86575080600d600084815260200190815260200160002060030154145b612b8f57600080fd5b612b97611dfd565b73ffffffffffffffffffffffffffffffffffffffff16612bb5612d19565b73ffffffffffffffffffffffffffffffffffffffff161415612be157612bdc838383613680565b612c2c565b8273ffffffffffffffffffffffffffffffffffffffff16612c00612d19565b73ffffffffffffffffffffffffffffffffffffffff1614612c2057600080fd5b612c2b838383613680565b5b600d6000838152602001908152602001600020600080820160006101000a81549060ff0219169055600182016000612c649190613d68565b6002820160006101000a81549061ffff02191690556002820160026101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560038201600090555050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8890615662565b60405180910390fd5b6000612d9b612d19565b9050612dbc81600087612dad8861389d565b612db68861389d565b87613917565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1b9190614f79565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e99929190615682565b60405180910390a4612eb08160008787878761391f565b5050505050565b8151835114612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef29061571d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f62906157af565b60405180910390fd5b6000612f75612d19565b9050612f85818787878787613917565b60005b8451811015613136576000858281518110612fa657612fa5615289565b5b602002602001015190506000858381518110612fc557612fc4615289565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615841565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311b9190614f79565b925050819055505050508061312f90614fcf565b9050612f88565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516131ad929190615861565b60405180910390a46131c3818787878787613af7565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f79061590a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133f19190613f77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561346e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613465906157af565b60405180910390fd5b6000613478612d19565b90506134988187876134898861389d565b6134928861389d565b87613917565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561352f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352690615841565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135e49190614f79565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051613661929190615682565b60405180910390a461367782888888888861391f565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e79061599c565b60405180910390fd5b60006136fa612d19565b905061372a8185600061370c8761389d565b6137158761389d565b60405180602001604052806000815250613917565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156137c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b890615a2e565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161388e929190615682565b60405180910390a45050505050565b60606000600167ffffffffffffffff8111156138bc576138bb614163565b5b6040519080825280602002602001820160405280156138ea5781602001602082028036833780820191505090505b509050828160008151811061390257613901615289565b5b60200260200101818152505080915050919050565b505050505050565b61393e8473ffffffffffffffffffffffffffffffffffffffff16613ccf565b15613aef578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613984959493929190615a98565b6020604051808303816000875af19250505080156139c057506040513d601f19601f820116820180604052508101906139bd9190615b07565b60015b613a66576139cc615b41565b806308c379a01415613a2957506139e1615b63565b806139ec5750613a2b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a20919061402b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5d90615c6b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae490615cfd565b60405180910390fd5b505b505050505050565b613b168473ffffffffffffffffffffffffffffffffffffffff16613ccf565b15613cc7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613b5c959493929190615d1d565b6020604051808303816000875af1925050508015613b9857506040513d601f19601f82011682018060405250810190613b959190615b07565b60015b613c3e57613ba4615b41565b806308c379a01415613c015750613bb9615b63565b80613bc45750613c03565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf8919061402b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3590615c6b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbc90615cfd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054613cee90614de9565b90600052602060002090601f016020900481019282613d105760008555613d57565b82601f10613d2957805160ff1916838001178555613d57565b82800160010185558215613d57579182015b82811115613d56578251825591602001919060010190613d3b565b5b509050613d649190613da8565b5090565b508054613d7490614de9565b6000825580601f10613d865750613da5565b601f016020900490600052602060002090810190613da49190613da8565b5b50565b5b80821115613dc1576000816000905550600101613da9565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0482613dd9565b9050919050565b613e1481613df9565b8114613e1f57600080fd5b50565b600081359050613e3181613e0b565b92915050565b6000819050919050565b613e4a81613e37565b8114613e5557600080fd5b50565b600081359050613e6781613e41565b92915050565b60008060408385031215613e8457613e83613dcf565b5b6000613e9285828601613e22565b9250506020613ea385828601613e58565b9150509250929050565b613eb681613e37565b82525050565b6000602082019050613ed16000830184613ead565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613f0c81613ed7565b8114613f1757600080fd5b50565b600081359050613f2981613f03565b92915050565b600060208284031215613f4557613f44613dcf565b5b6000613f5384828501613f1a565b91505092915050565b60008115159050919050565b613f7181613f5c565b82525050565b6000602082019050613f8c6000830184613f68565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fcc578082015181840152602081019050613fb1565b83811115613fdb576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ffd82613f92565b6140078185613f9d565b9350614017818560208601613fae565b61402081613fe1565b840191505092915050565b600060208201905081810360008301526140458184613ff2565b905092915050565b60006020828403121561406357614062613dcf565b5b600061407184828501613e58565b91505092915050565b600061408582613dd9565b9050919050565b6140958161407a565b81146140a057600080fd5b50565b6000813590506140b28161408c565b92915050565b600061ffff82169050919050565b6140cf816140b8565b81146140da57600080fd5b50565b6000813590506140ec816140c6565b92915050565b6000806000806080858703121561410c5761410b613dcf565b5b600061411a878288016140a3565b945050602061412b878288016140a3565b935050604061413c878288016140dd565b925050606061414d878288016140dd565b91505092959194509250565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61419b82613fe1565b810181811067ffffffffffffffff821117156141ba576141b9614163565b5b80604052505050565b60006141cd613dc5565b90506141d98282614192565b919050565b600067ffffffffffffffff8211156141f9576141f8614163565b5b61420282613fe1565b9050602081019050919050565b82818337600083830152505050565b600061423161422c846141de565b6141c3565b90508281526020810184848401111561424d5761424c61415e565b5b61425884828561420f565b509392505050565b600082601f83011261427557614274614159565b5b813561428584826020860161421e565b91505092915050565b61429781613f5c565b81146142a257600080fd5b50565b6000813590506142b48161428e565b92915050565b60008060008060008060008060006101208a8c0312156142dd576142dc613dcf565b5b60008a013567ffffffffffffffff8111156142fb576142fa613dd4565b5b6143078c828d01614260565b99505060208a013567ffffffffffffffff81111561432857614327613dd4565b5b6143348c828d01614260565b98505060406143458c828d016140dd565b97505060606143568c828d01613e58565b96505060806143678c828d016142a5565b95505060a06143788c828d016140dd565b94505060c06143898c828d01613e58565b93505060e061439a8c828d01613e58565b9250506101006143ac8c828d01613e58565b9150509295985092959850929598565b600067ffffffffffffffff8211156143d7576143d6614163565b5b602082029050602081019050919050565b600080fd5b60006144006143fb846143bc565b6141c3565b90508083825260208201905060208402830185811115614423576144226143e8565b5b835b8181101561444c57806144388882613e58565b845260208401935050602081019050614425565b5050509392505050565b600082601f83011261446b5761446a614159565b5b813561447b8482602086016143ed565b91505092915050565b600067ffffffffffffffff82111561449f5761449e614163565b5b6144a882613fe1565b9050602081019050919050565b60006144c86144c384614484565b6141c3565b9050828152602081018484840111156144e4576144e361415e565b5b6144ef84828561420f565b509392505050565b600082601f83011261450c5761450b614159565b5b813561451c8482602086016144b5565b91505092915050565b600080600080600060a0868803121561454157614540613dcf565b5b600061454f88828901613e22565b955050602061456088828901613e22565b945050604086013567ffffffffffffffff81111561458157614580613dd4565b5b61458d88828901614456565b935050606086013567ffffffffffffffff8111156145ae576145ad613dd4565b5b6145ba88828901614456565b925050608086013567ffffffffffffffff8111156145db576145da613dd4565b5b6145e7888289016144f7565b9150509295509295909350565b6000806040838503121561460b5761460a613dcf565b5b6000614619858286016140dd565b925050602061462a85828601613e22565b9150509250929050565b6000806040838503121561464b5761464a613dcf565b5b600061465985828601613e58565b925050602061466a858286016142a5565b9150509250929050565b600080600080600080600060e0888a03121561469357614692613dcf565b5b60006146a18a828b01613e58565b97505060206146b28a828b01613e58565b96505060406146c38a828b016142a5565b95505060606146d48a828b016140dd565b94505060806146e58a828b01613e58565b93505060a06146f68a828b01613e58565b92505060c06147078a828b01613e58565b91505092959891949750929550565b600067ffffffffffffffff82111561473157614730614163565b5b602082029050602081019050919050565b600061475561475084614716565b6141c3565b90508083825260208201905060208402830185811115614778576147776143e8565b5b835b818110156147a1578061478d8882613e22565b84526020840193505060208101905061477a565b5050509392505050565b600082601f8301126147c0576147bf614159565b5b81356147d0848260208601614742565b91505092915050565b600080604083850312156147f0576147ef613dcf565b5b600083013567ffffffffffffffff81111561480e5761480d613dd4565b5b61481a858286016147ab565b925050602083013567ffffffffffffffff81111561483b5761483a613dd4565b5b61484785828601614456565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61488681613e37565b82525050565b6000614898838361487d565b60208301905092915050565b6000602082019050919050565b60006148bc82614851565b6148c6818561485c565b93506148d18361486d565b8060005b838110156149025781516148e9888261488c565b97506148f4836148a4565b9250506001810190506148d5565b5085935050505092915050565b6000602082019050818103600083015261492981846148b1565b905092915050565b61493a816140b8565b82525050565b6149498161407a565b82525050565b600060a0820190506149646000830188613f68565b81810360208301526149768187613ff2565b90506149856040830186614931565b6149926060830185614940565b61499f6080830184613ead565b9695505050505050565b6149b281613df9565b82525050565b60006020820190506149cd60008301846149a9565b92915050565b600080604083850312156149ea576149e9613dcf565b5b60006149f885828601613e58565b9250506020614a0985828601613e22565b9150509250929050565b6000604082019050614a286000830185613f68565b614a356020830184613ead565b9392505050565b600060208284031215614a5257614a51613dcf565b5b6000614a6084828501613e22565b91505092915050565b60008060408385031215614a8057614a7f613dcf565b5b6000614a8e85828601613e58565b925050602083013567ffffffffffffffff811115614aaf57614aae613dd4565b5b614abb85828601614260565b9150509250929050565b60008060408385031215614adc57614adb613dcf565b5b6000614aea85828601613e22565b9250506020614afb858286016142a5565b9150509250929050565b600060c082019050614b1a6000830189613f68565b614b276020830188614940565b614b346040830187613ead565b614b416060830186614931565b614b4e6080830185613ead565b614b5b60a0830184613ead565b979650505050505050565b6000608082019050614b7b60008301876149a9565b614b8860208301866149a9565b614b956040830185614931565b614ba26060830184614931565b95945050505050565b600080600060608486031215614bc457614bc3613dcf565b5b6000614bd286828701613e58565b9350506020614be386828701613e58565b9250506040614bf486828701613e58565b9150509250925092565b60008060408385031215614c1557614c14613dcf565b5b6000614c2385828601613e22565b9250506020614c3485828601613e22565b9150509250929050565b600080600080600060a08688031215614c5a57614c59613dcf565b5b6000614c6888828901613e22565b9550506020614c7988828901613e22565b9450506040614c8a88828901613e58565b9350506060614c9b88828901613e58565b925050608086013567ffffffffffffffff811115614cbc57614cbb613dd4565b5b614cc8888289016144f7565b9150509295509295909350565b600080600060608486031215614cee57614ced613dcf565b5b6000614cfc86828701613e22565b9350506020614d0d86828701613e58565b9250506040614d1e86828701613e58565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614d84602b83613f9d565b9150614d8f82614d28565b604082019050919050565b60006020820190508181036000830152614db381614d77565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e0157607f821691505b60208210811415614e1557614e14614dba565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154614e4881614de9565b614e528186614e1b565b94506001821660008114614e6d5760018114614e7e57614eb1565b60ff19831686528186019350614eb1565b614e8785614e26565b60005b83811015614ea957815481890152600182019150602081019050614e8a565b838801955050505b50505092915050565b6000614ec68285614e3b565b9150614ed28284614e3b565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f14602083613f9d565b9150614f1f82614ede565b602082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f8482613e37565b9150614f8f83613e37565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fc457614fc3614f4a565b5b828201905092915050565b6000614fda82613e37565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561500d5761500c614f4a565b5b600182019050919050565b600061502382613e37565b915061502e83613e37565b92508282101561504157615040614f4a565b5b828203905092915050565b600061014082019050615062600083018d613ead565b8181036020830152615074818c613ff2565b90508181036040830152615088818b613ff2565b9050615097606083018a614931565b6150a46080830189613ead565b6150b160a0830188613f68565b6150be60c0830187613ead565b6150cb60e0830186614931565b6150d9610100830185613ead565b6150e7610120830184613ead565b9b9a5050505050505050505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615152603283613f9d565b915061515d826150f6565b604082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b600060e08201905061519d600083018a613ead565b6151aa6020830189613ead565b6151b76040830188613f68565b6151c46060830187614931565b6151d16080830186613ead565b6151de60a0830185613ead565b6151eb60c0830184613ead565b98975050505050505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000615253602983613f9d565b915061525e826151f7565b604082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006152c382613e37565b91506152ce83613e37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561530757615306614f4a565b5b828202905092915050565b600061014082019050615328600083018d614940565b615335602083018c614931565b615342604083018b613ead565b61534f606083018a614940565b61535c6080830189614931565b61536960a0830188614931565b61537660c0830187614940565b61538360e0830186614940565b615391610100830185614931565b61539f6101208301846149a9565b9b9a5050505050505050505050565b600081519050919050565b600081905092915050565b60006153cf826153ae565b6153d981856153b9565b93506153e9818560208601613fae565b80840191505092915050565b600061540182846153c4565b915081905092915050565b6000819050919050565b600061543161542c61542784613dd9565b61540c565b613dd9565b9050919050565b600061544382615416565b9050919050565b600061545582615438565b9050919050565b6154658161544a565b82525050565b600060c0820190506154806000830189613ead565b61548d602083018861545c565b61549a6040830187613ead565b6154a76060830186614931565b6154b46080830185613ead565b6154c160a0830184613ead565b979650505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000615528602983613f9d565b9150615533826154cc565b604082019050919050565b600060208201905081810360008301526155578161551b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155ba602683613f9d565b91506155c58261555e565b604082019050919050565b600060208201905081810360008301526155e9816155ad565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061564c602183613f9d565b9150615657826155f0565b604082019050919050565b6000602082019050818103600083015261567b8161563f565b9050919050565b60006040820190506156976000830185613ead565b6156a46020830184613ead565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000615707602883613f9d565b9150615712826156ab565b604082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615799602583613f9d565b91506157a48261573d565b604082019050919050565b600060208201905081810360008301526157c88161578c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061582b602a83613f9d565b9150615836826157cf565b604082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b6000604082019050818103600083015261587b81856148b1565b9050818103602083015261588f81846148b1565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006158f4602983613f9d565b91506158ff82615898565b604082019050919050565b60006020820190508181036000830152615923816158e7565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615986602383613f9d565b91506159918261592a565b604082019050919050565b600060208201905081810360008301526159b581615979565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000615a18602483613f9d565b9150615a23826159bc565b604082019050919050565b60006020820190508181036000830152615a4781615a0b565b9050919050565b600082825260208201905092915050565b6000615a6a826153ae565b615a748185615a4e565b9350615a84818560208601613fae565b615a8d81613fe1565b840191505092915050565b600060a082019050615aad60008301886149a9565b615aba60208301876149a9565b615ac76040830186613ead565b615ad46060830185613ead565b8181036080830152615ae68184615a5f565b90509695505050505050565b600081519050615b0181613f03565b92915050565b600060208284031215615b1d57615b1c613dcf565b5b6000615b2b84828501615af2565b91505092915050565b60008160e01c9050919050565b600060033d1115615b605760046000803e615b5d600051615b34565b90505b90565b600060443d1015615b7357615bf6565b615b7b613dc5565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba3575050615bf6565b808201805167ffffffffffffffff811115615bc15750505050615bf6565b80602083010160043d038501811115615bde575050505050615bf6565b615bed82602001850186614192565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615c55603483613f9d565b9150615c6082615bf9565b604082019050919050565b60006020820190508181036000830152615c8481615c48565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000615ce7602883613f9d565b9150615cf282615c8b565b604082019050919050565b60006020820190508181036000830152615d1681615cda565b9050919050565b600060a082019050615d3260008301886149a9565b615d3f60208301876149a9565b8181036040830152615d5181866148b1565b90508181036060830152615d6581856148b1565b90508181036080830152615d798184615a5f565b9050969550505050505056fea264697066735822122045267c3cf54622b9cc5cc7508757000145e31dd1a0f964b608871a190493dda864736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c697066733a2f2f697066732f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356261666b7a767a6163646a7464633678646269796277617235326470693773336a6b6e6e797172623335356a7564793562736f6d710000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://ipfs/
Arg [1] : contractMetadataURI_ (string): bafkzvzacdjtdc6xdbiybwar52dpi7s3jknnyqrb355judy5bsomq
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 697066733a2f2f697066732f0000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [5] : 6261666b7a767a6163646a746463367864626979627761723532647069377333
Arg [6] : 6a6b6e6e797172623335356a7564793562736f6d710000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.