ETH Price: $2,413.20 (-1.03%)

Contract

0xDA8B21B94668300dDBC0ecbAF57530D396287848
 

Overview

ETH Balance

1.227367344531644789 ETH

Eth Value

$2,961.88 (@ $2,413.20/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Fees152761302022-08-04 13:22:16797 days ago1659619336IN
0xDA8B21B9...396287848
0 ETH0.000306079.01774777
Batch Relay110585872020-10-15 5:52:411455 days ago1602741161IN
0xDA8B21B9...396287848
0 ETH0.0043145384.7
Create Escrow110585452020-10-15 5:44:501455 days ago1602740690IN
0xDA8B21B9...396287848
0.2778064 ETH0.0046269480.96
Batch Relay110573082020-10-15 1:07:131455 days ago1602724033IN
0xDA8B21B9...396287848
0 ETH0.0018490836.3
Create Escrow110572642020-10-15 0:59:211455 days ago1602723561IN
0xDA8B21B9...396287848
0.22795389 ETH0.0023255540.7000016
Batch Relay110554922020-10-14 18:34:521456 days ago1602700492IN
0xDA8B21B9...396287848
0 ETH0.0033051664.9
Create Escrow110554422020-10-14 18:24:521456 days ago1602699892IN
0xDA8B21B9...396287848
0.0101 ETH0.0043987777
Create Escrow110533102020-10-14 10:42:511456 days ago1602672171IN
0xDA8B21B9...396287848
0.3462734 ETH0.0045238279.2055
Batch Relay110514892020-10-14 4:00:321456 days ago1602648032IN
0xDA8B21B9...396287848
0 ETH0.0033635566
Create Escrow110514752020-10-14 3:57:111456 days ago1602647831IN
0xDA8B21B9...396287848
0.34385712 ETH0.0035841262.7
Batch Relay110509322020-10-14 1:53:431456 days ago1602640423IN
0xDA8B21B9...396287848
0 ETH0.0026908452.8
Create Escrow110509072020-10-14 1:45:581456 days ago1602639958IN
0xDA8B21B9...396287848
0.25719078 ETH0.0030810853.9
Batch Relay110503562020-10-13 23:38:251456 days ago1602632305IN
0xDA8B21B9...396287848
0 ETH0.0018495236.3
Create Escrow110503402020-10-13 23:34:381456 days ago1602632078IN
0xDA8B21B9...396287848
0.38117955 ETH0.0020808636.41
Resolve Dispute110462772020-10-13 8:44:401457 days ago1602578680IN
0xDA8B21B9...396287848
0 ETH0.0024666158.3
Batch Relay110460732020-10-13 7:55:291457 days ago1602575729IN
0xDA8B21B9...396287848
0 ETH0.0029697458.3
Batch Relay110451082020-10-13 4:30:491457 days ago1602563449IN
0xDA8B21B9...396287848
0 ETH0.0028003255
Create Escrow110441372020-10-13 0:54:551457 days ago1602550495IN
0xDA8B21B9...396287848
1.27 ETH0.0030169352.8
Create Escrow110423662020-10-12 18:23:431458 days ago1602527023IN
0xDA8B21B9...396287848
0.8 ETH0.0037711766
Batch Relay110398882020-10-12 9:13:051458 days ago1602493985IN
0xDA8B21B9...396287848
0 ETH0.0030264859.4
Create Escrow110398792020-10-12 9:10:571458 days ago1602493857IN
0xDA8B21B9...396287848
0.2546183 ETH0.0033947659.4
Batch Relay110398252020-10-12 8:57:181458 days ago1602493038IN
0xDA8B21B9...396287848
0 ETH0.002964758.20100229
Create Escrow110396532020-10-12 8:21:191458 days ago1602490879IN
0xDA8B21B9...396287848
0.27384891 ETH0.0037083264.9
Batch Relay110393672020-10-12 7:18:081458 days ago1602487088IN
0xDA8B21B9...396287848
0 ETH0.0027462553.9
Create Escrow110393522020-10-12 7:12:471458 days ago1602486767IN
0xDA8B21B9...396287848
0.09845075 ETH0.0029793252.15259955
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
152761302022-08-04 13:22:16797 days ago1659619336
0xDA8B21B9...396287848
2.5849562 ETH
110585872020-10-15 5:52:411455 days ago1602741161
0xDA8B21B9...396287848
0.26866838 ETH
110573082020-10-15 1:07:131455 days ago1602724033
0xDA8B21B9...396287848
0.22294866 ETH
110554922020-10-14 18:34:521456 days ago1602700492
0xDA8B21B9...396287848
0.00512578 ETH
110514892020-10-14 4:00:321456 days ago1602648032
0xDA8B21B9...396287848
0.33546274 ETH
110509322020-10-14 1:53:431456 days ago1602640423
0xDA8B21B9...396287848
0.25065422 ETH
110503562020-10-13 23:38:251456 days ago1602632305
0xDA8B21B9...396287848
0.37464206 ETH
110462772020-10-13 8:44:401457 days ago1602578680
0xDA8B21B9...396287848
0.05343829 ETH
110460732020-10-13 7:55:291457 days ago1602575729
0xDA8B21B9...396287848
0.78762236 ETH
110451082020-10-13 4:30:491457 days ago1602563449
0xDA8B21B9...396287848
1.25317016 ETH
110398882020-10-12 9:13:051458 days ago1602493985
0xDA8B21B9...396287848
0.24761189 ETH
110398252020-10-12 8:57:181458 days ago1602493038
0xDA8B21B9...396287848
0.26949809 ETH
110393672020-10-12 7:18:081458 days ago1602487088
0xDA8B21B9...396287848
0.093419 ETH
110333822020-10-11 9:29:521459 days ago1602408592
0xDA8B21B9...396287848
0.2725258 ETH
110325652020-10-11 6:31:271459 days ago1602397887
0xDA8B21B9...396287848
0.09489941 ETH
110291252020-10-10 17:49:471460 days ago1602352187
0xDA8B21B9...396287848
0.08791982 ETH
110269982020-10-10 9:39:271460 days ago1602322767
0xDA8B21B9...396287848
0.08850694 ETH
110263122020-10-10 7:14:501460 days ago1602314090
0xDA8B21B9...396287848
0.22928039 ETH
110250212020-10-10 2:35:201460 days ago1602297320
0xDA8B21B9...396287848
0.96764326 ETH
110196302020-10-09 6:18:491461 days ago1602224329
0xDA8B21B9...396287848
0.15362444 ETH
110184672020-10-09 1:57:251461 days ago1602208645
0xDA8B21B9...396287848
0.17179249 ETH
110122662020-10-08 2:17:311462 days ago1602123451
0xDA8B21B9...396287848
0.14413065 ETH
109891262020-10-04 11:36:301466 days ago1601811390
0xDA8B21B9...396287848
0.9847138 ETH
109831302020-10-03 13:07:311467 days ago1601730451
0xDA8B21B9...396287848
0.49736717 ETH
109802632020-10-03 2:19:271467 days ago1601691567
0xDA8B21B9...396287848
3.95013363 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LocalCoinSwapEthereumEscrow

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-05-15
*/

pragma solidity ^0.5.0;

/// @title localcoinswap.com
/// @author localcoinswap.com
contract LocalCoinSwapEthereumEscrow {
    /***********************
    +   Global settings   +
    ***********************/

    // Address of the arbitrator (currently always localcoinswap staff)
    address public arbitrator;
    // Address of the owner (who can withdraw collected fees)
    address public owner;
    // Address of the relayer (who is allowed to forward signed instructions from parties)
    address public relayer;
    uint32 public requestCancellationMinimumTime = 2 hours;
    // Cumulative balance of collected fees
    uint256 public feesAvailableForWithdraw;

    /***********************
    +  Instruction types  +
    ***********************/

    // Called when the buyer marks payment as sent. Locks funds in escrow
    uint8 constant INSTRUCTION_SELLER_CANNOT_CANCEL = 0x01;
    // Buyer cancelling
    uint8 constant INSTRUCTION_BUYER_CANCEL = 0x02;
    // Seller cancelling
    uint8 constant INSTRUCTION_SELLER_CANCEL = 0x03;
    // Seller requesting to cancel. Begins a window for buyer to object
    uint8 constant INSTRUCTION_SELLER_REQUEST_CANCEL = 0x04;
    // Seller releasing funds to the buyer
    uint8 constant INSTRUCTION_RELEASE = 0x05;
    // Either party permitting the arbitrator to resolve a dispute
    uint8 constant INSTRUCTION_RESOLVE = 0x06;


    /***********************
    +       Events        +
    ***********************/

    event Created(bytes32 indexed _tradeHash);
    event SellerCancelDisabled(bytes32 indexed _tradeHash);
    event SellerRequestedCancel(bytes32 indexed _tradeHash);
    event CancelledBySeller(bytes32 indexed _tradeHash);
    event CancelledByBuyer(bytes32 indexed _tradeHash);
    event Released(bytes32 indexed _tradeHash);
    event DisputeResolved(bytes32 indexed _tradeHash);

    struct Escrow {
        // So we know the escrow exists
        bool exists;
        // This is the timestamp in whic hthe seller can cancel the escrow after.
        // It has two special values:
        // 0 : Permanently locked by the buyer (i.e. marked as paid; the seller can never cancel)
        // 1 : The seller can only request to cancel, which will change this value to a timestamp.
        //     This option is avaialble for complex trade terms such as cash-in-person where a
        //     payment window is inappropriate
        uint32 sellerCanCancelAfter;
        // Cumulative cost of gas incurred by the relayer. This amount will be refunded to the owner
        // in the way of fees once the escrow has completed
        uint128 totalGasFeesSpentByRelayer;
    }

    // Mapping of active trades. The key here is a hash of the trade proprties
    mapping (bytes32 => Escrow) public escrows;

    modifier onlyOwner() {
        require(msg.sender == owner, "Must be owner");
        _;
    }

    modifier onlyArbitrator() {
        require(msg.sender == arbitrator, "Must be arbitrator");
        _;
    }

    constructor(address initialAddress) public {
        owner = initialAddress;
        arbitrator = initialAddress;
        relayer = initialAddress;
    }

    /// @notice Create and fund a new escrow.
    /// @param _tradeID The unique ID of the trade, generated by localcoinswap.com
    /// @param _seller The selling party
    /// @param _buyer The buying party
    /// @param _value The amount of the escrow, exclusive of the fee
    /// @param _fee localcoinswap's commission in 1/10000ths
    /// @param _paymentWindowInSeconds The time in seconds from escrow creation that the seller can cancel after
    /// @param _expiry This transaction must be created before this time
    /// @param _v Signature "v" component
    /// @param _r Signature "r" component
    /// @param _s Signature "s" component
    function createEscrow(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee,
        uint32 _paymentWindowInSeconds,
        uint32 _expiry,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    ) external payable {
        // The trade hash is created by tightly-concatenating and hashing properties of the trade.
        // This hash becomes the identifier of the escrow, and hence all these variables must be
        // supplied on future contract calls
        bytes32 _tradeHash = keccak256(abi.encodePacked(_tradeID, _seller, _buyer, _value, _fee));
        // Require that trade does not already exist
        require(!escrows[_tradeHash].exists, "Trade already exists");
        // A signature (v, r and s) must come from localcoinswap to open an escrow
        bytes32 _invitationHash = keccak256(abi.encodePacked(
            _tradeHash,
            _paymentWindowInSeconds,
            _expiry
        ));
        require(recoverAddress(_invitationHash, _v, _r, _s) == relayer, "Must be relayer");
        // These signatures come with an expiry stamp
        require(block.timestamp < _expiry, "Signature has expired"); // solium-disable-line
        // Check transaction value against signed _value and make sure is not 0
        require(msg.value == _value && msg.value > 0, "Incorrect ether sent");
        uint32 _sellerCanCancelAfter = _paymentWindowInSeconds == 0
            ? 1
            : uint32(block.timestamp) + _paymentWindowInSeconds; // solium-disable-line
        // Add the escrow to the public mapping
        escrows[_tradeHash] = Escrow(true, _sellerCanCancelAfter, 0);
        emit Created(_tradeHash);
    }

    uint16 constant GAS_doResolveDispute = 36100;
    /// @notice Called by the arbitrator to resolve a dispute. Requires a signature from either party.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _v Signature "v" component
    /// @param _r Signature "r" component
    /// @param _s Signature "s" component
    /// @param _buyerPercent What % should be distributed to the buyer (this is usually 0 or 100)
    function resolveDispute(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        uint8 _buyerPercent
    ) external onlyArbitrator {
        address _signature = recoverAddress(keccak256(abi.encodePacked(
            _tradeID,
            INSTRUCTION_RESOLVE
        )), _v, _r, _s);
        require(_signature == _buyer || _signature == _seller, "Must be buyer or seller");

        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        require(_escrow.exists, "Escrow does not exist");
        require(_buyerPercent <= 100, "_buyerPercent must be 100 or lower");

        uint256 _totalFees = _escrow.totalGasFeesSpentByRelayer + (GAS_doResolveDispute * uint128(tx.gasprice));
        require(_value - _totalFees <= _value, "Overflow error"); // Prevent underflow
        feesAvailableForWithdraw += _totalFees; // Add the the pot for localcoinswap to withdraw

        delete escrows[_tradeHash];
        emit DisputeResolved(_tradeHash);
        if (_buyerPercent > 0) {
          // Take fees if buyer wins dispute
          uint256 _escrowFees = (_value * _fee / 10000);
          // Prevent underflow
          uint256 _buyerAmount = _value * _buyerPercent / 100 - _totalFees - _escrowFees;
          require(_buyerAmount <= _value, "Overflow error");
          feesAvailableForWithdraw += _escrowFees;
          _buyer.transfer(_buyerAmount);
        }
        if (_buyerPercent < 100) {
          _seller.transfer((_value - _totalFees) * (100 - _buyerPercent) / 100);
        }
    }

    /// @notice Release ether in escrow to the buyer. Direct call option.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @return bool
    function release(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee
    ) external returns (bool){
        require(msg.sender == _seller, "Must be seller");
        return doRelease(_tradeID, _seller, _buyer, _value, _fee, 0);
    }

    /// @notice Disable the seller from cancelling (i.e. "mark as paid"). Direct call option.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @return bool
    function disableSellerCancel(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee
    ) external returns (bool) {
        require(msg.sender == _buyer, "Must be buyer");
        return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
    }

    /// @notice Cancel the escrow as a buyer. Direct call option.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @return bool
    function buyerCancel(
      bytes16 _tradeID,
      address payable _seller,
      address payable _buyer,
      uint256 _value,
      uint16 _fee
    ) external returns (bool) {
        require(msg.sender == _buyer, "Must be buyer");
        return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
    }

    /// @notice Request to cancel as a seller. Direct call option.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @return bool
    function sellerRequestCancel(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee
    ) external returns (bool) {
        require(msg.sender == _seller, "Must be seller");
        return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
    }

    /// @notice Relay multiple signed instructions from parties of escrows.
    /// @param _tradeID List of _tradeID values
    /// @param _seller List of _seller values
    /// @param _buyer List of _buyer values
    /// @param _value List of _value values
    /// @param _fee List of _fee values
    /// @param _maximumGasPrice List of _maximumGasPrice values
    /// @param _v List of signature "v" components
    /// @param _r List of signature "r" components
    /// @param _s List of signature "s" components
    /// @param _instructionByte List of _instructionByte values
    /// @return bool List of results
    uint16 constant GAS_batchRelayBaseCost = 28500;
    function batchRelay(
        bytes16[] memory _tradeID,
        address payable[] memory _seller,
        address payable[] memory _buyer,
        uint256[] memory _value,
        uint16[] memory _fee,
        uint128[] memory _maximumGasPrice,
        uint8[] memory _v,
        bytes32[] memory _r,
        bytes32[] memory _s,
        uint8[] memory _instructionByte
    ) public returns (bool[] memory) {
        bool[] memory _results = new bool[](_tradeID.length);
        uint128 _additionalGas = uint128(msg.sender == relayer ? GAS_batchRelayBaseCost / _tradeID.length : 0);
        for (uint8 i = 0; i < _tradeID.length; i++) {
            _results[i] = relay(
                _tradeID[i],
                _seller[i],
                _buyer[i],
                _value[i],
                _fee[i],
                _maximumGasPrice[i],
                _v[i],
                _r[i],
                _s[i],
                _instructionByte[i],
                _additionalGas
            );
        }
        return _results;
    }

    /// @notice Withdraw fees collected by the contract. Only the owner can call this.
    /// @param _to Address to withdraw fees in to
    /// @param _amount Amount to withdraw
    function withdrawFees(address payable _to, uint256 _amount) external onlyOwner {
        // This check also prevents underflow
        require(_amount <= feesAvailableForWithdraw, "Amount is higher than amount available");
        feesAvailableForWithdraw -= _amount;
        _to.transfer(_amount);
    }

    /// @notice Set the arbitrator to a new address. Only the owner can call this.
    /// @param _newArbitrator Address of the replacement arbitrator
    function setArbitrator(address _newArbitrator) external onlyOwner {
        arbitrator = _newArbitrator;
    }

    /// @notice Change the owner to a new address. Only the owner can call this.
    /// @param _newOwner Address of the replacement owner
    function setOwner(address _newOwner) external onlyOwner {
        owner = _newOwner;
    }

    /// @notice Change the relayer to a new address. Only the owner can call this.
    /// @param _newRelayer Address of the replacement relayer
    function setRelayer(address _newRelayer) external onlyOwner {
        relayer = _newRelayer;
    }

    /// @notice Change the requestCancellationMinimumTime. Only the owner can call this.
    /// @param _newRequestCancellationMinimumTime Replacement
    function setRequestCancellationMinimumTime(
        uint32 _newRequestCancellationMinimumTime
    ) external onlyOwner {
        requestCancellationMinimumTime = _newRequestCancellationMinimumTime;
    }

    /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
    /// @param _tokenContract Token contract
    /// @param _transferTo Recipient
    /// @param _value Value
    function transferToken(
        _Token _tokenContract,
        address _transferTo,
        uint256 _value
    ) external onlyOwner {
        _tokenContract.transfer(_transferTo, _value);
    }

    /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
    /// @param _tokenContract Token contract
    /// @param _transferTo Recipient
    /// @param _transferFrom Sender
    /// @param _value Value
    function transferTokenFrom(
        _Token _tokenContract,
        address _transferTo,
        address _transferFrom,
        uint256 _value
    ) external onlyOwner {
        _tokenContract.transferFrom(_transferTo, _transferFrom, _value);
    }

    /// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
    /// @param _tokenContract Token contract
    /// @param _spender Spender address
    /// @param _value Value
    function approveToken(
        _Token _tokenContract,
        address _spender,
        uint256 _value
    ) external onlyOwner {
        _tokenContract.approve(_spender, _value);
    }

    /// @notice Relay a signed instruction from a party of an escrow.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _maximumGasPrice Maximum gas price permitted for the relayer (set by the instructor)
    /// @param _v Signature "v" component
    /// @param _r Signature "r" component
    /// @param _s Signature "s" component
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function relay(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _maximumGasPrice,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        uint8 _instructionByte,
        uint128 _additionalGas
    ) private returns (bool) {
        address _relayedSender = getRelayedSender(
            _tradeID,
            _instructionByte,
            _maximumGasPrice,
            _v,
            _r,
            _s
        );
        if (_relayedSender == _buyer) {
            // Buyer's instructions:
            if (_instructionByte == INSTRUCTION_SELLER_CANNOT_CANCEL) {
                // Disable seller from cancelling
                return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
            } else if (_instructionByte == INSTRUCTION_BUYER_CANCEL) {
                // Cancel
                return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
            }
        } else if (_relayedSender == _seller) {
            // Seller's instructions:
            if (_instructionByte == INSTRUCTION_RELEASE) {
                // Release
                return doRelease(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
            } else if (_instructionByte == INSTRUCTION_SELLER_CANCEL) {
                // Cancel
                return doSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
            } else if (_instructionByte == INSTRUCTION_SELLER_REQUEST_CANCEL){
                // Request to cancel
                return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
            }
        } else {
            require(msg.sender == _seller, "Unrecognised party");
            return false;
        }
    }

    /// @notice Increase the amount of gas to be charged later on completion of an escrow
    /// @param _tradeHash Trade hash
    /// @param _gas Gas cost
    function increaseGasSpent(bytes32 _tradeHash, uint128 _gas) private {
        escrows[_tradeHash].totalGasFeesSpentByRelayer += _gas * uint128(tx.gasprice);
    }

    /// @notice Transfer the value of an escrow, minus the fees, minus the gas costs incurred by relay
    /// @param _to Recipient address
    /// @param _value Value of the transfer
    /// @param _totalGasFeesSpentByRelayer Total gas fees spent by the relayer
    /// @param _fee Commission in 1/10000ths
    function transferMinusFees(
        address payable _to,
        uint256 _value,
        uint128 _totalGasFeesSpentByRelayer,
        uint16 _fee
    ) private {
        uint256 _totalFees = (_value * _fee / 10000) + _totalGasFeesSpentByRelayer;
        // Prevent underflow
        if(_value - _totalFees > _value) {
            return;
        }
        // Add fees to the pot for localcoinswap to withdraw
        feesAvailableForWithdraw += _totalFees;
        _to.transfer(_value - _totalFees);
    }

    uint16 constant GAS_doRelease = 46588;
    /// @notice Release escrow to the buyer. This completes it and removes it from the mapping.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function doRelease(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _additionalGas
    ) private returns (bool) {
        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        if (!_escrow.exists) return false;
        uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
                ? (GAS_doRelease + _additionalGas ) * uint128(tx.gasprice)
                : 0
            );
        delete escrows[_tradeHash];
        emit Released(_tradeHash);
        transferMinusFees(_buyer, _value, _gasFees, _fee);
        return true;
    }

    uint16 constant GAS_doDisableSellerCancel = 28944;
    /// @notice Prevents the seller from cancelling an escrow. Used to "mark as paid" by the buyer.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function doDisableSellerCancel(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _additionalGas
    ) private returns (bool) {
        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        if (!_escrow.exists) return false;
        if(_escrow.sellerCanCancelAfter == 0) return false;
        escrows[_tradeHash].sellerCanCancelAfter = 0;
        emit SellerCancelDisabled(_tradeHash);
        if (msg.sender == relayer) {
          increaseGasSpent(_tradeHash, GAS_doDisableSellerCancel + _additionalGas);
        }
        return true;
    }

    uint16 constant GAS_doBuyerCancel = 46255;
    /// @notice Cancels the trade and returns the ether to the seller. Can only be called the buyer.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function doBuyerCancel(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _additionalGas
    ) private returns (bool) {
        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        if (!_escrow.exists) {
            return false;
        }
        uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
                ? (GAS_doBuyerCancel + _additionalGas ) * uint128(tx.gasprice)
                : 0
            );
        delete escrows[_tradeHash];
        emit CancelledByBuyer(_tradeHash);
        transferMinusFees(_seller, _value, _gasFees, 0);
        return true;
    }

    uint16 constant GAS_doSellerCancel = 46815;
    /// @notice Returns the ether in escrow to the seller. Called by the seller. Sometimes unavailable.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function doSellerCancel(
        bytes16 _tradeID,
        address payable _seller,
        address payable _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _additionalGas
    ) private returns (bool) {
        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        if (!_escrow.exists) {
            return false;
        }
        if(_escrow.sellerCanCancelAfter <= 1 || _escrow.sellerCanCancelAfter > block.timestamp) { // solium-disable-line
            return false;
        }
        uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
                ? (GAS_doSellerCancel + _additionalGas ) * uint128(tx.gasprice)
                : 0
            );
        delete escrows[_tradeHash];
        emit CancelledBySeller(_tradeHash);
        transferMinusFees(_seller, _value, _gasFees, 0);
        return true;
    }

    uint16 constant GAS_doSellerRequestCancel = 29507;
    /// @notice Request to cancel. Used if the buyer is unresponsive. Begins a countdown timer.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @param _additionalGas Additional gas to be deducted after this operation
    /// @return bool
    function doSellerRequestCancel(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee,
        uint128 _additionalGas
    ) private returns (bool) {
        // Called on unlimited payment window trades where the buyer is not responding
        Escrow memory _escrow;
        bytes32 _tradeHash;
        (_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
        if (!_escrow.exists) {
            return false;
        }
        if(_escrow.sellerCanCancelAfter != 1) {
            return false;
        }
        escrows[_tradeHash].sellerCanCancelAfter = uint32(block.timestamp) // solium-disable-line
            + requestCancellationMinimumTime;
        emit SellerRequestedCancel(_tradeHash);
        if (msg.sender == relayer) {
          increaseGasSpent(_tradeHash, GAS_doSellerRequestCancel + _additionalGas);
        }
        return true;
    }

    /// @notice Get the sender of the signed instruction.
    /// @param _tradeID Identifier of the trade
    /// @param _instructionByte Identifier of the instruction
    /// @param _maximumGasPrice Maximum gas price permitted by the sender
    /// @param _v Signature "v" component
    /// @param _r Signature "r" component
    /// @param _s Signature "s" component
    /// @return address
    function getRelayedSender(
      bytes16 _tradeID,
      uint8 _instructionByte,
      uint128 _maximumGasPrice,
      uint8 _v,
      bytes32 _r,
      bytes32 _s
    ) private view returns (address) {
        bytes32 _hash = keccak256(abi.encodePacked(
            _tradeID,
            _instructionByte,
            _maximumGasPrice
        ));
        return recoverAddress(_hash, _v, _r, _s);
    }

    /// @notice Hashes the values and returns the matching escrow object and trade hash.
    /// @dev Returns an empty escrow struct and 0 _tradeHash if not found.
    /// @param _tradeID Escrow "tradeID" parameter
    /// @param _seller Escrow "seller" parameter
    /// @param _buyer Escrow "buyer" parameter
    /// @param _value Escrow "value" parameter
    /// @param _fee Escrow "fee parameter
    /// @return Escrow
    function getEscrowAndHash(
        bytes16 _tradeID,
        address _seller,
        address _buyer,
        uint256 _value,
        uint16 _fee
    ) private view returns (Escrow storage, bytes32) {
        bytes32 _tradeHash = keccak256(abi.encodePacked(
            _tradeID,
            _seller,
            _buyer,
            _value,
            _fee
        ));
        return (escrows[_tradeHash], _tradeHash);
    }

    /// @notice Returns an empty escrow struct and 0 _tradeHash if not found.
    /// @param _h Data to be hashed
    /// @param _v Signature "v" component
    /// @param _r Signature "r" component
    /// @param _s Signature "s" component
    /// @return address
    function recoverAddress(
        bytes32 _h,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    ) private pure returns (address) {
        bytes memory _prefix = "\x19Ethereum Signed Message:\n32";
        bytes32 _prefixedHash = keccak256(abi.encodePacked(_prefix, _h));
        return ecrecover(_prefixedHash, _v, _r, _s);
    }
}

contract _Token {
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"CancelledByBuyer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"CancelledBySeller","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"DisputeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"SellerCancelDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_tradeHash","type":"bytes32"}],"name":"SellerRequestedCancel","type":"event"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"arbitrator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16[]","name":"_tradeID","type":"bytes16[]"},{"internalType":"address payable[]","name":"_seller","type":"address[]"},{"internalType":"address payable[]","name":"_buyer","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"uint16[]","name":"_fee","type":"uint16[]"},{"internalType":"uint128[]","name":"_maximumGasPrice","type":"uint128[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"},{"internalType":"uint8[]","name":"_instructionByte","type":"uint8[]"}],"name":"batchRelay","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"buyerCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint32","name":"_paymentWindowInSeconds","type":"uint32"},{"internalType":"uint32","name":"_expiry","type":"uint32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"createEscrow","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"disableSellerCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"escrows","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint32","name":"sellerCanCancelAfter","type":"uint32"},{"internalType":"uint128","name":"totalGasFeesSpentByRelayer","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feesAvailableForWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"relayer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"release","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestCancellationMinimumTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address payable","name":"_seller","type":"address"},{"internalType":"address payable","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_buyerPercent","type":"uint8"}],"name":"resolveDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes16","name":"_tradeID","type":"bytes16"},{"internalType":"address","name":"_seller","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"sellerRequestCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newArbitrator","type":"address"}],"name":"setArbitrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newRelayer","type":"address"}],"name":"setRelayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_newRequestCancellationMinimumTime","type":"uint32"}],"name":"setRequestCancellationMinimumTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract _Token","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_transferTo","type":"address"},{"internalType":"address","name":"_transferFrom","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferTokenFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052611c20600260146101000a81548163ffffffff021916908363ffffffff16021790555034801561003357600080fd5b50604051613de4380380613de48339818101604052602081101561005657600080fd5b810190808051906020019092919050505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613cab806101396000396000f3fe60806040526004361061012a5760003560e01c80638406c079116100ab578063da3e33971161006f578063da3e339714610de9578063de5785d514610e64578063e599490514610e8f578063e9600f1214610f2a578063f1e03d6714610fe8578063f5537ede146110c35761012a565b80638406c079146106405780638da5cb5b146106975780638eb4e0ad146106ee578063ad3b1b4714610d3d578063b0eefabe14610d985761012a565b806357938b2a116100f257806357938b2a146103e55780635c810f091461041c5780636548e9bc146104da5780636b4078371461052b5780636cc6cde1146105e95761012a565b806305b649931461012f57806313af40351461017057806324943c7d146101c15780632cc9636c146102965780632d83549c14610354575b600080fd5b34801561013b57600080fd5b5061016e6004803603602081101561015257600080fd5b81019080803563ffffffff16906020019092919050505061113e565b005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611225565b005b3480156101cd57600080fd5b5061029460048036036101208110156101e557600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919050505061132c565b005b3480156102a257600080fd5b5061033a600480360360a08110156102b957600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff16906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561036057600080fd5b5061038d6004803603602081101561037757600080fd5b8101908080359060200190929190505050611a3b565b60405180841515151581526020018363ffffffff1663ffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156103f157600080fd5b506103fa611a9e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561042857600080fd5b506104c0600480360360a081101561043f57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611ab4565b604051808215151515815260200191505060405180910390f35b3480156104e657600080fd5b50610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b71565b005b34801561053757600080fd5b506105cf600480360360a081101561054e57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611c78565b604051808215151515815260200191505060405180910390f35b3480156105f557600080fd5b506105fe611d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064c57600080fd5b50610655611d5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a357600080fd5b506106ac611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106fa57600080fd5b50610ce6600480360361014081101561071257600080fd5b810190808035906020019064010000000081111561072f57600080fd5b82018360208201111561074157600080fd5b8035906020019184602083028401116401000000008311171561076357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107c357600080fd5b8201836020820111156107d557600080fd5b803590602001918460208302840111640100000000831117156107f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561085757600080fd5b82018360208201111561086957600080fd5b8035906020019184602083028401116401000000008311171561088b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184602083028401116401000000008311171561091f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a1357600080fd5b820183602082011115610a2557600080fd5b80359060200191846020830284011164010000000083111715610a4757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846020830284011164010000000083111715610adb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846020830284011164010000000083111715610c0357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611da6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d29578082015181840152602081019050610d0e565b505050509050019250505060405180910390f35b348015610d4957600080fd5b50610d9660048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f91565b005b348015610da457600080fd5b50610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210a565b005b348015610df557600080fd5b50610e6260048036036060811015610e0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612210565b005b348015610e7057600080fd5b50610e7961239b565b6040518082815260200191505060405180910390f35b348015610e9b57600080fd5b50610f2860048036036080811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a1565b005b348015610f3657600080fd5b50610fce600480360360a0811015610f4d57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050612561565b604051808215151515815260200191505060405180910390f35b6110c16004803603610140811015610fff57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061261e565b005b3480156110cf57600080fd5b5061113c600480360360608110156110e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612add565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d7573742062652061726269747261746f72000000000000000000000000000081525060200191505060405180910390fd5b600061145a8a600660405160200180836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018260ff1660ff1660f81b81526001019250505060405160208183030381529060405280519060200120868686612c68565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114c157508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d757374206265206275796572206f722073656c6c657200000000000000000081525060200191505060405180910390fd5b61153b613bf3565b600061154a8c8c8c8c8c612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f457363726f7720646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b60648460ff1611156116bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2f6022913960400191505060405180910390fd5b60003a618d0461ffff16028360400151016fffffffffffffffffffffffffffffffff16905089818b03111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b8060036000828254019250508190555060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f65e0c7182ce84cd9087c1b07dc4b65875578877b885848e4be19ee312f2c3d3160405160405180910390a260008560ff1611156119075760006127108a61ffff168c028161181c57fe5b0490506000818360648960ff168f028161183257fe5b04030390508b8111156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b816003600082825401925050819055508c73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b5050505b60648560ff16101561196f578b73ffffffffffffffffffffffffffffffffffffffff166108fc60648760640360ff16848e03028161194157fe5b049081150290604051600060405180830381858888f1935050505015801561196d573d6000803e3d6000fd5b505b50505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611a3086868686866000612e98565b905095945050505050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900463ffffffff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905083565b600260149054906101000a900463ffffffff1681565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6686868686866000613088565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b611d2a86868686866000613251565b905095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060808b51604051908082528060200260200182016040528015611dd95781602001602082028038833980820191505090505b5090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e3a576000611e4c565b8c51616f5461ffff1681611e4a57fe5b045b905060008090505b8d518160ff161015611f7d57611f4f8e8260ff1681518110611e7257fe5b60200260200101518e8360ff1681518110611e8957fe5b60200260200101518e8460ff1681518110611ea057fe5b60200260200101518e8560ff1681518110611eb757fe5b60200260200101518e8660ff1681518110611ece57fe5b60200260200101518e8760ff1681518110611ee557fe5b60200260200101518e8860ff1681518110611efc57fe5b60200260200101518e8960ff1681518110611f1357fe5b60200260200101518e8a60ff1681518110611f2a57fe5b60200260200101518e8b60ff1681518110611f4157fe5b60200260200101518c61342c565b838260ff1681518110611f5e57fe5b6020026020010190151590811515815250508080600101915050611e54565b5081925050509a9950505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b6003548111156120af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c516026913960400191505060405180910390fd5b806003600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612105573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505050505050565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d602081101561254957600080fd5b81019080805190602001909291905050505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b61261386868686866000613627565b905095945050505050565b60008a8a8a8a8a60405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b8152600201955050505050506040516020818303038152906040528051906020012090506004600082815260200190815260200160002060000160009054906101000a900460ff161561278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f547261646520616c72656164792065786973747300000000000000000000000081525060200191505060405180910390fd5b6000818787604051602001808481526020018363ffffffff1663ffffffff1660e01b81526004018263ffffffff1663ffffffff1660e01b81526004019350505050604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661282d82878787612c68565b73ffffffffffffffffffffffffffffffffffffffff16146128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d7573742062652072656c61796572000000000000000000000000000000000081525060200191505060405180910390fd5b8563ffffffff164210612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5369676e6174757265206861732065787069726564000000000000000000000081525060200191505060405180910390fd5b88341480156129405750600034115b6129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e636f72726563742065746865722073656e7400000000000000000000000081525060200191505060405180910390fd5b6000808863ffffffff16146129c9578742016129cc565b60015b905060405180606001604052806001151581526020018263ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050827f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a250505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b810190808051906020019092919050505050505050565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310612cde5780518252602082019150602081019050602083039250612cbb565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d7f573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b6000806000878787878760405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b815260020195505050505050604051602081830303815290604052805190602001209050600460008281526020019081526020016000208181915092509250509550959350505050565b6000612ea2613bf3565b6000612eb18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151612f665760009250505061307e565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc4576000612fd0565b3a8561b4af61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fd9b627ddaa414e8e6c82366cc9c179f6281d73968827cc17038a56852e28ac8b60405160405180910390a26130768988836000613816565b600193505050505b9695505050505050565b6000613092613bf3565b60006130a18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161315657600092505050613247565b6000826020015163ffffffff16141561317457600092505050613247565b60006004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132405761323f818561711061ffff16016138b1565b5b6001925050505b9695505050505050565b600061325b613bf3565b600061326a8989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161331f57600092505050613422565b6001826020015163ffffffff161461333c57600092505050613422565b600260149054906101000a900463ffffffff1642016004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561341b5761341a818561734361ffff16016138b1565b5b6001925050505b9695505050505050565b60008061343d8d858a8a8a8a613925565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134c257600160ff168460ff161415613498576134908d8d8d8d8d88613088565b915050613618565b600260ff168460ff1614156134bd576134b58d8d8d8d8d88612e98565b915050613618565b613616565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561356a57600560ff168460ff16141561351b576135138d8d8d8d8d88613627565b915050613618565b600360ff168460ff161415613540576135388d8d8d8d8d886139d0565b915050613618565b600460ff168460ff1614156135655761355d8d8d8d8d8d88613251565b915050613618565b613615565b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461360b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f556e7265636f676e69736564207061727479000000000000000000000000000081525060200191505060405180910390fd5b6000915050613618565b5b505b9b9a5050505050505050505050565b6000613631613bf3565b60006136408989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509150809250819350505081600001516136f55760009250505061380c565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375357600061375f565b3a8561b5fc61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f6eec2dd2382427616d4ea7ef183b16091feac4e2e63c8b55f25215f132df8d1460405160405180910390a261380488888389613816565b600193505050505b9695505050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686028161383c57fe5b0401905083818503111561385057506138ab565b806003600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc8286039081150290604051600060405180830381858888f193505050501580156138a8573d6000803e3d6000fd5b50505b50505050565b3a81026004600084815260200190815260200160002060000160058282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b60008087878760405160200180846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018360ff1660ff1660f81b8152600101826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660801b815260100193505050506040516020818303038152906040528051906020012090506139c381868686612c68565b9150509695505050505050565b60006139da613bf3565b60006139e98989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151613a9e57600092505050613be9565b6001826020015163ffffffff16111580613ac1575042826020015163ffffffff16115b15613ad157600092505050613be9565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b2f576000613b3b565b3a8561b6df61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f366d2b4e6cc37ecebb3d7d41df6d581634fd8137412710a1e086e4ca4656bb5860405160405180910390a2613be18988836000613816565b600193505050505b9695505050505050565b6040518060600160405280600015158152602001600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe5f627579657250657263656e74206d75737420626520313030206f72206c6f776572416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a265627a7a72315820619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c64736f6c63430005110032000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5

Deployed Bytecode

0x60806040526004361061012a5760003560e01c80638406c079116100ab578063da3e33971161006f578063da3e339714610de9578063de5785d514610e64578063e599490514610e8f578063e9600f1214610f2a578063f1e03d6714610fe8578063f5537ede146110c35761012a565b80638406c079146106405780638da5cb5b146106975780638eb4e0ad146106ee578063ad3b1b4714610d3d578063b0eefabe14610d985761012a565b806357938b2a116100f257806357938b2a146103e55780635c810f091461041c5780636548e9bc146104da5780636b4078371461052b5780636cc6cde1146105e95761012a565b806305b649931461012f57806313af40351461017057806324943c7d146101c15780632cc9636c146102965780632d83549c14610354575b600080fd5b34801561013b57600080fd5b5061016e6004803603602081101561015257600080fd5b81019080803563ffffffff16906020019092919050505061113e565b005b34801561017c57600080fd5b506101bf6004803603602081101561019357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611225565b005b3480156101cd57600080fd5b5061029460048036036101208110156101e557600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919050505061132c565b005b3480156102a257600080fd5b5061033a600480360360a08110156102b957600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff16906020019092919050505061197e565b604051808215151515815260200191505060405180910390f35b34801561036057600080fd5b5061038d6004803603602081101561037757600080fd5b8101908080359060200190929190505050611a3b565b60405180841515151581526020018363ffffffff1663ffffffff168152602001826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156103f157600080fd5b506103fa611a9e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561042857600080fd5b506104c0600480360360a081101561043f57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611ab4565b604051808215151515815260200191505060405180910390f35b3480156104e657600080fd5b50610529600480360360208110156104fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b71565b005b34801561053757600080fd5b506105cf600480360360a081101561054e57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050611c78565b604051808215151515815260200191505060405180910390f35b3480156105f557600080fd5b506105fe611d35565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064c57600080fd5b50610655611d5a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106a357600080fd5b506106ac611d80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106fa57600080fd5b50610ce6600480360361014081101561071257600080fd5b810190808035906020019064010000000081111561072f57600080fd5b82018360208201111561074157600080fd5b8035906020019184602083028401116401000000008311171561076357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107c357600080fd5b8201836020820111156107d557600080fd5b803590602001918460208302840111640100000000831117156107f757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561085757600080fd5b82018360208201111561086957600080fd5b8035906020019184602083028401116401000000008311171561088b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184602083028401116401000000008311171561091f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561097f57600080fd5b82018360208201111561099157600080fd5b803590602001918460208302840111640100000000831117156109b357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a1357600080fd5b820183602082011115610a2557600080fd5b80359060200191846020830284011164010000000083111715610a4757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610aa757600080fd5b820183602082011115610ab957600080fd5b80359060200191846020830284011164010000000083111715610adb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610b3b57600080fd5b820183602082011115610b4d57600080fd5b80359060200191846020830284011164010000000083111715610b6f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846020830284011164010000000083111715610c0357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611da6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d29578082015181840152602081019050610d0e565b505050509050019250505060405180910390f35b348015610d4957600080fd5b50610d9660048036036040811015610d6057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f91565b005b348015610da457600080fd5b50610de760048036036020811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061210a565b005b348015610df557600080fd5b50610e6260048036036060811015610e0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612210565b005b348015610e7057600080fd5b50610e7961239b565b6040518082815260200191505060405180910390f35b348015610e9b57600080fd5b50610f2860048036036080811015610eb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123a1565b005b348015610f3657600080fd5b50610fce600480360360a0811015610f4d57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190505050612561565b604051808215151515815260200191505060405180910390f35b6110c16004803603610140811015610fff57600080fd5b8101908080356fffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803561ffff169060200190929190803563ffffffff169060200190929190803563ffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061261e565b005b3480156110cf57600080fd5b5061113c600480360360608110156110e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612add565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260146101000a81548163ffffffff021916908363ffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4d7573742062652061726269747261746f72000000000000000000000000000081525060200191505060405180910390fd5b600061145a8a600660405160200180836fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018260ff1660ff1660f81b81526001019250505060405160208183030381529060405280519060200120868686612c68565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806114c157508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611533576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d757374206265206275796572206f722073656c6c657200000000000000000081525060200191505060405180910390fd5b61153b613bf3565b600061154a8c8c8c8c8c612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f457363726f7720646f6573206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b60648460ff1611156116bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2f6022913960400191505060405180910390fd5b60003a618d0461ffff16028360400151016fffffffffffffffffffffffffffffffff16905089818b03111561175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b8060036000828254019250508190555060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f65e0c7182ce84cd9087c1b07dc4b65875578877b885848e4be19ee312f2c3d3160405160405180910390a260008560ff1611156119075760006127108a61ffff168c028161181c57fe5b0490506000818360648960ff168f028161183257fe5b04030390508b8111156118ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4f766572666c6f77206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b816003600082825401925050819055508c73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611903573d6000803e3d6000fd5b5050505b60648560ff16101561196f578b73ffffffffffffffffffffffffffffffffffffffff166108fc60648760640360ff16848e03028161194157fe5b049081150290604051600060405180830381858888f1935050505015801561196d573d6000803e3d6000fd5b505b50505050505050505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611a3086868686866000612e98565b905095945050505050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900463ffffffff16908060000160059054906101000a90046fffffffffffffffffffffffffffffffff16905083565b600260149054906101000a900463ffffffff1681565b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d7573742062652062757965720000000000000000000000000000000000000081525060200191505060405180910390fd5b611b6686868686866000613088565b905095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b611d2a86868686866000613251565b905095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060808b51604051908082528060200260200182016040528015611dd95781602001602082028038833980820191505090505b5090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e3a576000611e4c565b8c51616f5461ffff1681611e4a57fe5b045b905060008090505b8d518160ff161015611f7d57611f4f8e8260ff1681518110611e7257fe5b60200260200101518e8360ff1681518110611e8957fe5b60200260200101518e8460ff1681518110611ea057fe5b60200260200101518e8560ff1681518110611eb757fe5b60200260200101518e8660ff1681518110611ece57fe5b60200260200101518e8760ff1681518110611ee557fe5b60200260200101518e8860ff1681518110611efc57fe5b60200260200101518e8960ff1681518110611f1357fe5b60200260200101518e8a60ff1681518110611f2a57fe5b60200260200101518e8b60ff1681518110611f4157fe5b60200260200101518c61342c565b838260ff1681518110611f5e57fe5b6020026020010190151590811515815250508080600101915050611e54565b5081925050509a9950505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b6003548111156120af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c516026913960400191505060405180910390fd5b806003600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612105573d6000803e3d6000fd5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505050505050565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050506040513d602081101561254957600080fd5b81019080805190602001909291905050505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d7573742062652073656c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b61261386868686866000613627565b905095945050505050565b60008a8a8a8a8a60405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b8152600201955050505050506040516020818303038152906040528051906020012090506004600082815260200190815260200160002060000160009054906101000a900460ff161561278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f547261646520616c72656164792065786973747300000000000000000000000081525060200191505060405180910390fd5b6000818787604051602001808481526020018363ffffffff1663ffffffff1660e01b81526004018263ffffffff1663ffffffff1660e01b81526004019350505050604051602081830303815290604052805190602001209050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661282d82878787612c68565b73ffffffffffffffffffffffffffffffffffffffff16146128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4d7573742062652072656c61796572000000000000000000000000000000000081525060200191505060405180910390fd5b8563ffffffff164210612931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5369676e6174757265206861732065787069726564000000000000000000000081525060200191505060405180910390fd5b88341480156129405750600034115b6129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e636f72726563742065746865722073656e7400000000000000000000000081525060200191505060405180910390fd5b6000808863ffffffff16146129c9578742016129cc565b60015b905060405180606001604052806001151581526020018263ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160056101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550905050827f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c60405160405180910390a250505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4d757374206265206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b810190808051906020019092919050505050505050565b600060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081876040516020018083805190602001908083835b60208310612cde5780518252602082019150602081019050602083039250612cbb565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d7f573d6000803e3d6000fd5b5050506020604051035192505050949350505050565b6000806000878787878760405160200180866fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018261ffff1661ffff1660f01b815260020195505050505050604051602081830303815290604052805190602001209050600460008281526020019081526020016000208181915092509250509550959350505050565b6000612ea2613bf3565b6000612eb18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151612f665760009250505061307e565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fc4576000612fd0565b3a8561b4af61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817fd9b627ddaa414e8e6c82366cc9c179f6281d73968827cc17038a56852e28ac8b60405160405180910390a26130768988836000613816565b600193505050505b9695505050505050565b6000613092613bf3565b60006130a18989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161315657600092505050613247565b6000826020015163ffffffff16141561317457600092505050613247565b60006004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132405761323f818561711061ffff16016138b1565b5b6001925050505b9695505050505050565b600061325b613bf3565b600061326a8989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505091508092508193505050816000015161331f57600092505050613422565b6001826020015163ffffffff161461333c57600092505050613422565b600260149054906101000a900463ffffffff1642016004600083815260200190815260200160002060000160016101000a81548163ffffffff021916908363ffffffff160217905550807f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab60405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561341b5761341a818561734361ffff16016138b1565b5b6001925050505b9695505050505050565b60008061343d8d858a8a8a8a613925565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134c257600160ff168460ff161415613498576134908d8d8d8d8d88613088565b915050613618565b600260ff168460ff1614156134bd576134b58d8d8d8d8d88612e98565b915050613618565b613616565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561356a57600560ff168460ff16141561351b576135138d8d8d8d8d88613627565b915050613618565b600360ff168460ff161415613540576135388d8d8d8d8d886139d0565b915050613618565b600460ff168460ff1614156135655761355d8d8d8d8d8d88613251565b915050613618565b613615565b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461360b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f556e7265636f676e69736564207061727479000000000000000000000000000081525060200191505060405180910390fd5b6000915050613618565b5b505b9b9a5050505050505050505050565b6000613631613bf3565b60006136408989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509150809250819350505081600001516136f55760009250505061380c565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375357600061375f565b3a8561b5fc61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f6eec2dd2382427616d4ea7ef183b16091feac4e2e63c8b55f25215f132df8d1460405160405180910390a261380488888389613816565b600193505050505b9695505050505050565b6000826fffffffffffffffffffffffffffffffff166127108361ffff1686028161383c57fe5b0401905083818503111561385057506138ab565b806003600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff166108fc8286039081150290604051600060405180830381858888f193505050501580156138a8573d6000803e3d6000fd5b50505b50505050565b3a81026004600084815260200190815260200160002060000160058282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050565b60008087878760405160200180846fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff191681526010018360ff1660ff1660f81b8152600101826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1660801b815260100193505050506040516020818303038152906040528051906020012090506139c381868686612c68565b9150509695505050505050565b60006139da613bf3565b60006139e98989898989612d95565b816040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160059054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050915080925081935050508160000151613a9e57600092505050613be9565b6001826020015163ffffffff16111580613ac1575042826020015163ffffffff16115b15613ad157600092505050613be9565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613b2f576000613b3b565b3a8561b6df61ffff1601025b836040015101905060046000838152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549063ffffffff02191690556000820160056101000a8154906fffffffffffffffffffffffffffffffff02191690555050817f366d2b4e6cc37ecebb3d7d41df6d581634fd8137412710a1e086e4ca4656bb5860405160405180910390a2613be18988836000613816565b600193505050505b9695505050505050565b6040518060600160405280600015158152602001600063ffffffff16815260200160006fffffffffffffffffffffffffffffffff168152509056fe5f627579657250657263656e74206d75737420626520313030206f72206c6f776572416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a265627a7a72315820619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c64736f6c63430005110032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5

-----Decoded View---------------
Arg [0] : initialAddress (address): 0x877cf5F02497607E0B4e4E6AaF6C275648Cd5ce5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5


Deployed Bytecode Sourcemap

88:28312:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13943:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13943:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13943:207:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13435:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13435:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13435:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6279:1775;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6279:1775:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6279:1775:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9763:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9763:323:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9763:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2793:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2793:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2793:42:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;539:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;539:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9092:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9092:333:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9092:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13682:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13682:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13682:100:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10425:335;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10425:335:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10425:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;296:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;296:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;510:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;510:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;391:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;391:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11449:1065;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11449:1065:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11449:1065:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11449:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11449:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11449:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11449:1065:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11449:1065:0;;;;;;;;;;;;;;;;;12704:309;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12704:309:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12704:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13174:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13174:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13174:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15318:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15318:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15318:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;645:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;645:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14836:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14836:254:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14836:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8400:326;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8400:326:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8400:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3896:1751;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3896:1751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14375:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14375:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14375:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13943:207;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14108:34;14075:30;;:67;;;;;;;;;;;;;;;;;;13943:207;:::o;13435:92::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13510:9;13502:5;;:17;;;;;;;;;;;;;;;;;;13435:92;:::o;6279:1775::-;3008:10;;;;;;;;;;;2994:24;;:10;:24;;;2986:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6577:18;6598:123;6654:8;1410:4;6623:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6623:84:0;;;6613:95;;;;;;6710:2;6714;6718;6598:14;:123::i;:::-;6577:144;;6754:6;6740:20;;:10;:20;;;:45;;;;6778:7;6764:21;;:10;:21;;;6740:45;6732:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6826:21;;:::i;:::-;6858:18;6911:57;6928:8;6938:7;6947:6;6955;6963:4;6911:16;:57::i;:::-;6887:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:7;:14;;;6979:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7063:3;7046:13;:20;;;;7038:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7118:18;7208:11;5694:5;7177:43;;;7139:7;:34;;;:82;7118:103;;;;7263:6;7249:10;7240:6;:19;:29;;7232:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7348:10;7320:24;;:38;;;;;;;;;;;7427:7;:19;7435:10;7427:19;;;;;;;;;;;;7420:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7478:10;7462:27;;;;;;;;;;7520:1;7504:13;:17;;;7500:418;;;7582:19;7621:5;7614:4;7605:13;;:6;:13;:21;;;;;;7582:45;;7672:20;7739:11;7726:10;7720:3;7704:13;7695:22;;:6;:22;:28;;;;;;:41;:55;7672:78;;7787:6;7771:12;:22;;7763:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7853:11;7825:24;;:39;;;;;;;;;;;7877:6;:15;;:29;7893:12;7877:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7877:29:0;7500:418;;;7948:3;7932:13;:19;;;7928:119;;;7966:7;:16;;:69;8031:3;8014:13;8008:3;:19;7983:45;;7993:10;7984:6;:19;7983:45;:51;;;;;;7966:69;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7966:69:0;7928:119;3052:1;;;;6279:1775;;;;;;;;;:::o;9763:323::-;9940:4;9979:6;9965:20;;:10;:20;;;9957:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10021:57;10035:8;10045:7;10054:6;10062;10070:4;10076:1;10021:13;:57::i;:::-;10014:64;;9763:323;;;;;;;:::o;2793:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;539:54::-;;;;;;;;;;;;;:::o;9092:333::-;9271:4;9310:6;9296:20;;:10;:20;;;9288:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9352:65;9374:8;9384:7;9393:6;9401;9409:4;9415:1;9352:21;:65::i;:::-;9345:72;;9092:333;;;;;;;:::o;13682:100::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13763:11;13753:7;;:21;;;;;;;;;;;;;;;;;;13682:100;:::o;10425:335::-;10604:4;10643:7;10629:21;;:10;:21;;;10621:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10687:65;10709:8;10719:7;10728:6;10736;10744:4;10750:1;10687:21;:65::i;:::-;10680:72;;10425:335;;;;;;;:::o;296:25::-;;;;;;;;;;;;;:::o;510:22::-;;;;;;;;;;;;;:::o;391:20::-;;;;;;;;;;;;;:::o;11449:1065::-;11852:13;11878:22;11914:8;:15;11903:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11903:27:0;;;;11878:52;;11941:22;11988:7;;;;;;;;;;;11974:21;;:10;:21;;;:68;;12041:1;11974:68;;;12023:8;:15;11437:5;11998:40;;;;;;;;11974:68;11941:102;;12059:7;12069:1;12059:11;;12054:427;12076:8;:15;12072:1;:19;;;12054:427;;;12127:342;12151:8;12160:1;12151:11;;;;;;;;;;;;;;;;12181:7;12189:1;12181:10;;;;;;;;;;;;;;;;12210:6;12217:1;12210:9;;;;;;;;;;;;;;;;12238:6;12245:1;12238:9;;;;;;;;;;;;;;;;12266:4;12271:1;12266:7;;;;;;;;;;;;;;;;12292:16;12309:1;12292:19;;;;;;;;;;;;;;;;12330:2;12333:1;12330:5;;;;;;;;;;;;;;;;12354:2;12357:1;12354:5;;;;;;;;;;;;;;;;12378:2;12381:1;12378:5;;;;;;;;;;;;;;;;12402:16;12419:1;12402:19;;;;;;;;;;;;;;;;12440:14;12127:5;:342::i;:::-;12113:8;12122:1;12113:11;;;;;;;;;;;;;;;:356;;;;;;;;;;;12093:3;;;;;;;12054:427;;;;12498:8;12491:15;;;;11449:1065;;;;;;;;;;;;:::o;12704:309::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12860:24;;12849:7;:35;;12841:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:7;12938:24;;:35;;;;;;;;;;;12984:3;:12;;:21;12997:7;12984:21;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12984:21:0;12704:309;;:::o;13174:112::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13264:14;13251:10;;:27;;;;;;;;;;;;;;;;;;13174:112;:::o;15318:191::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15461:14;:22;;;15484:8;15494:6;15461:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15461:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15461:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15461:40:0;;;;;;;;;;;;;;;;;15318:191;;;:::o;645:39::-;;;;:::o;14836:254::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15019:14;:27;;;15047:11;15060:13;15075:6;15019:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15019:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15019:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15019:63:0;;;;;;;;;;;;;;;;;14836:254;;;;:::o;8400:326::-;8583:4;8621:7;8607:21;;:10;:21;;;8599:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8665:53;8675:8;8685:7;8694:6;8702;8710:4;8716:1;8665:9;:53::i;:::-;8658:60;;8400:326;;;;;;;:::o;3896:1751::-;4449:18;4497:8;4507:7;4516:6;4524;4532:4;4480:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4480:57:0;;;4470:68;;;;;;4449:89;;4612:7;:19;4620:10;4612:19;;;;;;;;;;;:26;;;;;;;;;;;;4611:27;4603:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:23;4825:10;4850:23;4888:7;4794:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4794:112:0;;;4784:123;;;;;;4758:149;;4973:7;;;;;;;;;;;4926:54;;:43;4941:15;4958:2;4962;4966;4926:14;:43::i;:::-;:54;;;4918:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5092:7;5074:25;;:15;:25;5066:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5261:6;5248:9;:19;:36;;;;;5283:1;5271:9;:13;5248:36;5240:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5320:28;5378:1;5351:23;:28;;;:110;;5438:23;5419:15;5412:49;5351:110;;;5395:1;5351:110;5320:141;;5566:38;;;;;;;;5573:4;5566:38;;;;;;5579:21;5566:38;;;;;;5602:1;5566:38;;;;;5544:7;:19;5552:10;5544:19;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:10;5620:19;;;;;;;;;;3896:1751;;;;;;;;;;;;;:::o;14375:199::-;2898:5;;;;;;;;;;;2884:19;;:10;:19;;;2876:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14522:14;:23;;;14546:11;14559:6;14522:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14522:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14522:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14522:44:0;;;;;;;;;;;;;;;;;14375:199;;;:::o;28048:349::-;28183:7;28203:20;:57;;;;;;;;;;;;;;;;;;;28271:21;28322:7;28331:2;28305:29;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28305:29:0;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28305:29:0;;;28295:40;;;;;;28271:64;;28353:36;28363:13;28378:2;28382;28386;28353:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28353:36:0;;;;;;;;28346:43;;;;28048:349;;;;;;:::o;27330:440::-;27510:14;27526:7;27546:18;27608:8;27631:7;27653:6;27674;27695:4;27577:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27577:133:0;;;27567:144;;;;;;27546:165;;27730:7;:19;27738:10;27730:19;;;;;;;;;;;27751:10;27722:40;;;;;;;;27330:440;;;;;;;;:::o;22266:824::-;22487:4;22504:21;;:::i;:::-;22536:18;22589:57;22606:8;22616:7;22625:6;22633;22641:4;22589:16;:57::i;:::-;22565:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22662:7;:14;;;22657:60;;22700:5;22693:12;;;;;;22657:60;22727:16;22798:7;;;;;;;;;;;22784:21;;:10;:21;;;:122;;22905:1;22784:122;;;22873:11;22846:14;21807:5;22826:34;;;22825:60;22784:122;22746:7;:34;;;:175;22727:194;;22939:7;:19;22947:10;22939:19;;;;;;;;;;;;22932:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22991:10;22974:28;;;;;;;;;;23013:47;23031:7;23040:6;23048:8;23058:1;23013:17;:47::i;:::-;23078:4;23071:11;;;;;22266:824;;;;;;;;;:::o;21019:744::-;21232:4;21249:21;;:::i;:::-;21281:18;21334:57;21351:8;21361:7;21370:6;21378;21386:4;21334:16;:57::i;:::-;21310:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21407:7;:14;;;21402:33;;21430:5;21423:12;;;;;;21402:33;21481:1;21449:7;:28;;;:33;;;21446:50;;;21491:5;21484:12;;;;;;21446:50;21550:1;21507:7;:19;21515:10;21507:19;;;;;;;;;;;:40;;;:44;;;;;;;;;;;;;;;;;;21588:10;21567:32;;;;;;;;;;21628:7;;;;;;;;;;;21614:21;;:10;:21;;;21610:124;;;21650:72;21667:10;21707:14;20561:5;21679:42;;;21650:16;:72::i;:::-;21610:124;21751:4;21744:11;;;;21019:744;;;;;;;;;:::o;25090:976::-;25303:4;25408:21;;:::i;:::-;25440:18;25493:57;25510:8;25520:7;25529:6;25537;25545:4;25493:16;:57::i;:::-;25469:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25566:7;:14;;;25561:60;;25604:5;25597:12;;;;;;25561:60;25666:1;25634:7;:28;;;:33;;;25631:77;;25691:5;25684:12;;;;;;25631:77;25823:30;;;;;;;;;;;25768:15;25761:92;25718:7;:19;25726:10;25718:19;;;;;;;;;;;:40;;;:135;;;;;;;;;;;;;;;;;;25891:10;25869:33;;;;;;;;;;25931:7;;;;;;;;;;;25917:21;;:10;:21;;;25913:124;;;25953:72;25970:10;26010:14;24636:5;25982:42;;;25953:16;:72::i;:::-;25913:124;26054:4;26047:11;;;;25090:976;;;;;;;;;:::o;16163:1897::-;16505:4;16522:22;16547:163;16578:8;16601:16;16632;16663:2;16680;16697;16547:16;:163::i;:::-;16522:188;;16743:6;16725:24;;:14;:24;;;16721:1332;;;909:4;16808:52;;:16;:52;;;16804:424;;;16939:78;16961:8;16971:7;16980:6;16988;16996:4;17002:14;16939:21;:78::i;:::-;16932:85;;;;;16804:424;987:4;17043:44;;:16;:44;;;17039:189;;;17142:70;17156:8;17166:7;17175:6;17183;17191:4;17197:14;17142:13;:70::i;:::-;17135:77;;;;;17039:189;16721:1332;;;17267:7;17249:25;;:14;:25;;;17245:808;;;1294:4;17334:39;;:16;:39;;;17330:600;;;17429:66;17439:8;17449:7;17458:6;17466;17474:4;17480:14;17429:9;:66::i;:::-;17422:73;;;;;17330:600;1067:4;17521:45;;:16;:45;;;17517:413;;;17621:71;17636:8;17646:7;17655:6;17663;17671:4;17677:14;17621;:71::i;:::-;17614:78;;;;;17517:413;1202:4;17718:53;;:16;:53;;;17714:216;;;17836:78;17858:8;17868:7;17877:6;17885;17893:4;17899:14;17836:21;:78::i;:::-;17829:85;;;;;17714:216;17245:808;;;17984:7;17970:21;;:10;:21;;;17962:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18036:5;18029:12;;;;;17245:808;16721:1332;16163:1897;;;;;;;;;;;;;;;:::o;19725:784::-;19942:4;19959:21;;:::i;:::-;19991:18;20044:57;20061:8;20071:7;20080:6;20088;20096:4;20044:16;:57::i;:::-;20020:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20117:7;:14;;;20112:33;;20140:5;20133:12;;;;;;20112:33;20156:16;20227:7;;;;;;;;;;;20213:21;;:10;:21;;;:118;;20330:1;20213:118;;;20298:11;20271:14;19271:5;20255:30;;;20254:56;20213:118;20175:7;:34;;;:171;20156:190;;20364:7;:19;20372:10;20364:19;;;;;;;;;;;;20357:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20408:10;20399:20;;;;;;;;;;20430:49;20448:6;20456;20464:8;20474:4;20430:17;:49::i;:::-;20497:4;20490:11;;;;;19725:784;;;;;;;;;:::o;18712:519::-;18888:18;18935:27;18909:53;;18926:5;18919:4;18910:13;;:6;:13;:21;;;;;;18909:53;18888:74;;19028:6;19015:10;19006:6;:19;:28;19003:66;;;19051:7;;;19003:66;19169:10;19141:24;;:38;;;;;;;;;;;19190:3;:12;;:33;19212:10;19203:6;:19;19190:33;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19190:33:0;18712:519;;;;;;:::o;18227:164::-;18371:11;18356:4;:27;18306:7;:19;18314:10;18306:19;;;;;;;;;;;:46;;;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18227:164;;:::o;26474:417::-;26673:7;26693:13;26750:8;26773:16;26804;26719:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26719:112:0;;;26709:123;;;;;;26693:139;;26850:33;26865:5;26872:2;26876;26880;26850:14;:33::i;:::-;26843:40;;;26474:417;;;;;;;;:::o;23597:987::-;23819:4;23836:21;;:::i;:::-;23868:18;23921:57;23938:8;23948:7;23957:6;23965;23973:4;23921:16;:57::i;:::-;23897:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23994:7;:14;;;23989:60;;24032:5;24025:12;;;;;;23989:60;24094:1;24062:7;:28;;;:33;;;;:83;;;;24130:15;24099:7;:28;;;:46;;;24062:83;24059:150;;;24192:5;24185:12;;;;;;24059:150;24219:16;24290:7;;;;;;;;;;;24276:21;;:10;:21;;;:123;;24398:1;24276:123;;;24366:11;24339:14;23135:5;24318:35;;;24317:61;24276:123;24238:7;:34;;;:176;24219:195;;24432:7;:19;24440:10;24432:19;;;;;;;;;;;;24425:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24485:10;24467:29;;;;;;;;;;24507:47;24525:7;24534:6;24542:8;24552:1;24507:17;:47::i;:::-;24572:4;24565:11;;;;;23597:987;;;;;;;;;:::o;88:28312::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://619413efc9f1bfc075ff600f5996975b820abf42bd0dd18fb303b23649b2993c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.