BscScan - Sponsored slots available. Book your slot here!
Source Code
Latest 25 from a total of 16,711 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Relay | 92900517 | 10 days ago | IN | 0 BNB | 0.00027137 | ||||
| Create Escrow | 92899892 | 10 days ago | IN | 0.03210819 BNB | 0.000276 | ||||
| Relay | 92755452 | 10 days ago | IN | 0 BNB | 0.00027131 | ||||
| Create Escrow | 92752353 | 10 days ago | IN | 0.01318792 BNB | 0.00027594 | ||||
| Relay | 92730074 | 11 days ago | IN | 0 BNB | 0.00027143 | ||||
| Create Escrow | 92726208 | 11 days ago | IN | 0.25539334 BNB | 0.00027606 | ||||
| Resolve Dispute | 92722489 | 11 days ago | IN | 0 BNB | 0.00026827 | ||||
| Create Escrow | 92716532 | 11 days ago | IN | 0.00960647 BNB | 0.00027594 | ||||
| Relay | 92683893 | 11 days ago | IN | 0 BNB | 0.00027137 | ||||
| Create Escrow | 92682620 | 11 days ago | IN | 0.07594266 BNB | 0.00027606 | ||||
| Relay | 92663935 | 11 days ago | IN | 0 BNB | 0.00027131 | ||||
| Create Escrow | 92661910 | 11 days ago | IN | 0.182 BNB | 0.00027594 | ||||
| Relay | 92573966 | 11 days ago | IN | 0 BNB | 0.00039637 | ||||
| Create Escrow | 92572289 | 11 days ago | IN | 0.21026181 BNB | 0.000276 | ||||
| Relay | 92558720 | 11 days ago | IN | 0 BNB | 0.00027143 | ||||
| Create Escrow | 92557511 | 11 days ago | IN | 0.1751718 BNB | 0.00027606 | ||||
| Relay | 92549157 | 11 days ago | IN | 0 BNB | 0.00027125 | ||||
| Create Escrow | 92545834 | 11 days ago | IN | 0.05271662 BNB | 0.00027594 | ||||
| Relay | 92532577 | 12 days ago | IN | 0 BNB | 0.00027137 | ||||
| Create Escrow | 92532106 | 12 days ago | IN | 0.03254279 BNB | 0.00027594 | ||||
| Relay | 92489388 | 12 days ago | IN | 0 BNB | 0.00027137 | ||||
| Create Escrow | 92488791 | 12 days ago | IN | 0.03941741 BNB | 0.000276 | ||||
| Relay | 92484722 | 12 days ago | IN | 0 BNB | 0.00027137 | ||||
| Create Escrow | 92484198 | 12 days ago | IN | 0.01626487 BNB | 0.000276 | ||||
| Relay | 92467924 | 12 days ago | IN | 0 BNB | 0.00027131 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 92900517 | 10 days ago | 0.03128711 BNB | ||||
| 92755452 | 10 days ago | 0.01268792 BNB | ||||
| 92730074 | 11 days ago | 0.25233941 BNB | ||||
| 92722489 | 11 days ago | 0.00910647 BNB | ||||
| 92683893 | 11 days ago | 0.07468323 BNB | ||||
| 92663935 | 11 days ago | 0.17968 BNB | ||||
| 92573966 | 11 days ago | 0.2076592 BNB | ||||
| 92558720 | 11 days ago | 0.17292008 BNB | ||||
| 92549157 | 11 days ago | 0.05221662 BNB | ||||
| 92532577 | 12 days ago | 0.03171736 BNB | ||||
| 92489388 | 12 days ago | 0.03852324 BNB | ||||
| 92484722 | 12 days ago | 0.01560222 BNB | ||||
| 92467924 | 12 days ago | 0.0666423 BNB | ||||
| 92270731 | 13 days ago | 0.01593132 BNB | ||||
| 92257793 | 13 days ago | 0.18458604 BNB | ||||
| 92226578 | 13 days ago | 0.04459159 BNB | ||||
| 92148311 | 14 days ago | 0.17956828 BNB | ||||
| 92108485 | 14 days ago | 0.69943 BNB | ||||
| 92100455 | 14 days ago | 0.07002322 BNB | ||||
| 91965339 | 15 days ago | 0.01559959 BNB | ||||
| 91920064 | 15 days ago | 0.99150272 BNB | ||||
| 91897365 | 15 days ago | 0.17537403 BNB | ||||
| 91887468 | 15 days ago | 0.01571673 BNB | ||||
| 91877712 | 15 days ago | 0.08938421 BNB | ||||
| 91810995 | 15 days ago | 0.02402386 BNB |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LocalCoinSwapBNBEscrow
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./libs/SafeERC20.sol";
import "./libs/IERC20.sol";
contract LocalCoinSwapBNBEscrow {
using SafeERC20 for IERC20;
address public arbitrator;
address public owner;
address public relayer;
struct Escrow {
bool exists;
uint128 relayerGasSpent;
}
mapping(bytes32 => Escrow) public escrows;
uint256 public collectedFees;
/***********************
+ Instructions +
***********************/
uint8 private constant RELEASE_ESCROW = 0x01;
uint8 private constant BUYER_CANCELS = 0x02;
uint8 private constant RESOLVE_DISPUTE = 0x03;
/***********************
+ Events +
***********************/
event Created(bytes32 indexed tradeHash);
event Cancelled(bytes32 indexed tradeHash, uint128 relayerGasSpent);
event Released(bytes32 indexed tradeHash, uint128 relayerGasSpent);
event DisputeResolved(bytes32 indexed tradeHash, uint128 relayerGasSpent);
constructor(address initialAddress) payable {
owner = initialAddress;
arbitrator = initialAddress;
relayer = initialAddress;
}
/***********************
+ Open Escrow +
***********************/
function createEscrow(
bytes32 _tradeHash,
uint256 _value,
uint8 _v,
bytes32 _r,
bytes32 _s
) external payable {
require(!escrows[_tradeHash].exists, "Trade already exists");
// To account for fees spent by relayer when releasing
require(_value > 500000000000000, "Escrow value too small");
// Check transaction value against signed _value and make sure is not 0
require(msg.value == _value && msg.value > 0, "Incorrect ether sent");
bytes32 _invitationHash = keccak256(abi.encodePacked(_tradeHash));
require(
recoverAddress(_invitationHash, _v, _r, _s) == relayer,
"Signature not from relayer"
);
escrows[_tradeHash] = Escrow(true, 0);
emit Created(_tradeHash);
}
/***********************
+ Complete Escrow +
***********************/
function release(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) external returns (bool) {
require(msg.sender == _seller, "Must be seller");
return doRelease(_tradeID, _seller, _buyer, _value, _fee);
}
uint128 constant GAS_DO_RELEASE = 100000;
function doRelease(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(
_tradeID,
_seller,
_buyer,
_value,
_fee
);
if (!_escrow.exists) return false;
uint128 _txFees = _escrow.relayerGasSpent +
(msg.sender == relayer ? GAS_DO_RELEASE * uint128(tx.gasprice) : 0);
delete escrows[_tradeHash];
transferMinusFees(_buyer, _value, _txFees, _fee);
emit Released(_tradeHash, _txFees);
return true;
}
uint128 constant GAS_RESOLVE_DISPUTE = 100000;
function resolveDispute(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint8 _buyerPercent
) external onlyArbitrator {
address _signature = recoverAddress(
keccak256(abi.encodePacked(_tradeID, RESOLVE_DISPUTE)),
_v,
_r,
_s
);
require(
_signature == _buyer || _signature == _seller,
"Must be buyer or seller"
);
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(
_tradeID,
_seller,
_buyer,
_value,
_fee
);
require(_escrow.exists, "Escrow does not exist");
require(_buyerPercent <= 100, "_buyerPercent invalid");
uint128 _disputeTxFees = (GAS_RESOLVE_DISPUTE * uint128(tx.gasprice));
uint128 _txFees = _escrow.relayerGasSpent + _disputeTxFees;
require(_value - _txFees <= _value, "Overflow error"); // Prevent underflow
collectedFees += _txFees;
_escrow.relayerGasSpent += _disputeTxFees;
delete escrows[_tradeHash];
emit DisputeResolved(_tradeHash, _txFees);
if (_buyerPercent > 0) {
// If dispute goes to buyer take the fee
uint256 _escrowFees = ((_value * _fee) / 10000);
uint256 buyerAmount = (_value * _buyerPercent) / 100 - _escrowFees;
require(buyerAmount > 0, "Buyer amount negative"); // Prevent underflow
collectedFees += _escrowFees;
_buyer.transfer(buyerAmount);
}
if (_buyerPercent < 100) {
_seller.transfer(((_value - _txFees) * (100 - _buyerPercent)) / 100);
}
}
function buyerCancel(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) external returns (bool) {
require(msg.sender == _buyer, "Must be buyer");
return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee);
}
uint128 constant GAS_BUYER_CANCELS = 100000;
function increaseGasSpent(bytes32 _tradeHash, uint128 _gas) private {
escrows[_tradeHash].relayerGasSpent += _gas * uint128(tx.gasprice);
}
function doBuyerCancel(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(
_tradeID,
_seller,
_buyer,
_value,
_fee
);
require(_escrow.exists, "Escrow does not exist");
if (!_escrow.exists) {
return false;
}
uint128 _txFees = _escrow.relayerGasSpent +
(msg.sender == relayer ? GAS_BUYER_CANCELS * uint128(tx.gasprice) : 0);
delete escrows[_tradeHash];
emit Cancelled(_tradeHash, _txFees);
transferMinusFees(_seller, _value, _txFees, 0);
return true;
}
/***********************
+ Relays +
***********************/
function batchRelay(
bytes16[] memory _tradeID,
address payable[] memory _seller,
address payable[] memory _buyer,
uint256[] memory _value,
uint16[] memory _fee,
uint128[] memory _maximumGasPrice,
uint8[] memory _v,
bytes32[] memory _r,
bytes32[] memory _s,
uint8[] memory _instructionByte
) public returns (bool[] memory) {
bool[] memory _results = new bool[](_tradeID.length);
for (uint8 i = 0; i < _tradeID.length; i++) {
_results[i] = relay(
_tradeID[i],
_seller[i],
_buyer[i],
_value[i],
_fee[i],
_maximumGasPrice[i],
_v[i],
_r[i],
_s[i],
_instructionByte[i]
);
}
return _results;
}
function relay(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint128 _maximumGasPrice,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint8 _instructionByte
) public returns (bool) {
address _relayedSender = getRelayedSender(
_tradeID,
_instructionByte,
_maximumGasPrice,
_v,
_r,
_s
);
if (_relayedSender == _buyer) {
if (_instructionByte == BUYER_CANCELS) {
return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee);
}
} else if (_relayedSender == _seller) {
if (_instructionByte == RELEASE_ESCROW) {
return doRelease(_tradeID, _seller, _buyer, _value, _fee);
}
} else {
require(msg.sender == _seller, "Unrecognised party");
return false;
}
return false;
}
/// @notice Transfer the value of an escrow, minus the fees, minus the gas costs incurred by relay
function transferMinusFees(
address payable _to,
uint256 _value,
uint128 _totalRelayerGasSpent,
uint16 _fee
) private {
uint256 _totalFees = ((_value * _fee) / 10000) + _totalRelayerGasSpent;
require(_value - _totalFees > 0, "Negative transfer value");
// Add fees to the pot for localcoinswap to withdraw
collectedFees += _totalFees;
_to.transfer(_value - _totalFees);
}
function getRelayedSender(
bytes16 _tradeID,
uint8 _instructionByte,
uint128 _maximumGasPrice,
uint8 _v,
bytes32 _r,
bytes32 _s
) private pure returns (address) {
bytes32 _hash = keccak256(
abi.encodePacked(_tradeID, _instructionByte, _maximumGasPrice)
);
return recoverAddress(_hash, _v, _r, _s);
}
function getEscrowAndHash(
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee
) private view returns (Escrow storage, bytes32) {
bytes32 _tradeHash = keccak256(
abi.encodePacked(_tradeID, _seller, _buyer, _value, _fee)
);
return (escrows[_tradeHash], _tradeHash);
}
function recoverAddress(
bytes32 _h,
uint8 _v,
bytes32 _r,
bytes32 _s
) private pure returns (address) {
bytes memory _prefix = "\x19Ethereum Signed Message:\n32";
bytes32 _prefixedHash = keccak256(abi.encodePacked(_prefix, _h));
return ecrecover(_prefixedHash, _v, _r, _s);
}
/// @notice Withdraw fees collected by the contract. Only the owner can call this.
/// @param _to Address to withdraw fees in to
/// @param _amount Amount to withdraw
function withdrawFees(address payable _to, uint256 _amount)
external
onlyOwner
{
// This check also prevents underflow
require(_amount <= collectedFees, "Amount is higher than amount available");
collectedFees -= _amount;
_to.transfer(_amount);
}
/// @notice Allows the owner to withdraw stuck ERC20 tokens.
function transferToken(
IERC20 TokenContract,
address _transferTo,
uint256 _value
) external onlyOwner {
TokenContract.transfer(_transferTo, _value);
}
/// @notice Allows the owner to withdraw stuck ERC20 tokens.
function transferTokenFrom(
IERC20 TokenContract,
address _transferTo,
address _transferFrom,
uint256 _value
) external onlyOwner {
TokenContract.transferFrom(_transferTo, _transferFrom, _value);
}
/// @notice Allows the owner to withdraw stuck ERC20 tokens.
function approveToken(
IERC20 TokenContract,
address _spender,
uint256 _value
) external onlyOwner {
TokenContract.approve(_spender, _value);
}
/***********************
+ Staff and Management +
***********************/
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can do this");
_;
}
modifier onlyArbitrator() {
require(msg.sender == arbitrator, "Only the arbitrator can do this");
_;
}
function setArbitrator(address _newArbitrator) external onlyOwner {
arbitrator = _newArbitrator;
}
function setOwner(address _newOwner) external onlyOwner {
owner = _newOwner;
}
function setRelayer(address _newRelayer) external onlyOwner {
relayer = _newRelayer;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transfer.selector, to, value)
);
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, value)
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, newAllowance)
);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(
oldAllowance >= value,
"SafeERC20: decreased allowance below zero"
);
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, newAllowance)
);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"SafeERC20: low-level call failed"
);
if (returndata.length > 0) {
// Return data is optional
require(
abi.decode(returndata, (bool)),
"SafeERC20: ERC20 operation did not succeed"
);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{ value: amount }("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data)
internal
view
returns (bytes memory)
{
return
functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tradeHash","type":"bytes32"},{"indexed":false,"internalType":"uint128","name":"relayerGasSpent","type":"uint128"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tradeHash","type":"bytes32"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tradeHash","type":"bytes32"},{"indexed":false,"internalType":"uint128","name":"relayerGasSpent","type":"uint128"}],"name":"DisputeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"tradeHash","type":"bytes32"},{"indexed":false,"internalType":"uint128","name":"relayerGasSpent","type":"uint128"}],"name":"Released","type":"event"},{"inputs":[{"internalType":"contract IERC20","name":"TokenContract","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arbitrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16[]","name":"_tradeID","type":"bytes16[]"},{"internalType":"address payable[]","name":"_seller","type":"address[]"},{"internalType":"address payable[]","name":"_buyer","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"uint16[]","name":"_fee","type":"uint16[]"},{"internalType":"uint128[]","name":"_maximumGasPrice","type":"uint128[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"},{"internalType":"uint8[]","name":"_instructionByte","type":"uint8[]"}],"name":"batchRelay","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"buyerCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_tradeHash","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"createEscrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"escrows","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint128","name":"relayerGasSpent","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint128","name":"_maximumGasPrice","type":"uint128"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_instructionByte","type":"uint8"}],"name":"relay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"release","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_buyerPercent","type":"uint8"}],"name":"resolveDispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newArbitrator","type":"address"}],"name":"setArbitrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRelayer","type":"address"}],"name":"setRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"TokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"TokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"address","name":"_transferFrom","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferTokenFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260405162003e8f38038062003e8f833981810160405281019062000029919062000109565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000183565b600081519050620001038162000169565b92915050565b6000602082840312156200011c57600080fd5b60006200012c84828501620000f2565b91505092915050565b6000620001428262000149565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001748162000135565b81146200018057600080fd5b50565b613cfc80620001936000396000f3fe6080604052600436106101095760003560e01c80638da5cb5b11610095578063b0eefabe11610064578063b0eefabe1461036f578063da3e339714610398578063e5994905146103c1578063e9600f12146103ea578063f5537ede1461042757610109565b80638da5cb5b146102b35780638eb4e0ad146102de5780639003adfe1461031b578063ad3b1b471461034657610109565b80632daaeb73116100dc5780632daaeb73146101db5780635f78333b146102185780636548e9bc146102345780636cc6cde11461025d5780638406c0791461028857610109565b806313af40351461010e57806324943c7d146101375780632cc9636c146101605780632d83549c1461019d575b600080fd5b34801561011a57600080fd5b50610135600480360381019061013091906125d2565b610450565b005b34801561014357600080fd5b5061015e6004803603810190610159919061297d565b610524565b005b34801561016c57600080fd5b506101876004803603810190610182919061282b565b610ac6565b6040516101949190613314565b60405180910390f35b3480156101a957600080fd5b506101c460048036038101906101bf9190612a43565b610b4e565b6040516101d292919061332f565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906128a2565b610b9b565b60405161020f9190613314565b60405180910390f35b610232600480360381019061022d9190612a6c565b610cf5565b005b34801561024057600080fd5b5061025b600480360381019061025691906125d2565b610f8b565b005b34801561026957600080fd5b5061027261105f565b60405161027f9190613277565b60405180910390f35b34801561029457600080fd5b5061029d611083565b6040516102aa9190613277565b60405180910390f35b3480156102bf57600080fd5b506102c86110a9565b6040516102d59190613277565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612637565b6110cf565b60405161031291906132f2565b60405180910390f35b34801561032757600080fd5b50610330611478565b60405161033d91906135b8565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906125fb565b61147e565b005b34801561037b57600080fd5b50610396600480360381019061039191906125d2565b6115b7565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612b46565b61168a565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612ae3565b6117ad565b005b3480156103f657600080fd5b50610411600480360381019061040c919061282b565b6118d3565b60405161041e9190613314565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612b46565b61195b565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d79061345d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a99061349d565b60405180910390fd5b60006105e98a60036040516020016105cb9291906131cb565b60405160208183030381529060405280519060200120868686611a7e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061065057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61068f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610686906134fd565b60405180910390fd5b6106976120b8565b60006106a68c8c8c8c8c611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075c906134bd565b60405180910390fd5b60648460ff1611156107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a3906133dd565b60405180910390fd5b60003a620186a06107bd9190613865565b905060008184602001516107d19190613798565b90508a816fffffffffffffffffffffffffffffffff168c6107f29190613909565b1115610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061353d565b60405180910390fd5b806fffffffffffffffffffffffffffffffff166004600082825461085791906137de565b9250508190555081846020018181516108709190613798565b9150906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505060036000848152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050827f437ec3256bbed400455e142c7ce305c6e705cad2d1ba5a4ebed6a6dd133d93fb8260405161091a919061359d565b60405180910390a260008660ff161115610a1f5760006127108b61ffff168d61094391906138af565b61094d9190613834565b905060008160648960ff168f61096391906138af565b61096d9190613834565b6109779190613909565b9050600081116109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b39061343d565b60405180910390fd5b81600460008282546109ce91906137de565b925050819055508d73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a1b573d6000803e3d6000fd5b5050505b60648660ff161015610ab6578c73ffffffffffffffffffffffffffffffffffffffff166108fc6064886064610a54919061393d565b60ff16846fffffffffffffffffffffffffffffffff168f610a759190613909565b610a7f91906138af565b610a899190613834565b9081150290604051600060405180830381858888f19350505050158015610ab4573d6000803e3d6000fd5b505b5050505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d9061357d565b60405180910390fd5b610b438686868686611b9a565b905095945050505050565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a90046fffffffffffffffffffffffffffffffff16905082565b600080610bac8c8489898989611da8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c0b57600260ff168360ff161415610c0657610bfe8c8c8c8c8c611b9a565b915050610ce7565b610ce1565b8a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6857600160ff168360ff161415610c6357610c5b8c8c8c8c8c611df1565b915050610ce7565b610ce0565b8a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906133fd565b60405180910390fd5b6000915050610ce7565b5b60009150505b9a9950505050505050505050565b6003600086815260200190815260200160002060000160009054906101000a900460ff1615610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061355d565b60405180910390fd5b6601c6bf526340008411610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d99906133bd565b60405180910390fd5b8334148015610db15750600034115b610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de79061339d565b60405180910390fd5b600085604051602001610e039190613234565b604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e6082868686611a7e565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061347d565b60405180910390fd5b604051806040016040528060011515815260200160006fffffffffffffffffffffffffffffffff168152506003600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050857f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a2505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110129061345d565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008b5167ffffffffffffffff811115611114577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111425781602001602082028036833780820191505090505b50905060005b8c518160ff161015611465576114048d8260ff1681518110611193577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8360ff16815181106111d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8460ff168151811061121b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8560ff168151811061125f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8660ff16815181106112a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8760ff16815181106112e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8860ff168151811061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8960ff168151811061136f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8a60ff16815181106113b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8b60ff16815181106113f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610b9b565b828260ff1681518110611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050808061145d90613a7d565b915050611148565b50809150509a9950505050505050505050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115059061345d565b60405180910390fd5b600454811115611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a9061351d565b60405180910390fd5b80600460008282546115659190613909565b925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115b2573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e9061345d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117119061345d565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b81526004016117559291906132c9565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612802565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118349061345d565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b815260040161187a93929190613292565b602060405180830381600087803b15801561189457600080fd5b505af11580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190612802565b5050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a9061341d565b60405180910390fd5b6119508686868686611df1565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e29061345d565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611a269291906132c9565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612802565b50505050565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008187604051602001611ace92919061324f565b60405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051611b099493929190613358565b6020604051602081039080840390855afa158015611b2b573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b60008060008787878787604051602001611b5f95949392919061316c565b604051602081830303815290604052805190602001209050600360008281526020019081526020016000208192509250509550959350505050565b6000611ba46120b8565b6000611bb38888888888611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69906134bd565b60405180910390fd5b8160000151611c8657600092505050611d9f565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ce4576000611cf4565b3a620186a0611cf39190613865565b5b8360200151611d039190613798565b905060036000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fbaf30435be856293935d56e0fdfba338d6c0a1f92aad037a978ce68f3dff691e82604051611d82919061359d565b60405180910390a2611d978887836000611fba565b600193505050505b95945050505050565b600080878787604051602001611dc0939291906131f7565b604051602081830303815290604052805190602001209050611de481868686611a7e565b9150509695505050505050565b6000611dfb6120b8565b6000611e0a8888888888611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611e9957600092505050611fb1565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ef7576000611f07565b3a620186a0611f069190613865565b5b8360200151611f169190613798565b905060036000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050611f7187878388611fba565b817f44306e460694e3f7e04300c4479a6818c0a825e0482fd6d4d0f16b0232e9620582604051611fa1919061359d565b60405180910390a2600193505050505b95945050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686611fe291906138af565b611fec9190613834565b611ff691906137de565b9050600081856120069190613909565b11612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906134dd565b60405180910390fd5b806004600082825461205891906137de565b925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc82866120859190613909565b9081150290604051600060405180830381858888f193505050501580156120b0573d6000803e3d6000fd5b505050505050565b604051806040016040528060001515815260200160006fffffffffffffffffffffffffffffffff1681525090565b60006120f96120f484613604565b6135d3565b9050808382526020820190508285602086028201111561211857600080fd5b60005b85811015612148578161212e88826123ef565b84526020840193506020830192505060018101905061211b565b5050509392505050565b600061216561216084613630565b6135d3565b9050808382526020820190508285602086028201111561218457600080fd5b60005b858110156121b4578161219a888261253f565b845260208401935060208301925050600181019050612187565b5050509392505050565b60006121d16121cc8461365c565b6135d3565b905080838252602082019050828560208602820111156121f057600080fd5b60005b8581101561222057816122068882612554565b8452602084019350602083019250506001810190506121f3565b5050509392505050565b600061223d61223884613688565b6135d3565b9050808382526020820190508285602086028201111561225c57600080fd5b60005b8581101561228c5781612272888261257e565b84526020840193506020830192505060018101905061225f565b5050509392505050565b60006122a96122a4846136b4565b6135d3565b905080838252602082019050828560208602820111156122c857600080fd5b60005b858110156122f857816122de8882612593565b8452602084019350602083019250506001810190506122cb565b5050509392505050565b6000612315612310846136e0565b6135d3565b9050808382526020820190508285602086028201111561233457600080fd5b60005b85811015612364578161234a88826125a8565b845260208401935060208301925050600181019050612337565b5050509392505050565b600061238161237c8461370c565b6135d3565b905080838252602082019050828560208602820111156123a057600080fd5b60005b858110156123d057816123b688826125bd565b8452602084019350602083019250506001810190506123a3565b5050509392505050565b6000813590506123e981613be0565b92915050565b6000813590506123fe81613bf7565b92915050565b600082601f83011261241557600080fd5b81356124258482602086016120e6565b91505092915050565b600082601f83011261243f57600080fd5b813561244f848260208601612152565b91505092915050565b600082601f83011261246957600080fd5b81356124798482602086016121be565b91505092915050565b600082601f83011261249357600080fd5b81356124a384826020860161222a565b91505092915050565b600082601f8301126124bd57600080fd5b81356124cd848260208601612296565b91505092915050565b600082601f8301126124e757600080fd5b81356124f7848260208601612302565b91505092915050565b600082601f83011261251157600080fd5b813561252184826020860161236e565b91505092915050565b60008151905061253981613c0e565b92915050565b60008135905061254e81613c25565b92915050565b60008135905061256381613c3c565b92915050565b60008135905061257881613c53565b92915050565b60008135905061258d81613c6a565b92915050565b6000813590506125a281613c81565b92915050565b6000813590506125b781613c98565b92915050565b6000813590506125cc81613caf565b92915050565b6000602082840312156125e457600080fd5b60006125f2848285016123da565b91505092915050565b6000806040838503121561260e57600080fd5b600061261c858286016123ef565b925050602061262d858286016125a8565b9150509250929050565b6000806000806000806000806000806101408b8d03121561265757600080fd5b60008b013567ffffffffffffffff81111561267157600080fd5b61267d8d828e0161242e565b9a505060208b013567ffffffffffffffff81111561269a57600080fd5b6126a68d828e01612404565b99505060408b013567ffffffffffffffff8111156126c357600080fd5b6126cf8d828e01612404565b98505060608b013567ffffffffffffffff8111156126ec57600080fd5b6126f88d828e016124d6565b97505060808b013567ffffffffffffffff81111561271557600080fd5b6127218d828e016124ac565b96505060a08b013567ffffffffffffffff81111561273e57600080fd5b61274a8d828e01612482565b95505060c08b013567ffffffffffffffff81111561276757600080fd5b6127738d828e01612500565b94505060e08b013567ffffffffffffffff81111561279057600080fd5b61279c8d828e01612458565b9350506101008b013567ffffffffffffffff8111156127ba57600080fd5b6127c68d828e01612458565b9250506101208b013567ffffffffffffffff8111156127e457600080fd5b6127f08d828e01612500565b9150509295989b9194979a5092959850565b60006020828403121561281457600080fd5b60006128228482850161252a565b91505092915050565b600080600080600060a0868803121561284357600080fd5b60006128518882890161253f565b9550506020612862888289016123ef565b9450506040612873888289016123ef565b9350506060612884888289016125a8565b925050608061289588828901612593565b9150509295509295909350565b6000806000806000806000806000806101408b8d0312156128c257600080fd5b60006128d08d828e0161253f565b9a505060206128e18d828e016123ef565b99505060406128f28d828e016123ef565b98505060606129038d828e016125a8565b97505060806129148d828e01612593565b96505060a06129258d828e0161257e565b95505060c06129368d828e016125bd565b94505060e06129478d828e01612554565b9350506101006129598d828e01612554565b92505061012061296b8d828e016125bd565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c03121561299c57600080fd5b60006129aa8c828d0161253f565b99505060206129bb8c828d016123ef565b98505060406129cc8c828d016123ef565b97505060606129dd8c828d016125a8565b96505060806129ee8c828d01612593565b95505060a06129ff8c828d016125bd565b94505060c0612a108c828d01612554565b93505060e0612a218c828d01612554565b925050610100612a338c828d016125bd565b9150509295985092959850929598565b600060208284031215612a5557600080fd5b6000612a6384828501612554565b91505092915050565b600080600080600060a08688031215612a8457600080fd5b6000612a9288828901612554565b9550506020612aa3888289016125a8565b9450506040612ab4888289016125bd565b9350506060612ac588828901612554565b9250506080612ad688828901612554565b9150509295509295909350565b60008060008060808587031215612af957600080fd5b6000612b0787828801612569565b9450506020612b18878288016123da565b9350506040612b29878288016123da565b9250506060612b3a878288016125a8565b91505092959194509250565b600080600060608486031215612b5b57600080fd5b6000612b6986828701612569565b9350506020612b7a868287016123da565b9250506040612b8b868287016125a8565b9150509250925092565b6000612ba18383612c31565b60208301905092915050565b612bb681613971565b82525050565b612bcd612bc882613971565b613aa7565b82525050565b6000612bde82613748565b612be8818561376b565b9350612bf383613738565b8060005b83811015612c24578151612c0b8882612b95565b9750612c168361375e565b925050600181019050612bf7565b5085935050505092915050565b612c3a81613995565b82525050565b612c4981613995565b82525050565b612c60612c5b826139a1565b613ab9565b82525050565b612c6f816139cd565b82525050565b612c86612c81826139cd565b613ac3565b82525050565b6000612c9782613753565b612ca1818561377c565b9350612cb1818560208601613a4a565b80840191505092915050565b6000612cca601483613787565b91507f496e636f72726563742065746865722073656e740000000000000000000000006000830152602082019050919050565b6000612d0a601683613787565b91507f457363726f772076616c756520746f6f20736d616c6c000000000000000000006000830152602082019050919050565b6000612d4a601583613787565b91507f5f627579657250657263656e7420696e76616c696400000000000000000000006000830152602082019050919050565b6000612d8a601283613787565b91507f556e7265636f676e6973656420706172747900000000000000000000000000006000830152602082019050919050565b6000612dca600e83613787565b91507f4d7573742062652073656c6c65720000000000000000000000000000000000006000830152602082019050919050565b6000612e0a601583613787565b91507f427579657220616d6f756e74206e6567617469766500000000000000000000006000830152602082019050919050565b6000612e4a601a83613787565b91507f4f6e6c7920746865206f776e65722063616e20646f20746869730000000000006000830152602082019050919050565b6000612e8a601a83613787565b91507f5369676e6174757265206e6f742066726f6d2072656c617965720000000000006000830152602082019050919050565b6000612eca601f83613787565b91507f4f6e6c79207468652061726269747261746f722063616e20646f2074686973006000830152602082019050919050565b6000612f0a601583613787565b91507f457363726f7720646f6573206e6f7420657869737400000000000000000000006000830152602082019050919050565b6000612f4a601783613787565b91507f4e65676174697665207472616e736665722076616c75650000000000000000006000830152602082019050919050565b6000612f8a601783613787565b91507f4d757374206265206275796572206f722073656c6c65720000000000000000006000830152602082019050919050565b6000612fca602683613787565b91507f416d6f756e7420697320686967686572207468616e20616d6f756e742061766160008301527f696c61626c6500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613030600e83613787565b91507f4f766572666c6f77206572726f720000000000000000000000000000000000006000830152602082019050919050565b6000613070601483613787565b91507f547261646520616c7265616479206578697374730000000000000000000000006000830152602082019050919050565b60006130b0600d83613787565b91507f4d757374206265206275796572000000000000000000000000000000000000006000830152602082019050919050565b6130ec816139e9565b82525050565b6131036130fe826139e9565b613acd565b82525050565b61311a61311582613a05565b613adf565b82525050565b61312981613a33565b82525050565b61314061313b82613a33565b613b03565b82525050565b61314f81613a3d565b82525050565b61316661316182613a3d565b613b0d565b82525050565b60006131788288612c4f565b6010820191506131888287612bbc565b6014820191506131988286612bbc565b6014820191506131a8828561312f565b6020820191506131b88284613109565b6002820191508190509695505050505050565b60006131d78285612c4f565b6010820191506131e78284613155565b6001820191508190509392505050565b60006132038286612c4f565b6010820191506132138285613155565b60018201915061322382846130f2565b601082019150819050949350505050565b60006132408284612c75565b60208201915081905092915050565b600061325b8285612c8c565b91506132678284612c75565b6020820191508190509392505050565b600060208201905061328c6000830184612bad565b92915050565b60006060820190506132a76000830186612bad565b6132b46020830185612bad565b6132c16040830184613120565b949350505050565b60006040820190506132de6000830185612bad565b6132eb6020830184613120565b9392505050565b6000602082019050818103600083015261330c8184612bd3565b905092915050565b60006020820190506133296000830184612c40565b92915050565b60006040820190506133446000830185612c40565b61335160208301846130e3565b9392505050565b600060808201905061336d6000830187612c66565b61337a6020830186613146565b6133876040830185612c66565b6133946060830184612c66565b95945050505050565b600060208201905081810360008301526133b681612cbd565b9050919050565b600060208201905081810360008301526133d681612cfd565b9050919050565b600060208201905081810360008301526133f681612d3d565b9050919050565b6000602082019050818103600083015261341681612d7d565b9050919050565b6000602082019050818103600083015261343681612dbd565b9050919050565b6000602082019050818103600083015261345681612dfd565b9050919050565b6000602082019050818103600083015261347681612e3d565b9050919050565b6000602082019050818103600083015261349681612e7d565b9050919050565b600060208201905081810360008301526134b681612ebd565b9050919050565b600060208201905081810360008301526134d681612efd565b9050919050565b600060208201905081810360008301526134f681612f3d565b9050919050565b6000602082019050818103600083015261351681612f7d565b9050919050565b6000602082019050818103600083015261353681612fbd565b9050919050565b6000602082019050818103600083015261355681613023565b9050919050565b6000602082019050818103600083015261357681613063565b9050919050565b60006020820190508181036000830152613596816130a3565b9050919050565b60006020820190506135b260008301846130e3565b92915050565b60006020820190506135cd6000830184613120565b92915050565b6000604051905081810181811067ffffffffffffffff821117156135fa576135f9613b7d565b5b8060405250919050565b600067ffffffffffffffff82111561361f5761361e613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561364b5761364a613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561367757613676613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136a3576136a2613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136cf576136ce613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136fb576136fa613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372757613726613b7d565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006137a3826139e9565b91506137ae836139e9565b9250826fffffffffffffffffffffffffffffffff038211156137d3576137d2613b1f565b5b828201905092915050565b60006137e982613a33565b91506137f483613a33565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382957613828613b1f565b5b828201905092915050565b600061383f82613a33565b915061384a83613a33565b92508261385a57613859613b4e565b5b828204905092915050565b6000613870826139e9565b915061387b836139e9565b9250816fffffffffffffffffffffffffffffffff04831182151516156138a4576138a3613b1f565b5b828202905092915050565b60006138ba82613a33565b91506138c583613a33565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138fe576138fd613b1f565b5b828202905092915050565b600061391482613a33565b915061391f83613a33565b92508282101561393257613931613b1f565b5b828203905092915050565b600061394882613a3d565b915061395383613a3d565b92508282101561396657613965613b1f565b5b828203905092915050565b600061397c82613a13565b9050919050565b600061398e82613a13565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b6000819050919050565b60006139e282613971565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613a68578082015181840152602081019050613a4d565b83811115613a77576000848401525b50505050565b6000613a8882613a3d565b915060ff821415613a9c57613a9b613b1f565b5b600182019050919050565b6000613ab282613af1565b9050919050565b6000819050919050565b6000819050919050565b6000613ad882613bac565b9050919050565b6000613aea82613bb9565b9050919050565b6000613afc82613bd3565b9050919050565b6000819050919050565b6000613b1882613bc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160801b9050919050565b60008160f01b9050919050565b60008160f81b9050919050565b60008160601b9050919050565b613be981613971565b8114613bf457600080fd5b50565b613c0081613983565b8114613c0b57600080fd5b50565b613c1781613995565b8114613c2257600080fd5b50565b613c2e816139a1565b8114613c3957600080fd5b50565b613c45816139cd565b8114613c5057600080fd5b50565b613c5c816139d7565b8114613c6757600080fd5b50565b613c73816139e9565b8114613c7e57600080fd5b50565b613c8a81613a05565b8114613c9557600080fd5b50565b613ca181613a33565b8114613cac57600080fd5b50565b613cb881613a3d565b8114613cc357600080fd5b5056fea2646970667358221220bfb5edb9a39ddce49c033f0972071b073a03c8bc34988ac70689a5e1a32a50d264736f6c63430008000033000000000000000000000000aa3a5f64890a7018603c94e59fb92fd25c118db8
Deployed Bytecode
0x6080604052600436106101095760003560e01c80638da5cb5b11610095578063b0eefabe11610064578063b0eefabe1461036f578063da3e339714610398578063e5994905146103c1578063e9600f12146103ea578063f5537ede1461042757610109565b80638da5cb5b146102b35780638eb4e0ad146102de5780639003adfe1461031b578063ad3b1b471461034657610109565b80632daaeb73116100dc5780632daaeb73146101db5780635f78333b146102185780636548e9bc146102345780636cc6cde11461025d5780638406c0791461028857610109565b806313af40351461010e57806324943c7d146101375780632cc9636c146101605780632d83549c1461019d575b600080fd5b34801561011a57600080fd5b50610135600480360381019061013091906125d2565b610450565b005b34801561014357600080fd5b5061015e6004803603810190610159919061297d565b610524565b005b34801561016c57600080fd5b506101876004803603810190610182919061282b565b610ac6565b6040516101949190613314565b60405180910390f35b3480156101a957600080fd5b506101c460048036038101906101bf9190612a43565b610b4e565b6040516101d292919061332f565b60405180910390f35b3480156101e757600080fd5b5061020260048036038101906101fd91906128a2565b610b9b565b60405161020f9190613314565b60405180910390f35b610232600480360381019061022d9190612a6c565b610cf5565b005b34801561024057600080fd5b5061025b600480360381019061025691906125d2565b610f8b565b005b34801561026957600080fd5b5061027261105f565b60405161027f9190613277565b60405180910390f35b34801561029457600080fd5b5061029d611083565b6040516102aa9190613277565b60405180910390f35b3480156102bf57600080fd5b506102c86110a9565b6040516102d59190613277565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190612637565b6110cf565b60405161031291906132f2565b60405180910390f35b34801561032757600080fd5b50610330611478565b60405161033d91906135b8565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906125fb565b61147e565b005b34801561037b57600080fd5b50610396600480360381019061039191906125d2565b6115b7565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612b46565b61168a565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612ae3565b6117ad565b005b3480156103f657600080fd5b50610411600480360381019061040c919061282b565b6118d3565b60405161041e9190613314565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612b46565b61195b565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d79061345d565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a99061349d565b60405180910390fd5b60006105e98a60036040516020016105cb9291906131cb565b60405160208183030381529060405280519060200120868686611a7e565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061065057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61068f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610686906134fd565b60405180910390fd5b6106976120b8565b60006106a68c8c8c8c8c611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075c906134bd565b60405180910390fd5b60648460ff1611156107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a3906133dd565b60405180910390fd5b60003a620186a06107bd9190613865565b905060008184602001516107d19190613798565b90508a816fffffffffffffffffffffffffffffffff168c6107f29190613909565b1115610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061353d565b60405180910390fd5b806fffffffffffffffffffffffffffffffff166004600082825461085791906137de565b9250508190555081846020018181516108709190613798565b9150906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505060036000848152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050827f437ec3256bbed400455e142c7ce305c6e705cad2d1ba5a4ebed6a6dd133d93fb8260405161091a919061359d565b60405180910390a260008660ff161115610a1f5760006127108b61ffff168d61094391906138af565b61094d9190613834565b905060008160648960ff168f61096391906138af565b61096d9190613834565b6109779190613909565b9050600081116109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b39061343d565b60405180910390fd5b81600460008282546109ce91906137de565b925050819055508d73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a1b573d6000803e3d6000fd5b5050505b60648660ff161015610ab6578c73ffffffffffffffffffffffffffffffffffffffff166108fc6064886064610a54919061393d565b60ff16846fffffffffffffffffffffffffffffffff168f610a759190613909565b610a7f91906138af565b610a899190613834565b9081150290604051600060405180830381858888f19350505050158015610ab4573d6000803e3d6000fd5b505b5050505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d9061357d565b60405180910390fd5b610b438686868686611b9a565b905095945050505050565b60036020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a90046fffffffffffffffffffffffffffffffff16905082565b600080610bac8c8489898989611da8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c0b57600260ff168360ff161415610c0657610bfe8c8c8c8c8c611b9a565b915050610ce7565b610ce1565b8a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c6857600160ff168360ff161415610c6357610c5b8c8c8c8c8c611df1565b915050610ce7565b610ce0565b8a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906133fd565b60405180910390fd5b6000915050610ce7565b5b60009150505b9a9950505050505050505050565b6003600086815260200190815260200160002060000160009054906101000a900460ff1615610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061355d565b60405180910390fd5b6601c6bf526340008411610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d99906133bd565b60405180910390fd5b8334148015610db15750600034115b610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de79061339d565b60405180910390fd5b600085604051602001610e039190613234565b604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e6082868686611a7e565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061347d565b60405180910390fd5b604051806040016040528060011515815260200160006fffffffffffffffffffffffffffffffff168152506003600088815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050857f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a2505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110129061345d565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008b5167ffffffffffffffff811115611114577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111425781602001602082028036833780820191505090505b50905060005b8c518160ff161015611465576114048d8260ff1681518110611193577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8360ff16815181106111d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8460ff168151811061121b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8560ff168151811061125f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8660ff16815181106112a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8760ff16815181106112e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8860ff168151811061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8960ff168151811061136f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8a60ff16815181106113b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518d8b60ff16815181106113f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610b9b565b828260ff1681518110611440577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050808061145d90613a7d565b915050611148565b50809150509a9950505050505050505050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115059061345d565b60405180910390fd5b600454811115611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a9061351d565b60405180910390fd5b80600460008282546115659190613909565b925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115b2573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e9061345d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117119061345d565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b81526004016117559291906132c9565b602060405180830381600087803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a79190612802565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118349061345d565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b815260040161187a93929190613292565b602060405180830381600087803b15801561189457600080fd5b505af11580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc9190612802565b5050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193a9061341d565b60405180910390fd5b6119508686868686611df1565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e29061345d565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611a269291906132c9565b602060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612802565b50505050565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008187604051602001611ace92919061324f565b60405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051611b099493929190613358565b6020604051602081039080840390855afa158015611b2b573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b60008060008787878787604051602001611b5f95949392919061316c565b604051602081830303815290604052805190602001209050600360008281526020019081526020016000208192509250509550959350505050565b6000611ba46120b8565b6000611bb38888888888611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69906134bd565b60405180910390fd5b8160000151611c8657600092505050611d9f565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ce4576000611cf4565b3a620186a0611cf39190613865565b5b8360200151611d039190613798565b905060036000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fbaf30435be856293935d56e0fdfba338d6c0a1f92aad037a978ce68f3dff691e82604051611d82919061359d565b60405180910390a2611d978887836000611fba565b600193505050505b95945050505050565b600080878787604051602001611dc0939291906131f7565b604051602081830303815290604052805190602001209050611de481868686611a7e565b9150509695505050505050565b6000611dfb6120b8565b6000611e0a8888888888611b41565b816040518060400160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611e9957600092505050611fb1565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ef7576000611f07565b3a620186a0611f069190613865565b5b8360200151611f169190613798565b905060036000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a8154906fffffffffffffffffffffffffffffffff02191690555050611f7187878388611fba565b817f44306e460694e3f7e04300c4479a6818c0a825e0482fd6d4d0f16b0232e9620582604051611fa1919061359d565b60405180910390a2600193505050505b95945050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686611fe291906138af565b611fec9190613834565b611ff691906137de565b9050600081856120069190613909565b11612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d906134dd565b60405180910390fd5b806004600082825461205891906137de565b925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc82866120859190613909565b9081150290604051600060405180830381858888f193505050501580156120b0573d6000803e3d6000fd5b505050505050565b604051806040016040528060001515815260200160006fffffffffffffffffffffffffffffffff1681525090565b60006120f96120f484613604565b6135d3565b9050808382526020820190508285602086028201111561211857600080fd5b60005b85811015612148578161212e88826123ef565b84526020840193506020830192505060018101905061211b565b5050509392505050565b600061216561216084613630565b6135d3565b9050808382526020820190508285602086028201111561218457600080fd5b60005b858110156121b4578161219a888261253f565b845260208401935060208301925050600181019050612187565b5050509392505050565b60006121d16121cc8461365c565b6135d3565b905080838252602082019050828560208602820111156121f057600080fd5b60005b8581101561222057816122068882612554565b8452602084019350602083019250506001810190506121f3565b5050509392505050565b600061223d61223884613688565b6135d3565b9050808382526020820190508285602086028201111561225c57600080fd5b60005b8581101561228c5781612272888261257e565b84526020840193506020830192505060018101905061225f565b5050509392505050565b60006122a96122a4846136b4565b6135d3565b905080838252602082019050828560208602820111156122c857600080fd5b60005b858110156122f857816122de8882612593565b8452602084019350602083019250506001810190506122cb565b5050509392505050565b6000612315612310846136e0565b6135d3565b9050808382526020820190508285602086028201111561233457600080fd5b60005b85811015612364578161234a88826125a8565b845260208401935060208301925050600181019050612337565b5050509392505050565b600061238161237c8461370c565b6135d3565b905080838252602082019050828560208602820111156123a057600080fd5b60005b858110156123d057816123b688826125bd565b8452602084019350602083019250506001810190506123a3565b5050509392505050565b6000813590506123e981613be0565b92915050565b6000813590506123fe81613bf7565b92915050565b600082601f83011261241557600080fd5b81356124258482602086016120e6565b91505092915050565b600082601f83011261243f57600080fd5b813561244f848260208601612152565b91505092915050565b600082601f83011261246957600080fd5b81356124798482602086016121be565b91505092915050565b600082601f83011261249357600080fd5b81356124a384826020860161222a565b91505092915050565b600082601f8301126124bd57600080fd5b81356124cd848260208601612296565b91505092915050565b600082601f8301126124e757600080fd5b81356124f7848260208601612302565b91505092915050565b600082601f83011261251157600080fd5b813561252184826020860161236e565b91505092915050565b60008151905061253981613c0e565b92915050565b60008135905061254e81613c25565b92915050565b60008135905061256381613c3c565b92915050565b60008135905061257881613c53565b92915050565b60008135905061258d81613c6a565b92915050565b6000813590506125a281613c81565b92915050565b6000813590506125b781613c98565b92915050565b6000813590506125cc81613caf565b92915050565b6000602082840312156125e457600080fd5b60006125f2848285016123da565b91505092915050565b6000806040838503121561260e57600080fd5b600061261c858286016123ef565b925050602061262d858286016125a8565b9150509250929050565b6000806000806000806000806000806101408b8d03121561265757600080fd5b60008b013567ffffffffffffffff81111561267157600080fd5b61267d8d828e0161242e565b9a505060208b013567ffffffffffffffff81111561269a57600080fd5b6126a68d828e01612404565b99505060408b013567ffffffffffffffff8111156126c357600080fd5b6126cf8d828e01612404565b98505060608b013567ffffffffffffffff8111156126ec57600080fd5b6126f88d828e016124d6565b97505060808b013567ffffffffffffffff81111561271557600080fd5b6127218d828e016124ac565b96505060a08b013567ffffffffffffffff81111561273e57600080fd5b61274a8d828e01612482565b95505060c08b013567ffffffffffffffff81111561276757600080fd5b6127738d828e01612500565b94505060e08b013567ffffffffffffffff81111561279057600080fd5b61279c8d828e01612458565b9350506101008b013567ffffffffffffffff8111156127ba57600080fd5b6127c68d828e01612458565b9250506101208b013567ffffffffffffffff8111156127e457600080fd5b6127f08d828e01612500565b9150509295989b9194979a5092959850565b60006020828403121561281457600080fd5b60006128228482850161252a565b91505092915050565b600080600080600060a0868803121561284357600080fd5b60006128518882890161253f565b9550506020612862888289016123ef565b9450506040612873888289016123ef565b9350506060612884888289016125a8565b925050608061289588828901612593565b9150509295509295909350565b6000806000806000806000806000806101408b8d0312156128c257600080fd5b60006128d08d828e0161253f565b9a505060206128e18d828e016123ef565b99505060406128f28d828e016123ef565b98505060606129038d828e016125a8565b97505060806129148d828e01612593565b96505060a06129258d828e0161257e565b95505060c06129368d828e016125bd565b94505060e06129478d828e01612554565b9350506101006129598d828e01612554565b92505061012061296b8d828e016125bd565b9150509295989b9194979a5092959850565b60008060008060008060008060006101208a8c03121561299c57600080fd5b60006129aa8c828d0161253f565b99505060206129bb8c828d016123ef565b98505060406129cc8c828d016123ef565b97505060606129dd8c828d016125a8565b96505060806129ee8c828d01612593565b95505060a06129ff8c828d016125bd565b94505060c0612a108c828d01612554565b93505060e0612a218c828d01612554565b925050610100612a338c828d016125bd565b9150509295985092959850929598565b600060208284031215612a5557600080fd5b6000612a6384828501612554565b91505092915050565b600080600080600060a08688031215612a8457600080fd5b6000612a9288828901612554565b9550506020612aa3888289016125a8565b9450506040612ab4888289016125bd565b9350506060612ac588828901612554565b9250506080612ad688828901612554565b9150509295509295909350565b60008060008060808587031215612af957600080fd5b6000612b0787828801612569565b9450506020612b18878288016123da565b9350506040612b29878288016123da565b9250506060612b3a878288016125a8565b91505092959194509250565b600080600060608486031215612b5b57600080fd5b6000612b6986828701612569565b9350506020612b7a868287016123da565b9250506040612b8b868287016125a8565b9150509250925092565b6000612ba18383612c31565b60208301905092915050565b612bb681613971565b82525050565b612bcd612bc882613971565b613aa7565b82525050565b6000612bde82613748565b612be8818561376b565b9350612bf383613738565b8060005b83811015612c24578151612c0b8882612b95565b9750612c168361375e565b925050600181019050612bf7565b5085935050505092915050565b612c3a81613995565b82525050565b612c4981613995565b82525050565b612c60612c5b826139a1565b613ab9565b82525050565b612c6f816139cd565b82525050565b612c86612c81826139cd565b613ac3565b82525050565b6000612c9782613753565b612ca1818561377c565b9350612cb1818560208601613a4a565b80840191505092915050565b6000612cca601483613787565b91507f496e636f72726563742065746865722073656e740000000000000000000000006000830152602082019050919050565b6000612d0a601683613787565b91507f457363726f772076616c756520746f6f20736d616c6c000000000000000000006000830152602082019050919050565b6000612d4a601583613787565b91507f5f627579657250657263656e7420696e76616c696400000000000000000000006000830152602082019050919050565b6000612d8a601283613787565b91507f556e7265636f676e6973656420706172747900000000000000000000000000006000830152602082019050919050565b6000612dca600e83613787565b91507f4d7573742062652073656c6c65720000000000000000000000000000000000006000830152602082019050919050565b6000612e0a601583613787565b91507f427579657220616d6f756e74206e6567617469766500000000000000000000006000830152602082019050919050565b6000612e4a601a83613787565b91507f4f6e6c7920746865206f776e65722063616e20646f20746869730000000000006000830152602082019050919050565b6000612e8a601a83613787565b91507f5369676e6174757265206e6f742066726f6d2072656c617965720000000000006000830152602082019050919050565b6000612eca601f83613787565b91507f4f6e6c79207468652061726269747261746f722063616e20646f2074686973006000830152602082019050919050565b6000612f0a601583613787565b91507f457363726f7720646f6573206e6f7420657869737400000000000000000000006000830152602082019050919050565b6000612f4a601783613787565b91507f4e65676174697665207472616e736665722076616c75650000000000000000006000830152602082019050919050565b6000612f8a601783613787565b91507f4d757374206265206275796572206f722073656c6c65720000000000000000006000830152602082019050919050565b6000612fca602683613787565b91507f416d6f756e7420697320686967686572207468616e20616d6f756e742061766160008301527f696c61626c6500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613030600e83613787565b91507f4f766572666c6f77206572726f720000000000000000000000000000000000006000830152602082019050919050565b6000613070601483613787565b91507f547261646520616c7265616479206578697374730000000000000000000000006000830152602082019050919050565b60006130b0600d83613787565b91507f4d757374206265206275796572000000000000000000000000000000000000006000830152602082019050919050565b6130ec816139e9565b82525050565b6131036130fe826139e9565b613acd565b82525050565b61311a61311582613a05565b613adf565b82525050565b61312981613a33565b82525050565b61314061313b82613a33565b613b03565b82525050565b61314f81613a3d565b82525050565b61316661316182613a3d565b613b0d565b82525050565b60006131788288612c4f565b6010820191506131888287612bbc565b6014820191506131988286612bbc565b6014820191506131a8828561312f565b6020820191506131b88284613109565b6002820191508190509695505050505050565b60006131d78285612c4f565b6010820191506131e78284613155565b6001820191508190509392505050565b60006132038286612c4f565b6010820191506132138285613155565b60018201915061322382846130f2565b601082019150819050949350505050565b60006132408284612c75565b60208201915081905092915050565b600061325b8285612c8c565b91506132678284612c75565b6020820191508190509392505050565b600060208201905061328c6000830184612bad565b92915050565b60006060820190506132a76000830186612bad565b6132b46020830185612bad565b6132c16040830184613120565b949350505050565b60006040820190506132de6000830185612bad565b6132eb6020830184613120565b9392505050565b6000602082019050818103600083015261330c8184612bd3565b905092915050565b60006020820190506133296000830184612c40565b92915050565b60006040820190506133446000830185612c40565b61335160208301846130e3565b9392505050565b600060808201905061336d6000830187612c66565b61337a6020830186613146565b6133876040830185612c66565b6133946060830184612c66565b95945050505050565b600060208201905081810360008301526133b681612cbd565b9050919050565b600060208201905081810360008301526133d681612cfd565b9050919050565b600060208201905081810360008301526133f681612d3d565b9050919050565b6000602082019050818103600083015261341681612d7d565b9050919050565b6000602082019050818103600083015261343681612dbd565b9050919050565b6000602082019050818103600083015261345681612dfd565b9050919050565b6000602082019050818103600083015261347681612e3d565b9050919050565b6000602082019050818103600083015261349681612e7d565b9050919050565b600060208201905081810360008301526134b681612ebd565b9050919050565b600060208201905081810360008301526134d681612efd565b9050919050565b600060208201905081810360008301526134f681612f3d565b9050919050565b6000602082019050818103600083015261351681612f7d565b9050919050565b6000602082019050818103600083015261353681612fbd565b9050919050565b6000602082019050818103600083015261355681613023565b9050919050565b6000602082019050818103600083015261357681613063565b9050919050565b60006020820190508181036000830152613596816130a3565b9050919050565b60006020820190506135b260008301846130e3565b92915050565b60006020820190506135cd6000830184613120565b92915050565b6000604051905081810181811067ffffffffffffffff821117156135fa576135f9613b7d565b5b8060405250919050565b600067ffffffffffffffff82111561361f5761361e613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561364b5761364a613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561367757613676613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136a3576136a2613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136cf576136ce613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136fb576136fa613b7d565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372757613726613b7d565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006137a3826139e9565b91506137ae836139e9565b9250826fffffffffffffffffffffffffffffffff038211156137d3576137d2613b1f565b5b828201905092915050565b60006137e982613a33565b91506137f483613a33565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382957613828613b1f565b5b828201905092915050565b600061383f82613a33565b915061384a83613a33565b92508261385a57613859613b4e565b5b828204905092915050565b6000613870826139e9565b915061387b836139e9565b9250816fffffffffffffffffffffffffffffffff04831182151516156138a4576138a3613b1f565b5b828202905092915050565b60006138ba82613a33565b91506138c583613a33565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138fe576138fd613b1f565b5b828202905092915050565b600061391482613a33565b915061391f83613a33565b92508282101561393257613931613b1f565b5b828203905092915050565b600061394882613a3d565b915061395383613a3d565b92508282101561396657613965613b1f565b5b828203905092915050565b600061397c82613a13565b9050919050565b600061398e82613a13565b9050919050565b60008115159050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b6000819050919050565b60006139e282613971565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613a68578082015181840152602081019050613a4d565b83811115613a77576000848401525b50505050565b6000613a8882613a3d565b915060ff821415613a9c57613a9b613b1f565b5b600182019050919050565b6000613ab282613af1565b9050919050565b6000819050919050565b6000819050919050565b6000613ad882613bac565b9050919050565b6000613aea82613bb9565b9050919050565b6000613afc82613bd3565b9050919050565b6000819050919050565b6000613b1882613bc6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160801b9050919050565b60008160f01b9050919050565b60008160f81b9050919050565b60008160601b9050919050565b613be981613971565b8114613bf457600080fd5b50565b613c0081613983565b8114613c0b57600080fd5b50565b613c1781613995565b8114613c2257600080fd5b50565b613c2e816139a1565b8114613c3957600080fd5b50565b613c45816139cd565b8114613c5057600080fd5b50565b613c5c816139d7565b8114613c6757600080fd5b50565b613c73816139e9565b8114613c7e57600080fd5b50565b613c8a81613a05565b8114613c9557600080fd5b50565b613ca181613a33565b8114613cac57600080fd5b50565b613cb881613a3d565b8114613cc357600080fd5b5056fea2646970667358221220bfb5edb9a39ddce49c033f0972071b073a03c8bc34988ac70689a5e1a32a50d264736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aa3a5f64890a7018603c94e59fb92fd25c118db8
-----Decoded View---------------
Arg [0] : initialAddress (address): 0xaa3a5f64890A7018603c94e59fb92Fd25c118db8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa3a5f64890a7018603c94e59fb92fd25c118db8
Loading...
Loading
Loading...
Loading
Net Worth in USD
$491.49
Net Worth in BNB
Token Allocations
BNB
100.00%
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BSC | 100.00% | $635.33 | 0.7736 | $491.49 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.