Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0.24 ETH
Eth Value
$750.41 (@ $3,126.73/ETH)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
There are no matching entriesUpdate your filters to view other transactions | |||||||||
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PledgeMint
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/// @notice Pledge Mint v1.2 contract by Culture Cubs
// pledgemint.io
//
// For your ERC721 contract to be compatible, follow the following instructions:
// - declare a variable for the pledgemint contract address:
// address public pledgeContractAddress;
// - add the following function to allow Pledge Mint to mint NFT for your pledgers:
// function pledgeMint(address to, uint8 quantity) override
// external
// payable {
// require(pledgeContractAddress == msg.sender, "The caller is not PledgeMint");
// require(totalSupply() + quantity <= maxCollectionSize, "reached max supply");
// _mint(to, quantity);
// }
//
// * Please ensure you test this method before deploying your contract.
// * PledgeMint will send the funds collected along with the mint call, minus the fee agreed upon.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./utils/Errors.sol";
interface IERC721Pledge {
function pledgeMint(address to, uint8 quantity) external payable;
}
contract PledgeMint is Ownable, ReentrancyGuard {
// Phases allow to have different cohorts of pledgers, with different contracts, prices and limits.
struct PhaseConfig {
address admin;
IERC721Pledge mintContract;
uint256 mintPrice;
uint8 maxPerWallet;
// When locked, the contract on which the mint happens cannot ever be changed again
bool mintContractLocked;
// Can only be set to true if mint contract is locked, which is irreversible.
// Owner of the contract can still trigger refunds - but not access anyone's funds.
bool pledgesLocked;
uint16 fee; // int representing the percentage with 2 digits. e.g. 1.75% -> 175
uint16 cap; // max number of NFTs to sell during this phase
uint256 startTime;
uint256 endTime;
}
// Mapping from phase Id to array of pledgers
mapping(uint16 => address[]) public pledgers;
// Mapping from phase Id to mapping from address to boolean allow value
mapping(uint16 => mapping(address => bool)) public allowlists;
// Mapping from phase Id to mapping from address to pladge number
mapping(uint16 => mapping(address => uint8)) public pledges;
uint256 public pledgeMintRevenue;
PhaseConfig[] public phases;
modifier callerIsUser() {
if (tx.origin != msg.sender) revert Errors.CallerIsContract();
_;
}
modifier onlyAdminOrOwner(uint16 phaseId) {
if (owner() != _msgSender() && phases[phaseId].admin != _msgSender())
revert Errors.CallerIsNotOwner();
_;
}
constructor() {}
function addPhase(
address admin,
IERC721Pledge mintContract,
uint256 mintPrice,
uint8 maxPerWallet,
uint16 fee,
uint16 cap,
uint startTime,
uint endTime
) external onlyOwner {
phases.push(
PhaseConfig(
admin,
mintContract,
mintPrice,
maxPerWallet,
false,
false,
fee,
cap,
startTime,
endTime
)
);
}
function allowAddresses(uint16 phaseId, address[] calldata allowlist_)
external
onlyAdminOrOwner(phaseId)
{
mapping(address => bool) storage _allowlist = allowlists[phaseId];
for (uint256 i; i < allowlist_.length; ) {
_allowlist[allowlist_[i]] = true;
unchecked {
++i;
}
}
}
function pledge(uint16 phaseId, uint8 number)
external
payable
callerIsUser
{
PhaseConfig memory phase = phases[phaseId];
if (block.timestamp < phase.startTime || phase.endTime > 0 && block.timestamp > phase.endTime) revert Errors.PhaseNotActive();
(uint256 nbPledged, ) = _nbNFTsPledge(phaseId);
if (phase.cap > 0 && nbPledged + number > phase.cap) revert Errors.OverPhaseCap();
if (number > phase.maxPerWallet) revert Errors.NFTAmountNotAllowed();
if (number < 1) revert Errors.AmountNeedsToBeGreaterThanZero();
if (msg.value != phase.mintPrice * number)
revert Errors.AmountMismatch();
if (pledges[phaseId][msg.sender] != 0) revert Errors.AlreadyPledged();
pledgers[phaseId].push(msg.sender);
pledges[phaseId][msg.sender] = number;
}
function unpledge(uint16 phaseId) external nonReentrant callerIsUser {
if (phases[phaseId].pledgesLocked == true)
revert Errors.PledgesAreLocked();
uint256 nbPledged = pledges[phaseId][msg.sender];
if (nbPledged < 1) revert Errors.NothingWasPledged();
pledges[phaseId][msg.sender] = 0;
(bool success, ) = msg.sender.call{
value: phases[phaseId].mintPrice * nbPledged
}("");
if (!success) revert Errors.UnableToSendValue();
}
function lockPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
if (phases[phaseId].mintContractLocked == false)
revert Errors.CannotLockPledgeWithoutLockingMint();
phases[phaseId].pledgesLocked = true;
}
function unlockPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
phases[phaseId].pledgesLocked = false;
}
// mint for all participants
function mintPhase(uint16 phaseId) external onlyAdminOrOwner(phaseId) {
address[] memory _addresses = pledgers[phaseId];
_mintPhase(phaseId, _addresses, 0, _addresses.length, false);
}
// mint for all participants
function mintAllPledgesInPhase(uint16 phaseId)
external
onlyAdminOrOwner(phaseId)
{
address[] memory _addresses = pledgers[phaseId];
_mintPhase(phaseId, _addresses, 0, _addresses.length, true);
}
// mint for all participants, paginated
function mintPhase(
uint16 phaseId,
uint256 startIdx,
uint256 length
) external onlyAdminOrOwner(phaseId) {
address[] memory _addresses = pledgers[phaseId];
_mintPhase(phaseId, _addresses, startIdx, length, false);
}
// mint for select participants
// internal function checks eligibility and pledged number.
function mintPhase(uint16 phaseId, address[] calldata selectPledgers)
external
onlyAdminOrOwner(phaseId)
{
_mintPhase(phaseId, selectPledgers, 0, selectPledgers.length, false);
}
function _mintPhase(
uint16 phaseId,
address[] memory addresses,
uint256 startIdx,
uint256 count,
bool allowAllMints
) internal {
PhaseConfig memory _phase = phases[phaseId];
if (_phase.mintContractLocked == false)
revert Errors.CannotLaunchMintWithoutLockingContract();
mapping(address => uint8) storage _pledges = pledges[phaseId];
mapping(address => bool) storage _allowlist = allowlists[phaseId];
uint256 phaseRevenue;
for (uint256 i = startIdx; i < count; ) {
address addy = addresses[i];
uint8 quantity = _pledges[addy];
// Any address not allowed will have to withdraw their pledge manually. We skip them here.
if ((allowAllMints || _allowlist[addy]) && quantity > 0) {
_pledges[addy] = 0;
uint256 totalCost = _phase.mintPrice * quantity;
uint256 pmRevenue = (totalCost * _phase.fee) / 10000;
phaseRevenue += pmRevenue;
_phase.mintContract.pledgeMint{value: totalCost - pmRevenue}(
addy,
quantity
);
}
unchecked {
++i;
}
}
pledgeMintRevenue += phaseRevenue;
}
// These stats may decrease in case of refund or mint. They are not itended to archive states.
function currentPhaseStats(uint16 phaseId)
public
view
returns (
uint256 nbPledges,
uint256 nbNFTsPledged,
uint256 amountPledged,
uint256 nbAllowedPledges,
uint256 nbNAllowedFTsPledged,
uint256 allowedAmountPledged
)
{
PhaseConfig memory _phase = phases[phaseId];
mapping(address => uint8) storage _pledges = pledges[phaseId];
mapping(address => bool) storage _allowlist = allowlists[phaseId];
address[] storage _pledgers = pledgers[phaseId];
for (uint256 i; i < _pledgers.length; ) {
address addy = _pledgers[i];
uint8 quantity = _pledges[addy];
if (quantity > 0) {
nbPledges += 1;
nbNFTsPledged += quantity;
amountPledged += quantity * _phase.mintPrice;
if (_allowlist[addy]) {
nbAllowedPledges += 1;
nbNAllowedFTsPledged += quantity;
allowedAmountPledged += quantity * _phase.mintPrice;
}
}
unchecked {
++i;
}
}
}
function refundPhase(uint16 phaseId)
external
onlyAdminOrOwner(phaseId)
nonReentrant
{
_refundPhase(phaseId);
}
function refundAll() external onlyOwner nonReentrant {
for (uint8 i; i < phases.length; ) {
_refundPhase(i);
unchecked {
++i;
}
}
}
function refundPhasePledger(uint16 phaseId, address pledger)
external
onlyAdminOrOwner(phaseId)
nonReentrant
{
uint256 amount = pledges[phaseId][pledger] * phases[phaseId].mintPrice;
pledges[phaseId][pledger] = 0;
(bool success, ) = pledger.call{value: amount}("");
if (!success) revert Errors.UnableToSendValue();
}
function _refundPhase(uint16 phaseId) internal {
PhaseConfig memory _phase = phases[phaseId];
address[] storage _addresses = pledgers[phaseId];
for (uint8 i; i < _addresses.length; ) {
address addy = _addresses[i];
uint8 quantity = pledges[phaseId][addy];
if (quantity > 0) {
pledges[phaseId][addy] = 0;
(bool success, ) = addy.call{
value: _phase.mintPrice * quantity
}("");
if (!success) revert Errors.UnableToSendValue();
}
unchecked {
++i;
}
}
}
function _nbNFTsPledge(uint16 phaseId)
internal
view
returns (
uint256 nbNFTsPledged,
uint256 nbNAllowedFTsPledged
)
{
mapping(address => uint8) storage _pledges = pledges[phaseId];
mapping(address => bool) storage _allowlist = allowlists[phaseId];
address[] storage _pledgers = pledgers[phaseId];
for (uint256 i; i < _pledgers.length; ) {
address addy = _pledgers[i];
uint8 quantity = _pledges[addy];
if (quantity > 0) {
nbNFTsPledged += quantity;
if (_allowlist[addy]) {
nbNAllowedFTsPledged += quantity;
}
}
unchecked {
++i;
}
}
}
function emergencyRefund(
uint16 phaseId,
uint256 startIdx,
uint256 count
) external onlyOwner {
PhaseConfig memory _phase = phases[phaseId];
for (uint256 i = startIdx; i < count; ) {
address addy = pledgers[phaseId][i];
uint8 quantity = pledges[phaseId][addy];
(bool success, ) = addy.call{value: _phase.mintPrice * quantity}(
""
);
if (!success) revert Errors.UnableToSendValue();
unchecked {
++i;
}
}
}
function setMintContract(uint16 phaseId, IERC721Pledge mintContract_)
external
onlyAdminOrOwner(phaseId)
{
if(phases[phaseId].mintContractLocked == true) revert Errors.ContractCannotBeChanged();
phases[phaseId].mintContract = mintContract_;
}
function setFee(uint16 phaseId, uint16 fee)
external
onlyOwner
{
phases[phaseId].fee = fee;
}
function setStartTime(uint16 phaseId, uint256 startTime)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].startTime = startTime;
}
function setEndTime(uint16 phaseId, uint256 endTime)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].endTime = endTime;
}
function setPrice(uint16 phaseId, uint256 price)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].mintPrice = price;
}
function setCap(uint16 phaseId, uint16 cap)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].cap = cap;
}
function setMaxPerWallet(uint16 phaseId, uint8 maxPerWallet)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].maxPerWallet = maxPerWallet;
}
// there is no unlock function. Once this is locked, funds pledged can only be used to mint on this contract, or refunded.
function lockMintContract(uint16 phaseId)
external
onlyAdminOrOwner(phaseId)
{
phases[phaseId].mintContractLocked = true;
}
function withdrawRevenue()
external
onlyOwner
{
(bool success, ) = msg.sender.call{value: pledgeMintRevenue}("");
require(success, "Transfer failed.");
pledgeMintRevenue = 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
library Errors {
// PledgeMint.sol
error CallerIsContract();
error CallerIsNotOwner();
error NFTAmountNotAllowed();
error PhaseNotActive();
error OverPhaseCap();
error AmountNeedsToBeGreaterThanZero();
error AmountMismatch();
error AlreadyPledged();
error PledgesAreLocked();
error NothingWasPledged();
error UnableToSendValue();
error CannotLockPledgeWithoutLockingMint();
error CannotLaunchMintWithoutLockingContract();
error ContractCannotBeChanged();
}// 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 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// 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":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyPledged","type":"error"},{"inputs":[],"name":"AmountMismatch","type":"error"},{"inputs":[],"name":"AmountNeedsToBeGreaterThanZero","type":"error"},{"inputs":[],"name":"CallerIsContract","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"CannotLaunchMintWithoutLockingContract","type":"error"},{"inputs":[],"name":"CannotLockPledgeWithoutLockingMint","type":"error"},{"inputs":[],"name":"ContractCannotBeChanged","type":"error"},{"inputs":[],"name":"NFTAmountNotAllowed","type":"error"},{"inputs":[],"name":"NothingWasPledged","type":"error"},{"inputs":[],"name":"OverPhaseCap","type":"error"},{"inputs":[],"name":"PhaseNotActive","type":"error"},{"inputs":[],"name":"PledgesAreLocked","type":"error"},{"inputs":[],"name":"UnableToSendValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"contract IERC721Pledge","name":"mintContract","type":"address"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"addPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address[]","name":"allowlist_","type":"address[]"}],"name":"allowAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"address","name":"","type":"address"}],"name":"allowlists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"currentPhaseStats","outputs":[{"internalType":"uint256","name":"nbPledges","type":"uint256"},{"internalType":"uint256","name":"nbNFTsPledged","type":"uint256"},{"internalType":"uint256","name":"amountPledged","type":"uint256"},{"internalType":"uint256","name":"nbAllowedPledges","type":"uint256"},{"internalType":"uint256","name":"nbNAllowedFTsPledged","type":"uint256"},{"internalType":"uint256","name":"allowedAmountPledged","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startIdx","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"emergencyRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"lockMintContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"lockPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"mintAllPledgesInPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startIdx","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address[]","name":"selectPledgers","type":"address[]"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"mintPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phases","outputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"contract IERC721Pledge","name":"mintContract","type":"address"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"},{"internalType":"bool","name":"mintContractLocked","type":"bool"},{"internalType":"bool","name":"pledgesLocked","type":"bool"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint8","name":"number","type":"uint8"}],"name":"pledge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pledgeMintRevenue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pledgers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"address","name":"","type":"address"}],"name":"pledges","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"refundPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"address","name":"pledger","type":"address"}],"name":"refundPhasePledger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint16","name":"cap","type":"uint16"}],"name":"setCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint8","name":"maxPerWallet","type":"uint8"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"contract IERC721Pledge","name":"mintContract_","type":"address"}],"name":"setMintContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"unlockPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"phaseId","type":"uint16"}],"name":"unpledge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRevenue","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003f60201b60201c565b6200004760201b60201c565b600180819055506200010b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614e0d806200011b6000396000f3fe6080604052600436106101e35760003560e01c806399b64de111610102578063d4342d3811610095578063dfbf9f1d11610064578063dfbf9f1d14610697578063f2fde38b146106c0578063f746923d146106e9578063ffb9a1b514610712576101e3565b8063d4342d38146105b2578063d4c099c2146105ef578063d563e72514610631578063dcfa832c1461065a576101e3565b8063ae5220f9116100d1578063ae5220f91461050c578063bbc2986c14610535578063cb26d9421461055e578063d1a0e7a214610587576101e3565b806399b64de1146104685780639ac95dee14610491578063a6d25102146104ba578063a7bfd041146104e3576101e3565b8063531c509a1161017a57806383c56b0e1161014957806383c56b0e146103c2578063852c6413146103eb5780638da5cb5b1461041457806390911e371461043f576101e3565b8063531c509a1461033057806359b35cc514610359578063715018a6146103825780637767faed14610399576101e3565b80632e37eef6116101b65780632e37eef61461027f57806338e771ab146102c55780633cdf3d23146102dc5780634f573cb214610319576101e3565b80630165f612146101e857806310e11bb41461021157806320f9453e1461023a5780632e16225d14610256575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190614356565b61073b565b005b34801561021d57600080fd5b506102386004803603810190610233919061447e565b6108f2565b005b610254600480360381019061024f9190614534565b610b7d565b005b34801561026257600080fd5b5061027d60048036038101906102789190614574565b6110a8565b005b34801561028b57600080fd5b506102a660048036038101906102a191906145a1565b61125f565b6040516102bc9a99989796959493929190614684565b60405180910390f35b3480156102d157600080fd5b506102da611346565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190614720565b611443565b6040516103109190614760565b60405180910390f35b34801561032557600080fd5b5061032e611472565b005b34801561033c57600080fd5b50610357600480360381019061035291906147e0565b6115a7565b005b34801561036557600080fd5b50610380600480360381019061037b9190614574565b611763565b005b34801561038e57600080fd5b506103976118a7565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190614534565b61192f565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614356565b611a74565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614840565b611e21565b005b34801561042057600080fd5b50610429611f52565b6040516104369190614880565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614574565b611f7b565b005b34801561047457600080fd5b5061048f600480360381019061048a919061489b565b612133565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614574565b6121f7565b005b3480156104c657600080fd5b506104e160048036038101906104dc91906147e0565b61251a565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614840565b612671565b005b34801561051857600080fd5b50610533600480360381019061052e9190614720565b6127a2565b005b34801561054157600080fd5b5061055c60048036038101906105579190614840565b612ab1565b005b34801561056a57600080fd5b5061058560048036038101906105809190614574565b612be2565b005b34801561059357600080fd5b5061059c612d41565b6040516105a991906148db565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614840565b612d47565b6040516105e69190614880565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190614574565b612d95565b604051610628969594939291906148f6565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614574565b613129565b005b34801561066657600080fd5b50610681600480360381019061067c9190614720565b61326d565b60405161068e9190614957565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614972565b61329c565b005b3480156106cc57600080fd5b506106e760048036038101906106e291906149b2565b61347b565b005b3480156106f557600080fd5b50610710600480360381019061070b919061489b565b613572565b005b34801561071e57600080fd5b5061073960048036038101906107349190614574565b6136b9565b005b82610744613870565b73ffffffffffffffffffffffffffffffffffffffff16610762611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156108025750610789613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107b7576107b66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610839576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108d657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088c575b505050505090506108eb858286866000613878565b5050505050565b6108fa613870565b73ffffffffffffffffffffffffffffffffffffffff16610918611f52565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590614a6b565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110610bfc57610bfb6149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610d9d57506000816101200151118015610d9c575080610120015142115b5b15610dd4576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ddf84613cc5565b50905060008260e0015161ffff16118015610e0f57508160e0015161ffff168360ff1682610e0d9190614aba565b115b15610e46576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610e8a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610ec8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610edb9190614b10565b3414610f13576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610fb5576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b806110b1613870565b73ffffffffffffffffffffffffffffffffffffffff166110cf611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561116f57506110f6613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611124576111236149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156111a6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111f9575b5050505050905061125a8382600084516001613878565b505050565b6006818154811061126f57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b61134e613870565b73ffffffffffffffffffffffffffffffffffffffff1661136c611f52565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614a6b565b60405180910390fd5b600260015403611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614bb6565b60405180910390fd5b600260018190555060005b6006805490508160ff1610156114395761142e8160ff16613e5d565b806001019050611412565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61147a613870565b73ffffffffffffffffffffffffffffffffffffffff16611498611f52565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a6b565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1660055460405161151690614c07565b60006040518083038185875af1925050503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b505090508061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614c68565b60405180910390fd5b600060058190555050565b826115b0613870565b73ffffffffffffffffffffffffffffffffffffffff166115ce611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561166e57506115f5613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611623576116226149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116a5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b8484905081101561175b5760018260008787858181106116ea576116e96149df565b5b90506020020160208101906116ff91906149b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506116c7565b505050505050565b8061176c613870565b73ffffffffffffffffffffffffffffffffffffffff1661178a611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561182a57506117b1613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106117df576117de6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611861576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061187b5761187a6149df565b5b906000526020600020906006020160030160016101000a81548160ff0219169083151502179055505050565b6118af613870565b73ffffffffffffffffffffffffffffffffffffffff166118cd611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614a6b565b60405180910390fd5b61192d6000614218565b565b81611938613870565b73ffffffffffffffffffffffffffffffffffffffff16611956611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156119f6575061197d613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106119ab576119aa6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611a4657611a456149df565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611a7c613870565b73ffffffffffffffffffffffffffffffffffffffff16611a9a611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790614a6b565b60405180910390fd5b600060068461ffff1681548110611b0a57611b096149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015611e1a576000600260008761ffff1661ffff1681526020019081526020016000208281548110611cc057611cbf6149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff168660400151611d839190614b10565b604051611d8f90614c07565b60006040518083038185875af1925050503d8060008114611dcc576040519150601f19603f3d011682016040523d82523d6000602084013e611dd1565b606091505b5050905080611e0c576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001019350505050611c89565b5050505050565b81611e2a613870565b73ffffffffffffffffffffffffffffffffffffffff16611e48611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015611ee85750611e6f613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611e9d57611e9c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f1f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f3857611f376149df565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80611f84613870565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156120425750611fc9613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611ff757611ff66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612079576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff1681548110612095576120946149df565b5b906000526020600020906006020160030160019054906101000a900460ff161515036120ed576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff1681548110612107576121066149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b61213b613870565b73ffffffffffffffffffffffffffffffffffffffff16612159611f52565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a6b565b60405180910390fd5b8060068361ffff16815481106121c8576121c76149df565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b60026001540361223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614bb6565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106122c5576122c46149df565b5b906000526020600020906006020160030160029054906101000a900460ff1615150361231d576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156123c5576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff1681548110612469576124686149df565b5b9060005260206000209060060201600201546124859190614b10565b60405161249190614c07565b60006040518083038185875af1925050503d80600081146124ce576040519150601f19603f3d011682016040523d82523d6000602084013e6124d3565b606091505b505090508061250e576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612523613870565b73ffffffffffffffffffffffffffffffffffffffff16612541611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156125e15750612568613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612596576125956149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612618576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61266b84848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613878565b50505050565b8161267a613870565b73ffffffffffffffffffffffffffffffffffffffff16612698611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561273857506126bf613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106126ed576126ec6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561276f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612788576127876149df565b5b906000526020600020906006020160050181905550505050565b816127ab613870565b73ffffffffffffffffffffffffffffffffffffffff166127c9611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561286957506127f0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061281e5761281d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600154036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90614bb6565b60405180910390fd5b6002600181905550600060068461ffff1681548110612907576129066149df565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661298c9190614b10565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612a2690614c07565b60006040518083038185875af1925050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905080612aa3576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612aba613870565b73ffffffffffffffffffffffffffffffffffffffff16612ad8611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612aff613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612b2d57612b2c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612baf576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612bc857612bc76149df565b5b906000526020600020906006020160020181905550505050565b80612beb613870565b73ffffffffffffffffffffffffffffffffffffffff16612c09611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ca95750612c30613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612c5e57612c5d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612ce0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614bb6565b60405180910390fd5b6002600181905550612d3682613e5d565b600180819055505050565b60055481565b60026020528160005260406000208181548110612d6357600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff1681548110612db857612db76149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b818054905081101561311b576000828281548110612fb257612fb16149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff16111561310e5760018d6130489190614aba565b9c508060ff168c6130599190614aba565b9b5086604001518160ff1661306e9190614b10565b8b6130799190614aba565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310d5760018a6130d99190614aba565b99508060ff16896130ea9190614aba565b985086604001518160ff166130ff9190614b10565b8861310a9190614aba565b97505b5b8260010192505050612f91565b505050505091939550919395565b80613132613870565b73ffffffffffffffffffffffffffffffffffffffff16613150611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156131f05750613177613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106131a5576131a46149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613227576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110613241576132406149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816132a5613870565b73ffffffffffffffffffffffffffffffffffffffff166132c3611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561336357506132ea613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613318576133176149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561339a576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068461ffff16815481106133b6576133b56149df565b5b906000526020600020906006020160030160019054906101000a900460ff1615150361340e576040517f9166806f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613427576134266149df565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613483613870565b73ffffffffffffffffffffffffffffffffffffffff166134a1611f52565b73ffffffffffffffffffffffffffffffffffffffff16146134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee90614a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614cfa565b60405180910390fd5b61356f81614218565b50565b8161357b613870565b73ffffffffffffffffffffffffffffffffffffffff16613599611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561363957506135c0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106135ee576135ed6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613670576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613689576136886149df565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b806136c2613870565b73ffffffffffffffffffffffffffffffffffffffff166136e0611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156137805750613707613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613735576137346149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156137b7576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561385457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161380a575b5050505050905061386b8382600084516000613878565b505050565b600033905090565b600060068661ffff1681548110613892576138916149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613a4d576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015613ca0576000898281518110613aaf57613aae6149df565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613b5d57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b6c575060008160ff16115b15613c935760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff168860400151613bde9190614b10565b905060006127108960c0015161ffff1683613bf99190614b10565b613c039190614d49565b90508086613c119190614aba565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f8284613c3f9190614d7a565b86866040518463ffffffff1660e01b8152600401613c5e929190614dae565b6000604051808303818588803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050505050505b8260010192505050613a92565b508060056000828254613cb39190614aba565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b8180549050811015613e54576000828281548110613d4957613d486149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115613e47578060ff1688613de19190614aba565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e46578060ff1687613e439190614aba565b96505b5b8260010192505050613d28565b50505050915091565b600060068261ffff1681548110613e7757613e766149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff161015614212576000828260ff1681548110614039576140386149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614205576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161417a9190614b10565b60405161418690614c07565b60006040518083038185875af1925050503d80600081146141c3576040519150601f19603f3d011682016040523d82523d6000602084013e6141c8565b606091505b5050905080614203576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8260010192505050614012565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b6142fd816142e6565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b6000819050919050565b61433381614320565b811461433e57600080fd5b50565b6000813590506143508161432a565b92915050565b60008060006060848603121561436f5761436e6142dc565b5b600061437d8682870161430b565b935050602061438e86828701614341565b925050604061439f86828701614341565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b6000614412826143c9565b9050919050565b61442281614407565b811461442d57600080fd5b50565b60008135905061443f81614419565b92915050565b600060ff82169050919050565b61445b81614445565b811461446657600080fd5b50565b60008135905061447881614452565b92915050565b600080600080600080600080610100898b03121561449f5761449e6142dc565b5b60006144ad8b828c016143f2565b98505060206144be8b828c01614430565b97505060406144cf8b828c01614341565b96505060606144e08b828c01614469565b95505060806144f18b828c0161430b565b94505060a06145028b828c0161430b565b93505060c06145138b828c01614341565b92505060e06145248b828c01614341565b9150509295985092959890939650565b6000806040838503121561454b5761454a6142dc565b5b60006145598582860161430b565b925050602061456a85828601614469565b9150509250929050565b60006020828403121561458a576145896142dc565b5b60006145988482850161430b565b91505092915050565b6000602082840312156145b7576145b66142dc565b5b60006145c584828501614341565b91505092915050565b6145d7816143c9565b82525050565b6000819050919050565b60006146026145fd6145f8846143a9565b6145dd565b6143a9565b9050919050565b6000614614826145e7565b9050919050565b600061462682614609565b9050919050565b6146368161461b565b82525050565b61464581614320565b82525050565b61465481614445565b82525050565b60008115159050919050565b61466f8161465a565b82525050565b61467e816142e6565b82525050565b60006101408201905061469a600083018d6145ce565b6146a7602083018c61462d565b6146b4604083018b61463c565b6146c1606083018a61464b565b6146ce6080830189614666565b6146db60a0830188614666565b6146e860c0830187614675565b6146f560e0830186614675565b61470361010083018561463c565b61471161012083018461463c565b9b9a5050505050505050505050565b60008060408385031215614737576147366142dc565b5b60006147458582860161430b565b9250506020614756858286016143f2565b9150509250929050565b60006020820190506147756000830184614666565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a05761479f61477b565b5b8235905067ffffffffffffffff8111156147bd576147bc614780565b5b6020830191508360208202830111156147d9576147d8614785565b5b9250929050565b6000806000604084860312156147f9576147f86142dc565b5b60006148078682870161430b565b935050602084013567ffffffffffffffff811115614828576148276142e1565b5b6148348682870161478a565b92509250509250925092565b60008060408385031215614857576148566142dc565b5b60006148658582860161430b565b925050602061487685828601614341565b9150509250929050565b600060208201905061489560008301846145ce565b92915050565b600080604083850312156148b2576148b16142dc565b5b60006148c08582860161430b565b92505060206148d18582860161430b565b9150509250929050565b60006020820190506148f0600083018461463c565b92915050565b600060c08201905061490b600083018961463c565b614918602083018861463c565b614925604083018761463c565b614932606083018661463c565b61493f608083018561463c565b61494c60a083018461463c565b979650505050505050565b600060208201905061496c600083018461464b565b92915050565b60008060408385031215614989576149886142dc565b5b60006149978582860161430b565b92505060206149a885828601614430565b9150509250929050565b6000602082840312156149c8576149c76142dc565b5b60006149d6848285016143f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a55602083614a0e565b9150614a6082614a1f565b602082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac582614320565b9150614ad083614320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0557614b04614a8b565b5b828201905092915050565b6000614b1b82614320565b9150614b2683614320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5f57614b5e614a8b565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ba0601f83614a0e565b9150614bab82614b6a565b602082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b600081905092915050565b50565b6000614bf1600083614bd6565b9150614bfc82614be1565b600082019050919050565b6000614c1282614be4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614c52601083614a0e565b9150614c5d82614c1c565b602082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce4602683614a0e565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d5482614320565b9150614d5f83614320565b925082614d6f57614d6e614d1a565b5b828204905092915050565b6000614d8582614320565b9150614d9083614320565b925082821015614da357614da2614a8b565b5b828203905092915050565b6000604082019050614dc360008301856145ce565b614dd0602083018461464b565b939250505056fea2646970667358221220e505a8d96670044e05e0c5c0993741791d309372f19dbb356819e5e6dcb3d74064736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106101e35760003560e01c806399b64de111610102578063d4342d3811610095578063dfbf9f1d11610064578063dfbf9f1d14610697578063f2fde38b146106c0578063f746923d146106e9578063ffb9a1b514610712576101e3565b8063d4342d38146105b2578063d4c099c2146105ef578063d563e72514610631578063dcfa832c1461065a576101e3565b8063ae5220f9116100d1578063ae5220f91461050c578063bbc2986c14610535578063cb26d9421461055e578063d1a0e7a214610587576101e3565b806399b64de1146104685780639ac95dee14610491578063a6d25102146104ba578063a7bfd041146104e3576101e3565b8063531c509a1161017a57806383c56b0e1161014957806383c56b0e146103c2578063852c6413146103eb5780638da5cb5b1461041457806390911e371461043f576101e3565b8063531c509a1461033057806359b35cc514610359578063715018a6146103825780637767faed14610399576101e3565b80632e37eef6116101b65780632e37eef61461027f57806338e771ab146102c55780633cdf3d23146102dc5780634f573cb214610319576101e3565b80630165f612146101e857806310e11bb41461021157806320f9453e1461023a5780632e16225d14610256575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190614356565b61073b565b005b34801561021d57600080fd5b506102386004803603810190610233919061447e565b6108f2565b005b610254600480360381019061024f9190614534565b610b7d565b005b34801561026257600080fd5b5061027d60048036038101906102789190614574565b6110a8565b005b34801561028b57600080fd5b506102a660048036038101906102a191906145a1565b61125f565b6040516102bc9a99989796959493929190614684565b60405180910390f35b3480156102d157600080fd5b506102da611346565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190614720565b611443565b6040516103109190614760565b60405180910390f35b34801561032557600080fd5b5061032e611472565b005b34801561033c57600080fd5b50610357600480360381019061035291906147e0565b6115a7565b005b34801561036557600080fd5b50610380600480360381019061037b9190614574565b611763565b005b34801561038e57600080fd5b506103976118a7565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190614534565b61192f565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614356565b611a74565b005b3480156103f757600080fd5b50610412600480360381019061040d9190614840565b611e21565b005b34801561042057600080fd5b50610429611f52565b6040516104369190614880565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190614574565b611f7b565b005b34801561047457600080fd5b5061048f600480360381019061048a919061489b565b612133565b005b34801561049d57600080fd5b506104b860048036038101906104b39190614574565b6121f7565b005b3480156104c657600080fd5b506104e160048036038101906104dc91906147e0565b61251a565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190614840565b612671565b005b34801561051857600080fd5b50610533600480360381019061052e9190614720565b6127a2565b005b34801561054157600080fd5b5061055c60048036038101906105579190614840565b612ab1565b005b34801561056a57600080fd5b5061058560048036038101906105809190614574565b612be2565b005b34801561059357600080fd5b5061059c612d41565b6040516105a991906148db565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614840565b612d47565b6040516105e69190614880565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190614574565b612d95565b604051610628969594939291906148f6565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614574565b613129565b005b34801561066657600080fd5b50610681600480360381019061067c9190614720565b61326d565b60405161068e9190614957565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614972565b61329c565b005b3480156106cc57600080fd5b506106e760048036038101906106e291906149b2565b61347b565b005b3480156106f557600080fd5b50610710600480360381019061070b919061489b565b613572565b005b34801561071e57600080fd5b5061073960048036038101906107349190614574565b6136b9565b005b82610744613870565b73ffffffffffffffffffffffffffffffffffffffff16610762611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156108025750610789613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107b7576107b66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610839576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108d657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088c575b505050505090506108eb858286866000613878565b5050505050565b6108fa613870565b73ffffffffffffffffffffffffffffffffffffffff16610918611f52565b73ffffffffffffffffffffffffffffffffffffffff161461096e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096590614a6b565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110610bfc57610bfb6149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610d9d57506000816101200151118015610d9c575080610120015142115b5b15610dd4576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ddf84613cc5565b50905060008260e0015161ffff16118015610e0f57508160e0015161ffff168360ff1682610e0d9190614aba565b115b15610e46576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610e8a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610ec8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610edb9190614b10565b3414610f13576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610fb5576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b806110b1613870565b73ffffffffffffffffffffffffffffffffffffffff166110cf611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561116f57506110f6613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611124576111236149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156111a6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561124357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111f9575b5050505050905061125a8382600084516001613878565b505050565b6006818154811061126f57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b61134e613870565b73ffffffffffffffffffffffffffffffffffffffff1661136c611f52565b73ffffffffffffffffffffffffffffffffffffffff16146113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614a6b565b60405180910390fd5b600260015403611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614bb6565b60405180910390fd5b600260018190555060005b6006805490508160ff1610156114395761142e8160ff16613e5d565b806001019050611412565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61147a613870565b73ffffffffffffffffffffffffffffffffffffffff16611498611f52565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a6b565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1660055460405161151690614c07565b60006040518083038185875af1925050503d8060008114611553576040519150601f19603f3d011682016040523d82523d6000602084013e611558565b606091505b505090508061159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614c68565b60405180910390fd5b600060058190555050565b826115b0613870565b73ffffffffffffffffffffffffffffffffffffffff166115ce611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561166e57506115f5613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611623576116226149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156116a5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b8484905081101561175b5760018260008787858181106116ea576116e96149df565b5b90506020020160208101906116ff91906149b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506116c7565b505050505050565b8061176c613870565b73ffffffffffffffffffffffffffffffffffffffff1661178a611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561182a57506117b1613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106117df576117de6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611861576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061187b5761187a6149df565b5b906000526020600020906006020160030160016101000a81548160ff0219169083151502179055505050565b6118af613870565b73ffffffffffffffffffffffffffffffffffffffff166118cd611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614a6b565b60405180910390fd5b61192d6000614218565b565b81611938613870565b73ffffffffffffffffffffffffffffffffffffffff16611956611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156119f6575061197d613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106119ab576119aa6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611a2d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611a4657611a456149df565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611a7c613870565b73ffffffffffffffffffffffffffffffffffffffff16611a9a611f52565b73ffffffffffffffffffffffffffffffffffffffff1614611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae790614a6b565b60405180910390fd5b600060068461ffff1681548110611b0a57611b096149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015611e1a576000600260008761ffff1661ffff1681526020019081526020016000208281548110611cc057611cbf6149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff168660400151611d839190614b10565b604051611d8f90614c07565b60006040518083038185875af1925050503d8060008114611dcc576040519150601f19603f3d011682016040523d82523d6000602084013e611dd1565b606091505b5050905080611e0c576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001019350505050611c89565b5050505050565b81611e2a613870565b73ffffffffffffffffffffffffffffffffffffffff16611e48611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015611ee85750611e6f613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611e9d57611e9c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f1f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f3857611f376149df565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80611f84613870565b73ffffffffffffffffffffffffffffffffffffffff16611fa2611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156120425750611fc9613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611ff757611ff66149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612079576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff1681548110612095576120946149df565b5b906000526020600020906006020160030160019054906101000a900460ff161515036120ed576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff1681548110612107576121066149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b61213b613870565b73ffffffffffffffffffffffffffffffffffffffff16612159611f52565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690614a6b565b60405180910390fd5b8060068361ffff16815481106121c8576121c76149df565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b60026001540361223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614bb6565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122a9576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106122c5576122c46149df565b5b906000526020600020906006020160030160029054906101000a900460ff1615150361231d576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156123c5576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff1681548110612469576124686149df565b5b9060005260206000209060060201600201546124859190614b10565b60405161249190614c07565b60006040518083038185875af1925050503d80600081146124ce576040519150601f19603f3d011682016040523d82523d6000602084013e6124d3565b606091505b505090508061250e576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612523613870565b73ffffffffffffffffffffffffffffffffffffffff16612541611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156125e15750612568613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612596576125956149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612618576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61266b84848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613878565b50505050565b8161267a613870565b73ffffffffffffffffffffffffffffffffffffffff16612698611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561273857506126bf613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106126ed576126ec6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561276f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612788576127876149df565b5b906000526020600020906006020160050181905550505050565b816127ab613870565b73ffffffffffffffffffffffffffffffffffffffff166127c9611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561286957506127f0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061281e5761281d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600154036128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90614bb6565b60405180910390fd5b6002600181905550600060068461ffff1681548110612907576129066149df565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1661298c9190614b10565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612a2690614c07565b60006040518083038185875af1925050503d8060008114612a63576040519150601f19603f3d011682016040523d82523d6000602084013e612a68565b606091505b5050905080612aa3576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612aba613870565b73ffffffffffffffffffffffffffffffffffffffff16612ad8611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612b785750612aff613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612b2d57612b2c6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612baf576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612bc857612bc76149df565b5b906000526020600020906006020160020181905550505050565b80612beb613870565b73ffffffffffffffffffffffffffffffffffffffff16612c09611f52565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ca95750612c30613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612c5e57612c5d6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612ce0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1c90614bb6565b60405180910390fd5b6002600181905550612d3682613e5d565b600180819055505050565b60055481565b60026020528160005260406000208181548110612d6357600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff1681548110612db857612db76149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b818054905081101561311b576000828281548110612fb257612fb16149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff16111561310e5760018d6130489190614aba565b9c508060ff168c6130599190614aba565b9b5086604001518160ff1661306e9190614b10565b8b6130799190614aba565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561310d5760018a6130d99190614aba565b99508060ff16896130ea9190614aba565b985086604001518160ff166130ff9190614b10565b8861310a9190614aba565b97505b5b8260010192505050612f91565b505050505091939550919395565b80613132613870565b73ffffffffffffffffffffffffffffffffffffffff16613150611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156131f05750613177613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106131a5576131a46149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613227576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff1681548110613241576132406149df565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816132a5613870565b73ffffffffffffffffffffffffffffffffffffffff166132c3611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561336357506132ea613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613318576133176149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561339a576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068461ffff16815481106133b6576133b56149df565b5b906000526020600020906006020160030160019054906101000a900460ff1615150361340e576040517f9166806f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613427576134266149df565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613483613870565b73ffffffffffffffffffffffffffffffffffffffff166134a1611f52565b73ffffffffffffffffffffffffffffffffffffffff16146134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ee90614a6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614cfa565b60405180910390fd5b61356f81614218565b50565b8161357b613870565b73ffffffffffffffffffffffffffffffffffffffff16613599611f52565b73ffffffffffffffffffffffffffffffffffffffff161415801561363957506135c0613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106135ee576135ed6149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613670576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613689576136886149df565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b806136c2613870565b73ffffffffffffffffffffffffffffffffffffffff166136e0611f52565b73ffffffffffffffffffffffffffffffffffffffff16141580156137805750613707613870565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613735576137346149df565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156137b7576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561385457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161380a575b5050505050905061386b8382600084516000613878565b505050565b600033905090565b600060068661ffff1681548110613892576138916149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613a4d576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015613ca0576000898281518110613aaf57613aae6149df565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613b5d57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b6c575060008160ff16115b15613c935760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff168860400151613bde9190614b10565b905060006127108960c0015161ffff1683613bf99190614b10565b613c039190614d49565b90508086613c119190614aba565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f8284613c3f9190614d7a565b86866040518463ffffffff1660e01b8152600401613c5e929190614dae565b6000604051808303818588803b158015613c7757600080fd5b505af1158015613c8b573d6000803e3d6000fd5b505050505050505b8260010192505050613a92565b508060056000828254613cb39190614aba565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b8180549050811015613e54576000828281548110613d4957613d486149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115613e47578060ff1688613de19190614aba565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e46578060ff1687613e439190614aba565b96505b5b8260010192505050613d28565b50505050915091565b600060068261ffff1681548110613e7757613e766149df565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff161015614212576000828260ff1681548110614039576140386149df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614205576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161417a9190614b10565b60405161418690614c07565b60006040518083038185875af1925050503d80600081146141c3576040519150601f19603f3d011682016040523d82523d6000602084013e6141c8565b606091505b5050905080614203576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8260010192505050614012565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b6142fd816142e6565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b6000819050919050565b61433381614320565b811461433e57600080fd5b50565b6000813590506143508161432a565b92915050565b60008060006060848603121561436f5761436e6142dc565b5b600061437d8682870161430b565b935050602061438e86828701614341565b925050604061439f86828701614341565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143d4826143a9565b9050919050565b6143e4816143c9565b81146143ef57600080fd5b50565b600081359050614401816143db565b92915050565b6000614412826143c9565b9050919050565b61442281614407565b811461442d57600080fd5b50565b60008135905061443f81614419565b92915050565b600060ff82169050919050565b61445b81614445565b811461446657600080fd5b50565b60008135905061447881614452565b92915050565b600080600080600080600080610100898b03121561449f5761449e6142dc565b5b60006144ad8b828c016143f2565b98505060206144be8b828c01614430565b97505060406144cf8b828c01614341565b96505060606144e08b828c01614469565b95505060806144f18b828c0161430b565b94505060a06145028b828c0161430b565b93505060c06145138b828c01614341565b92505060e06145248b828c01614341565b9150509295985092959890939650565b6000806040838503121561454b5761454a6142dc565b5b60006145598582860161430b565b925050602061456a85828601614469565b9150509250929050565b60006020828403121561458a576145896142dc565b5b60006145988482850161430b565b91505092915050565b6000602082840312156145b7576145b66142dc565b5b60006145c584828501614341565b91505092915050565b6145d7816143c9565b82525050565b6000819050919050565b60006146026145fd6145f8846143a9565b6145dd565b6143a9565b9050919050565b6000614614826145e7565b9050919050565b600061462682614609565b9050919050565b6146368161461b565b82525050565b61464581614320565b82525050565b61465481614445565b82525050565b60008115159050919050565b61466f8161465a565b82525050565b61467e816142e6565b82525050565b60006101408201905061469a600083018d6145ce565b6146a7602083018c61462d565b6146b4604083018b61463c565b6146c1606083018a61464b565b6146ce6080830189614666565b6146db60a0830188614666565b6146e860c0830187614675565b6146f560e0830186614675565b61470361010083018561463c565b61471161012083018461463c565b9b9a5050505050505050505050565b60008060408385031215614737576147366142dc565b5b60006147458582860161430b565b9250506020614756858286016143f2565b9150509250929050565b60006020820190506147756000830184614666565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a05761479f61477b565b5b8235905067ffffffffffffffff8111156147bd576147bc614780565b5b6020830191508360208202830111156147d9576147d8614785565b5b9250929050565b6000806000604084860312156147f9576147f86142dc565b5b60006148078682870161430b565b935050602084013567ffffffffffffffff811115614828576148276142e1565b5b6148348682870161478a565b92509250509250925092565b60008060408385031215614857576148566142dc565b5b60006148658582860161430b565b925050602061487685828601614341565b9150509250929050565b600060208201905061489560008301846145ce565b92915050565b600080604083850312156148b2576148b16142dc565b5b60006148c08582860161430b565b92505060206148d18582860161430b565b9150509250929050565b60006020820190506148f0600083018461463c565b92915050565b600060c08201905061490b600083018961463c565b614918602083018861463c565b614925604083018761463c565b614932606083018661463c565b61493f608083018561463c565b61494c60a083018461463c565b979650505050505050565b600060208201905061496c600083018461464b565b92915050565b60008060408385031215614989576149886142dc565b5b60006149978582860161430b565b92505060206149a885828601614430565b9150509250929050565b6000602082840312156149c8576149c76142dc565b5b60006149d6848285016143f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a55602083614a0e565b9150614a6082614a1f565b602082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ac582614320565b9150614ad083614320565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b0557614b04614a8b565b5b828201905092915050565b6000614b1b82614320565b9150614b2683614320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5f57614b5e614a8b565b5b828202905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614ba0601f83614a0e565b9150614bab82614b6a565b602082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b600081905092915050565b50565b6000614bf1600083614bd6565b9150614bfc82614be1565b600082019050919050565b6000614c1282614be4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614c52601083614a0e565b9150614c5d82614c1c565b602082019050919050565b60006020820190508181036000830152614c8181614c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce4602683614a0e565b9150614cef82614c88565b604082019050919050565b60006020820190508181036000830152614d1381614cd7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d5482614320565b9150614d5f83614320565b925082614d6f57614d6e614d1a565b5b828204905092915050565b6000614d8582614320565b9150614d9083614320565b925082821015614da357614da2614a8b565b5b828203905092915050565b6000604082019050614dc360008301856145ce565b614dd0602083018461464b565b939250505056fea2646970667358221220e505a8d96670044e05e0c5c0993741791d309372f19dbb356819e5e6dcb3d74064736f6c634300080e0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $3,129.28 | 0.24 | $751.03 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.