More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 785 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer With Re... | 20219772 | 5 hrs ago | IN | 0.00324472 ETH | 0.00111325 | ||||
Transfer With Re... | 20219714 | 5 hrs ago | IN | 0.00324472 ETH | 0.00104663 | ||||
Transfer With Re... | 20219634 | 5 hrs ago | IN | 0.00755993 ETH | 0.00106073 | ||||
Transfer With Re... | 20212714 | 28 hrs ago | IN | 0.29717339 ETH | 0.00123145 | ||||
Transfer With Re... | 20210788 | 35 hrs ago | IN | 0.01480608 ETH | 0.00055729 | ||||
Transfer With Re... | 20210637 | 35 hrs ago | IN | 0.29612166 ETH | 0.00066817 | ||||
Transfer With Re... | 20209240 | 40 hrs ago | IN | 0.02945336 ETH | 0.00031864 | ||||
Transfer With Re... | 20205282 | 2 days ago | IN | 0.01520245 ETH | 0.00044738 | ||||
Transfer With Re... | 20196435 | 3 days ago | IN | 0.01520863 ETH | 0.00021629 | ||||
Transfer With Re... | 20195966 | 3 days ago | IN | 0.22768306 ETH | 0.00025445 | ||||
Transfer With Re... | 20195189 | 3 days ago | IN | 0.30436414 ETH | 0.00033833 | ||||
Transfer With Re... | 20191822 | 4 days ago | IN | 0.03049049 ETH | 0.0004023 | ||||
Transfer With Re... | 20191363 | 4 days ago | IN | 0.06071108 ETH | 0.00142723 | ||||
Transfer With Re... | 20191123 | 4 days ago | IN | 0.03025439 ETH | 0.00099132 | ||||
Transfer With Re... | 20191110 | 4 days ago | IN | 0.60508785 ETH | 0.00107129 | ||||
Transfer With Re... | 20184002 | 5 days ago | IN | 0.17334469 ETH | 0.00136624 | ||||
Transfer With Re... | 20169080 | 7 days ago | IN | 0.0461913 ETH | 0.00116685 | ||||
Transfer With Re... | 20146190 | 10 days ago | IN | 0.01486047 ETH | 0.00028837 | ||||
Transfer With Re... | 20140978 | 11 days ago | IN | 0.29685332 ETH | 0.00081938 | ||||
Transfer With Re... | 20140963 | 11 days ago | IN | 0.05937066 ETH | 0.0007338 | ||||
Transfer With Re... | 20140932 | 11 days ago | IN | 0.11874132 ETH | 0.00089532 | ||||
Transfer With Re... | 20140167 | 11 days ago | IN | 0.00031625 ETH | 0.00105243 | ||||
Transfer With Re... | 20139074 | 11 days ago | IN | 0.07474931 ETH | 0.00149789 | ||||
Transfer With Re... | 20131888 | 12 days ago | IN | 0.00030754 ETH | 0.00173302 | ||||
Transfer With Re... | 20121771 | 13 days ago | IN | 0.01491745 ETH | 0.00056831 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20219772 | 5 hrs ago | 0.0000945 ETH | ||||
20219772 | 5 hrs ago | 0.00315021 ETH | ||||
20219714 | 5 hrs ago | 0.0000945 ETH | ||||
20219714 | 5 hrs ago | 0.00315021 ETH | ||||
20219634 | 5 hrs ago | 0.00022019 ETH | ||||
20219634 | 5 hrs ago | 0.00733974 ETH | ||||
20212714 | 28 hrs ago | 0.00865553 ETH | ||||
20212714 | 28 hrs ago | 0.28851785 ETH | ||||
20210788 | 35 hrs ago | 0.00043124 ETH | ||||
20210788 | 35 hrs ago | 0.01437483 ETH | ||||
20210637 | 35 hrs ago | 0.0086249 ETH | ||||
20210637 | 35 hrs ago | 0.28749675 ETH | ||||
20209240 | 40 hrs ago | 0.00085786 ETH | ||||
20209240 | 40 hrs ago | 0.0285955 ETH | ||||
20205282 | 2 days ago | 0.00044278 ETH | ||||
20205282 | 2 days ago | 0.01475966 ETH | ||||
20196447 | 3 days ago | 0.0310079 ETH | ||||
20196447 | 3 days ago | 1.03359683 ETH | ||||
20196447 | 3 days ago | 1.06460473 ETH | ||||
20196435 | 3 days ago | 0.00044297 ETH | ||||
20196435 | 3 days ago | 0.01476566 ETH | ||||
20195966 | 3 days ago | 0.00663154 ETH | ||||
20195966 | 3 days ago | 0.22105152 ETH | ||||
20195189 | 3 days ago | 0.00886497 ETH | ||||
20195189 | 3 days ago | 0.29549917 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
EthConversionProxy
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import './ChainlinkConversionPath.sol'; import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; import './legacy_openzeppelin/contracts/access/roles/WhitelistAdminRole.sol'; /** * @title EthConversionProxy * @notice This contract converts from chainlink then swaps ETH (or native token) * before paying a request thanks to a conversion payment proxy. * The inheritance from ReentrancyGuard is required to perform * "transferExactEthWithReferenceAndFee" on the eth-fee-proxy contract */ contract EthConversionProxy is ReentrancyGuard, WhitelistAdminRole { address public paymentProxy; ChainlinkConversionPath public chainlinkConversionPath; address public nativeTokenHash; constructor( address _paymentProxyAddress, address _chainlinkConversionPathAddress, address _nativeTokenHash ) { paymentProxy = _paymentProxyAddress; chainlinkConversionPath = ChainlinkConversionPath(_chainlinkConversionPathAddress); nativeTokenHash = _nativeTokenHash; } // Event to declare a conversion with a reference event TransferWithConversionAndReference( uint256 amount, address currency, bytes indexed paymentReference, uint256 feeAmount, uint256 maxRateTimespan ); // Event to declare a transfer with a reference // This event is emitted by this contract from a delegate call of the payment-proxy event TransferWithReferenceAndFee( address to, uint256 amount, bytes indexed paymentReference, uint256 feeAmount, address feeAddress ); /** * @notice Performs an ETH transfer with a reference computing the payment amount based on the request amount * @param _to Transfer recipient of the payement * @param _requestAmount Request amount * @param _path Conversion path * @param _paymentReference Reference of the payment related * @param _feeAmount The amount of the payment fee * @param _feeAddress The fee recipient * @param _maxRateTimespan Max time span with the oldestrate, ignored if zero */ function transferWithReferenceAndFee( address _to, uint256 _requestAmount, address[] calldata _path, bytes calldata _paymentReference, uint256 _feeAmount, address _feeAddress, uint256 _maxRateTimespan ) external payable { require( _path[_path.length - 1] == nativeTokenHash, 'payment currency must be the native token' ); (uint256 amountToPay, uint256 amountToPayInFees) = getConversions( _path, _requestAmount, _feeAmount, _maxRateTimespan ); // Pay the request and fees (bool status, ) = paymentProxy.delegatecall( abi.encodeWithSignature( 'transferExactEthWithReferenceAndFee(address,uint256,bytes,uint256,address)', _to, amountToPay, _paymentReference, amountToPayInFees, _feeAddress ) ); require(status, 'paymentProxy transferExactEthWithReferenceAndFee failed'); // Event to declare a transfer with a reference emit TransferWithConversionAndReference( _requestAmount, // request currency _path[0], _paymentReference, _feeAmount, _maxRateTimespan ); } function getConversions( address[] memory _path, uint256 _requestAmount, uint256 _feeAmount, uint256 _maxRateTimespan ) internal view returns (uint256 amountToPay, uint256 amountToPayInFees) { (uint256 rate, uint256 oldestTimestampRate, uint256 decimals) = chainlinkConversionPath .getRate(_path); // Check rate timespan require( _maxRateTimespan == 0 || block.timestamp - oldestTimestampRate <= _maxRateTimespan, 'aggregator rate is outdated' ); // Get the amount to pay in the native token amountToPay = (_requestAmount * rate) / decimals; amountToPayInFees = (_feeAmount * rate) / decimals; } /** * @notice Update the conversion path contract used to fetch conversions * @param _chainlinkConversionPathAddress address of the conversion path contract */ function updateConversionPathAddress(address _chainlinkConversionPathAddress) external onlyWhitelistAdmin { chainlinkConversionPath = ChainlinkConversionPath(_chainlinkConversionPathAddress); } /** * @notice Update the conversion proxy used to process the payment * @param _paymentProxyAddress address of the ETH conversion proxy */ function updateConversionProxyAddress(address _paymentProxyAddress) external onlyWhitelistAdmin { paymentProxy = _paymentProxyAddress; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import './legacy_openzeppelin/contracts/access/roles/WhitelistAdminRole.sol'; interface ERC20fraction { function decimals() external view returns (uint8); } interface AggregatorFraction { function decimals() external view returns (uint8); function latestAnswer() external view returns (int256); function latestTimestamp() external view returns (uint256); } /** * @title ChainlinkConversionPath * * @notice ChainlinkConversionPath is a contract computing currency conversion rates based on Chainlink aggretators */ contract ChainlinkConversionPath is WhitelistAdminRole { uint256 constant PRECISION = 1e18; uint256 constant NATIVE_TOKEN_DECIMALS = 18; uint256 constant FIAT_DECIMALS = 8; address public nativeTokenHash; /** * @param _nativeTokenHash hash of the native token */ constructor(address _nativeTokenHash) { nativeTokenHash = _nativeTokenHash; } // Mapping of Chainlink aggregators (input currency => output currency => contract address) // input & output currencies are the addresses of the ERC20 contracts OR the sha3("currency code") mapping(address => mapping(address => address)) public allAggregators; // declare a new aggregator event AggregatorUpdated(address _input, address _output, address _aggregator); /** * @notice Update an aggregator * @param _input address representing the input currency * @param _output address representing the output currency * @param _aggregator address of the aggregator contract */ function updateAggregator( address _input, address _output, address _aggregator ) external onlyWhitelistAdmin { allAggregators[_input][_output] = _aggregator; emit AggregatorUpdated(_input, _output, _aggregator); } /** * @notice Update a list of aggregators * @param _inputs list of addresses representing the input currencies * @param _outputs list of addresses representing the output currencies * @param _aggregators list of addresses of the aggregator contracts */ function updateAggregatorsList( address[] calldata _inputs, address[] calldata _outputs, address[] calldata _aggregators ) external onlyWhitelistAdmin { require(_inputs.length == _outputs.length, 'arrays must have the same length'); require(_inputs.length == _aggregators.length, 'arrays must have the same length'); // For every conversions of the path for (uint256 i; i < _inputs.length; i++) { allAggregators[_inputs[i]][_outputs[i]] = _aggregators[i]; emit AggregatorUpdated(_inputs[i], _outputs[i], _aggregators[i]); } } /** * @notice Computes the conversion of an amount through a list of intermediate conversions * @param _amountIn Amount to convert * @param _path List of addresses representing the currencies for the intermediate conversions * @return result The result after all the conversions * @return oldestRateTimestamp The oldest timestamp of the path */ function getConversion(uint256 _amountIn, address[] calldata _path) external view returns (uint256 result, uint256 oldestRateTimestamp) { (uint256 rate, uint256 timestamp, uint256 decimals) = getRate(_path); // initialize the result result = (_amountIn * rate) / decimals; oldestRateTimestamp = timestamp; } /** * @notice Computes the conversion rate from a list of currencies * @param _path List of addresses representing the currencies for the conversions * @return rate The rate * @return oldestRateTimestamp The oldest timestamp of the path * @return decimals of the conversion rate */ function getRate(address[] memory _path) public view returns ( uint256 rate, uint256 oldestRateTimestamp, uint256 decimals ) { // initialize the result with 18 decimals (for more precision) rate = PRECISION; decimals = PRECISION; oldestRateTimestamp = block.timestamp; // For every conversion of the path for (uint256 i; i < _path.length - 1; i++) { ( AggregatorFraction aggregator, bool reverseAggregator, uint256 decimalsInput, uint256 decimalsOutput ) = getAggregatorAndDecimals(_path[i], _path[i + 1]); // store the latest timestamp of the path uint256 currentTimestamp = aggregator.latestTimestamp(); if (currentTimestamp < oldestRateTimestamp) { oldestRateTimestamp = currentTimestamp; } // get the rate of the current step uint256 currentRate = uint256(aggregator.latestAnswer()); // get the number of decimals of the current rate uint256 decimalsAggregator = uint256(aggregator.decimals()); // mul with the difference of decimals before the current rate computation (for more precision) if (decimalsAggregator > decimalsInput) { rate = rate * (10**(decimalsAggregator - decimalsInput)); } if (decimalsAggregator < decimalsOutput) { rate = rate * (10**(decimalsOutput - decimalsAggregator)); } // Apply the current rate (if path uses an aggregator in the reverse way, div instead of mul) if (reverseAggregator) { rate = (rate * (10**decimalsAggregator)) / currentRate; } else { rate = (rate * currentRate) / (10**decimalsAggregator); } // div with the difference of decimals AFTER the current rate computation (for more precision) if (decimalsAggregator < decimalsInput) { rate = rate / (10**(decimalsInput - decimalsAggregator)); } if (decimalsAggregator > decimalsOutput) { rate = rate / (10**(decimalsAggregator - decimalsOutput)); } } } /** * @notice Gets aggregators and decimals of two currencies * @param _input input Address * @param _output output Address * @return aggregator to get the rate between the two currencies * @return reverseAggregator true if the aggregator returned give the rate from _output to _input * @return decimalsInput decimals of _input * @return decimalsOutput decimals of _output */ function getAggregatorAndDecimals(address _input, address _output) private view returns ( AggregatorFraction aggregator, bool reverseAggregator, uint256 decimalsInput, uint256 decimalsOutput ) { // Try to get the right aggregator for the conversion aggregator = AggregatorFraction(allAggregators[_input][_output]); reverseAggregator = false; // if no aggregator found we try to find an aggregator in the reverse way if (address(aggregator) == address(0x00)) { aggregator = AggregatorFraction(allAggregators[_output][_input]); reverseAggregator = true; } require(address(aggregator) != address(0x00), 'No aggregator found'); // get the decimals for the two currencies decimalsInput = getDecimals(_input); decimalsOutput = getDecimals(_output); } /** * @notice Gets decimals from an address currency * @param _addr address to check * @return decimals number of decimals */ function getDecimals(address _addr) private view returns (uint256 decimals) { // by default we assume it is fiat decimals = FIAT_DECIMALS; // if address is the hash of the ETH currency if (_addr == nativeTokenHash) { decimals = NATIVE_TOKEN_DECIMALS; } else if (isContract(_addr)) { // otherwise, we get the decimals from the erc20 directly decimals = ERC20fraction(_addr).decimals(); } } /** * @notice Checks if an address is a contract * @param _addr Address to check * @return true if the address hosts a contract, false otherwise */ function isContract(address _addr) private view returns (bool) { uint32 size; // solium-disable security/no-inline-assembly assembly { size := extcodesize(_addr) } return (size > 0); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import '@openzeppelin/contracts/utils/Context.sol'; import "../Roles.sol"; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ abstract contract WhitelistAdminRole is Context { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () { _addWhitelistAdmin(_msgSender()); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(_msgSender()), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(_msgSender()); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_paymentProxyAddress","type":"address"},{"internalType":"address","name":"_chainlinkConversionPathAddress","type":"address"},{"internalType":"address","name":"_nativeTokenHash","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"currency","type":"address"},{"indexed":true,"internalType":"bytes","name":"paymentReference","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxRateTimespan","type":"uint256"}],"name":"TransferWithConversionAndReference","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bytes","name":"paymentReference","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"feeAddress","type":"address"}],"name":"TransferWithReferenceAndFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainlinkConversionPath","outputs":[{"internalType":"contract ChainlinkConversionPath","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeTokenHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_requestAmount","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"bytes","name":"_paymentReference","type":"bytes"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_maxRateTimespan","type":"uint256"}],"name":"transferWithReferenceAndFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_chainlinkConversionPathAddress","type":"address"}],"name":"updateConversionPathAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentProxyAddress","type":"address"}],"name":"updateConversionProxyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001bf438038062001bf483398181016040528101906200003791906200037c565b60016000819055506200005f620000536200012b60201b60201c565b6200013360201b60201c565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620004f3565b600033905090565b6200014e8160016200019460201b620007221790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620001a682826200024760201b60201c565b15620001e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e09062000439565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b290620004d1565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003448262000317565b9050919050565b620003568162000337565b81146200036257600080fd5b50565b60008151905062000376816200034b565b92915050565b60008060006060848603121562000398576200039762000312565b5b6000620003a88682870162000365565b9350506020620003bb8682870162000365565b9250506040620003ce8682870162000365565b9150509250925092565b600082825260208201905092915050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b600062000421601f83620003d8565b91506200042e82620003e9565b602082019050919050565b60006020820190508181036000830152620004548162000412565b9050919050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620004b9602283620003d8565b9150620004c6826200045b565b604082019050919050565b60006020820190508181036000830152620004ec81620004aa565b9050919050565b6116f180620005036000396000f3fe6080604052600436106100865760003560e01c80637a38d1cb116100595780637a38d1cb1461011f578063946647f114610148578063ac473c8a14610173578063bb5f747b1461018f578063d515bb03146101cc57610086565b80633cd3efef1461008b5780634c5a628c146100b65780635536bcde146100cd5780637362d9c8146100f6575b600080fd5b34801561009757600080fd5b506100a06101f7565b6040516100ad9190610b86565b60405180910390f35b3480156100c257600080fd5b506100cb61021d565b005b3480156100d957600080fd5b506100f460048036038101906100ef9190610bd7565b61022f565b005b34801561010257600080fd5b5061011d60048036038101906101189190610bd7565b6102c2565b005b34801561012b57600080fd5b5061014660048036038101906101419190610bd7565b61031d565b005b34801561015457600080fd5b5061015d6103b0565b60405161016a9190610c63565b60405180910390f35b61018d60048036038101906101889190610d6f565b6103d6565b005b34801561019b57600080fd5b506101b660048036038101906101b19190610bd7565b6106df565b6040516101c39190610e6c565b60405180910390f35b3480156101d857600080fd5b506101e16106fc565b6040516101ee9190610b86565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61022d6102286107ca565b6107d2565b565b61023f61023a6107ca565b6106df565b61027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027590610f0a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102d26102cd6107ca565b6106df565b610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610f0a565b60405180910390fd5b61031a8161082c565b50565b61032d6103286107ca565b6106df565b61036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610f0a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104219190610f59565b81811061043157610430610f8d565b5b90506020020160208101906104469190610bd7565b73ffffffffffffffffffffffffffffffffffffffff161461049c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104939061102e565b60405180910390fd5b6000806104ec898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8786610886565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a604051602401610546969594939291906110bb565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105d09190611191565b600060405180830381855af49150503d806000811461060b576040519150601f19603f3d011682016040523d82523d6000602084013e610610565b606091505b5050905080610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061121a565b60405180910390fd5b878760405161066492919061125f565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106a2576106a1610f8d565b5b90506020020160208101906106b79190610bd7565b89886040516106c99493929190611278565b60405180910390a2505050505050505050505050565b60006106f58260016109d690919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61072c82826109d6565b1561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390611309565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b6107e6816001610a9e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61084081600161072290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b81526004016108e991906113e7565b60606040518083038186803b15801561090157600080fd5b505afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061141e565b925092509250600086148061095957508582426109569190610f59565b11155b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906114bd565b60405180910390fd5b8083896109a591906114dd565b6109af9190611566565b94508083886109be91906114dd565b6109c89190611566565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611609565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610aa882826109d6565b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061169b565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b82525050565b6000602082019050610b9b6000830184610b77565b92915050565b600080fd5b600080fd5b610bb481610b65565b8114610bbf57600080fd5b50565b600081359050610bd181610bab565b92915050565b600060208284031215610bed57610bec610ba1565b5b6000610bfb84828501610bc2565b91505092915050565b6000819050919050565b6000610c29610c24610c1f84610b45565b610c04565b610b45565b9050919050565b6000610c3b82610c0e565b9050919050565b6000610c4d82610c30565b9050919050565b610c5d81610c42565b82525050565b6000602082019050610c786000830184610c54565b92915050565b6000819050919050565b610c9181610c7e565b8114610c9c57600080fd5b50565b600081359050610cae81610c88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610cd957610cd8610cb4565b5b8235905067ffffffffffffffff811115610cf657610cf5610cb9565b5b602083019150836020820283011115610d1257610d11610cbe565b5b9250929050565b60008083601f840112610d2f57610d2e610cb4565b5b8235905067ffffffffffffffff811115610d4c57610d4b610cb9565b5b602083019150836001820283011115610d6857610d67610cbe565b5b9250929050565b600080600080600080600080600060e08a8c031215610d9157610d90610ba1565b5b6000610d9f8c828d01610bc2565b9950506020610db08c828d01610c9f565b98505060408a013567ffffffffffffffff811115610dd157610dd0610ba6565b5b610ddd8c828d01610cc3565b975097505060608a013567ffffffffffffffff811115610e0057610dff610ba6565b5b610e0c8c828d01610d19565b95509550506080610e1f8c828d01610c9f565b93505060a0610e308c828d01610bc2565b92505060c0610e418c828d01610c9f565b9150509295985092959850929598565b60008115159050919050565b610e6681610e51565b82525050565b6000602082019050610e816000830184610e5d565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610ef4604083610e87565b9150610eff82610e98565b604082019050919050565b60006020820190508181036000830152610f2381610ee7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f6482610c7e565b9150610f6f83610c7e565b925082821015610f8257610f81610f2a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000611018602983610e87565b915061102382610fbc565b604082019050919050565b600060208201905081810360008301526110478161100b565b9050919050565b61105781610c7e565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061109a838561105d565b93506110a783858461106e565b6110b08361107d565b840190509392505050565b600060a0820190506110d06000830189610b77565b6110dd602083018861104e565b81810360408301526110f081868861108e565b90506110ff606083018561104e565b61110c6080830184610b77565b979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561114b578082015181840152602081019050611130565b8381111561115a576000848401525b50505050565b600061116b82611117565b6111758185611122565b935061118581856020860161112d565b80840191505092915050565b600061119d8284611160565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b6000611204603783610e87565b915061120f826111a8565b604082019050919050565b60006020820190508181036000830152611233816111f7565b9050919050565b60006112468385611122565b935061125383858461106e565b82840190509392505050565b600061126c82848661123a565b91508190509392505050565b600060808201905061128d600083018761104e565b61129a6020830186610b77565b6112a7604083018561104e565b6112b4606083018461104e565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006112f3601f83610e87565b91506112fe826112bd565b602082019050919050565b60006020820190508181036000830152611322816112e6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61135e81610b65565b82525050565b60006113708383611355565b60208301905092915050565b6000602082019050919050565b600061139482611329565b61139e8185611334565b93506113a983611345565b8060005b838110156113da5781516113c18882611364565b97506113cc8361137c565b9250506001810190506113ad565b5085935050505092915050565b600060208201905081810360008301526114018184611389565b905092915050565b60008151905061141881610c88565b92915050565b60008060006060848603121561143757611436610ba1565b5b600061144586828701611409565b935050602061145686828701611409565b925050604061146786828701611409565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b60006114a7601b83610e87565b91506114b282611471565b602082019050919050565b600060208201905081810360008301526114d68161149a565b9050919050565b60006114e882610c7e565b91506114f383610c7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561152c5761152b610f2a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061157182610c7e565b915061157c83610c7e565b92508261158c5761158b611537565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115f3602283610e87565b91506115fe82611597565b604082019050919050565b60006020820190508181036000830152611622816115e6565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611685602183610e87565b915061169082611629565b604082019050919050565b600060208201905081810360008301526116b481611678565b905091905056fea2646970667358221220cfd5b19455f31e9284e07311bdbd080586e3fc51f3c8aadcb533ab87cf3e394f64736f6c63430008090033000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e
Deployed Bytecode
0x6080604052600436106100865760003560e01c80637a38d1cb116100595780637a38d1cb1461011f578063946647f114610148578063ac473c8a14610173578063bb5f747b1461018f578063d515bb03146101cc57610086565b80633cd3efef1461008b5780634c5a628c146100b65780635536bcde146100cd5780637362d9c8146100f6575b600080fd5b34801561009757600080fd5b506100a06101f7565b6040516100ad9190610b86565b60405180910390f35b3480156100c257600080fd5b506100cb61021d565b005b3480156100d957600080fd5b506100f460048036038101906100ef9190610bd7565b61022f565b005b34801561010257600080fd5b5061011d60048036038101906101189190610bd7565b6102c2565b005b34801561012b57600080fd5b5061014660048036038101906101419190610bd7565b61031d565b005b34801561015457600080fd5b5061015d6103b0565b60405161016a9190610c63565b60405180910390f35b61018d60048036038101906101889190610d6f565b6103d6565b005b34801561019b57600080fd5b506101b660048036038101906101b19190610bd7565b6106df565b6040516101c39190610e6c565b60405180910390f35b3480156101d857600080fd5b506101e16106fc565b6040516101ee9190610b86565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61022d6102286107ca565b6107d2565b565b61023f61023a6107ca565b6106df565b61027e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027590610f0a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102d26102cd6107ca565b6106df565b610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610f0a565b60405180910390fd5b61031a8161082c565b50565b61032d6103286107ca565b6106df565b61036c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036390610f0a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16878760018a8a90506104219190610f59565b81811061043157610430610f8d565b5b90506020020160208101906104469190610bd7565b73ffffffffffffffffffffffffffffffffffffffff161461049c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104939061102e565b60405180910390fd5b6000806104ec898980806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8786610886565b915091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c848a8a868a604051602401610546969594939291906110bb565b6040516020818303038152906040527fd7c95e98000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105d09190611191565b600060405180830381855af49150503d806000811461060b576040519150601f19603f3d011682016040523d82523d6000602084013e610610565b606091505b5050905080610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061121a565b60405180910390fd5b878760405161066492919061125f565b60405180910390207f96d0d1d75923f40b50f6fe74613b2c23239149607848fbca3941fee7ac041cdc8c8c8c60008181106106a2576106a1610f8d565b5b90506020020160208101906106b79190610bd7565b89886040516106c99493929190611278565b60405180910390a2505050505050505050505050565b60006106f58260016109d690919063ffffffff16565b9050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61072c82826109d6565b1561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076390611309565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b6107e6816001610a9e90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61084081600161072290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397edd4fa8a6040518263ffffffff1660e01b81526004016108e991906113e7565b60606040518083038186803b15801561090157600080fd5b505afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061141e565b925092509250600086148061095957508582426109569190610f59565b11155b610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906114bd565b60405180910390fd5b8083896109a591906114dd565b6109af9190611566565b94508083886109be91906114dd565b6109c89190611566565b935050505094509492505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90611609565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610aa882826109d6565b610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade9061169b565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b7082610b45565b9050919050565b610b8081610b65565b82525050565b6000602082019050610b9b6000830184610b77565b92915050565b600080fd5b600080fd5b610bb481610b65565b8114610bbf57600080fd5b50565b600081359050610bd181610bab565b92915050565b600060208284031215610bed57610bec610ba1565b5b6000610bfb84828501610bc2565b91505092915050565b6000819050919050565b6000610c29610c24610c1f84610b45565b610c04565b610b45565b9050919050565b6000610c3b82610c0e565b9050919050565b6000610c4d82610c30565b9050919050565b610c5d81610c42565b82525050565b6000602082019050610c786000830184610c54565b92915050565b6000819050919050565b610c9181610c7e565b8114610c9c57600080fd5b50565b600081359050610cae81610c88565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610cd957610cd8610cb4565b5b8235905067ffffffffffffffff811115610cf657610cf5610cb9565b5b602083019150836020820283011115610d1257610d11610cbe565b5b9250929050565b60008083601f840112610d2f57610d2e610cb4565b5b8235905067ffffffffffffffff811115610d4c57610d4b610cb9565b5b602083019150836001820283011115610d6857610d67610cbe565b5b9250929050565b600080600080600080600080600060e08a8c031215610d9157610d90610ba1565b5b6000610d9f8c828d01610bc2565b9950506020610db08c828d01610c9f565b98505060408a013567ffffffffffffffff811115610dd157610dd0610ba6565b5b610ddd8c828d01610cc3565b975097505060608a013567ffffffffffffffff811115610e0057610dff610ba6565b5b610e0c8c828d01610d19565b95509550506080610e1f8c828d01610c9f565b93505060a0610e308c828d01610bc2565b92505060c0610e418c828d01610c9f565b9150509295985092959850929598565b60008115159050919050565b610e6681610e51565b82525050565b6000602082019050610e816000830184610e5d565b92915050565b600082825260208201905092915050565b7f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008201527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c65602082015250565b6000610ef4604083610e87565b9150610eff82610e98565b604082019050919050565b60006020820190508181036000830152610f2381610ee7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f6482610c7e565b9150610f6f83610c7e565b925082821015610f8257610f81610f2a565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7061796d656e742063757272656e6379206d75737420626520746865206e617460008201527f69766520746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000611018602983610e87565b915061102382610fbc565b604082019050919050565b600060208201905081810360008301526110478161100b565b9050919050565b61105781610c7e565b82525050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061109a838561105d565b93506110a783858461106e565b6110b08361107d565b840190509392505050565b600060a0820190506110d06000830189610b77565b6110dd602083018861104e565b81810360408301526110f081868861108e565b90506110ff606083018561104e565b61110c6080830184610b77565b979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561114b578082015181840152602081019050611130565b8381111561115a576000848401525b50505050565b600061116b82611117565b6111758185611122565b935061118581856020860161112d565b80840191505092915050565b600061119d8284611160565b915081905092915050565b7f7061796d656e7450726f7879207472616e73666572457861637445746857697460008201527f685265666572656e6365416e64466565206661696c6564000000000000000000602082015250565b6000611204603783610e87565b915061120f826111a8565b604082019050919050565b60006020820190508181036000830152611233816111f7565b9050919050565b60006112468385611122565b935061125383858461106e565b82840190509392505050565b600061126c82848661123a565b91508190509392505050565b600060808201905061128d600083018761104e565b61129a6020830186610b77565b6112a7604083018561104e565b6112b4606083018461104e565b95945050505050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b60006112f3601f83610e87565b91506112fe826112bd565b602082019050919050565b60006020820190508181036000830152611322816112e6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61135e81610b65565b82525050565b60006113708383611355565b60208301905092915050565b6000602082019050919050565b600061139482611329565b61139e8185611334565b93506113a983611345565b8060005b838110156113da5781516113c18882611364565b97506113cc8361137c565b9250506001810190506113ad565b5085935050505092915050565b600060208201905081810360008301526114018184611389565b905092915050565b60008151905061141881610c88565b92915050565b60008060006060848603121561143757611436610ba1565b5b600061144586828701611409565b935050602061145686828701611409565b925050604061146786828701611409565b9150509250925092565b7f61676772656761746f722072617465206973206f757464617465640000000000600082015250565b60006114a7601b83610e87565b91506114b282611471565b602082019050919050565b600060208201905081810360008301526114d68161149a565b9050919050565b60006114e882610c7e565b91506114f383610c7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561152c5761152b610f2a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061157182610c7e565b915061157c83610c7e565b92508261158c5761158b611537565b5b828204905092915050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115f3602283610e87565b91506115fe82611597565b604082019050919050565b60006020820190508181036000830152611622816115e6565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000611685602183610e87565b915061169082611629565b604082019050919050565b600060208201905081810360008301526116b481611678565b905091905056fea2646970667358221220cfd5b19455f31e9284e07311bdbd080586e3fc51f3c8aadcb533ab87cf3e394f64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e
-----Decoded View---------------
Arg [0] : _paymentProxyAddress (address): 0xC98d60CaF9766139fBC399927203123E2d7FBe7c
Arg [1] : _chainlinkConversionPathAddress (address): 0x0818Ad7016138f0A40DFAe30F64a923c2A8F61bA
Arg [2] : _nativeTokenHash (address): 0xF5AF88e117747e87fC5929F2ff87221B1447652E
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c98d60caf9766139fbc399927203123e2d7fbe7c
Arg [1] : 0000000000000000000000000818ad7016138f0a40dfae30f64a923c2a8f61ba
Arg [2] : 000000000000000000000000f5af88e117747e87fc5929f2ff87221b1447652e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.