More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,395 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Send Eth To Side... | 15942198 | 761 days ago | IN | 0.001 ETH | 0.00083847 | ||||
Shut Down And Mi... | 15940658 | 761 days ago | IN | 0 ETH | 0.10085965 | ||||
Prepare For Migr... | 15938006 | 762 days ago | IN | 0 ETH | 0.00330448 | ||||
Send ERC20To Sid... | 15937737 | 762 days ago | IN | 0 ETH | 0.00117491 | ||||
Receive By Sidec... | 15937566 | 762 days ago | IN | 0 ETH | 0.00322778 | ||||
Send ERC20To Sid... | 15937317 | 762 days ago | IN | 0 ETH | 0.00115064 | ||||
Send Eth To Side... | 15937266 | 762 days ago | IN | 0.43 ETH | 0.0005994 | ||||
Receive By Ether... | 15937188 | 762 days ago | IN | 0 ETH | 0.00352731 | ||||
Send Eth To Side... | 15937098 | 762 days ago | IN | 0.01023 ETH | 0.00070727 | ||||
Receive By Ether... | 15937069 | 762 days ago | IN | 0 ETH | 0.0042315 | ||||
Send ERC20To Sid... | 15937042 | 762 days ago | IN | 0 ETH | 0.00200273 | ||||
Send Eth To Side... | 15936805 | 762 days ago | IN | 0.42 ETH | 0.00061091 | ||||
Receive By Ether... | 15936737 | 762 days ago | IN | 0 ETH | 0.00287532 | ||||
Send ERC20To Sid... | 15936667 | 762 days ago | IN | 0 ETH | 0.00164633 | ||||
Receive By Ether... | 15936604 | 762 days ago | IN | 0 ETH | 0.00315197 | ||||
Receive By Ether... | 15936592 | 762 days ago | IN | 0 ETH | 0.00381419 | ||||
Send Eth To Side... | 15936563 | 762 days ago | IN | 0.04833326 ETH | 0.00076951 | ||||
Send Eth To Side... | 15936545 | 762 days ago | IN | 4 ETH | 0.00075981 | ||||
Receive By Sidec... | 15936466 | 762 days ago | IN | 0 ETH | 0.00438505 | ||||
Send ERC20To Sid... | 15936438 | 762 days ago | IN | 0 ETH | 0.00163742 | ||||
Send Eth To Side... | 15936425 | 762 days ago | IN | 5.3 ETH | 0.00093468 | ||||
Receive By Ether... | 15936422 | 762 days ago | IN | 0 ETH | 0.00386029 | ||||
Receive By Ether... | 15936411 | 762 days ago | IN | 0 ETH | 0.00478522 | ||||
Receive By Ether... | 15936411 | 762 days ago | IN | 0 ETH | 0.00479268 | ||||
Receive By Sidec... | 15936408 | 762 days ago | IN | 0 ETH | 0.00499859 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15940658 | 761 days ago | 660.49693329 ETH | ||||
15936737 | 762 days ago | 0.38525986 ETH | ||||
15936422 | 762 days ago | 1.38937264 ETH | ||||
15936403 | 762 days ago | 25.0348 ETH | ||||
15935561 | 762 days ago | 1.39316218 ETH | ||||
15935097 | 762 days ago | 0.31453661 ETH | ||||
15934687 | 762 days ago | 33 ETH | ||||
15934440 | 762 days ago | 2.1 ETH | ||||
15934376 | 762 days ago | 1.2339262 ETH | ||||
15933934 | 762 days ago | 0.32467155 ETH | ||||
15933237 | 763 days ago | 4.02 ETH | ||||
15933097 | 763 days ago | 0.2 ETH | ||||
15932653 | 763 days ago | 5.85730594 ETH | ||||
15932463 | 763 days ago | 0.13308696 ETH | ||||
15932398 | 763 days ago | 0.1 ETH | ||||
15932175 | 763 days ago | 5.84080897 ETH | ||||
15932075 | 763 days ago | 0.25761401 ETH | ||||
15931536 | 763 days ago | 1.78867361 ETH | ||||
15930121 | 763 days ago | 0.10032465 ETH | ||||
15928350 | 763 days ago | 2 ETH | ||||
15928141 | 763 days ago | 1.58376644 ETH | ||||
15927670 | 763 days ago | 2.57331262 ETH | ||||
15927650 | 763 days ago | 0.81760038 ETH | ||||
15926726 | 763 days ago | 0.11482827 ETH | ||||
15926542 | 763 days ago | 12 ETH |
Loading...
Loading
Contract Name:
Bridge
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache 2.0 pragma solidity =0.8.17; import "./MasterToken.sol"; import "./Ownable.sol"; import "./ERC20Burnable.sol"; import "./SafeERC20.sol"; import "./EthTokenReciever.sol"; /** * Provides functionality of the HASHI bridge */ contract Bridge is EthTokenReciever { using SafeERC20 for IERC20; bool internal initialized_; bool internal preparedForMigration_; mapping(address => bool) public isPeer; uint256 public peersCount; /** Substrate proofs used */ mapping(bytes32 => bool) public used; mapping(address => bool) public _uniqueAddresses; /** White list of ERC-20 ethereum native tokens */ mapping(address => bool) public acceptedEthTokens; /** White lists of ERC-20 SORA native tokens * We use several representations of the white list for optimisation purposes. */ mapping(bytes32 => address) public _sidechainTokens; mapping(address => bytes32) public _sidechainTokensByAddress; address[] public _sidechainTokenAddressArray; /** * For XOR and VAL use old token contracts, created for SORA 1 bridge. * Also for XOR and VAL transfers from SORA 2 to Ethereum old bridges will be used. */ address public immutable _addressVAL; address public immutable _addressXOR; /** EVM netowrk ID */ bytes32 public immutable _networkId; event Withdrawal(bytes32 txHash); event Deposit( bytes32 destination, uint256 amount, address token, bytes32 sidechainAsset ); event ChangePeers(address peerId, bool removal); event PreparedForMigration(); event Migrated(address to); /** * Constructor. * @param initialPeers - list of initial bridge validators on substrate side. * @param addressVAL address of VAL token Contract * @param addressXOR address of XOR token Contract * @param networkId id of current EvM network used for bridge purpose. */ constructor( address[] memory initialPeers, address[] memory sidechainTokenAddresses, bytes32[] memory sidechainAssetIds, address[] memory erc20Addresses, address addressVAL, address addressXOR, bytes32 networkId ) { require( sidechainAssetIds.length == sidechainTokenAddresses.length, "Length mismatch" ); for (uint256 i; i < initialPeers.length; i++) { addPeer(initialPeers[i]); } _addressXOR = addressXOR; _addressVAL = addressVAL; _networkId = networkId; initialized_ = true; acceptedEthTokens[addressXOR] = true; acceptedEthTokens[addressVAL] = true; for (uint256 i; i < sidechainTokenAddresses.length; i++) { address tokenAddress = sidechainTokenAddresses[i]; bytes32 assetId = sidechainAssetIds[i]; _sidechainTokens[assetId] = tokenAddress; _sidechainTokensByAddress[tokenAddress] = assetId; _sidechainTokenAddressArray.push(tokenAddress); } uint256 erc20TokensCount = erc20Addresses.length; for (uint256 i; i < erc20TokensCount; i++) { acceptedEthTokens[erc20Addresses[i]] = true; } } modifier shouldBeInitialized() { require( initialized_ == true, "Contract should be initialized to use this function" ); _; } modifier shouldNotBePreparedForMigration() { require( preparedForMigration_ == false, "Contract should not be prepared for migration to use this function" ); _; } modifier shouldBePreparedForMigration() { require( preparedForMigration_ == true, "Contract should be prepared for migration to use this function" ); _; } fallback() external { revert(); } receive() external payable { revert(); } /* Used only for migration */ function receivePayment() external payable override {} /** * Adds new token to whitelist. * Token should not been already added. * * @param newToken new token contract address * @param ticker token ticker (symbol) * @param name token title * @param decimals count of token decimal places * @param txHash transaction hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addEthNativeToken( address newToken, string memory ticker, string memory name, uint8 decimals, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized { require(used[txHash] == false, "txHash already used"); require( acceptedEthTokens[newToken] == false, "ERC20 token is not whitelisted" ); require( checkSignatures( keccak256( abi.encodePacked( address(this), newToken, ticker, name, decimals, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; acceptedEthTokens[newToken] = true; } /** * Preparations for migration to new Bridge contract * * @param salt unique data used for signature * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function prepareForMigration( bytes32 salt, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized shouldNotBePreparedForMigration { require(used[salt] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( "prepareMigration", address(this), salt, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[salt] = true; preparedForMigration_ = true; emit PreparedForMigration(); } /** * Shutdown this contract and migrate tokens ownership to the new contract. * * @param salt unique data used for signature generation * @param newContractAddress address of the new bridge contract * @param erc20nativeTokens list of ERC20 tokens with non zero balances for this contract. Can be taken from substrate bridge peers. * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function shutDownAndMigrate( bytes32 salt, address payable newContractAddress, address[] calldata erc20nativeTokens, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized shouldBePreparedForMigration { require(used[salt] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), newContractAddress, salt, erc20nativeTokens, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[salt] = true; uint256 sidechainTokensCount = _sidechainTokenAddressArray.length; for (uint256 i; i < sidechainTokensCount; i++) { Ownable token = Ownable(_sidechainTokenAddressArray[i]); token.transferOwnership(newContractAddress); } uint256 erc20nativeTokensCount = erc20nativeTokens.length; for (uint256 i; i < erc20nativeTokensCount; i++) { IERC20 token = IERC20(erc20nativeTokens[i]); token.safeTransfer( newContractAddress, token.balanceOf(address(this)) ); } EthTokenReciever(newContractAddress).receivePayment{ value: address(this).balance }(); initialized_ = false; emit Migrated(newContractAddress); } /** * Add new token from sidechain to the bridge white list. * * @param name token title * @param symbol token symbol * @param decimals number of decimals * @param sidechainAssetId token id on the sidechain * @param txHash sidechain transaction hash * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addNewSidechainToken( string memory name, string memory symbol, uint8 decimals, bytes32 sidechainAssetId, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized { require(used[txHash] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), name, symbol, decimals, sidechainAssetId, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; // Create new instance of the token MasterToken tokenInstance = new MasterToken( name, symbol, decimals, address(this), 0, sidechainAssetId ); address tokenAddress = address(tokenInstance); _sidechainTokens[sidechainAssetId] = tokenAddress; _sidechainTokensByAddress[tokenAddress] = sidechainAssetId; _sidechainTokenAddressArray.push(tokenAddress); } /** * Send Ethereum to sidechain. * * @param to destionation address on sidechain. */ function sendEthToSidechain(bytes32 to) external payable shouldBeInitialized shouldNotBePreparedForMigration { require(msg.value > 0, "ETH VALUE SHOULD BE MORE THAN 0"); bytes32 empty; emit Deposit(to, msg.value, address(0x0), empty); } /** * Send ERC-20 token to sidechain. * * @param to destination address on the sidechain * @param amount amount to sendERC20ToSidechain * @param tokenAddress contract address of token to send */ function sendERC20ToSidechain( bytes32 to, uint256 amount, address tokenAddress ) external shouldBeInitialized shouldNotBePreparedForMigration { IERC20 token = IERC20(tokenAddress); bytes32 sidechainAssetId = _sidechainTokensByAddress[tokenAddress]; if ( sidechainAssetId != "" || _addressVAL == tokenAddress || _addressXOR == tokenAddress ) { ERC20Burnable mtoken = ERC20Burnable(tokenAddress); mtoken.burnFrom(msg.sender, amount); } else { require( acceptedEthTokens[tokenAddress], "The Token is not accepted for transfer to sidechain" ); uint256 balanceBefore = token.balanceOf(address(this)); token.safeTransferFrom(msg.sender, address(this), amount); uint256 balanceAfter = token.balanceOf(address(this)); require( balanceAfter - balanceBefore >= amount, "Not enough tokens transferred" ); } emit Deposit(to, amount, tokenAddress, sidechainAssetId); } /** * Add new peer using peers quorum. * * @param newPeerAddress address of the peer to add * @param txHash tx hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function addPeerByPeer( address newPeerAddress, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized returns (bool) { require(used[txHash] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), "addPeer", newPeerAddress, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; addPeer(newPeerAddress); emit ChangePeers(newPeerAddress, false); return true; } /** * Remove peer using peers quorum. * * @param peerAddress address of the peer to remove * @param txHash tx hash from sidechain * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function removePeerByPeer( address peerAddress, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized returns (bool) { require(used[txHash] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), "removePeer", peerAddress, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; removePeer(peerAddress); emit ChangePeers(peerAddress, true); return true; } /** * Withdraws specified amount of ether or one of ERC-20 tokens to provided sidechain address * @param tokenAddress address of token to withdraw (0 for ether) * @param amount amount of tokens or ether to withdraw * @param to target account address * @param txHash hash of transaction from sidechain * @param from source of transfer * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function receiveByEthereumAssetAddress( address tokenAddress, uint256 amount, address payable to, address from, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized { require(used[txHash] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), tokenAddress, amount, to, from, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; if (tokenAddress == address(0)) { // untrusted transfer, relies on provided cryptographic proof to.transfer(amount); } else { IERC20 coin = IERC20(tokenAddress); // untrusted call, relies on provided cryptographic proof coin.safeTransfer(to, amount); } emit Withdrawal(txHash); } /** * Mint new Token * @param sidechainAssetId id of sidechainToken to mint * @param amount how much to mint * @param to destination address * @param from sender address * @param txHash hash of transaction from Iroha * @param v array of signatures of tx_hash (v-component) * @param r array of signatures of tx_hash (r-component) * @param s array of signatures of tx_hash (s-component) */ function receiveBySidechainAssetId( bytes32 sidechainAssetId, uint256 amount, address to, address from, bytes32 txHash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) external shouldBeInitialized { require( _sidechainTokens[sidechainAssetId] != address(0x0), "Sidechain asset is not registered" ); require(used[txHash] == false, "txHash already used"); require( checkSignatures( keccak256( abi.encodePacked( address(this), sidechainAssetId, amount, to, from, txHash, _networkId ) ), v, r, s ), "Peer signatures are invalid" ); used[txHash] = true; MasterToken tokenInstance = MasterToken( _sidechainTokens[sidechainAssetId] ); tokenInstance.mintTokens(to, amount); emit Withdrawal(txHash); } /** * Checks given addresses for duplicates and if they are peers signatures * @param hash unsigned data * @param v v-component of signature from hash * @param r r-component of signature from hash * @param s s-component of signature from hash * @return true if all given addresses are correct or false otherwise */ function checkSignatures( bytes32 hash, uint8[] memory v, bytes32[] memory r, bytes32[] memory s ) private returns (bool) { require(peersCount >= 1, "peersCount too low"); uint256 signatureCount = v.length; require( signatureCount == r.length, "signatureCount and r length mismatch" ); require( signatureCount == s.length, "signatureCount and s length mismatch" ); uint256 needSigs = peersCount - (peersCount - 1) / 3; require(signatureCount >= needSigs, "not enough signatures"); uint256 count; address[] memory recoveredAddresses = new address[](signatureCount); for (uint256 i; i < signatureCount; ++i) { address recoveredAddress = recoverAddress(hash, v[i], r[i], s[i]); // not a peer address or not unique if ( isPeer[recoveredAddress] != true || _uniqueAddresses[recoveredAddress] == true ) { continue; } recoveredAddresses[count] = recoveredAddress; unchecked { count = count + 1; } _uniqueAddresses[recoveredAddress] = true; } // restore state for future usages for (uint256 i; i < count; ++i) { _uniqueAddresses[recoveredAddresses[i]] = false; } return count >= needSigs; } /** * Recovers address from a given single signature * @param hash unsigned data * @param v v-component of signature from hash * @param r r-component of signature from hash * @param s s-component of signature from hash * @return address recovered from signature */ function recoverAddress( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) private pure returns (address) { bytes32 simple_hash = keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", hash) ); address res = ecrecover(simple_hash, v, r, s); return res; } /** * Adds new peer to list of signature verifiers. * Internal function * @param newAddress address of new peer */ function addPeer(address newAddress) internal returns (uint256) { require(isPeer[newAddress] == false, "peer already added"); isPeer[newAddress] = true; ++peersCount; return peersCount; } function removePeer(address peerAddress) internal { require(isPeer[peerAddress] == true, "peer does not exists"); isPeer[peerAddress] = false; --peersCount; } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity =0.8.17; import "./ERC20Detailed.sol"; import "./ERC20Burnable.sol"; import "./Ownable.sol"; contract MasterToken is ERC20Burnable, ERC20Detailed, Ownable { bytes32 public _sidechainAssetId; /** * @dev Constructor that gives the specified address all of existing tokens. */ constructor( string memory name, string memory symbol, uint8 decimals, address beneficiary, uint256 supply, bytes32 sidechainAssetId ) ERC20Detailed(name, symbol, decimals) { _sidechainAssetId = sidechainAssetId; _mint(beneficiary, supply); } fallback() external { revert(); } function mintTokens(address beneficiary, uint256 amount) public onlyOwner { _mint(beneficiary, amount); } }
// SPDX-License-Identifier: Apache License 2.0 pragma solidity =0.8.17; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Not owner"); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: Apache 2.0 pragma solidity =0.8.17; import "./ERC20.sol"; /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract ERC20Burnable is ERC20 { /** * @dev Burns a specific amount of tokens. * @param value The amount of token to be burned. */ function burn(uint256 value) public { _burn(msg.sender, value); } /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param from address The address which you want to send tokens from * @param value uint256 The amount of token to be burned */ function burnFrom(address from, uint256 value) public { _burnFrom(from, value); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity =0.8.17; 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: Apache License 2.0 pragma solidity =0.8.17; interface EthTokenReciever { function receivePayment() external payable; }
// SPDX-License-Identifier: Apache 2.0 pragma solidity =0.8.17; import "./IERC20.sol"; /** * @title ERC20Detailed token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; } /** * @return the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns (string memory) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns (uint8) { return _decimals; } }
// SPDX-License-Identifier: MIT pragma solidity =0.8.17; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: Apache 2.0 pragma solidity =0.8.17; import "./IERC20.sol"; /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract ERC20 is IERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view override returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view override returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public override returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * 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 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public override returns (bool) { _approve(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom( address from, address to, uint256 value ) public override returns (bool) { _transfer(from, to, value); _approve(from, msg.sender, _allowed[from][msg.sender] - value); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve( msg.sender, spender, _allowed[msg.sender][spender] + addedValue ); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve( msg.sender, spender, _allowed[msg.sender][spender] - subtractedValue ); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer( address from, address to, uint256 value ) internal { require(to != address(0)); _balances[from] = _balances[from] - value; _balances[to] = _balances[to] + value; emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply + value; _balances[account] = _balances[account] + value; emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply - value; _balances[account] = _balances[account] - value; emit Transfer(account, address(0), value); } /** * @dev Approve an address to spend another addresses' tokens. * @param owner The address that owns the tokens. * @param spender The address that will spend the tokens. * @param value The number of tokens that can be spent. */ function _approve( address owner, address spender, uint256 value ) internal { require(spender != address(0)); require(owner != address(0)); _allowed[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _burn(account, value); _approve(account, msg.sender, _allowed[account][msg.sender] - value); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity =0.8.17; /** * @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": true, "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
[{"inputs":[{"internalType":"address[]","name":"initialPeers","type":"address[]"},{"internalType":"address[]","name":"sidechainTokenAddresses","type":"address[]"},{"internalType":"bytes32[]","name":"sidechainAssetIds","type":"bytes32[]"},{"internalType":"address[]","name":"erc20Addresses","type":"address[]"},{"internalType":"address","name":"addressVAL","type":"address"},{"internalType":"address","name":"addressXOR","type":"address"},{"internalType":"bytes32","name":"networkId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"peerId","type":"address"},{"indexed":false,"internalType":"bool","name":"removal","type":"bool"}],"name":"ChangePeers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"destination","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sidechainAsset","type":"bytes32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"Migrated","type":"event"},{"anonymous":false,"inputs":[],"name":"PreparedForMigration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"Withdrawal","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"_addressVAL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_addressXOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_networkId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sidechainTokenAddressArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"_sidechainTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sidechainTokensByAddress","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_uniqueAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acceptedEthTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"string","name":"ticker","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addEthNativeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addNewSidechainToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPeerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addPeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"prepareForMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveByEthereumAssetAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveBySidechainAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receivePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"peerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"removePeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"sendERC20ToSidechain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"}],"name":"sendEthToSidechain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"address payable","name":"newContractAddress","type":"address"},{"internalType":"address[]","name":"erc20nativeTokens","type":"address[]"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"shutDownAndMigrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"used","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040516200426b3803806200426b833981016040819052620000349162000484565b85518551146200007d5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60005b8751811015620000cd57620000b7888281518110620000a357620000a36200056c565b60200260200101516200027660201b60201c565b5080620000c48162000582565b91505062000080565b506001600160a01b0382811660a0819052908416608081905260c083905260008054600160ff1991821681178355938252600560205260408083208054831686179055928252918120805490921690921790555b8651811015620001f65760008782815181106200014257620001426200056c565b6020026020010151905060008783815181106200016357620001636200056c565b602090810291909101810151600081815260068352604080822080546001600160a01b039097166001600160a01b0319978816811790915580835260079094528120919091556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054909316179091555080620001ed8162000582565b91505062000121565b50835160005b8181101562000267576001600560008884815181106200022057620002206200056c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806200025e8162000582565b915050620001fc565b505050505050505050620005aa565b6001600160a01b03811660009081526001602052604081205460ff1615620002d65760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b604482015260640162000074565b6001600160a01b03821660009081526001602081905260408220805460ff19169091179055600280549091906200030d9062000582565b9091555050600254919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200035b576200035b6200031a565b604052919050565b60006001600160401b038211156200037f576200037f6200031a565b5060051b60200190565b80516001600160a01b0381168114620003a157600080fd5b919050565b600082601f830112620003b857600080fd5b81516020620003d1620003cb8362000363565b62000330565b82815260059290921b84018101918181019086841115620003f157600080fd5b8286015b848110156200041757620004098162000389565b8352918301918301620003f5565b509695505050505050565b600082601f8301126200043457600080fd5b8151602062000447620003cb8362000363565b82815260059290921b840181019181810190868411156200046757600080fd5b8286015b848110156200041757805183529183019183016200046b565b600080600080600080600060e0888a031215620004a057600080fd5b87516001600160401b0380821115620004b857600080fd5b620004c68b838c01620003a6565b985060208a0151915080821115620004dd57600080fd5b620004eb8b838c01620003a6565b975060408a01519150808211156200050257600080fd5b620005108b838c0162000422565b965060608a01519150808211156200052757600080fd5b50620005368a828b01620003a6565b945050620005476080890162000389565b92506200055760a0890162000389565b915060c0880151905092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b600060018201620005a357634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c051613c4b62000620600039600081816102ea0152818161096d01528181610b2701528181610d6d01528181610f510152818161108f01528181611205015281816113a7015261170601526000818161045801526105fd01526000818161028001526105c00152613c4b6000f3fe608060405260043610620001575760003560e01c8063835c19f311620000bb578063c29bb3321162000079578063c29bb3321462000444578063ca70cf6e146200047a578063cd550947146200049f578063dab4a4c614620004d0578063dfd9db8914620004f5578063fdfba25d146200051a5762000162565b8063835c19f314620001995780638505e868146200039957806389c39baf14620003d3578063ae6664e014620003f8578063b07c411f14620004105762000162565b80633b69828811620001155780633b698288146200026c5780633e44cf7814620002a25780635fde87c514620002d6578063687a82db146200031b57806375273ece146200034f57806375ff82bd14620003745762000162565b806303ef9d1f146200017457806312c6fa1b146200019b578063135f14e214620001e457806316283134146200020957806323ad7de214620002475762000162565b366200016257600080fd5b3480156200016f57600080fd5b600080fd5b3480156200018157600080fd5b50620001996200019336600462002166565b62000531565b005b348015620001a857600080fd5b50620001cf620001ba366004620021a2565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015620001f157600080fd5b50620001996200020336600462002323565b620008cb565b3480156200021657600080fd5b506200022e6200022836600462002401565b62000a94565b6040516001600160a01b039091168152602001620001db565b3480156200025457600080fd5b50620001996200026636600462002492565b62000abf565b3480156200027957600080fd5b506200022e7f000000000000000000000000000000000000000000000000000000000000000081565b348015620002af57600080fd5b50620001cf620002c1366004620021a2565b60016020526000908152604090205460ff1681565b348015620002e357600080fd5b506200030c7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001db565b3480156200032857600080fd5b50620001cf6200033a366004620021a2565b60056020526000908152604090205460ff1681565b3480156200035c57600080fd5b50620001996200036e36600462002531565b62000c5e565b3480156200038157600080fd5b50620001996200039336600462002568565b62000e92565b348015620003a657600080fd5b506200022e620003b836600462002401565b6006602052600090815260409020546001600160a01b031681565b348015620003e057600080fd5b50620001cf620003f236600462002604565b62000ff4565b3480156200040557600080fd5b506200030c60025481565b3480156200041d57600080fd5b50620001cf6200042f36600462002401565b60036020526000908152604090205460ff1681565b3480156200045157600080fd5b506200022e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156200048757600080fd5b50620001cf6200049936600462002604565b6200116d565b348015620004ac57600080fd5b506200030c620004be366004620021a2565b60076020526000908152604090205481565b348015620004dd57600080fd5b5062000199620004ef36600462002704565b620012bb565b3480156200050257600080fd5b506200019962000514366004620027e0565b62001633565b620001996200052b36600462002401565b620017a3565b60005460ff161515600114620005645760405162461bcd60e51b81526004016200055b9062002888565b60405180910390fd5b600054610100900460ff16156200058f5760405162461bcd60e51b81526004016200055b90620028db565b6001600160a01b038116600090815260076020526040902054819080151580620005ea5750826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316145b80620006275750826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316145b15620006985760405163079cc67960e41b81523360048201526024810185905283906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200067857600080fd5b505af11580156200068d573d6000803e3d6000fd5b505050505062000875565b6001600160a01b03831660009081526005602052604090205460ff166200071e5760405162461bcd60e51b815260206004820152603360248201527f54686520546f6b656e206973206e6f7420616363657074656420666f7220747260448201527230b739b332b9103a379039b4b232b1b430b4b760691b60648201526084016200055b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801562000766573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078c919062002943565b9050620007a56001600160a01b03841633308862001897565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015620007ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000813919062002943565b90508562000822838362002973565b1015620008725760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e73207472616e7366657272656400000060448201526064016200055b565b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60005460ff161515600114620008f55760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff1615620009275760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b821660208401528a811b82166034840152604883018a905288811b8216606884015287901b16607c820152609081018590527f000000000000000000000000000000000000000000000000000000000000000060b0820152620009b99060d0015b604051602081830303815290604052805190602001208484846200190a565b620009d85760405162461bcd60e51b81526004016200055b90620029bc565b6000848152600360205260409020805460ff191660011790556001600160a01b03881662000a3e576040516001600160a01b0387169088156108fc029089906000818181858888f1935050505015801562000a37573d6000803e3d6000fd5b5062000a57565b8762000a556001600160a01b038216888a62001c8b565b505b6040518481527f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9060200160405180910390a15050505050505050565b6008818154811062000aa557600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462000ae95760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff161562000b1b5760405162461bcd60e51b81526004016200055b906200298f565b62000b5e3089898989897f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a979695949392919062002a19565b62000b7d5760405162461bcd60e51b81526004016200055b90620029bc565b600084815260036020526040808220805460ff1916600117905551899089908990309085908b9062000baf906200212d565b62000bc09695949392919062002ac2565b604051809103906000f08015801562000bdd573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b0319958616811790915580845260079092528220989098556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549091169096179095555050505050505050565b60005460ff16151560011462000c885760405162461bcd60e51b81526004016200055b9062002888565b6000888152600660205260409020546001600160a01b031662000cf85760405162461bcd60e51b815260206004820152602160248201527f53696465636861696e206173736574206973206e6f74207265676973746572656044820152601960fa1b60648201526084016200055b565b60008481526003602052604090205460ff161562000d2a5760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b82166020840152603483018b9052605483018a905288811b8216607484015287901b166088820152609c81018590527f000000000000000000000000000000000000000000000000000000000000000060bc82015262000d9f9060dc016200099a565b62000dbe5760405162461bcd60e51b81526004016200055b90620029bc565b6000848152600360209081526040808320805460ff191660011790558a8352600690915290819020549051633c37699760e21b81526001600160a01b038881166004830152602482018a905290911690819063f0dda65c90604401600060405180830381600087803b15801562000e3457600080fd5b505af115801562000e49573d6000803e3d6000fd5b505050507f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b8560405162000e7f91815260200190565b60405180910390a1505050505050505050565b60005460ff16151560011462000ebc5760405162461bcd60e51b81526004016200055b9062002888565b600054610100900460ff161562000ee75760405162461bcd60e51b81526004016200055b90620028db565b60008481526003602052604090205460ff161562000f195760405162461bcd60e51b81526004016200055b906200298f565b6040516f383932b830b932a6b4b3b930ba34b7b760811b60208201526001600160601b03193060601b166030820152604481018590527f0000000000000000000000000000000000000000000000000000000000000000606482015262000f83906084016200099a565b62000fa25760405162461bcd60e51b81526004016200055b90620029bc565b600084815260036020526040808220805460ff19166001179055815461ff001916610100178255517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a150505050565b6000805460ff1615156001146200101f5760405162461bcd60e51b81526004016200055b9062002888565b60008581526003602052604090205460ff1615620010515760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b82166020840152693932b6b7bb32a832b2b960b11b603484015288901b16603e820152605281018690527f00000000000000000000000000000000000000000000000000000000000000006072820152620010db906092015b604051602081830303815290604052805190602001208585856200190a565b620010fa5760405162461bcd60e51b81526004016200055b90620029bc565b6000858152600360205260409020805460ff191660011790556200111e8662001cc2565b604080516001600160a01b0388168152600160208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f991015b60405180910390a150600195945050505050565b6000805460ff161515600114620011985760405162461bcd60e51b81526004016200055b9062002888565b60008581526003602052604090205460ff1615620011ca5760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b821660208401526630b2322832b2b960c91b603484015288901b16603b820152604f81018690527f0000000000000000000000000000000000000000000000000000000000000000606f8201526200123790608f01620010bc565b620012565760405162461bcd60e51b81526004016200055b90620029bc565b6000858152600360205260409020805460ff191660011790556200127a8662001d62565b50604080516001600160a01b0388168152600060208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9910162001159565b60005460ff161515600114620012e55760405162461bcd60e51b81526004016200055b9062002888565b60005460ff6101009091041615156001146200136a5760405162461bcd60e51b815260206004820152603e60248201527f436f6e74726163742073686f756c6420626520707265706172656420666f722060448201527f6d6967726174696f6e20746f2075736520746869732066756e6374696f6e000060648201526084016200055b565b60008781526003602052604090205460ff16156200139c5760405162461bcd60e51b81526004016200055b906200298f565b620013dd30878988887f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a9695949392919062002b1d565b620013fc5760405162461bcd60e51b81526004016200055b90620029bc565b6000878152600360205260408120805460ff19166001179055600854905b81811015620014bf576000600882815481106200143b576200143b62002b92565b60009182526020909120015460405163f2fde38b60e01b81526001600160a01b038b811660048301529091169150819063f2fde38b90602401600060405180830381600087803b1580156200148f57600080fd5b505af1158015620014a4573d6000803e3d6000fd5b50505050508080620014b69062002ba8565b9150506200141a565b508460005b8181101562001598576000888883818110620014e457620014e462002b92565b9050602002016020810190620014fb9190620021a2565b6040516370a0823160e01b815230600482015290915062001582908b906001600160a01b038416906370a0823190602401602060405180830381865afa1580156200154a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001570919062002943565b6001600160a01b038416919062001c8b565b50806200158f8162002ba8565b915050620014c4565b50876001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b158015620015d557600080fd5b505af1158015620015ea573d6000803e3d6000fd5b50506000805460ff1916905550506040516001600160a01b038a1681527fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a5098915060200162000e7f565b60005460ff1615156001146200165d5760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff16156200168f5760405162461bcd60e51b81526004016200055b906200298f565b6001600160a01b03881660009081526005602052604090205460ff1615620016fa5760405162461bcd60e51b815260206004820152601e60248201527f455243323020746f6b656e206973206e6f742077686974656c6973746564000060448201526064016200055b565b6200173d3089898989897f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a979695949392919062002bc4565b6200175c5760405162461bcd60e51b81526004016200055b90620029bc565b5050506000908152600360209081526040808320805460ff1990811660019081179092556001600160a01b0390981684526005909252909120805490951617909355505050565b60005460ff161515600114620017cd5760405162461bcd60e51b81526004016200055b9062002888565b600054610100900460ff1615620017f85760405162461bcd60e51b81526004016200055b90620028db565b600034116200184a5760405162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e20300060448201526064016200055b565b604080518281523460208201526000918101829052606081018290527f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89060800160405180910390a15050565b6040516001600160a01b0380851660248301528316604482015260648101829052620019049085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e06565b50505050565b600060016002541015620019565760405162461bcd60e51b81526020600482015260126024820152717065657273436f756e7420746f6f206c6f7760701b60448201526064016200055b565b835183518114620019b65760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642072206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b8251811462001a145760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642073206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b60006003600160025462001a29919062002973565b62001a35919062002c48565b60025462001a44919062002973565b90508082101562001a905760405162461bcd60e51b81526020600482015260156024820152746e6f7420656e6f756768207369676e61747572657360581b60448201526064016200055b565b6000808367ffffffffffffffff81111562001aaf5762001aaf620021c2565b60405190808252806020026020018201604052801562001ad9578160200160208202803683370190505b50905060005b8481101562001c1057600062001b4c8b8b848151811062001b045762001b0462002b92565b60200260200101518b858151811062001b215762001b2162002b92565b60200260200101518b868151811062001b3e5762001b3e62002b92565b602002602001015162001edf565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062001b9d57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562001baa575062001bfd565b8083858151811062001bc05762001bc062002b92565b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b62001c088162002ba8565b905062001adf565b5060005b8281101562001c7d5760006004600084848151811062001c385762001c3862002b92565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562001c758162002ba8565b905062001c14565b505010159695505050505050565b6040516001600160a01b03831660248201526044810182905262001cbd90849063a9059cbb60e01b90606401620018cc565b505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462001d295760405162461bcd60e51b81526020600482015260146024820152737065657220646f6573206e6f742065786973747360601b60448201526064016200055b565b6001600160a01b0381166000908152600160205260408120805460ff191690556002805490919062001d5b9062002c6b565b9091555050565b6001600160a01b03811660009081526001602052604081205460ff161562001dc25760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b60448201526064016200055b565b6001600160a01b03821660009081526001602081905260408220805460ff191690911790556002805490919062001df99062002ba8565b9091555050600254919050565b600062001e5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001f999092919063ffffffff16565b80519091501562001cbd578080602001905181019062001e7e919062002c85565b62001cbd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200055b565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018590526000908190605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801562001f83573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b606062001faa848460008562001fb4565b90505b9392505050565b606082471015620020175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200055b565b6001600160a01b0385163b620020705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200055b565b600080866001600160a01b031685876040516200208e919062002ca9565b60006040518083038185875af1925050503d8060008114620020cd576040519150601f19603f3d011682016040523d82523d6000602084013e620020d2565b606091505b5091509150620020e4828286620020ef565b979650505050505050565b606083156200210057508162001fad565b825115620021115782518084602001fd5b8160405162461bcd60e51b81526004016200055b919062002cc7565b610f398062002cdd83390190565b6001600160a01b03811681146200215157600080fd5b50565b803562002161816200213b565b919050565b6000806000606084860312156200217c57600080fd5b8335925060208401359150604084013562002197816200213b565b809150509250925092565b600060208284031215620021b557600080fd5b813562001fad816200213b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620022045762002204620021c2565b604052919050565b600067ffffffffffffffff821115620022295762002229620021c2565b5060051b60200190565b803560ff811681146200216157600080fd5b600082601f8301126200225757600080fd5b81356020620022706200226a836200220c565b620021d8565b82815260059290921b840181019181810190868411156200229057600080fd5b8286015b84811015620022b657620022a88162002233565b835291830191830162002294565b509695505050505050565b600082601f830112620022d357600080fd5b81356020620022e66200226a836200220c565b82815260059290921b840181019181810190868411156200230657600080fd5b8286015b84811015620022b657803583529183019183016200230a565b600080600080600080600080610100898b0312156200234157600080fd5b6200234c8962002154565b9750602089013596506200236360408a0162002154565b95506200237360608a0162002154565b94506080890135935060a089013567ffffffffffffffff808211156200239857600080fd5b620023a68c838d0162002245565b945060c08b0135915080821115620023bd57600080fd5b620023cb8c838d01620022c1565b935060e08b0135915080821115620023e257600080fd5b50620023f18b828c01620022c1565b9150509295985092959890939650565b6000602082840312156200241457600080fd5b5035919050565b600082601f8301126200242d57600080fd5b813567ffffffffffffffff8111156200244a576200244a620021c2565b6200245f601f8201601f1916602001620021d8565b8181528460208386010111156200247557600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215620024b057600080fd5b883567ffffffffffffffff80821115620024c957600080fd5b620024d78c838d016200241b565b995060208b0135915080821115620024ee57600080fd5b620024fc8c838d016200241b565b98506200250c60408c0162002233565b975060608b0135965060808b0135955060a08b01359150808211156200239857600080fd5b600080600080600080600080610100898b0312156200254f57600080fd5b88359750602089013596506200236360408a0162002154565b600080600080608085870312156200257f57600080fd5b84359350602085013567ffffffffffffffff808211156200259f57600080fd5b620025ad8883890162002245565b94506040870135915080821115620025c457600080fd5b620025d288838901620022c1565b93506060870135915080821115620025e957600080fd5b50620025f887828801620022c1565b91505092959194509250565b600080600080600060a086880312156200261d57600080fd5b85356200262a816200213b565b945060208601359350604086013567ffffffffffffffff808211156200264f57600080fd5b6200265d89838a0162002245565b945060608801359150808211156200267457600080fd5b6200268289838a01620022c1565b935060808801359150808211156200269957600080fd5b50620026a888828901620022c1565b9150509295509295909350565b60008083601f840112620026c857600080fd5b50813567ffffffffffffffff811115620026e157600080fd5b6020830191508360208260051b8501011115620026fd57600080fd5b9250929050565b600080600080600080600060c0888a0312156200272057600080fd5b87359650620027326020890162002154565b9550604088013567ffffffffffffffff808211156200275057600080fd5b6200275e8b838c01620026b5565b909750955060608a01359150808211156200277857600080fd5b620027868b838c0162002245565b945060808a01359150808211156200279d57600080fd5b620027ab8b838c01620022c1565b935060a08a0135915080821115620027c257600080fd5b50620027d18a828b01620022c1565b91505092959891949750929550565b600080600080600080600080610100898b031215620027fe57600080fd5b620028098962002154565b9750602089013567ffffffffffffffff808211156200282757600080fd5b620028358c838d016200241b565b985060408b01359150808211156200284c57600080fd5b6200285a8c838d016200241b565b97506200286a60608c0162002233565b965060808b0135955060a08b01359150808211156200239857600080fd5b60208082526033908201527f436f6e74726163742073686f756c6420626520696e697469616c697a6564207460408201527237903ab9b2903a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526042908201527f436f6e74726163742073686f756c64206e6f742062652070726570617265642060408201527f666f72206d6967726174696f6e20746f2075736520746869732066756e63746960608201526137b760f11b608082015260a00190565b6000602082840312156200295657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156200298957620029896200295d565b92915050565b6020808252601390820152721d1e12185cda08185b1c9958591e481d5cd959606a1b604082015260600190565b6020808252601b908201527f50656572207369676e6174757265732061726520696e76616c69640000000000604082015260600190565b60005b8381101562002a10578181015183820152602001620029f6565b50506000910152565b6001600160601b03198860601b1681526000875162002a40816014850160208c01620029f3565b87519083019062002a59816014840160208c01620029f3565b60f89790971b6001600160f81b0319166014919097019081019690965250506015840192909252603583015260558201526075019392505050565b6000815180845262002aae816020860160208601620029f3565b601f01601f19169290920160200192915050565b60c08152600062002ad760c083018962002a94565b828103602084015262002aeb818962002a94565b60ff97909716604084015250506001600160a01b03939093166060840152608083019190915260a09091015292915050565b60006001600160601b0319808960601b168352808860601b16601484015250856028830152604882018560005b8681101562002b7f57813562002b60816200213b565b6001600160a01b03168352602092830192919091019060010162002b4a565b5050928352505060200195945050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162002bbd5762002bbd6200295d565b5060010190565b60006001600160601b0319808a60601b168352808960601b16601484015250865162002bf8816028850160208b01620029f3565b86519083019062002c11816028840160208b01620029f3565b60f89690961b6001600160f81b03191660289190960190810195909552505060298301919091526049820152606901949350505050565b60008262002c6657634e487b7160e01b600052601260045260246000fd5b500490565b60008162002c7d5762002c7d6200295d565b506000190190565b60006020828403121562002c9857600080fd5b8151801515811462001fad57600080fd5b6000825162002cbd818460208701620029f3565b9190910192915050565b60208152600062001fad602083018462002a9456fe60806040523480156200001157600080fd5b5060405162000f3938038062000f39833981016040819052620000349162000238565b85858560036200004584826200037f565b5060046200005483826200037f565b5060058054336101009081026001600160a81b031990921660ff9094169390931717908190556040519190046001600160a01b03169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36006819055620000c58383620000d1565b50505050505062000473565b6001600160a01b038216620000e557600080fd5b80600254620000f591906200044b565b6002556001600160a01b0382166000908152602081905260409020546200011e9082906200044b565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019b57600080fd5b81516001600160401b0380821115620001b857620001b862000173565b604051601f8301601f19908116603f01168101908282118183101715620001e357620001e362000173565b816040528381526020925086838588010111156200020057600080fd5b600091505b8382101562000224578582018301518183018401529082019062000205565b600093810190920192909252949350505050565b60008060008060008060c087890312156200025257600080fd5b86516001600160401b03808211156200026a57600080fd5b620002788a838b0162000189565b975060208901519150808211156200028f57600080fd5b506200029e89828a0162000189565b955050604087015160ff81168114620002b657600080fd5b60608801519094506001600160a01b0381168114620002d457600080fd5b809350506080870151915060a087015190509295509295509295565b600181811c908216806200030557607f821691505b6020821081036200032657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037a57600081815260208120601f850160051c81016020861015620003555750805b601f850160051c820191505b81811015620003765782815560010162000361565b5050505b505050565b81516001600160401b038111156200039b576200039b62000173565b620003b381620003ac8454620002f0565b846200032c565b602080601f831160018114620003eb5760008415620003d25750858301515b600019600386901b1c1916600185901b17855562000376565b600085815260208120601f198616915b828110156200041c57888601518255948401946001909101908401620003fb565b50858210156200043b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200046d57634e487b7160e01b600052601160045260246000fd5b92915050565b610ab680620004836000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610269578063dd62ed3e1461027c578063f0dda65c146102b5578063f2fde38b146102c8578063fcec35a9146102db57600080fd5b806379cc6790146101fa5780638da5cb5b1461020d5780638f32d59b1461023657806395d89b411461024e578063a457c2d71461025657600080fd5b8063313ce567116100f4578063313ce5671461018c57806339509351146101a157806342966c68146101b457806370a08231146101c9578063715018a6146101f257600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102e4565b60405161013b91906108a9565b60405180910390f35b610157610152366004610913565b610376565b604051901515815260200161013b565b6002545b60405190815260200161013b565b61015761018736600461093d565b61038d565b60055460405160ff909116815260200161013b565b6101576101af366004610913565b6103df565b6101c76101c2366004610979565b610416565b005b61016b6101d7366004610992565b6001600160a01b031660009081526020819052604090205490565b6101c7610423565b6101c7610208366004610913565b6104ab565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161013b565b60055461010090046001600160a01b03163314610157565b61012e6104b9565b610157610264366004610913565b6104c8565b610157610277366004610913565b6104ff565b61016b61028a3660046109b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c76102c3366004610913565b61050c565b6101c76102d6366004610992565b610545565b61016b60065481565b6060600380546102f3906109e7565b80601f016020809104026020016040519081016040528092919081815260200182805461031f906109e7565b801561036c5780601f106103415761010080835404028352916020019161036c565b820191906000526020600020905b81548152906001019060200180831161034f57829003601f168201915b5050505050905090565b600061038333848461057d565b5060015b92915050565b600061039a848484610605565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546103d59186916103d0908690610a37565b61057d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a4a565b61042033826106bd565b50565b60055461010090046001600160a01b0316331461045b5760405162461bcd60e51b815260040161045290610a5d565b60405180910390fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6104b58282610759565b5050565b6060600480546102f3906109e7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a37565b6000610383338484610605565b60055461010090046001600160a01b0316331461053b5760405162461bcd60e51b815260040161045290610a5d565b6104b58282610799565b60055461010090046001600160a01b031633146105745760405162461bcd60e51b815260040161045290610a5d565b6104208161082f565b6001600160a01b03821661059057600080fd5b6001600160a01b0383166105a357600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661061857600080fd5b6001600160a01b03831660009081526020819052604090205461063c908290610a37565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461066c908290610a4a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016105f8565b6001600160a01b0382166106d057600080fd5b806002546106de9190610a37565b6002556001600160a01b038216600090815260208190526040902054610705908290610a37565b6001600160a01b03831660008181526020818152604080832094909455925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b61076382826106bd565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546104b59184916103d0908590610a37565b6001600160a01b0382166107ac57600080fd5b806002546107ba9190610a4a565b6002556001600160a01b0382166000908152602081905260409020546107e1908290610a4a565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161074d565b6001600160a01b03811661084257600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600060208083528351808285015260005b818110156108d6578581018301518582016040015282016108ba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461090e57600080fd5b919050565b6000806040838503121561092657600080fd5b61092f836108f7565b946020939093013593505050565b60008060006060848603121561095257600080fd5b61095b846108f7565b9250610969602085016108f7565b9150604084013590509250925092565b60006020828403121561098b57600080fd5b5035919050565b6000602082840312156109a457600080fd5b6109ad826108f7565b9392505050565b600080604083850312156109c757600080fd5b6109d0836108f7565b91506109de602084016108f7565b90509250929050565b600181811c908216806109fb57607f821691505b602082108103610a1b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038757610387610a21565b8082018082111561038757610387610a21565b6020808252600990820152682737ba1037bbb732b960b91b60408201526060019056fea2646970667358221220d96a4ac2182a8d03954d54f90ad66e15291264e94cc7145800b0056a32cd4d4564736f6c63430008110033a2646970667358221220e55b5222d0ee45e253ab08b00b1420d597d870e33ad3b0dcb04adff71339530664736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a1710000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd3710000000000000000000000000000000000000000000000000000000000000003000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d35600000000000000000000000000000000000000000000000000000000000000030200050000000000000000000000000000000000000000000000000000000000008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440020008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c30000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c20000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a7410859800909600000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f550000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c5300000000000000000000000056d811088235f11c8920698a204a5010a788f4b30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c6670000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc900000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e450000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a25800000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c941900000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad250570000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da64290000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7000000000000000000000000e66747a101bff2dba3697199dcce5b743b4547590000000000000000000000000316eb71485b0ab14103307bf65a021042c6d3800000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a2881100000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f5200000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca30000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f972300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc94200000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd300000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb00000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba05900000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e6080000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d8152060000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f480000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae2600000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b6640000000000000000000000004a220e6096b25eadb88358cb44068a324825467500000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf000000000000000000000000408e41876cccdc0f92210600ef50372656052a38000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd930000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e80000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab978020000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a5500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef82800000000000000000000000061107a409fffe1965126aa456af679719695c69c0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c0000000000000000000000005af2be193a6abca9c8817001f45744777db30756000000000000000000000000f411903cbc70a74d22900a5de66a2dda665072550000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f00000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c878810000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb70000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff42720000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Deployed Bytecode
0x608060405260043610620001575760003560e01c8063835c19f311620000bb578063c29bb3321162000079578063c29bb3321462000444578063ca70cf6e146200047a578063cd550947146200049f578063dab4a4c614620004d0578063dfd9db8914620004f5578063fdfba25d146200051a5762000162565b8063835c19f314620001995780638505e868146200039957806389c39baf14620003d3578063ae6664e014620003f8578063b07c411f14620004105762000162565b80633b69828811620001155780633b698288146200026c5780633e44cf7814620002a25780635fde87c514620002d6578063687a82db146200031b57806375273ece146200034f57806375ff82bd14620003745762000162565b806303ef9d1f146200017457806312c6fa1b146200019b578063135f14e214620001e457806316283134146200020957806323ad7de214620002475762000162565b366200016257600080fd5b3480156200016f57600080fd5b600080fd5b3480156200018157600080fd5b50620001996200019336600462002166565b62000531565b005b348015620001a857600080fd5b50620001cf620001ba366004620021a2565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015620001f157600080fd5b50620001996200020336600462002323565b620008cb565b3480156200021657600080fd5b506200022e6200022836600462002401565b62000a94565b6040516001600160a01b039091168152602001620001db565b3480156200025457600080fd5b50620001996200026636600462002492565b62000abf565b3480156200027957600080fd5b506200022e7f000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e481565b348015620002af57600080fd5b50620001cf620002c1366004620021a2565b60016020526000908152604090205460ff1681565b348015620002e357600080fd5b506200030c7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001db565b3480156200032857600080fd5b50620001cf6200033a366004620021a2565b60056020526000908152604090205460ff1681565b3480156200035c57600080fd5b50620001996200036e36600462002531565b62000c5e565b3480156200038157600080fd5b50620001996200039336600462002568565b62000e92565b348015620003a657600080fd5b506200022e620003b836600462002401565b6006602052600090815260409020546001600160a01b031681565b348015620003e057600080fd5b50620001cf620003f236600462002604565b62000ff4565b3480156200040557600080fd5b506200030c60025481565b3480156200041d57600080fd5b50620001cf6200042f36600462002401565b60036020526000908152604090205460ff1681565b3480156200045157600080fd5b506200022e7f00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f67781565b3480156200048757600080fd5b50620001cf6200049936600462002604565b6200116d565b348015620004ac57600080fd5b506200030c620004be366004620021a2565b60076020526000908152604090205481565b348015620004dd57600080fd5b5062000199620004ef36600462002704565b620012bb565b3480156200050257600080fd5b506200019962000514366004620027e0565b62001633565b620001996200052b36600462002401565b620017a3565b60005460ff161515600114620005645760405162461bcd60e51b81526004016200055b9062002888565b60405180910390fd5b600054610100900460ff16156200058f5760405162461bcd60e51b81526004016200055b90620028db565b6001600160a01b038116600090815260076020526040902054819080151580620005ea5750826001600160a01b03167f000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e46001600160a01b0316145b80620006275750826001600160a01b03167f00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f6776001600160a01b0316145b15620006985760405163079cc67960e41b81523360048201526024810185905283906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200067857600080fd5b505af11580156200068d573d6000803e3d6000fd5b505050505062000875565b6001600160a01b03831660009081526005602052604090205460ff166200071e5760405162461bcd60e51b815260206004820152603360248201527f54686520546f6b656e206973206e6f7420616363657074656420666f7220747260448201527230b739b332b9103a379039b4b232b1b430b4b760691b60648201526084016200055b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801562000766573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078c919062002943565b9050620007a56001600160a01b03841633308862001897565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015620007ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000813919062002943565b90508562000822838362002973565b1015620008725760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e73207472616e7366657272656400000060448201526064016200055b565b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60005460ff161515600114620008f55760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff1615620009275760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b821660208401528a811b82166034840152604883018a905288811b8216606884015287901b16607c820152609081018590527f000000000000000000000000000000000000000000000000000000000000000060b0820152620009b99060d0015b604051602081830303815290604052805190602001208484846200190a565b620009d85760405162461bcd60e51b81526004016200055b90620029bc565b6000848152600360205260409020805460ff191660011790556001600160a01b03881662000a3e576040516001600160a01b0387169088156108fc029089906000818181858888f1935050505015801562000a37573d6000803e3d6000fd5b5062000a57565b8762000a556001600160a01b038216888a62001c8b565b505b6040518481527f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9060200160405180910390a15050505050505050565b6008818154811062000aa557600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462000ae95760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff161562000b1b5760405162461bcd60e51b81526004016200055b906200298f565b62000b5e3089898989897f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a979695949392919062002a19565b62000b7d5760405162461bcd60e51b81526004016200055b90620029bc565b600084815260036020526040808220805460ff1916600117905551899089908990309085908b9062000baf906200212d565b62000bc09695949392919062002ac2565b604051809103906000f08015801562000bdd573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b0319958616811790915580845260079092528220989098556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549091169096179095555050505050505050565b60005460ff16151560011462000c885760405162461bcd60e51b81526004016200055b9062002888565b6000888152600660205260409020546001600160a01b031662000cf85760405162461bcd60e51b815260206004820152602160248201527f53696465636861696e206173736574206973206e6f74207265676973746572656044820152601960fa1b60648201526084016200055b565b60008481526003602052604090205460ff161562000d2a5760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b82166020840152603483018b9052605483018a905288811b8216607484015287901b166088820152609c81018590527f000000000000000000000000000000000000000000000000000000000000000060bc82015262000d9f9060dc016200099a565b62000dbe5760405162461bcd60e51b81526004016200055b90620029bc565b6000848152600360209081526040808320805460ff191660011790558a8352600690915290819020549051633c37699760e21b81526001600160a01b038881166004830152602482018a905290911690819063f0dda65c90604401600060405180830381600087803b15801562000e3457600080fd5b505af115801562000e49573d6000803e3d6000fd5b505050507f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b8560405162000e7f91815260200190565b60405180910390a1505050505050505050565b60005460ff16151560011462000ebc5760405162461bcd60e51b81526004016200055b9062002888565b600054610100900460ff161562000ee75760405162461bcd60e51b81526004016200055b90620028db565b60008481526003602052604090205460ff161562000f195760405162461bcd60e51b81526004016200055b906200298f565b6040516f383932b830b932a6b4b3b930ba34b7b760811b60208201526001600160601b03193060601b166030820152604481018590527f0000000000000000000000000000000000000000000000000000000000000000606482015262000f83906084016200099a565b62000fa25760405162461bcd60e51b81526004016200055b90620029bc565b600084815260036020526040808220805460ff19166001179055815461ff001916610100178255517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a150505050565b6000805460ff1615156001146200101f5760405162461bcd60e51b81526004016200055b9062002888565b60008581526003602052604090205460ff1615620010515760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b82166020840152693932b6b7bb32a832b2b960b11b603484015288901b16603e820152605281018690527f00000000000000000000000000000000000000000000000000000000000000006072820152620010db906092015b604051602081830303815290604052805190602001208585856200190a565b620010fa5760405162461bcd60e51b81526004016200055b90620029bc565b6000858152600360205260409020805460ff191660011790556200111e8662001cc2565b604080516001600160a01b0388168152600160208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f991015b60405180910390a150600195945050505050565b6000805460ff161515600114620011985760405162461bcd60e51b81526004016200055b9062002888565b60008581526003602052604090205460ff1615620011ca5760405162461bcd60e51b81526004016200055b906200298f565b6040516001600160601b031930606090811b821660208401526630b2322832b2b960c91b603484015288901b16603b820152604f81018690527f0000000000000000000000000000000000000000000000000000000000000000606f8201526200123790608f01620010bc565b620012565760405162461bcd60e51b81526004016200055b90620029bc565b6000858152600360205260409020805460ff191660011790556200127a8662001d62565b50604080516001600160a01b0388168152600060208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f9910162001159565b60005460ff161515600114620012e55760405162461bcd60e51b81526004016200055b9062002888565b60005460ff6101009091041615156001146200136a5760405162461bcd60e51b815260206004820152603e60248201527f436f6e74726163742073686f756c6420626520707265706172656420666f722060448201527f6d6967726174696f6e20746f2075736520746869732066756e6374696f6e000060648201526084016200055b565b60008781526003602052604090205460ff16156200139c5760405162461bcd60e51b81526004016200055b906200298f565b620013dd30878988887f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a9695949392919062002b1d565b620013fc5760405162461bcd60e51b81526004016200055b90620029bc565b6000878152600360205260408120805460ff19166001179055600854905b81811015620014bf576000600882815481106200143b576200143b62002b92565b60009182526020909120015460405163f2fde38b60e01b81526001600160a01b038b811660048301529091169150819063f2fde38b90602401600060405180830381600087803b1580156200148f57600080fd5b505af1158015620014a4573d6000803e3d6000fd5b50505050508080620014b69062002ba8565b9150506200141a565b508460005b8181101562001598576000888883818110620014e457620014e462002b92565b9050602002016020810190620014fb9190620021a2565b6040516370a0823160e01b815230600482015290915062001582908b906001600160a01b038416906370a0823190602401602060405180830381865afa1580156200154a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001570919062002943565b6001600160a01b038416919062001c8b565b50806200158f8162002ba8565b915050620014c4565b50876001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b158015620015d557600080fd5b505af1158015620015ea573d6000803e3d6000fd5b50506000805460ff1916905550506040516001600160a01b038a1681527fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a5098915060200162000e7f565b60005460ff1615156001146200165d5760405162461bcd60e51b81526004016200055b9062002888565b60008481526003602052604090205460ff16156200168f5760405162461bcd60e51b81526004016200055b906200298f565b6001600160a01b03881660009081526005602052604090205460ff1615620016fa5760405162461bcd60e51b815260206004820152601e60248201527f455243323020746f6b656e206973206e6f742077686974656c6973746564000060448201526064016200055b565b6200173d3089898989897f00000000000000000000000000000000000000000000000000000000000000006040516020016200099a979695949392919062002bc4565b6200175c5760405162461bcd60e51b81526004016200055b90620029bc565b5050506000908152600360209081526040808320805460ff1990811660019081179092556001600160a01b0390981684526005909252909120805490951617909355505050565b60005460ff161515600114620017cd5760405162461bcd60e51b81526004016200055b9062002888565b600054610100900460ff1615620017f85760405162461bcd60e51b81526004016200055b90620028db565b600034116200184a5760405162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e20300060448201526064016200055b565b604080518281523460208201526000918101829052606081018290527f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89060800160405180910390a15050565b6040516001600160a01b0380851660248301528316604482015260648101829052620019049085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e06565b50505050565b600060016002541015620019565760405162461bcd60e51b81526020600482015260126024820152717065657273436f756e7420746f6f206c6f7760701b60448201526064016200055b565b835183518114620019b65760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642072206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b8251811462001a145760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642073206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b60006003600160025462001a29919062002973565b62001a35919062002c48565b60025462001a44919062002973565b90508082101562001a905760405162461bcd60e51b81526020600482015260156024820152746e6f7420656e6f756768207369676e61747572657360581b60448201526064016200055b565b6000808367ffffffffffffffff81111562001aaf5762001aaf620021c2565b60405190808252806020026020018201604052801562001ad9578160200160208202803683370190505b50905060005b8481101562001c1057600062001b4c8b8b848151811062001b045762001b0462002b92565b60200260200101518b858151811062001b215762001b2162002b92565b60200260200101518b868151811062001b3e5762001b3e62002b92565b602002602001015162001edf565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062001b9d57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562001baa575062001bfd565b8083858151811062001bc05762001bc062002b92565b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b62001c088162002ba8565b905062001adf565b5060005b8281101562001c7d5760006004600084848151811062001c385762001c3862002b92565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562001c758162002ba8565b905062001c14565b505010159695505050505050565b6040516001600160a01b03831660248201526044810182905262001cbd90849063a9059cbb60e01b90606401620018cc565b505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462001d295760405162461bcd60e51b81526020600482015260146024820152737065657220646f6573206e6f742065786973747360601b60448201526064016200055b565b6001600160a01b0381166000908152600160205260408120805460ff191690556002805490919062001d5b9062002c6b565b9091555050565b6001600160a01b03811660009081526001602052604081205460ff161562001dc25760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b60448201526064016200055b565b6001600160a01b03821660009081526001602081905260408220805460ff191690911790556002805490919062001df99062002ba8565b9091555050600254919050565b600062001e5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001f999092919063ffffffff16565b80519091501562001cbd578080602001905181019062001e7e919062002c85565b62001cbd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200055b565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018590526000908190605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801562001f83573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b606062001faa848460008562001fb4565b90505b9392505050565b606082471015620020175760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200055b565b6001600160a01b0385163b620020705760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200055b565b600080866001600160a01b031685876040516200208e919062002ca9565b60006040518083038185875af1925050503d8060008114620020cd576040519150601f19603f3d011682016040523d82523d6000602084013e620020d2565b606091505b5091509150620020e4828286620020ef565b979650505050505050565b606083156200210057508162001fad565b825115620021115782518084602001fd5b8160405162461bcd60e51b81526004016200055b919062002cc7565b610f398062002cdd83390190565b6001600160a01b03811681146200215157600080fd5b50565b803562002161816200213b565b919050565b6000806000606084860312156200217c57600080fd5b8335925060208401359150604084013562002197816200213b565b809150509250925092565b600060208284031215620021b557600080fd5b813562001fad816200213b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620022045762002204620021c2565b604052919050565b600067ffffffffffffffff821115620022295762002229620021c2565b5060051b60200190565b803560ff811681146200216157600080fd5b600082601f8301126200225757600080fd5b81356020620022706200226a836200220c565b620021d8565b82815260059290921b840181019181810190868411156200229057600080fd5b8286015b84811015620022b657620022a88162002233565b835291830191830162002294565b509695505050505050565b600082601f830112620022d357600080fd5b81356020620022e66200226a836200220c565b82815260059290921b840181019181810190868411156200230657600080fd5b8286015b84811015620022b657803583529183019183016200230a565b600080600080600080600080610100898b0312156200234157600080fd5b6200234c8962002154565b9750602089013596506200236360408a0162002154565b95506200237360608a0162002154565b94506080890135935060a089013567ffffffffffffffff808211156200239857600080fd5b620023a68c838d0162002245565b945060c08b0135915080821115620023bd57600080fd5b620023cb8c838d01620022c1565b935060e08b0135915080821115620023e257600080fd5b50620023f18b828c01620022c1565b9150509295985092959890939650565b6000602082840312156200241457600080fd5b5035919050565b600082601f8301126200242d57600080fd5b813567ffffffffffffffff8111156200244a576200244a620021c2565b6200245f601f8201601f1916602001620021d8565b8181528460208386010111156200247557600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215620024b057600080fd5b883567ffffffffffffffff80821115620024c957600080fd5b620024d78c838d016200241b565b995060208b0135915080821115620024ee57600080fd5b620024fc8c838d016200241b565b98506200250c60408c0162002233565b975060608b0135965060808b0135955060a08b01359150808211156200239857600080fd5b600080600080600080600080610100898b0312156200254f57600080fd5b88359750602089013596506200236360408a0162002154565b600080600080608085870312156200257f57600080fd5b84359350602085013567ffffffffffffffff808211156200259f57600080fd5b620025ad8883890162002245565b94506040870135915080821115620025c457600080fd5b620025d288838901620022c1565b93506060870135915080821115620025e957600080fd5b50620025f887828801620022c1565b91505092959194509250565b600080600080600060a086880312156200261d57600080fd5b85356200262a816200213b565b945060208601359350604086013567ffffffffffffffff808211156200264f57600080fd5b6200265d89838a0162002245565b945060608801359150808211156200267457600080fd5b6200268289838a01620022c1565b935060808801359150808211156200269957600080fd5b50620026a888828901620022c1565b9150509295509295909350565b60008083601f840112620026c857600080fd5b50813567ffffffffffffffff811115620026e157600080fd5b6020830191508360208260051b8501011115620026fd57600080fd5b9250929050565b600080600080600080600060c0888a0312156200272057600080fd5b87359650620027326020890162002154565b9550604088013567ffffffffffffffff808211156200275057600080fd5b6200275e8b838c01620026b5565b909750955060608a01359150808211156200277857600080fd5b620027868b838c0162002245565b945060808a01359150808211156200279d57600080fd5b620027ab8b838c01620022c1565b935060a08a0135915080821115620027c257600080fd5b50620027d18a828b01620022c1565b91505092959891949750929550565b600080600080600080600080610100898b031215620027fe57600080fd5b620028098962002154565b9750602089013567ffffffffffffffff808211156200282757600080fd5b620028358c838d016200241b565b985060408b01359150808211156200284c57600080fd5b6200285a8c838d016200241b565b97506200286a60608c0162002233565b965060808b0135955060a08b01359150808211156200239857600080fd5b60208082526033908201527f436f6e74726163742073686f756c6420626520696e697469616c697a6564207460408201527237903ab9b2903a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526042908201527f436f6e74726163742073686f756c64206e6f742062652070726570617265642060408201527f666f72206d6967726174696f6e20746f2075736520746869732066756e63746960608201526137b760f11b608082015260a00190565b6000602082840312156200295657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156200298957620029896200295d565b92915050565b6020808252601390820152721d1e12185cda08185b1c9958591e481d5cd959606a1b604082015260600190565b6020808252601b908201527f50656572207369676e6174757265732061726520696e76616c69640000000000604082015260600190565b60005b8381101562002a10578181015183820152602001620029f6565b50506000910152565b6001600160601b03198860601b1681526000875162002a40816014850160208c01620029f3565b87519083019062002a59816014840160208c01620029f3565b60f89790971b6001600160f81b0319166014919097019081019690965250506015840192909252603583015260558201526075019392505050565b6000815180845262002aae816020860160208601620029f3565b601f01601f19169290920160200192915050565b60c08152600062002ad760c083018962002a94565b828103602084015262002aeb818962002a94565b60ff97909716604084015250506001600160a01b03939093166060840152608083019190915260a09091015292915050565b60006001600160601b0319808960601b168352808860601b16601484015250856028830152604882018560005b8681101562002b7f57813562002b60816200213b565b6001600160a01b03168352602092830192919091019060010162002b4a565b5050928352505060200195945050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162002bbd5762002bbd6200295d565b5060010190565b60006001600160601b0319808a60601b168352808960601b16601484015250865162002bf8816028850160208b01620029f3565b86519083019062002c11816028840160208b01620029f3565b60f89690961b6001600160f81b03191660289190960190810195909552505060298301919091526049820152606901949350505050565b60008262002c6657634e487b7160e01b600052601260045260246000fd5b500490565b60008162002c7d5762002c7d6200295d565b506000190190565b60006020828403121562002c9857600080fd5b8151801515811462001fad57600080fd5b6000825162002cbd818460208701620029f3565b9190910192915050565b60208152600062001fad602083018462002a9456fe60806040523480156200001157600080fd5b5060405162000f3938038062000f39833981016040819052620000349162000238565b85858560036200004584826200037f565b5060046200005483826200037f565b5060058054336101009081026001600160a81b031990921660ff9094169390931717908190556040519190046001600160a01b03169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36006819055620000c58383620000d1565b50505050505062000473565b6001600160a01b038216620000e557600080fd5b80600254620000f591906200044b565b6002556001600160a01b0382166000908152602081905260409020546200011e9082906200044b565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019b57600080fd5b81516001600160401b0380821115620001b857620001b862000173565b604051601f8301601f19908116603f01168101908282118183101715620001e357620001e362000173565b816040528381526020925086838588010111156200020057600080fd5b600091505b8382101562000224578582018301518183018401529082019062000205565b600093810190920192909252949350505050565b60008060008060008060c087890312156200025257600080fd5b86516001600160401b03808211156200026a57600080fd5b620002788a838b0162000189565b975060208901519150808211156200028f57600080fd5b506200029e89828a0162000189565b955050604087015160ff81168114620002b657600080fd5b60608801519094506001600160a01b0381168114620002d457600080fd5b809350506080870151915060a087015190509295509295509295565b600181811c908216806200030557607f821691505b6020821081036200032657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037a57600081815260208120601f850160051c81016020861015620003555750805b601f850160051c820191505b81811015620003765782815560010162000361565b5050505b505050565b81516001600160401b038111156200039b576200039b62000173565b620003b381620003ac8454620002f0565b846200032c565b602080601f831160018114620003eb5760008415620003d25750858301515b600019600386901b1c1916600185901b17855562000376565b600085815260208120601f198616915b828110156200041c57888601518255948401946001909101908401620003fb565b50858210156200043b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200046d57634e487b7160e01b600052601160045260246000fd5b92915050565b610ab680620004836000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610269578063dd62ed3e1461027c578063f0dda65c146102b5578063f2fde38b146102c8578063fcec35a9146102db57600080fd5b806379cc6790146101fa5780638da5cb5b1461020d5780638f32d59b1461023657806395d89b411461024e578063a457c2d71461025657600080fd5b8063313ce567116100f4578063313ce5671461018c57806339509351146101a157806342966c68146101b457806370a08231146101c9578063715018a6146101f257600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102e4565b60405161013b91906108a9565b60405180910390f35b610157610152366004610913565b610376565b604051901515815260200161013b565b6002545b60405190815260200161013b565b61015761018736600461093d565b61038d565b60055460405160ff909116815260200161013b565b6101576101af366004610913565b6103df565b6101c76101c2366004610979565b610416565b005b61016b6101d7366004610992565b6001600160a01b031660009081526020819052604090205490565b6101c7610423565b6101c7610208366004610913565b6104ab565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161013b565b60055461010090046001600160a01b03163314610157565b61012e6104b9565b610157610264366004610913565b6104c8565b610157610277366004610913565b6104ff565b61016b61028a3660046109b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c76102c3366004610913565b61050c565b6101c76102d6366004610992565b610545565b61016b60065481565b6060600380546102f3906109e7565b80601f016020809104026020016040519081016040528092919081815260200182805461031f906109e7565b801561036c5780601f106103415761010080835404028352916020019161036c565b820191906000526020600020905b81548152906001019060200180831161034f57829003601f168201915b5050505050905090565b600061038333848461057d565b5060015b92915050565b600061039a848484610605565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546103d59186916103d0908690610a37565b61057d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a4a565b61042033826106bd565b50565b60055461010090046001600160a01b0316331461045b5760405162461bcd60e51b815260040161045290610a5d565b60405180910390fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6104b58282610759565b5050565b6060600480546102f3906109e7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a37565b6000610383338484610605565b60055461010090046001600160a01b0316331461053b5760405162461bcd60e51b815260040161045290610a5d565b6104b58282610799565b60055461010090046001600160a01b031633146105745760405162461bcd60e51b815260040161045290610a5d565b6104208161082f565b6001600160a01b03821661059057600080fd5b6001600160a01b0383166105a357600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661061857600080fd5b6001600160a01b03831660009081526020819052604090205461063c908290610a37565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461066c908290610a4a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016105f8565b6001600160a01b0382166106d057600080fd5b806002546106de9190610a37565b6002556001600160a01b038216600090815260208190526040902054610705908290610a37565b6001600160a01b03831660008181526020818152604080832094909455925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b61076382826106bd565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546104b59184916103d0908590610a37565b6001600160a01b0382166107ac57600080fd5b806002546107ba9190610a4a565b6002556001600160a01b0382166000908152602081905260409020546107e1908290610a4a565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161074d565b6001600160a01b03811661084257600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600060208083528351808285015260005b818110156108d6578581018301518582016040015282016108ba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461090e57600080fd5b919050565b6000806040838503121561092657600080fd5b61092f836108f7565b946020939093013593505050565b60008060006060848603121561095257600080fd5b61095b846108f7565b9250610969602085016108f7565b9150604084013590509250925092565b60006020828403121561098b57600080fd5b5035919050565b6000602082840312156109a457600080fd5b6109ad826108f7565b9392505050565b600080604083850312156109c757600080fd5b6109d0836108f7565b91506109de602084016108f7565b90509250929050565b600181811c908216806109fb57607f821691505b602082108103610a1b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038757610387610a21565b8082018082111561038757610387610a21565b6020808252600990820152682737ba1037bbb732b960b91b60408201526060019056fea2646970667358221220d96a4ac2182a8d03954d54f90ad66e15291264e94cc7145800b0056a32cd4d4564736f6c63430008110033a2646970667358221220e55b5222d0ee45e253ab08b00b1420d597d870e33ad3b0dcb04adff71339530664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a1710000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd3710000000000000000000000000000000000000000000000000000000000000003000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d35600000000000000000000000000000000000000000000000000000000000000030200050000000000000000000000000000000000000000000000000000000000008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440020008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c30000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c20000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a7410859800909600000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f550000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c5300000000000000000000000056d811088235f11c8920698a204a5010a788f4b30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c6670000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc900000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e450000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a25800000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c941900000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad250570000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da64290000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7000000000000000000000000e66747a101bff2dba3697199dcce5b743b4547590000000000000000000000000316eb71485b0ab14103307bf65a021042c6d3800000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a2881100000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f5200000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca30000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f972300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc94200000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd300000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb00000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba05900000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e6080000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d8152060000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f480000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae2600000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b6640000000000000000000000004a220e6096b25eadb88358cb44068a324825467500000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf000000000000000000000000408e41876cccdc0f92210600ef50372656052a38000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd930000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e80000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab978020000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a5500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef82800000000000000000000000061107a409fffe1965126aa456af679719695c69c0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c0000000000000000000000005af2be193a6abca9c8817001f45744777db30756000000000000000000000000f411903cbc70a74d22900a5de66a2dda665072550000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f00000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c878810000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb70000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff42720000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
-----Decoded View---------------
Arg [0] : initialPeers (address[]): 0x6C9E8391a0444c739e7e2edd37A2C6e3381b1cbF,0xEf22D478a53bc8BBe854ceF8bA2eb79C49A1a171,0x6219D0BA6A0BAfA69CD2B1B15633a3FD864Dd371
Arg [1] : sidechainTokenAddresses (address[]): 0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB,0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA,0xc7D9c108D4E1dD1484D3e2568d7f74bfD763d356
Arg [2] : sidechainAssetIds (bytes32[]): System.Byte[],System.Byte[],System.Byte[]
Arg [3] : erc20Addresses (address[]): 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9,0xADE00C28244d5CE17D72E40330B1c318cD12B7c3,0x8Ab7404063Ec4DBcfd4598215992DC3F8EC853d7,0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF,0x27702a26126e0B3702af63Ee09aC4d1A084EF628,0xa1faa113cbE53436Df28FF0aEe54275c13B40975,0xfF20817765cB7f73d4bde2e66e067E58D11095C2,0x8290333ceF9e6D528dD5618Fb97a76f268f3EDD4,0xa117000000f279D81A1D3cc75430fAA017FA5A2e,0xA9B1Eb5908CfC3cdf91F9B8B3a74108598009096,0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998,0xF5D669627376EBd411E34b98F19C868c8ABA5ADA,0x3472A5A71965499acd81997a54BBA8D852C6E53d,0xba100000625a3754423978a60c9317c58a424e3D,0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55,0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C,0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85,0xcB97e65F07DA24D46BcDD078EBebd7C6E6E3d750,0xcca0c9c383076649604eE31b20248BC04FdF61cA,0x4Fabb145d64652a948d72533023f6E7A623C7C53,0x56d811088235F11C8920698a204A5010a788f4b3,0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d,0x4F9254C83EB525f9FCf346490bbb3ed28a81C667,0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5,0x3506424F91fD33084466F402d5D97f05F8e3b4AF,0xc00e94Cb662C3520282E6f5717214004A7f26888,0x115eC79F1de567eC68B7AE7eDA501b406626478e,0x2ba592F78dB6436527729929AAf6c908497cB200,0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b,0x32a7C02e79c4ea1008dD6564b35F131428673c41,0xD533a949740bb3306d119CC777fa900bA034cd52,0x35A18000230DA775CAc24873d00Ff85BccdeD550,0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9,0x41e5560054824eA6B0732E656E3Ad64E20e94E45,0x6B175474E89094C44Da98b954EedeAC495271d0F,0x3597bfD533a99c9aa083587B074434E61Eb0A258,0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419,0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd,0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e,0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c,0xBBc2AE13b23d715c30720F079fcd9B4a74093505,0xd33D0EB1c0c0295c3A2409a9101dd511823Bf217,0xa0246c9032bC3A600820415aE600c6388619A14D,0x956F47F50A910163D8BF957Cf5846D573E7f87CA,0xaea46A60368A7bD060eec7DF8CBa43b7EF41Ad85,0xef3A930e1FfFFAcd2fc13434aC81bD278B0ecC8d,0xF6eA0E60cee427B90aA36f327eE61d1d4CABC49F,0xf8C3527CC04340b208C854E985240c02F7B7793f,0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9,0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b,0x8c15Ef5b4B21951d50E53E4fbdA8298FFAD25057,0x7DD9c5Cba05E151C895FDe1CF355C9A1D5DA6429,0x6810e776880C02933D47DB1b9fc05908e5386b96,0xb1f871Ae9462F1b2C6826E88A7827e76f86751d4,0xc944E90C64B2c07662A292be6244BDf05Cda44a7,0xE66747a101bFF2dBA3697199DCcE5b743b454759,0x0316EB71485b0Ab14103307bf65a021042c6d380,0x6c6EE5e31d828De241282B9606C8e98Ea48526E2,0xdF574c24545E5FfEcb9a659c229253D4111d87e1,0xB705268213D593B8FD88d3FDEFF93AFF5CbDcfAE,0xD9Ec3ff1f8be459Bb9369b4E79e9Ebcf7141C093,0xf34960d9d60be18cC1D5Afc1A6F012A723a28811,0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC,0xdd974D5C2e2928deA5F71b9825b8b646686BD200,0xCb4e8CafEDa995da5cEdfda5205BD5664a12b848,0xaC1B818E9F1Fb4e34413d631cB298FBc8A986f52,0x67B6D479c7bB412C54e03dCA8E1Bc6740ce6b99C,0x2AF5D2aD76741191D15Dfe7bF6aC92d4Bd912Ca3,0x3E9BC21C9b189C09dF3eF1B824798658d5011937,0x514910771AF9Ca656af840dff83E8264EcF986CA,0xb59490aB09A0f526Cc7305822aC65f2Ab12f9723,0x58b6A8A3302369DAEc383334672404Ee733aB239,0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD,0x5f98805A4E8be255a32880FDeC7F6728C6568bA0,0x0F5D2fB29fb7d3CFeE444a200298f468908cC942,0x08d967bb0134F2d07f7cfb6E246680c53927DD30,0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0,0x0CDF9acd87E940837ff21BB40c9fd55F68bba059,0x09a3EcAFa817268f77BE1283176B946C4ff2E608,0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2,0xF433089366899D83a9f26A773D59ec7eCF30355e,0x5Ca381bBfb58f0092df149bD3D243b08B9a8386e,0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206,0x5Cf04716BA20127F1E2297AdDCf4B5035000c9eb,0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671,0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca,0xd7c49CEE7E9188cCa6AD8FF264C1DA2e69D4Cf3B,0x967da4048cD07aB37855c090aAF366e4ce1b9F48,0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26,0x75231F58b43240C9718Dd58B4967c5114342a86c,0xd26114cd6EE289AccF82350c8d8487fedB8A0C07,0xff56Cc6b1E6dEd347aA0B7676C85AB0B3D08B0FA,0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a,0x8E870D67F660D95d5be530380D0eC0bd388289E1,0xF59ae934f6fe444afC309586cC60a84a0F89Aaea,0x6c5bA91642F10282b576d91922Ae6448C9d52f4E,0x89Ab32156e46F46D02ade3FEcbe5Fc4243B9AAeD,0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC,0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a,0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664,0x4a220E6096B25EADb88358cb44068A3248254675,0x93dfaf57D986B9cA77Df9376c50878E013D9c7C8,0xD01cb3d113a864763DD3977FE1E725860013b0Ed,0x505f5a4fF10985FE9F93f2aE3501dA5fE665F08A,0xFE3E6a25e6b192A42a44ecDDCd13796471735ACf,0x408e41876cCCDC0F92210600ef50372656052a38,0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D,0x221657776846890989a759BA2973e427DfF5C9bB,0x9559Aaa82d9649C7A7b220E7c461d2E74c9a3593,0xC82eb6dEa0c93EDb8B697B89ad1b13d19469D635,0xa1d6Df714F91DeBF4e0802A542E13067f31b8262,0x3c3842c4d3037Ae121d69eA1e7a0b61413BE806C,0x607F4C5BB672230e8672085532f7e901544a7375,0xfA5047c9c78B8877af97BDcb85Db743fD7313d4a,0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64,0xB4EFd85c19999D84251304bDA99E90B92300Bd93,0x8762db106B2c2A0bccB3A80d1Ed41273552616E8,0x3155BA85D5F96b2d030a4966AF206230e46849cb,0x08AD83D779BDf2BBE1ad9cc0f78aa0D24AB97802,0x3845badAde8e6dFF049820680d1F14bD3903a5d0,0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb,0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7,0x744d70FDBE2Ba4CF95131626614a1763DF805B9E,0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F,0x0Ae055097C6d159879521C384F1D2123D1f195e6,0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84,0xbE9375C6a420D2eEB258962efB95551A5b722803,0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC,0xDe7D85157d9714EADf595045CC12Ca4A5f3E2aDb,0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55,0x57Ab1ec28D129707052df4dF418D58a2D46d5f51,0x6B3595068778DD592e39A122f4f5a5cF09C90fE2,0xCC4304A31d09258b0029eA7FE63d032f52e44EFe,0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9,0x467Bccd9d29f223BcE8043b84E8C8B282827790F,0x3A8cCCB969a61532d1E6005e2CE12C200caeCe87,0x888888848B652B3E3a0f34c96E00EEC0F3a23F72,0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F,0x88dF592F8eb5D7Bd38bFeF7dEb0fBc02cf3778a0,0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B,0x0000000000085d4780B73119b644AE5ecd22b376,0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF,0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e,0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828,0x61107a409fFFe1965126aa456Af679719695C69C,0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984,0xD13c7342e1ef687C5ad21b27c2b65D772cAb5C8c,0x8806926Ab68EB5a7b909DcAf6FdBe5d93271D6e2,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0x674C6Ad92Fd080e4004b2312b45f796a192D27a0,0xdAC17F958D2ee523a2206206994597C13D831ec7,0xa47c8bf37f92aBed4A126BDA807A7b7498661acD,0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c,0x5Af2Be193a6ABCa9c8817001F45744777Db30756,0xF411903cbC70a74d22900a5DE66A2dda66507255,0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xc221b7E65FfC80DE234bbB6667aBDd46593D34F0,0x4691937a7508860F876c9c0a2a617E7d9E945D4B,0x892A6f9dF0147e5f079b0993F486F9acA3c87881,0x6FCb6408499a7c0f242E32D77EB51fFa1dD28a7E,0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7,0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272,0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e,0xe4815AE53B124e7263F08dcDBBB757d41Ed658c6,0xaa602dE53347579f86b996D2Add74bb6F79462b2,0xE41d2489571d322189246DaFA5ebDe1F4699F498
Arg [4] : addressVAL (address): 0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4
Arg [5] : addressXOR (address): 0x40FD72257597aA14C7231A7B1aaa29Fce868F677
Arg [6] : networkId (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
187 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e4
Arg [5] : 00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 0000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf
Arg [9] : 000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a171
Arg [10] : 0000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd371
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [12] : 000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb
Arg [13] : 0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada
Arg [14] : 000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d356
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [16] : 0200050000000000000000000000000000000000000000000000000000000000
Arg [17] : 008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440
Arg [18] : 0200080000000000000000000000000000000000000000000000000000000000
Arg [19] : 00000000000000000000000000000000000000000000000000000000000000a7
Arg [20] : 0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
Arg [21] : 000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c3
Arg [22] : 0000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7
Arg [23] : 000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df
Arg [24] : 00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628
Arg [25] : 000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975
Arg [26] : 000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c2
Arg [27] : 0000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4
Arg [28] : 000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e
Arg [29] : 000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a74108598009096
Arg [30] : 00000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998
Arg [31] : 000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada
Arg [32] : 0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d
Arg [33] : 000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d
Arg [34] : 000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f55
Arg [35] : 0000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c
Arg [36] : 000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85
Arg [37] : 000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750
Arg [38] : 000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca
Arg [39] : 0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53
Arg [40] : 00000000000000000000000056d811088235f11c8920698a204a5010a788f4b3
Arg [41] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [42] : 000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d
Arg [43] : 0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c667
Arg [44] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [45] : 0000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af
Arg [46] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [47] : 000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e
Arg [48] : 0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200
Arg [49] : 000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b
Arg [50] : 00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41
Arg [51] : 000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52
Arg [52] : 00000000000000000000000035a18000230da775cac24873d00ff85bccded550
Arg [53] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [54] : 00000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e45
Arg [55] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [56] : 0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a258
Arg [57] : 00000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c9419
Arg [58] : 00000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd
Arg [59] : 000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e
Arg [60] : 000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c
Arg [61] : 000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505
Arg [62] : 000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217
Arg [63] : 000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d
Arg [64] : 000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca
Arg [65] : 000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85
Arg [66] : 000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d
Arg [67] : 000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f
Arg [68] : 000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f
Arg [69] : 00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9
Arg [70] : 000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b
Arg [71] : 0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad25057
Arg [72] : 0000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da6429
Arg [73] : 0000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96
Arg [74] : 000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4
Arg [75] : 000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7
Arg [76] : 000000000000000000000000e66747a101bff2dba3697199dcce5b743b454759
Arg [77] : 0000000000000000000000000316eb71485b0ab14103307bf65a021042c6d380
Arg [78] : 0000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2
Arg [79] : 000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1
Arg [80] : 000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae
Arg [81] : 000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093
Arg [82] : 000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a28811
Arg [83] : 00000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec
Arg [84] : 000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200
Arg [85] : 000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848
Arg [86] : 000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f52
Arg [87] : 00000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c
Arg [88] : 0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca3
Arg [89] : 0000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937
Arg [90] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [91] : 000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f9723
Arg [92] : 00000000000000000000000058b6a8a3302369daec383334672404ee733ab239
Arg [93] : 000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd
Arg [94] : 0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0
Arg [95] : 0000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc942
Arg [96] : 00000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd30
Arg [97] : 0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0
Arg [98] : 0000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba059
Arg [99] : 00000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e608
Arg [100] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [101] : 000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e
Arg [102] : 0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e
Arg [103] : 000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d815206
Arg [104] : 0000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb
Arg [105] : 0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671
Arg [106] : 000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca
Arg [107] : 000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b
Arg [108] : 000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f48
Arg [109] : 0000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae26
Arg [110] : 00000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c
Arg [111] : 000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07
Arg [112] : 000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa
Arg [113] : 0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a
Arg [114] : 0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1
Arg [115] : 000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea
Arg [116] : 0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e
Arg [117] : 00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed
Arg [118] : 0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec
Arg [119] : 000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a
Arg [120] : 000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b664
Arg [121] : 0000000000000000000000004a220e6096b25eadb88358cb44068a3248254675
Arg [122] : 00000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8
Arg [123] : 000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed
Arg [124] : 000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a
Arg [125] : 000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf
Arg [126] : 000000000000000000000000408e41876cccdc0f92210600ef50372656052a38
Arg [127] : 000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d
Arg [128] : 000000000000000000000000221657776846890989a759ba2973e427dff5c9bb
Arg [129] : 0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593
Arg [130] : 000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635
Arg [131] : 000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b8262
Arg [132] : 0000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c
Arg [133] : 000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375
Arg [134] : 000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a
Arg [135] : 000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64
Arg [136] : 000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd93
Arg [137] : 0000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e8
Arg [138] : 0000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb
Arg [139] : 00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab97802
Arg [140] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [141] : 0000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb
Arg [142] : 00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7
Arg [143] : 000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e
Arg [144] : 000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f
Arg [145] : 0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6
Arg [146] : 000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84
Arg [147] : 000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803
Arg [148] : 000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac
Arg [149] : 000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb
Arg [150] : 000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a55
Arg [151] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [152] : 0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2
Arg [153] : 000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe
Arg [154] : 0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9
Arg [155] : 000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f
Arg [156] : 0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87
Arg [157] : 000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72
Arg [158] : 000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f
Arg [159] : 00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0
Arg [160] : 000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b
Arg [161] : 0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376
Arg [162] : 000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df
Arg [163] : 0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e
Arg [164] : 00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef828
Arg [165] : 00000000000000000000000061107a409fffe1965126aa456af679719695c69c
Arg [166] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [167] : 000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c
Arg [168] : 0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2
Arg [169] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [170] : 000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0
Arg [171] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [172] : 000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd
Arg [173] : 000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c
Arg [174] : 0000000000000000000000005af2be193a6abca9c8817001f45744777db30756
Arg [175] : 000000000000000000000000f411903cbc70a74d22900a5de66a2dda66507255
Arg [176] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [177] : 000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f0
Arg [178] : 0000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b
Arg [179] : 000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c87881
Arg [180] : 0000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e
Arg [181] : 0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb7
Arg [182] : 0000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff4272
Arg [183] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [184] : 000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6
Arg [185] : 000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2
Arg [186] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
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.