Overview
ETH Balance
0.08 ETH
Eth Value
$169.89 (@ $2,123.65/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 676 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Refund Phase Ple... | 15984678 | 834 days ago | IN | 0 ETH | 0.00076166 | ||||
Refund Phase Ple... | 15877856 | 849 days ago | IN | 0 ETH | 0.00048293 | ||||
Refund Phase Ple... | 15877842 | 849 days ago | IN | 0 ETH | 0.00049816 | ||||
Refund Phase Ple... | 15877840 | 849 days ago | IN | 0 ETH | 0.00044557 | ||||
Unpledge | 15877840 | 849 days ago | IN | 0 ETH | 0.00081999 | ||||
Unpledge | 15877840 | 849 days ago | IN | 0 ETH | 0.00036573 | ||||
Pledge | 15877838 | 849 days ago | IN | 0.08 ETH | 0.00163542 | ||||
Refund Phase Ple... | 15877837 | 849 days ago | IN | 0 ETH | 0.00050373 | ||||
Refund Phase Ple... | 15877834 | 849 days ago | IN | 0 ETH | 0.00046686 | ||||
Refund Phase Ple... | 15877831 | 849 days ago | IN | 0 ETH | 0.00048081 | ||||
Unpledge | 15876419 | 849 days ago | IN | 0 ETH | 0.00072456 | ||||
Unpledge | 15875022 | 850 days ago | IN | 0 ETH | 0.00035513 | ||||
Unpledge | 15873514 | 850 days ago | IN | 0 ETH | 0.00035658 | ||||
Unpledge | 15871909 | 850 days ago | IN | 0 ETH | 0.00047481 | ||||
Unpledge | 15871570 | 850 days ago | IN | 0 ETH | 0.00060761 | ||||
Unpledge | 15871353 | 850 days ago | IN | 0 ETH | 0.00047914 | ||||
Unpledge | 15870675 | 850 days ago | IN | 0 ETH | 0.00117577 | ||||
Unpledge | 15870662 | 850 days ago | IN | 0 ETH | 0.00104343 | ||||
Unpledge | 15868963 | 850 days ago | IN | 0 ETH | 0.00074892 | ||||
Unpledge | 15868508 | 850 days ago | IN | 0 ETH | 0.0016706 | ||||
Unpledge | 15866425 | 851 days ago | IN | 0 ETH | 0.00027706 | ||||
Unpledge | 15864445 | 851 days ago | IN | 0 ETH | 0.00037871 | ||||
Unpledge | 15863773 | 851 days ago | IN | 0 ETH | 0.00039188 | ||||
Unpledge | 15863494 | 851 days ago | IN | 0 ETH | 0.00035749 | ||||
Refund Phase | 15863156 | 851 days ago | IN | 0 ETH | 0.00088479 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15984678 | 834 days ago | 0.08 ETH | ||||
15877856 | 849 days ago | 0.08 ETH | ||||
15877842 | 849 days ago | 0.08 ETH | ||||
15877840 | 849 days ago | 0.08 ETH | ||||
15877837 | 849 days ago | 0.08 ETH | ||||
15877834 | 849 days ago | 0.08 ETH | ||||
15877831 | 849 days ago | 0.08 ETH | ||||
15876419 | 849 days ago | 0.08 ETH | ||||
15875022 | 850 days ago | 0.08 ETH | ||||
15873514 | 850 days ago | 0.08 ETH | ||||
15871909 | 850 days ago | 0.08 ETH | ||||
15871570 | 850 days ago | 0.08 ETH | ||||
15871353 | 850 days ago | 0.08 ETH | ||||
15870675 | 850 days ago | 0.08 ETH | ||||
15870662 | 850 days ago | 0.08 ETH | ||||
15868963 | 850 days ago | 0.08 ETH | ||||
15868508 | 850 days ago | 0.08 ETH | ||||
15866425 | 851 days ago | 0.08 ETH | ||||
15864445 | 851 days ago | 0.08 ETH | ||||
15863773 | 851 days ago | 0.08 ETH | ||||
15863494 | 851 days ago | 0.08 ETH | ||||
15863156 | 851 days ago | 0.1 ETH | ||||
15863156 | 851 days ago | 0.1 ETH | ||||
15863151 | 851 days ago | 0.1 ETH | ||||
15863151 | 851 days ago | 0.1 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
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 pledgeWithCap(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 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(); 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) { 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 setAdmin(uint16 phaseId, address admin) external onlyAdminOrOwner(phaseId) { phases[phaseId].admin = admin; } function setMaxPerWallet(uint16 phaseId, uint8 maxPerWallet) external onlyAdminOrOwner(phaseId) { phases[phaseId].maxPerWallet = maxPerWallet; } 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":"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":"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":"phaseId","type":"uint16"},{"internalType":"uint8","name":"number","type":"uint8"}],"name":"pledgeWithCap","outputs":[],"stateMutability":"payable","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":"address","name":"admin","type":"address"}],"name":"setAdmin","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
60806040523480156200001157600080fd5b5062000032620000266200003f60201b60201c565b6200004760201b60201c565b600180819055506200010b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61529f806200011b6000396000f3fe6080604052600436106101ee5760003560e01c806390911e371161010d578063d1a0e7a2116100a0578063dcfa832c1161006f578063dcfa832c14610681578063dfbf9f1d146106be578063f2fde38b146106e7578063f746923d14610710578063ffb9a1b514610739576101ee565b8063d1a0e7a2146105ae578063d4342d38146105d9578063d4c099c214610616578063d563e72514610658576101ee565b8063a7bfd041116100dc578063a7bfd0411461050a578063ae5220f914610533578063bbc2986c1461055c578063cb26d94214610585576101ee565b806390911e371461046657806399b64de11461048f5780639ac95dee146104b8578063a6d25102146104e1576101ee565b80633cdf3d23116101855780637767faed116101545780637767faed146103c057806383c56b0e146103e9578063852c6413146104125780638da5cb5b1461043b576101ee565b80633cdf3d231461032c5780634f573cb214610369578063531c509a14610380578063715018a6146103a9576101ee565b80632e16225d116101c15780632e16225d1461027d5780632e37eef6146102a65780633084a42f146102ec57806338e771ab14610315576101ee565b80630165f612146101f357806310291a591461021c57806310e11bb41461023857806320f9453e14610261575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906147e8565b610762565b005b61023660048036038101906102319190614874565b610919565b005b34801561024457600080fd5b5061025f600480360381019061025a9190614950565b610e44565b005b61027b60048036038101906102769190614874565b6110cf565b005b34801561028957600080fd5b506102a4600480360381019061029f9190614a06565b611587565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190614a33565b61173e565b6040516102e39a99989796959493929190614b16565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614bb2565b611825565b005b34801561032157600080fd5b5061032a611990565b005b34801561033857600080fd5b50610353600480360381019061034e9190614bb2565b611a8d565b6040516103609190614bf2565b60405180910390f35b34801561037557600080fd5b5061037e611abc565b005b34801561038c57600080fd5b506103a760048036038101906103a29190614c72565b611bf1565b005b3480156103b557600080fd5b506103be611dad565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190614874565b611e35565b005b3480156103f557600080fd5b50610410600480360381019061040b91906147e8565b611f7a565b005b34801561041e57600080fd5b5061043960048036038101906104349190614cd2565b612327565b005b34801561044757600080fd5b50610450612458565b60405161045d9190614d12565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190614a06565b612481565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614d2d565b612639565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614a06565b6126fd565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614c72565b612a20565b005b34801561051657600080fd5b50610531600480360381019061052c9190614cd2565b612b77565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614bb2565b612ca8565b005b34801561056857600080fd5b50610583600480360381019061057e9190614cd2565b612fb7565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614a06565b6130e8565b005b3480156105ba57600080fd5b506105c3613247565b6040516105d09190614d6d565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190614cd2565b61324d565b60405161060d9190614d12565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614a06565b61329b565b60405161064f96959493929190614d88565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190614a06565b61362f565b005b34801561068d57600080fd5b506106a860048036038101906106a39190614bb2565b613773565b6040516106b59190614de9565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190614e04565b6137a2565b005b3480156106f357600080fd5b5061070e60048036038101906107099190614e44565b61390d565b005b34801561071c57600080fd5b5061073760048036038101906107329190614d2d565b613a04565b005b34801561074557600080fd5b50610760600480360381019061075b9190614a06565b613b4b565b005b8261076b613d02565b73ffffffffffffffffffffffffffffffffffffffff16610789612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561082957506107b0613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107de576107dd614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610860576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108fd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108b3575b50505050509050610912858286866000613d0a565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461097e576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061099857610997614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610b3957506000816101200151118015610b38575080610120015142115b5b15610b70576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b7b84614157565b50905060008260e0015161ffff16118015610bab57508160e0015161ffff168360ff1682610ba99190614ecf565b115b15610be2576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610c26576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610c64576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610c779190614f25565b3414610caf576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610d51576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b610e4c613d02565b73ffffffffffffffffffffffffffffffffffffffff16610e6a612458565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790614fdc565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611134576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061114e5761114d614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090508061010001514210806112ef575060008161012001511180156112ee575080610120015142115b5b15611326576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015160ff168260ff16111561136a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260ff1610156113a8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160ff1681604001516113bb9190614f25565b34146113f3576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008561ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611495576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008461ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460008561ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b80611590613d02565b73ffffffffffffffffffffffffffffffffffffffff166115ae612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561164e57506115d5613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061160357611602614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611685576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561172257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116d8575b505050505090506117398382600084516001613d0a565b505050565b6006818154811061174e57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b8161182e613d02565b73ffffffffffffffffffffffffffffffffffffffff1661184c612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156118ec5750611873613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106118a1576118a0614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611923576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff168154811061193c5761193b614e71565b5b906000526020600020906006020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611998613d02565b73ffffffffffffffffffffffffffffffffffffffff166119b6612458565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614fdc565b60405180910390fd5b600260015403611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890615048565b60405180910390fd5b600260018190555060005b6006805490508160ff161015611a8357611a788160ff166142ef565b806001019050611a5c565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611ac4613d02565b73ffffffffffffffffffffffffffffffffffffffff16611ae2612458565b73ffffffffffffffffffffffffffffffffffffffff1614611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90614fdc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600554604051611b6090615099565b60006040518083038185875af1925050503d8060008114611b9d576040519150601f19603f3d011682016040523d82523d6000602084013e611ba2565b606091505b5050905080611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd906150fa565b60405180910390fd5b600060058190555050565b82611bfa613d02565b73ffffffffffffffffffffffffffffffffffffffff16611c18612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015611cb85750611c3f613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611c6d57611c6c614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611cef576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b84849050811015611da5576001826000878785818110611d3457611d33614e71565b5b9050602002016020810190611d499190614e44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611d11565b505050505050565b611db5613d02565b73ffffffffffffffffffffffffffffffffffffffff16611dd3612458565b73ffffffffffffffffffffffffffffffffffffffff1614611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090614fdc565b60405180910390fd5b611e3360006146aa565b565b81611e3e613d02565b73ffffffffffffffffffffffffffffffffffffffff16611e5c612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015611efc5750611e83613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611eb157611eb0614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f33576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f4c57611f4b614e71565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611f82613d02565b73ffffffffffffffffffffffffffffffffffffffff16611fa0612458565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614fdc565b60405180910390fd5b600060068461ffff16815481106120105761200f614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015612320576000600260008761ffff1661ffff16815260200190815260200160002082815481106121c6576121c5614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff1686604001516122899190614f25565b60405161229590615099565b60006040518083038185875af1925050503d80600081146122d2576040519150601f19603f3d011682016040523d82523d6000602084013e6122d7565b606091505b5050905080612312576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600101935050505061218f565b5050505050565b81612330613d02565b73ffffffffffffffffffffffffffffffffffffffff1661234e612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156123ee5750612375613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106123a3576123a2614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612425576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff168154811061243e5761243d614e71565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8061248a613d02565b73ffffffffffffffffffffffffffffffffffffffff166124a8612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561254857506124cf613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106124fd576124fc614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561257f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff168154811061259b5761259a614e71565b5b906000526020600020906006020160030160019054906101000a900460ff161515036125f3576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061260d5761260c614e71565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b612641613d02565b73ffffffffffffffffffffffffffffffffffffffff1661265f612458565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614fdc565b60405180910390fd5b8060068361ffff16815481106126ce576126cd614e71565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b600260015403612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273990615048565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146127af576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106127cb576127ca614e71565b5b906000526020600020906006020160030160029054906101000a900460ff16151503612823576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156128cb576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff168154811061296f5761296e614e71565b5b90600052602060002090600602016002015461298b9190614f25565b60405161299790615099565b60006040518083038185875af1925050503d80600081146129d4576040519150601f19603f3d011682016040523d82523d6000602084013e6129d9565b606091505b5050905080612a14576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612a29613d02565b73ffffffffffffffffffffffffffffffffffffffff16612a47612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ae75750612a6e613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612a9c57612a9b614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612b1e576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b7184848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613d0a565b50505050565b81612b80613d02565b73ffffffffffffffffffffffffffffffffffffffff16612b9e612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612c3e5750612bc5613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612bf357612bf2614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612c75576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612c8e57612c8d614e71565b5b906000526020600020906006020160050181905550505050565b81612cb1613d02565b73ffffffffffffffffffffffffffffffffffffffff16612ccf612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612d6f5750612cf6613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612d2457612d23614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612da6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290615048565b60405180910390fd5b6002600181905550600060068461ffff1681548110612e0d57612e0c614e71565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16612e929190614f25565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612f2c90615099565b60006040518083038185875af1925050503d8060008114612f69576040519150601f19603f3d011682016040523d82523d6000602084013e612f6e565b606091505b5050905080612fa9576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612fc0613d02565b73ffffffffffffffffffffffffffffffffffffffff16612fde612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561307e5750613005613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061303357613032614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156130b5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff16815481106130ce576130cd614e71565b5b906000526020600020906006020160020181905550505050565b806130f1613d02565b73ffffffffffffffffffffffffffffffffffffffff1661310f612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156131af5750613136613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061316457613163614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156131e6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026001540361322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322290615048565b60405180910390fd5b600260018190555061323c826142ef565b600180819055505050565b60055481565b6002602052816000526040600020818154811061326957600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff16815481106132be576132bd614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b81805490508110156136215760008282815481106134b8576134b7614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff1611156136145760018d61354e9190614ecf565b9c508060ff168c61355f9190614ecf565b9b5086604001518160ff166135749190614f25565b8b61357f9190614ecf565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136135760018a6135df9190614ecf565b99508060ff16896135f09190614ecf565b985086604001518160ff166136059190614f25565b886136109190614ecf565b97505b5b8260010192505050613497565b505050505091939550919395565b80613638613d02565b73ffffffffffffffffffffffffffffffffffffffff16613656612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156136f6575061367d613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106136ab576136aa614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561372d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061374757613746614e71565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816137ab613d02565b73ffffffffffffffffffffffffffffffffffffffff166137c9612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561386957506137f0613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061381e5761381d614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156138a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff16815481106138b9576138b8614e71565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613915613d02565b73ffffffffffffffffffffffffffffffffffffffff16613933612458565b73ffffffffffffffffffffffffffffffffffffffff1614613989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398090614fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef9061518c565b60405180910390fd5b613a01816146aa565b50565b81613a0d613d02565b73ffffffffffffffffffffffffffffffffffffffff16613a2b612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015613acb5750613a52613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613a8057613a7f614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613b02576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613b1b57613b1a614e71565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b80613b54613d02565b73ffffffffffffffffffffffffffffffffffffffff16613b72612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015613c125750613b99613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613bc757613bc6614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613c49576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613ce657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613c9c575b50505050509050613cfd8382600084516000613d0a565b505050565b600033905090565b600060068661ffff1681548110613d2457613d23614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613edf576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015614132576000898281518110613f4157613f40614e71565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613fef57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613ffe575060008160ff16115b156141255760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff1688604001516140709190614f25565b905060006127108960c0015161ffff168361408b9190614f25565b61409591906151db565b905080866140a39190614ecf565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f82846140d1919061520c565b86866040518463ffffffff1660e01b81526004016140f0929190615240565b6000604051808303818588803b15801561410957600080fd5b505af115801561411d573d6000803e3d6000fd5b505050505050505b8260010192505050613f24565b5080600560008282546141459190614ecf565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b81805490508110156142e65760008282815481106141db576141da614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff1611156142d9578060ff16886142739190614ecf565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142d8578060ff16876142d59190614ecf565b96505b5b82600101925050506141ba565b50505050915091565b600060068261ffff168154811061430957614308614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff1610156146a4576000828260ff16815481106144cb576144ca614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614697576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161460c9190614f25565b60405161461890615099565b60006040518083038185875af1925050503d8060008114614655576040519150601f19603f3d011682016040523d82523d6000602084013e61465a565b606091505b5050905080614695576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b82600101925050506144a4565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b61478f81614778565b811461479a57600080fd5b50565b6000813590506147ac81614786565b92915050565b6000819050919050565b6147c5816147b2565b81146147d057600080fd5b50565b6000813590506147e2816147bc565b92915050565b6000806000606084860312156148015761480061476e565b5b600061480f8682870161479d565b9350506020614820868287016147d3565b9250506040614831868287016147d3565b9150509250925092565b600060ff82169050919050565b6148518161483b565b811461485c57600080fd5b50565b60008135905061486e81614848565b92915050565b6000806040838503121561488b5761488a61476e565b5b60006148998582860161479d565b92505060206148aa8582860161485f565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148df826148b4565b9050919050565b6148ef816148d4565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b600061491d826148d4565b9050919050565b61492d81614912565b811461493857600080fd5b50565b60008135905061494a81614924565b92915050565b600080600080600080600080610100898b0312156149715761497061476e565b5b600061497f8b828c016148fd565b98505060206149908b828c0161493b565b97505060406149a18b828c016147d3565b96505060606149b28b828c0161485f565b95505060806149c38b828c0161479d565b94505060a06149d48b828c0161479d565b93505060c06149e58b828c016147d3565b92505060e06149f68b828c016147d3565b9150509295985092959890939650565b600060208284031215614a1c57614a1b61476e565b5b6000614a2a8482850161479d565b91505092915050565b600060208284031215614a4957614a4861476e565b5b6000614a57848285016147d3565b91505092915050565b614a69816148d4565b82525050565b6000819050919050565b6000614a94614a8f614a8a846148b4565b614a6f565b6148b4565b9050919050565b6000614aa682614a79565b9050919050565b6000614ab882614a9b565b9050919050565b614ac881614aad565b82525050565b614ad7816147b2565b82525050565b614ae68161483b565b82525050565b60008115159050919050565b614b0181614aec565b82525050565b614b1081614778565b82525050565b600061014082019050614b2c600083018d614a60565b614b39602083018c614abf565b614b46604083018b614ace565b614b53606083018a614add565b614b606080830189614af8565b614b6d60a0830188614af8565b614b7a60c0830187614b07565b614b8760e0830186614b07565b614b95610100830185614ace565b614ba3610120830184614ace565b9b9a5050505050505050505050565b60008060408385031215614bc957614bc861476e565b5b6000614bd78582860161479d565b9250506020614be8858286016148fd565b9150509250929050565b6000602082019050614c076000830184614af8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614c3257614c31614c0d565b5b8235905067ffffffffffffffff811115614c4f57614c4e614c12565b5b602083019150836020820283011115614c6b57614c6a614c17565b5b9250929050565b600080600060408486031215614c8b57614c8a61476e565b5b6000614c998682870161479d565b935050602084013567ffffffffffffffff811115614cba57614cb9614773565b5b614cc686828701614c1c565b92509250509250925092565b60008060408385031215614ce957614ce861476e565b5b6000614cf78582860161479d565b9250506020614d08858286016147d3565b9150509250929050565b6000602082019050614d276000830184614a60565b92915050565b60008060408385031215614d4457614d4361476e565b5b6000614d528582860161479d565b9250506020614d638582860161479d565b9150509250929050565b6000602082019050614d826000830184614ace565b92915050565b600060c082019050614d9d6000830189614ace565b614daa6020830188614ace565b614db76040830187614ace565b614dc46060830186614ace565b614dd16080830185614ace565b614dde60a0830184614ace565b979650505050505050565b6000602082019050614dfe6000830184614add565b92915050565b60008060408385031215614e1b57614e1a61476e565b5b6000614e298582860161479d565b9250506020614e3a8582860161493b565b9150509250929050565b600060208284031215614e5a57614e5961476e565b5b6000614e68848285016148fd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614eda826147b2565b9150614ee5836147b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1a57614f19614ea0565b5b828201905092915050565b6000614f30826147b2565b9150614f3b836147b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f7457614f73614ea0565b5b828202905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc6602083614f7f565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000615032601f83614f7f565b915061503d82614ffc565b602082019050919050565b6000602082019050818103600083015261506181615025565b9050919050565b600081905092915050565b50565b6000615083600083615068565b915061508e82615073565b600082019050919050565b60006150a482615076565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006150e4601083614f7f565b91506150ef826150ae565b602082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615176602683614f7f565b91506151818261511a565b604082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151e6826147b2565b91506151f1836147b2565b925082615201576152006151ac565b5b828204905092915050565b6000615217826147b2565b9150615222836147b2565b92508282101561523557615234614ea0565b5b828203905092915050565b60006040820190506152556000830185614a60565b6152626020830184614add565b939250505056fea2646970667358221220586822246003ca4379c72e81414948dc93e91111470897a2a00cb23f4e2da70a64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806390911e371161010d578063d1a0e7a2116100a0578063dcfa832c1161006f578063dcfa832c14610681578063dfbf9f1d146106be578063f2fde38b146106e7578063f746923d14610710578063ffb9a1b514610739576101ee565b8063d1a0e7a2146105ae578063d4342d38146105d9578063d4c099c214610616578063d563e72514610658576101ee565b8063a7bfd041116100dc578063a7bfd0411461050a578063ae5220f914610533578063bbc2986c1461055c578063cb26d94214610585576101ee565b806390911e371461046657806399b64de11461048f5780639ac95dee146104b8578063a6d25102146104e1576101ee565b80633cdf3d23116101855780637767faed116101545780637767faed146103c057806383c56b0e146103e9578063852c6413146104125780638da5cb5b1461043b576101ee565b80633cdf3d231461032c5780634f573cb214610369578063531c509a14610380578063715018a6146103a9576101ee565b80632e16225d116101c15780632e16225d1461027d5780632e37eef6146102a65780633084a42f146102ec57806338e771ab14610315576101ee565b80630165f612146101f357806310291a591461021c57806310e11bb41461023857806320f9453e14610261575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906147e8565b610762565b005b61023660048036038101906102319190614874565b610919565b005b34801561024457600080fd5b5061025f600480360381019061025a9190614950565b610e44565b005b61027b60048036038101906102769190614874565b6110cf565b005b34801561028957600080fd5b506102a4600480360381019061029f9190614a06565b611587565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190614a33565b61173e565b6040516102e39a99989796959493929190614b16565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614bb2565b611825565b005b34801561032157600080fd5b5061032a611990565b005b34801561033857600080fd5b50610353600480360381019061034e9190614bb2565b611a8d565b6040516103609190614bf2565b60405180910390f35b34801561037557600080fd5b5061037e611abc565b005b34801561038c57600080fd5b506103a760048036038101906103a29190614c72565b611bf1565b005b3480156103b557600080fd5b506103be611dad565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190614874565b611e35565b005b3480156103f557600080fd5b50610410600480360381019061040b91906147e8565b611f7a565b005b34801561041e57600080fd5b5061043960048036038101906104349190614cd2565b612327565b005b34801561044757600080fd5b50610450612458565b60405161045d9190614d12565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190614a06565b612481565b005b34801561049b57600080fd5b506104b660048036038101906104b19190614d2d565b612639565b005b3480156104c457600080fd5b506104df60048036038101906104da9190614a06565b6126fd565b005b3480156104ed57600080fd5b5061050860048036038101906105039190614c72565b612a20565b005b34801561051657600080fd5b50610531600480360381019061052c9190614cd2565b612b77565b005b34801561053f57600080fd5b5061055a60048036038101906105559190614bb2565b612ca8565b005b34801561056857600080fd5b50610583600480360381019061057e9190614cd2565b612fb7565b005b34801561059157600080fd5b506105ac60048036038101906105a79190614a06565b6130e8565b005b3480156105ba57600080fd5b506105c3613247565b6040516105d09190614d6d565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190614cd2565b61324d565b60405161060d9190614d12565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190614a06565b61329b565b60405161064f96959493929190614d88565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190614a06565b61362f565b005b34801561068d57600080fd5b506106a860048036038101906106a39190614bb2565b613773565b6040516106b59190614de9565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190614e04565b6137a2565b005b3480156106f357600080fd5b5061070e60048036038101906107099190614e44565b61390d565b005b34801561071c57600080fd5b5061073760048036038101906107329190614d2d565b613a04565b005b34801561074557600080fd5b50610760600480360381019061075b9190614a06565b613b4b565b005b8261076b613d02565b73ffffffffffffffffffffffffffffffffffffffff16610789612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561082957506107b0613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106107de576107dd614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15610860576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008661ffff1661ffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156108fd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108b3575b50505050509050610912858286866000613d0a565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461097e576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061099857610997614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050806101000151421080610b3957506000816101200151118015610b38575080610120015142115b5b15610b70576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b7b84614157565b50905060008260e0015161ffff16118015610bab57508160e0015161ffff168360ff1682610ba99190614ecf565b115b15610be2576040517f8afc21f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816060015160ff168360ff161115610c26576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff161015610c64576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff168260400151610c779190614f25565b3414610caf576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614610d51576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008561ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460008661ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555050505050565b610e4c613d02565b73ffffffffffffffffffffffffffffffffffffffff16610e6a612458565b73ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790614fdc565b60405180910390fd5b60066040518061014001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018760ff1681526020016000151581526020016000151581526020018661ffff1681526020018561ffff16815260200184815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030160006101000a81548160ff021916908360ff16021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548161ffff021916908361ffff16021790555060e08201518160030160056101000a81548161ffff021916908361ffff1602179055506101008201518160040155610120820151816005015550505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611134576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061114e5761114d614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090508061010001514210806112ef575060008161012001511180156112ee575080610120015142115b5b15611326576040517f21094a9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015160ff168260ff16111561136a576040517f62a85d4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260ff1610156113a8576040517f8fe1565900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160ff1681604001516113bb9190614f25565b34146113f3576040517f55e97b0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008561ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1614611495576040517fb0ca2ff500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008461ffff1661ffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460008561ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b80611590613d02565b73ffffffffffffffffffffffffffffffffffffffff166115ae612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561164e57506115d5613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061160357611602614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611685576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561172257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116d8575b505050505090506117398382600084516001613d0a565b505050565b6006818154811061174e57600080fd5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060030160039054906101000a900461ffff16908060030160059054906101000a900461ffff1690806004015490806005015490508a565b8161182e613d02565b73ffffffffffffffffffffffffffffffffffffffff1661184c612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156118ec5750611873613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106118a1576118a0614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611923576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff168154811061193c5761193b614e71565b5b906000526020600020906006020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b611998613d02565b73ffffffffffffffffffffffffffffffffffffffff166119b6612458565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390614fdc565b60405180910390fd5b600260015403611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890615048565b60405180910390fd5b600260018190555060005b6006805490508160ff161015611a8357611a788160ff166142ef565b806001019050611a5c565b5060018081905550565b60036020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611ac4613d02565b73ffffffffffffffffffffffffffffffffffffffff16611ae2612458565b73ffffffffffffffffffffffffffffffffffffffff1614611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90614fdc565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600554604051611b6090615099565b60006040518083038185875af1925050503d8060008114611b9d576040519150601f19603f3d011682016040523d82523d6000602084013e611ba2565b606091505b5050905080611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd906150fa565b60405180910390fd5b600060058190555050565b82611bfa613d02565b73ffffffffffffffffffffffffffffffffffffffff16611c18612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015611cb85750611c3f613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611c6d57611c6c614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611cef576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008661ffff1661ffff168152602001908152602001600020905060005b84849050811015611da5576001826000878785818110611d3457611d33614e71565b5b9050602002016020810190611d499190614e44565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611d11565b505050505050565b611db5613d02565b73ffffffffffffffffffffffffffffffffffffffff16611dd3612458565b73ffffffffffffffffffffffffffffffffffffffff1614611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090614fdc565b60405180910390fd5b611e3360006146aa565b565b81611e3e613d02565b73ffffffffffffffffffffffffffffffffffffffff16611e5c612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015611efc5750611e83613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110611eb157611eb0614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f33576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110611f4c57611f4b614e71565b5b906000526020600020906006020160030160006101000a81548160ff021916908360ff160217905550505050565b611f82613d02565b73ffffffffffffffffffffffffffffffffffffffff16611fa0612458565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614fdc565b60405180910390fd5b600060068461ffff16815481106120105761200f614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff16815260200160048201548152602001600582015481525050905060008390505b82811015612320576000600260008761ffff1661ffff16815260200190815260200160002082815481106121c6576121c5614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008861ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008273ffffffffffffffffffffffffffffffffffffffff168260ff1686604001516122899190614f25565b60405161229590615099565b60006040518083038185875af1925050503d80600081146122d2576040519150601f19603f3d011682016040523d82523d6000602084013e6122d7565b606091505b5050905080612312576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600101935050505061218f565b5050505050565b81612330613d02565b73ffffffffffffffffffffffffffffffffffffffff1661234e612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156123ee5750612375613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106123a3576123a2614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612425576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff168154811061243e5761243d614e71565b5b906000526020600020906006020160040181905550505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8061248a613d02565b73ffffffffffffffffffffffffffffffffffffffff166124a8612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561254857506124cf613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106124fd576124fc614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561257f576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000151560068361ffff168154811061259b5761259a614e71565b5b906000526020600020906006020160030160019054906101000a900460ff161515036125f3576040517f35b08eb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160068361ffff168154811061260d5761260c614e71565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b612641613d02565b73ffffffffffffffffffffffffffffffffffffffff1661265f612458565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac90614fdc565b60405180910390fd5b8060068361ffff16815481106126ce576126cd614e71565b5b906000526020600020906006020160030160036101000a81548161ffff021916908361ffff1602179055505050565b600260015403612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273990615048565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146127af576040517f7df1f81700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001151560068261ffff16815481106127cb576127ca614e71565b5b906000526020600020906006020160030160029054906101000a900460ff16151503612823576040517f4d93e11100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008361ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16905060018110156128cb576040517fcacb095400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008461ffff1661ffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060003373ffffffffffffffffffffffffffffffffffffffff168260068561ffff168154811061296f5761296e614e71565b5b90600052602060002090600602016002015461298b9190614f25565b60405161299790615099565b60006040518083038185875af1925050503d80600081146129d4576040519150601f19603f3d011682016040523d82523d6000602084013e6129d9565b606091505b5050905080612a14576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001808190555050565b82612a29613d02565b73ffffffffffffffffffffffffffffffffffffffff16612a47612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612ae75750612a6e613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612a9c57612a9b614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612b1e576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b7184848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506000868690506000613d0a565b50505050565b81612b80613d02565b73ffffffffffffffffffffffffffffffffffffffff16612b9e612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612c3e5750612bc5613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612bf357612bf2614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612c75576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110612c8e57612c8d614e71565b5b906000526020600020906006020160050181905550505050565b81612cb1613d02565b73ffffffffffffffffffffffffffffffffffffffff16612ccf612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015612d6f5750612cf6613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110612d2457612d23614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612da6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260015403612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de290615048565b60405180910390fd5b6002600181905550600060068461ffff1681548110612e0d57612e0c614e71565b5b906000526020600020906006020160020154600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff16612e929190614f25565b90506000600460008661ffff1661ffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008373ffffffffffffffffffffffffffffffffffffffff1682604051612f2c90615099565b60006040518083038185875af1925050503d8060008114612f69576040519150601f19603f3d011682016040523d82523d6000602084013e612f6e565b606091505b5050905080612fa9576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505060018081905550505050565b81612fc0613d02565b73ffffffffffffffffffffffffffffffffffffffff16612fde612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561307e5750613005613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061303357613032614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156130b5576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff16815481106130ce576130cd614e71565b5b906000526020600020906006020160020181905550505050565b806130f1613d02565b73ffffffffffffffffffffffffffffffffffffffff1661310f612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156131af5750613136613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061316457613163614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156131e6576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026001540361322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322290615048565b60405180910390fd5b600260018190555061323c826142ef565b600180819055505050565b60055481565b6002602052816000526040600020818154811061326957600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600060068861ffff16815481106132be576132bd614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600460008a61ffff1661ffff16815260200190815260200160002090506000600360008b61ffff1661ffff16815260200190815260200160002090506000600260008c61ffff1661ffff168152602001908152602001600020905060005b81805490508110156136215760008282815481106134b8576134b7614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff1611156136145760018d61354e9190614ecf565b9c508060ff168c61355f9190614ecf565b9b5086604001518160ff166135749190614f25565b8b61357f9190614ecf565b9a508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136135760018a6135df9190614ecf565b99508060ff16896135f09190614ecf565b985086604001518160ff166136059190614f25565b886136109190614ecf565b97505b5b8260010192505050613497565b505050505091939550919395565b80613638613d02565b73ffffffffffffffffffffffffffffffffffffffff16613656612458565b73ffffffffffffffffffffffffffffffffffffffff16141580156136f6575061367d613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff16815481106136ab576136aa614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561372d576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068361ffff168154811061374757613746614e71565b5b906000526020600020906006020160030160026101000a81548160ff0219169083151502179055505050565b60046020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b816137ab613d02565b73ffffffffffffffffffffffffffffffffffffffff166137c9612458565b73ffffffffffffffffffffffffffffffffffffffff161415801561386957506137f0613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff168154811061381e5761381d614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156138a0576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff16815481106138b9576138b8614e71565b5b906000526020600020906006020160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b613915613d02565b73ffffffffffffffffffffffffffffffffffffffff16613933612458565b73ffffffffffffffffffffffffffffffffffffffff1614613989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398090614fdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef9061518c565b60405180910390fd5b613a01816146aa565b50565b81613a0d613d02565b73ffffffffffffffffffffffffffffffffffffffff16613a2b612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015613acb5750613a52613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613a8057613a7f614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613b02576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160068461ffff1681548110613b1b57613b1a614e71565b5b906000526020600020906006020160030160056101000a81548161ffff021916908361ffff160217905550505050565b80613b54613d02565b73ffffffffffffffffffffffffffffffffffffffff16613b72612458565b73ffffffffffffffffffffffffffffffffffffffff1614158015613c125750613b99613d02565b73ffffffffffffffffffffffffffffffffffffffff1660068261ffff1681548110613bc757613bc6614e71565b5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613c49576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260008461ffff1661ffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613ce657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311613c9c575b50505050509050613cfd8382600084516000613d0a565b505050565b600033905090565b600060068661ffff1681548110613d2457613d23614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff168152602001600482015481526020016005820154815250509050600015158160800151151503613edf576040517f1a0a9aaa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008861ffff1661ffff16815260200190815260200160002090506000600360008961ffff1661ffff16815260200190815260200160002090506000808790505b86811015614132576000898281518110613f4157613f40614e71565b5b6020026020010151905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508780613fef57508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613ffe575060008160ff16115b156141255760008660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008160ff1688604001516140709190614f25565b905060006127108960c0015161ffff168361408b9190614f25565b61409591906151db565b905080866140a39190614ecf565b9550886020015173ffffffffffffffffffffffffffffffffffffffff1663fb0f4a7f82846140d1919061520c565b86866040518463ffffffff1660e01b81526004016140f0929190615240565b6000604051808303818588803b15801561410957600080fd5b505af115801561411d573d6000803e3d6000fd5b505050505050505b8260010192505050613f24565b5080600560008282546141459190614ecf565b92505081905550505050505050505050565b6000806000600460008561ffff1661ffff16815260200190815260200160002090506000600360008661ffff1661ffff16815260200190815260200160002090506000600260008761ffff1661ffff168152602001908152602001600020905060005b81805490508110156142e65760008282815481106141db576141da614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff1611156142d9578060ff16886142739190614ecf565b97508460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142d8578060ff16876142d59190614ecf565b96505b5b82600101925050506141ba565b50505050915091565b600060068261ffff168154811061430957614308614e71565b5b9060005260206000209060060201604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820160009054906101000a900460ff1660ff1660ff1681526020016003820160019054906101000a900460ff161515151581526020016003820160029054906101000a900460ff161515151581526020016003820160039054906101000a900461ffff1661ffff1661ffff1681526020016003820160059054906101000a900461ffff1661ffff1661ffff1681526020016004820154815260200160058201548152505090506000600260008461ffff1661ffff168152602001908152602001600020905060005b81805490508160ff1610156146a4576000828260ff16815481106144cb576144ca614e71565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460008761ffff1661ffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008160ff161115614697576000600460008861ffff1661ffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060008273ffffffffffffffffffffffffffffffffffffffff168260ff16876040015161460c9190614f25565b60405161461890615099565b60006040518083038185875af1925050503d8060008114614655576040519150601f19603f3d011682016040523d82523d6000602084013e61465a565b606091505b5050905080614695576040517fd8c8dd5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b82600101925050506144a4565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b600061ffff82169050919050565b61478f81614778565b811461479a57600080fd5b50565b6000813590506147ac81614786565b92915050565b6000819050919050565b6147c5816147b2565b81146147d057600080fd5b50565b6000813590506147e2816147bc565b92915050565b6000806000606084860312156148015761480061476e565b5b600061480f8682870161479d565b9350506020614820868287016147d3565b9250506040614831868287016147d3565b9150509250925092565b600060ff82169050919050565b6148518161483b565b811461485c57600080fd5b50565b60008135905061486e81614848565b92915050565b6000806040838503121561488b5761488a61476e565b5b60006148998582860161479d565b92505060206148aa8582860161485f565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148df826148b4565b9050919050565b6148ef816148d4565b81146148fa57600080fd5b50565b60008135905061490c816148e6565b92915050565b600061491d826148d4565b9050919050565b61492d81614912565b811461493857600080fd5b50565b60008135905061494a81614924565b92915050565b600080600080600080600080610100898b0312156149715761497061476e565b5b600061497f8b828c016148fd565b98505060206149908b828c0161493b565b97505060406149a18b828c016147d3565b96505060606149b28b828c0161485f565b95505060806149c38b828c0161479d565b94505060a06149d48b828c0161479d565b93505060c06149e58b828c016147d3565b92505060e06149f68b828c016147d3565b9150509295985092959890939650565b600060208284031215614a1c57614a1b61476e565b5b6000614a2a8482850161479d565b91505092915050565b600060208284031215614a4957614a4861476e565b5b6000614a57848285016147d3565b91505092915050565b614a69816148d4565b82525050565b6000819050919050565b6000614a94614a8f614a8a846148b4565b614a6f565b6148b4565b9050919050565b6000614aa682614a79565b9050919050565b6000614ab882614a9b565b9050919050565b614ac881614aad565b82525050565b614ad7816147b2565b82525050565b614ae68161483b565b82525050565b60008115159050919050565b614b0181614aec565b82525050565b614b1081614778565b82525050565b600061014082019050614b2c600083018d614a60565b614b39602083018c614abf565b614b46604083018b614ace565b614b53606083018a614add565b614b606080830189614af8565b614b6d60a0830188614af8565b614b7a60c0830187614b07565b614b8760e0830186614b07565b614b95610100830185614ace565b614ba3610120830184614ace565b9b9a5050505050505050505050565b60008060408385031215614bc957614bc861476e565b5b6000614bd78582860161479d565b9250506020614be8858286016148fd565b9150509250929050565b6000602082019050614c076000830184614af8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614c3257614c31614c0d565b5b8235905067ffffffffffffffff811115614c4f57614c4e614c12565b5b602083019150836020820283011115614c6b57614c6a614c17565b5b9250929050565b600080600060408486031215614c8b57614c8a61476e565b5b6000614c998682870161479d565b935050602084013567ffffffffffffffff811115614cba57614cb9614773565b5b614cc686828701614c1c565b92509250509250925092565b60008060408385031215614ce957614ce861476e565b5b6000614cf78582860161479d565b9250506020614d08858286016147d3565b9150509250929050565b6000602082019050614d276000830184614a60565b92915050565b60008060408385031215614d4457614d4361476e565b5b6000614d528582860161479d565b9250506020614d638582860161479d565b9150509250929050565b6000602082019050614d826000830184614ace565b92915050565b600060c082019050614d9d6000830189614ace565b614daa6020830188614ace565b614db76040830187614ace565b614dc46060830186614ace565b614dd16080830185614ace565b614dde60a0830184614ace565b979650505050505050565b6000602082019050614dfe6000830184614add565b92915050565b60008060408385031215614e1b57614e1a61476e565b5b6000614e298582860161479d565b9250506020614e3a8582860161493b565b9150509250929050565b600060208284031215614e5a57614e5961476e565b5b6000614e68848285016148fd565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614eda826147b2565b9150614ee5836147b2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f1a57614f19614ea0565b5b828201905092915050565b6000614f30826147b2565b9150614f3b836147b2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f7457614f73614ea0565b5b828202905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fc6602083614f7f565b9150614fd182614f90565b602082019050919050565b60006020820190508181036000830152614ff581614fb9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000615032601f83614f7f565b915061503d82614ffc565b602082019050919050565b6000602082019050818103600083015261506181615025565b9050919050565b600081905092915050565b50565b6000615083600083615068565b915061508e82615073565b600082019050919050565b60006150a482615076565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006150e4601083614f7f565b91506150ef826150ae565b602082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615176602683614f7f565b91506151818261511a565b604082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151e6826147b2565b91506151f1836147b2565b925082615201576152006151ac565b5b828204905092915050565b6000615217826147b2565b9150615222836147b2565b92508282101561523557615234614ea0565b5b828203905092915050565b60006040820190506152556000830185614a60565b6152626020830184614add565b939250505056fea2646970667358221220586822246003ca4379c72e81414948dc93e91111470897a2a00cb23f4e2da70a64736f6c634300080e0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,125.37 | 0.08 | $170.03 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.