ETH Price: $2,353.31 (+5.25%)

Contract

0x7725C0f01E4ec6A1e9AA65e5Bd6EddF03087d2A8
 

Overview

ETH Balance

0.292063375661297479 ETH

Eth Value

$687.31 (@ $2,353.31/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Bet203874812024-07-26 1:37:35599 days ago1721957855IN
0x7725C0f0...03087d2A8
0 ETH0.000130492.28106964
Withdraw Bet203831772024-07-25 11:10:47599 days ago1721905847IN
0x7725C0f0...03087d2A8
0 ETH0.000193173.37655176
Set Results194667692024-03-19 5:39:11727 days ago1710826751IN
0x7725C0f0...03087d2A8
0 ETH0.0008009626.69966733
Withdraw Pool194602022024-03-18 7:29:11728 days ago1710746951IN
0x7725C0f0...03087d2A8
0 ETH0.001525220.68440598
Create Pool194242962024-03-13 6:14:59733 days ago1710310499IN
0x7725C0f0...03087d2A8
0.18 ETH0.009698138.67576493
Set Results194180162024-03-12 9:10:47734 days ago1710234647IN
0x7725C0f0...03087d2A8
0 ETH0.0014608148.69554465
Make Bet194158282024-03-12 1:49:59735 days ago1710208199IN
0x7725C0f0...03087d2A8
0.0002 ETH0.0048803752.34212073
Make Bet194158212024-03-12 1:48:35735 days ago1710208115IN
0x7725C0f0...03087d2A8
0.0004 ETH0.0048525152.02713872
Make Bet194158202024-03-12 1:48:23735 days ago1710208103IN
0x7725C0f0...03087d2A8
0.0001 ETH0.0043776946.93621879
Withdraw Bet194108712024-03-11 9:10:47735 days ago1710148247IN
0x7725C0f0...03087d2A8
0 ETH0.003711264.86989327
Withdraw Bet194108672024-03-11 9:09:59735 days ago1710148199IN
0x7725C0f0...03087d2A8
0 ETH0.0038846767.90203353
Create Pool194108062024-03-11 8:57:35735 days ago1710147455IN
0x7725C0f0...03087d2A8
0.2 ETH0.0157929262.98175098
Withdraw Pool194108012024-03-11 8:56:35735 days ago1710147395IN
0x7725C0f0...03087d2A8
0 ETH0.0043617659.15295311
Set Results194107392024-03-11 8:43:47735 days ago1710146627IN
0x7725C0f0...03087d2A8
0 ETH0.001385646.18826417
Make Bet193892812024-03-08 8:33:47738 days ago1709886827IN
0x7725C0f0...03087d2A8
0.005 ETH0.0047506450.92827186
Make Bet193887942024-03-08 6:55:11738 days ago1709880911IN
0x7725C0f0...03087d2A8
0.005 ETH0.003709939.78370242
Make Bet193887682024-03-08 6:49:59738 days ago1709880599IN
0x7725C0f0...03087d2A8
0.005 ETH0.0042901746.00627155
Make Bet193887512024-03-08 6:46:35738 days ago1709880395IN
0x7725C0f0...03087d2A8
0.005 ETH0.0040393443.30299666
Make Bet193887482024-03-08 6:45:59738 days ago1709880359IN
0x7725C0f0...03087d2A8
0.005 ETH0.0039647142.51608672
Make Bet193887112024-03-08 6:38:35738 days ago1709879915IN
0x7725C0f0...03087d2A8
0.005 ETH0.0042707845.79826829
Make Bet193887082024-03-08 6:37:59738 days ago1709879879IN
0x7725C0f0...03087d2A8
0.005 ETH0.0043716146.86502723
Make Bet193887052024-03-08 6:37:23738 days ago1709879843IN
0x7725C0f0...03087d2A8
0.004 ETH0.003525337.80895741
Make Bet193887022024-03-08 6:36:47738 days ago1709879807IN
0x7725C0f0...03087d2A8
0.005 ETH0.0040233943.13196777
Create Pool193886872024-03-08 6:33:47738 days ago1709879627IN
0x7725C0f0...03087d2A8
0.18 ETH0.0109594743.70606939
Withdraw Pool193658742024-03-05 2:07:11742 days ago1709604431IN
0x7725C0f0...03087d2A8
0 ETH0.0050716268.77992211
View all transactions

Latest 16 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer203874812024-07-26 1:37:35599 days ago1721957855
0x7725C0f0...03087d2A8
0.00962181 ETH
Transfer203831772024-07-25 11:10:47599 days ago1721905847
0x7725C0f0...03087d2A8
0.00962181 ETH
Transfer194602022024-03-18 7:29:11728 days ago1710746951
0x7725C0f0...03087d2A8
0.18971741 ETH
Transfer194108712024-03-11 9:10:47735 days ago1710148247
0x7725C0f0...03087d2A8
0.00962181 ETH
Transfer194108672024-03-11 9:09:59735 days ago1710148199
0x7725C0f0...03087d2A8
0.00962181 ETH
Transfer194108012024-03-11 8:56:35735 days ago1710147395
0x7725C0f0...03087d2A8
0.17431272 ETH
Transfer193658742024-03-05 2:07:11742 days ago1709604431
0x7725C0f0...03087d2A8
0.19 ETH
Transfer193580702024-03-03 23:58:11743 days ago1709510291
0x7725C0f0...03087d2A8
0.20756666 ETH
Transfer193580682024-03-03 23:57:47743 days ago1709510267
0x7725C0f0...03087d2A8
0.0611 ETH
Transfer193580672024-03-03 23:57:35743 days ago1709510255
0x7725C0f0...03087d2A8
0.10183333 ETH
Transfer193392212024-03-01 8:46:23745 days ago1709282783
0x7725C0f0...03087d2A8
0.171 ETH
Transfer193228082024-02-28 1:38:23748 days ago1709084303
0x7725C0f0...03087d2A8
0.171 ETH
Transfer193099792024-02-26 6:34:11749 days ago1708929251
0x7725C0f0...03087d2A8
0.19 ETH
Transfer192870472024-02-23 1:33:47753 days ago1708652027
0x7725C0f0...03087d2A8
0.1890992 ETH
Transfer192870462024-02-23 1:33:35753 days ago1708652015
0x7725C0f0...03087d2A8
0.16152 ETH
Transfer192746272024-02-21 7:43:35754 days ago1708501415
0x7725C0f0...03087d2A8
0.19 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GasFi

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-02-20
*/

/*

 ____                         ____           
/\  _`\                      /\  _`\   __    
\ \ \L\_\     __       ____  \ \ \L\_\/\_\   
 \ \ \L_L   /'__`\    /',__\  \ \  _\/\/\ \  
  \ \ \/, \/\ \L\.\_ /\__, `\  \ \ \/  \ \ \ 
   \ \____/\ \__/.\_\\/\____/   \ \_\   \ \_\
    \/___/  \/__/\/_/ \/___/     \/_/    \/_/
                                             

GasFi introduces a paradigm shift in DeFi trading by tokenizing multi-chain gas as a tradable asset. 
Drawing parallels with the emergence of futures contracts in the 19th century, 
GasFi extends these principles to the burgeoning field of digital assets, focusing on blockchain gas fees. 
Our vision is to establish a versatile platform for users to hedge against gas fee volatility, 
introducing an innovative dimension to cryptocurrency financial products.

Website:    https://gasfi.io/
Telegram:   https://t.me/GASFI_Portal
Twitter:    https://twitter.com/GASFI_Official
Whitepaper: https://gasfi.gitbook.io/

*/

// SPDX-License-Identifier: MIT

// File: lib/@openzeppelin/contracts/utils/ReentrancyGuard.sol

// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// File: src/GasFi.sol


pragma solidity ^0.8.13;

//import {Test, console2} from "forge-std/Test.sol";

contract GasFi is ReentrancyGuard {
// y=(G+L) * (1-f ) * (x /G )
    struct Pool {
        uint256 height; //
        uint256 biggerAmount; //by wei
        uint256 lessAmount; //by wei
        uint256 gas;  //gas price by wei
        address creator;
        uint32 poolFee; // 1~30 = 0.1% ~ 3 %
        uint16 isExtracted; //
        uint16 result; //       0:pool not open 1: less than pool gas price 2: bigger than pool gas price 3: equals to pool gas
        uint32 projectFee;
    }

    struct Bet {
        uint256 amount; // by wei
//        uint poolId;
        address creator;
        uint32 isBigger;
        uint32 isExtracted;
    }

    enum PoolStatus{
        Active,
        Locked,
        Opened,
        Extracted
    }

    enum BetStatus{
        Active,
        Locked,
        Win,
        Extracted,
        NotWin,
        Tie
    }

    event PoolCreated(uint poolId, uint height, uint256 gas, uint biggerAmount, uint lessAmount, uint32 poolFee, address creator, uint betIdBigger, uint betIdLess);

    event BetCreated(uint poolId, uint betValue, uint32 isBigger, uint biggerAmount, uint lessAmount, address creator, uint betId);

    event BetAppended(uint poolId, uint betValue, uint32 isBigger, uint biggerAmount, uint lessAmount, address creator, uint betId);

    event PoolOpened(uint poolId, uint16 result);

    event BetExtracted(uint poolId, uint betId, uint256 value, address extractor);

    event PoolExtracted(uint poolId, uint fee, address extractor);


    uint constant public FEE_DECIMAL = 1000;
    address immutable public owner;
    address immutable public resultSetter;

    uint  public minPoolFee = 1; // 0.1%
    uint  public maxPoolFee = 30; //3%
    uint32  public projectFee = 50; //5%

    uint256 public latestPoolId;
    uint256 public latestBetId;
    uint public lockedBlockHeight = 149; // 30min
    uint public minPoolSize = 0.166 ether;

    mapping(uint256 => Pool) public pools_;
    mapping(uint256 => mapping(uint256 => Bet)) public bets_;

    constructor(address _resultSetter){
        owner = msg.sender;
        resultSetter = _resultSetter;
    }

    function setLockedBlockHeight(uint _lockedBlockHeight) external {
        assert(msg.sender == resultSetter);
        lockedBlockHeight = _lockedBlockHeight;
    }

    function setMinPoolSize(uint _minPoolSize) external {
        assert(msg.sender == resultSetter);
        minPoolSize = _minPoolSize;
    }

    function setMinPoolFee(uint _minPoolFee) external {
        assert(msg.sender == resultSetter);
        minPoolFee = _minPoolFee;
    }

    function setMaxPoolFee(uint _maxPoolFee) external {
        assert(msg.sender == resultSetter);
        maxPoolFee = _maxPoolFee;
    }

    function setProjectFee(uint32 _projectFee) external {
        assert(msg.sender == resultSetter);
        projectFee = _projectFee;
    }

    function createPool(uint blockNumber, uint256 gas, uint initialValue, uint32 poolFee) external payable {
        require(blockNumber > block.number, "createPool::invalid block number");
//        require(gas > 0, "createPool::invalid gas price");
        require(msg.value >= initialValue, "createPool::value not enough ");
        require(initialValue >= minPoolSize, "createPool::size too little ");
        require(poolFee >= minPoolFee && poolFee <= maxPoolFee, "createPool::invalid poolFee");

        Pool storage pool = pools_[++latestPoolId];
        pool.height = blockNumber;
        pool.creator = msg.sender;
        pool.gas = gas;
        pool.poolFee = poolFee;
        pool.projectFee = projectFee;
        uint betValue = initialValue / 2;

        pool.biggerAmount = betValue;
        pool.lessAmount = betValue;
        uint betIdLess = _makeBet(latestPoolId, betValue, 0);
        uint betIdBigger = _makeBet(latestPoolId, betValue, 1);

        emit PoolCreated(latestPoolId, blockNumber, gas, betValue, betValue, poolFee, msg.sender, betIdBigger, betIdLess);
        emit BetCreated(latestPoolId, betValue, 1, betValue, 0, msg.sender, betIdBigger);
        emit BetCreated(latestPoolId, betValue, 0, betValue, betValue, msg.sender, betIdLess);


    }


    function makeBet(uint poolId, uint betValue, uint32 isBigger) external payable {
        require(poolId <= latestPoolId && poolId != 0, "makeBet::invalid pool id");
        require(msg.value >= betValue, "makeBet::value not enough");
        require(isBigger == 0 || isBigger == 1, "makeBet::invalid isBigger");

        uint betId = _makeBet(poolId, betValue, isBigger);

        Pool storage pool = pools_[poolId];
        require(_poolStatus(pool) == PoolStatus.Active, "makeBet::pool is locked ");
        if (isBigger == 0) {
            pool.lessAmount += betValue;
        }
        if (isBigger == 1) {
            pool.biggerAmount += betValue;
        }
        emit BetCreated(poolId, betValue, isBigger, pool.biggerAmount, pool.lessAmount, msg.sender, betId);
    }

    function appendBet(uint _poolId, uint256 _betId, uint appendValue) external payable {
        require(_poolId <= latestPoolId && _poolId != 0, "appendBet::invalid pool id");
        require(_betId <= latestBetId && _betId != 0, "betStatus::invalid bet id");
        require(msg.value >= appendValue, "appendBet::value not enough");

        Bet storage bet = bets_[_poolId][_betId];
        require(bet.creator == msg.sender, "appendBet::invalid sender");
        Pool storage pool = pools_[_poolId];
        require(_betStatus(pool, bet) == BetStatus.Active, "appendBet::bet is not active");

        bet.amount += appendValue;
        uint32 isBigger = bet.isBigger;
        if (isBigger == 0) {
            pool.lessAmount += appendValue;
        }
        if (isBigger == 1) {
            pool.biggerAmount += appendValue;
        }

        emit BetAppended(_poolId, appendValue, isBigger, pool.biggerAmount, pool.lessAmount, msg.sender, _betId);
    }

    //
    function setResults(uint[] memory _poolIds, uint16[] memory _results) external {
        assert(msg.sender == resultSetter);
        for (uint i = 0; i < _results.length; i++) {
            uint _poolId = _poolIds[i];
            uint16 _result = _results[i];
            Pool storage pool = pools_[_poolId];
            pool.result = _result;
            emit PoolOpened(_poolId, _result);
        }
    }

    function withdrawPool(uint _poolId, uint biggerBetId, uint lessBetId) external nonReentrant {
        require(_poolId <= latestPoolId && _poolId != 0, "withdrawPool::invalid pool id");
        Pool storage pool = pools_[_poolId];
        require(_poolStatus(pool) == PoolStatus.Opened, "withdrawPool::pool is not opened");
        require(msg.sender == pool.creator, "withdrawPool::wrong sender");

        pool.isExtracted = 1;
        uint256 fee = (pool.lessAmount + pool.biggerAmount) * pool.poolFee / FEE_DECIMAL;

        uint biggerValue = _getBetWithdrawValue(_poolId, biggerBetId);
        Bet  storage biggerBet = bets_[_poolId][biggerBetId];
        biggerBet.isExtracted = 1;

        uint lessValue = _getBetWithdrawValue(_poolId, lessBetId);
        Bet  storage lessBet = bets_[_poolId][lessBetId];
        lessBet.isExtracted = 1;

        (bool sent,) = payable(msg.sender).call{value: fee + biggerValue + lessValue}("");
        require(sent, "withdrawPool::Failed to send Ether");

        if (biggerValue != 0) {
            emit BetExtracted(_poolId, biggerBetId, biggerValue, msg.sender);
        }
        if (lessValue != 0) {
            emit BetExtracted(_poolId, lessBetId, lessValue, msg.sender);
        }
        emit PoolExtracted(_poolId, fee, msg.sender);

    }

// y=(G+L) * (1-f ) * (x /G )
    function withdrawBet(uint _poolId, uint _betId) external nonReentrant {
        _withdrawBet(_poolId, _betId);
    }

    function withdrawBets(uint[] memory _poolIds, uint[] memory _betIds) external nonReentrant {
        require(_poolIds.length == _betIds.length, "withdrawBets::wrong args");
        for (uint i = 0; i < _poolIds.length; ++i) {
            _withdrawBet(_poolIds[i], _betIds[i]);
        }
    }

    function _withdrawBet(uint _poolId, uint _betId) internal {
        require(_poolId <= latestPoolId && _poolId != 0, "withdrawBet::invalid pool id");

//        require(poolStatus(_poolId) == PoolStatus.Win || poolStatus(_poolId) == PoolStatus.Extracted, "withdrawBet::pool is not opened");
        uint value = _getBetWithdrawValue(_poolId, _betId);
        require(value > 0, "_withdrawBet::not winner");
        Bet  storage biggerBet = bets_[_poolId][_betId];
        biggerBet.isExtracted = 1;
//        console2.log(address(this).balance);
//        console2.log(value);
        (bool sent,) = payable(msg.sender).call{value: value}("");
//        console2.log(sent);
        require(sent, "_withdrawBet::send fail");

        emit BetExtracted(_poolId, _betId, value, msg.sender);
    }


    function withdrawFee(address to, uint amount) external {
        assert(msg.sender == owner);
        (bool sent,) = payable(to).call{value: amount}("");
        assert(sent);
    }


    function poolStatus(uint256 _poolId) external view returns (PoolStatus) {
        require(_poolId <= latestPoolId && _poolId != 0, "poolStatus::invalid pool id");
        Pool memory pool = pools_[_poolId];
        if (pool.isExtracted == 1) {
            return PoolStatus.Extracted;
        }
        if (pool.result > 0) {
            return PoolStatus.Opened;
        }
        if (pool.height <= lockedBlockHeight + block.number) {
            return PoolStatus.Locked;
        }
        return PoolStatus.Active;
    }

    function _poolStatus(Pool memory pool) internal view returns (PoolStatus) {
//        require(_poolId <= latestPoolId && _poolId != 0, "poolStatus::invalid pool id");
//        Pool memory pool = pools_[_poolId];
        if (pool.isExtracted == 1) {
            return PoolStatus.Extracted;
        }
        if (pool.result > 0) {
            return PoolStatus.Opened;
        }
        if (pool.height <= lockedBlockHeight + block.number) {
            return PoolStatus.Locked;
        }
        return PoolStatus.Active;
    }

    function betStatus(uint _poolId, uint256 _betId) external view returns (BetStatus) {
//        require(_poolId <= latestPoolId && _poolId != 0, "betStatus::invalid pool id");
//        require(_betId <= latestBetId && _betId != 0, "betStatus::invalid bet id");

        Bet memory bet = bets_[_poolId][_betId];
        require(bet.creator != address(0), "betStatus::invalid bet ");
        if (bet.isExtracted == 1) {
            return BetStatus.Extracted;
        }
        Pool memory pool = pools_[_poolId];
        uint16 result = pool.result;
        if (result > 0) {
            if (result == 3) {
                return BetStatus.Tie;
            }
            if (result - 1 == bet.isBigger) {
                return BetStatus.Win;
            }
            return BetStatus.NotWin;
        }
        if (pool.height <= lockedBlockHeight + block.number) {
            return BetStatus.Locked;
        }
        return BetStatus.Active;
    }

    function _betStatus(Pool memory pool, Bet memory bet) internal view returns (BetStatus) {
//        require(_poolId <= latestPoolId && _poolId != 0, "betStatus::invalid pool id");
//        require(_betId <= latestBetId && _betId != 0, "betStatus::invalid bet id");

//        Bet memory bet = bets_[_poolId][_betId];
//        require(bet.creator != address(0), "betStatus::invalid bet ");
        if (bet.isExtracted == 1) {
            return BetStatus.Extracted;
        }
        uint16 result = pool.result;
        if (result > 0) {
            if (result == 3) {
                return BetStatus.Tie;
            }
            if (result - 1 == bet.isBigger) {
                return BetStatus.Win;
            }
            return BetStatus.NotWin;
        }
        if (pool.height <= lockedBlockHeight + block.number) {
            return BetStatus.Locked;
        }
        return BetStatus.Active;
    }

    function getOdds(uint _poolId) external view returns (uint biggerOdds, uint lessOdds) {
// y=(G+L) * (1-f ) * (x /G )
//y/x = (1 + L/G)(1-f)
//y/x = (1 + L/G)(1-f)
        Pool memory pool = pools_[_poolId];
        uint fee = 1000 - (pool.poolFee + pool.projectFee);

        biggerOdds = (pool.biggerAmount + pool.lessAmount) * fee /  pool.biggerAmount;
        lessOdds = (pool.lessAmount + pool.biggerAmount) * fee / pool.lessAmount;
    }

    function _makeBet(uint poolId, uint betValue, uint32 isBigger) internal returns (uint) {

        Bet storage bet = bets_[poolId][++latestBetId];
        bet.amount = betValue;
        bet.creator = msg.sender;
        bet.isBigger = isBigger;
        return latestBetId;
    }

    function _getBetWithdrawValue(uint _poolId, uint _betId) internal view returns (uint) {
        require(_betId <= latestBetId && _betId != 0, "_getBetWithdrawValue::invalid bet id");
        Bet memory bet = bets_[_poolId][_betId];
        require(bet.creator == msg.sender, "_getBetWithdrawValue::invalid sender ");
        Pool memory pool = pools_[_poolId];
        require(_betStatus(pool, bet) == BetStatus.Win || _betStatus(pool, bet) == BetStatus.NotWin || _betStatus(pool, bet) == BetStatus.Tie, "_getBetWithdrawValue::not opened");


        uint16 result = pool.result;
        uint withoutFee = FEE_DECIMAL - (pool.projectFee + pool.poolFee);
        uint256 value;

        if (result == 3) {
            value = bet.amount * withoutFee / FEE_DECIMAL;
        }
        uint32 isBigger = bet.isBigger;
        if (isBigger + 1 == result) {
            uint256 lessAmount = pool.lessAmount;
            uint256 biggerAmount = pool.biggerAmount;
            // y=(G+L) * (1-f ) * (x /G )
            if (isBigger == 0) {
                value = (lessAmount + biggerAmount) * withoutFee * bet.amount / (lessAmount * FEE_DECIMAL);
            }
            if (isBigger == 1) {
                value = (lessAmount + biggerAmount) * withoutFee * bet.amount / (biggerAmount * FEE_DECIMAL);
            }
        }
        return value;
    }

    function getBetWithdrawValue(uint _poolId, uint _betId) external view returns (uint) {
        require(_betId <= latestBetId && _betId != 0, "_getBetWithdrawValue::invalid bet id");
        Bet memory bet = bets_[_poolId][_betId];
//        require(bet.creator == msg.sender, "_getBetWithdrawValue::invalid sender ");
        Pool memory pool = pools_[_poolId];
//        require(_betStatus(pool, bet) == BetStatus.Win || _betStatus(pool, bet) == BetStatus.NotWin || _betStatus(pool, bet) == BetStatus.Tie, "_getBetWithdrawValue::not opened");


        uint16 result = pool.result;
        uint withoutFee = FEE_DECIMAL - (pool.projectFee + pool.poolFee);
        uint256 value;

        if (result == 3) {
            value = bet.amount * withoutFee / FEE_DECIMAL;
        }
        uint32 isBigger = bet.isBigger;
        if (isBigger + 1 == result) {
            uint256 lessAmount = pool.lessAmount;
            uint256 biggerAmount = pool.biggerAmount;
            // y=(G+L) * (1-f ) * (x /G )
            if (isBigger == 0) {
                value = (lessAmount + biggerAmount) * withoutFee * bet.amount / (lessAmount * FEE_DECIMAL);
            }
            if (isBigger == 1) {
                value = (lessAmount + biggerAmount) * withoutFee * bet.amount / (biggerAmount * FEE_DECIMAL);
            }
        }
        return value;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_resultSetter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betValue","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"isBigger","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"biggerAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lessAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"}],"name":"BetAppended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betValue","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"isBigger","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"biggerAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lessAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"}],"name":"BetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"extractor","type":"address"}],"name":"BetExtracted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"height","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"biggerAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lessAmount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"poolFee","type":"uint32"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"betIdBigger","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betIdLess","type":"uint256"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"address","name":"extractor","type":"address"}],"name":"PoolExtracted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"result","type":"uint16"}],"name":"PoolOpened","type":"event"},{"inputs":[],"name":"FEE_DECIMAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_betId","type":"uint256"},{"internalType":"uint256","name":"appendValue","type":"uint256"}],"name":"appendBet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_betId","type":"uint256"}],"name":"betStatus","outputs":[{"internalType":"enum GasFi.BetStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bets_","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint32","name":"isBigger","type":"uint32"},{"internalType":"uint32","name":"isExtracted","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"initialValue","type":"uint256"},{"internalType":"uint32","name":"poolFee","type":"uint32"}],"name":"createPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_betId","type":"uint256"}],"name":"getBetWithdrawValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getOdds","outputs":[{"internalType":"uint256","name":"biggerOdds","type":"uint256"},{"internalType":"uint256","name":"lessOdds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestBetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"betValue","type":"uint256"},{"internalType":"uint32","name":"isBigger","type":"uint32"}],"name":"makeBet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"maxPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPoolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"poolStatus","outputs":[{"internalType":"enum GasFi.PoolStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools_","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"uint256","name":"biggerAmount","type":"uint256"},{"internalType":"uint256","name":"lessAmount","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint32","name":"poolFee","type":"uint32"},{"internalType":"uint16","name":"isExtracted","type":"uint16"},{"internalType":"uint16","name":"result","type":"uint16"},{"internalType":"uint32","name":"projectFee","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resultSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockedBlockHeight","type":"uint256"}],"name":"setLockedBlockHeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPoolFee","type":"uint256"}],"name":"setMaxPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPoolFee","type":"uint256"}],"name":"setMinPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPoolSize","type":"uint256"}],"name":"setMinPoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_projectFee","type":"uint32"}],"name":"setProjectFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_poolIds","type":"uint256[]"},{"internalType":"uint16[]","name":"_results","type":"uint16[]"}],"name":"setResults","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_betId","type":"uint256"}],"name":"withdrawBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_poolIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_betIds","type":"uint256[]"}],"name":"withdrawBets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"biggerBetId","type":"uint256"},{"internalType":"uint256","name":"lessBetId","type":"uint256"}],"name":"withdrawPool","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405260018055601e6002556003805463ffffffff19166032179055609560065567024dc01ed8b700006007553480156200003a575f80fd5b5060405162002a1538038062002a158339810160408190526200005d9162000077565b60015f55336080526001600160a01b031660a052620000a6565b5f6020828403121562000088575f80fd5b81516001600160a01b03811681146200009f575f80fd5b9392505050565b60805160a05161291c620000f95f395f81816102b901528181610dad0152818161123d0152818161127a0152818161137d01528181611bee0152611c2b01525f81816103a00152611dc1015261291c5ff3fe6080604052600436106101ba575f3560e01c80638a051c49116100f2578063cfc1b95211610092578063f22851d711610062578063f22851d7146105a4578063f5eacb90146105c3578063f665d10b14610656578063fd9be52214610682575f80fd5b8063cfc1b95214610520578063d58f2f271461053f578063e92a6d5414610570578063eec091dc14610585575f80fd5b8063b18721ad116100cd578063b18721ad146103e1578063c047b365146104c0578063c6fd03df146104df578063cc43ca04146104f4575f80fd5b80638a051c49146103705780638da5cb5b1461038f5780639cabc9c4146103c2575f80fd5b806336875af91161015d57806346541a241161013857806346541a2414610308578063476be95f1461031d57806348058b1514610332578063708e346214610351575f80fd5b806336875af91461028957806339463695146102a85780633dc296ca146102f3575f80fd5b806314dc58ef1161019857806314dc58ef1461021f5780632a2a39e51461023e5780632cd18bec1461026157806334a892ae14610276575f80fd5b80630d058ba1146101be578063126c4166146101d35780631288575a1461020c575b5f80fd5b6101d16101cc3660046123fd565b6106a1565b005b3480156101de575f80fd5b506101f26101ed36600461242f565b61095d565b604080519283526020830191909152015b60405180910390f35b6101d161021a366004612446565b610a7a565b34801561022a575f80fd5b506101d161023936600461242f565b610da2565b348015610249575f80fd5b506102536103e881565b604051908152602001610203565b34801561026c575f80fd5b5061025360025481565b6101d1610284366004612482565b610ddf565b348015610294575f80fd5b506101d16102a336600461257b565b611159565b3480156102b3575f80fd5b506102db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610203565b3480156102fe575f80fd5b5061025360055481565b348015610313575f80fd5b5061025360045481565b348015610328575f80fd5b5061025360015481565b34801561033d575f80fd5b506101d161034c3660046125db565b611217565b34801561035c575f80fd5b506101d161036b36600461242f565b611232565b34801561037b575f80fd5b506101d161038a3660046125fb565b61126f565b34801561039a575f80fd5b506102db7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103cd575f80fd5b506101d16103dc36600461242f565b611372565b3480156103ec575f80fd5b506104636103fb36600461242f565b60086020525f908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b0381169063ffffffff600160a01b820481169161ffff600160c01b8204811692600160d01b830490911691600160e01b90041689565b60408051998a5260208a01989098529688019590955260608701939093526001600160a01b03909116608086015263ffffffff90811660a086015261ffff91821660c0860152911660e08401521661010082015261012001610203565b3480156104cb575f80fd5b506102536104da3660046125db565b6113af565b3480156104ea575f80fd5b5061025360075481565b3480156104ff575f80fd5b5061051361050e3660046125db565b6115db565b60405161020391906126d4565b34801561052b575f80fd5b506101d161053a366004612482565b6117ba565b34801561054a575f80fd5b5060035461055b9063ffffffff1681565b60405163ffffffff9091168152602001610203565b34801561057b575f80fd5b5061025360065481565b348015610590575f80fd5b506101d161059f36600461242f565b611be3565b3480156105af575f80fd5b506101d16105be3660046126ee565b611c20565b3480156105ce575f80fd5b506106226105dd3660046125db565b600960209081525f9283526040808420909152908252902080546001909101546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b90041684565b604080519485526001600160a01b03909316602085015263ffffffff91821692840192909252166060820152608001610203565b348015610661575f80fd5b5061067561067036600461242f565b611c74565b604051610203919061270e565b34801561068d575f80fd5b506101d161069c366004612722565b611db6565b60045483111580156106b257508215155b6107035760405162461bcd60e51b815260206004820152601860248201527f6d616b654265743a3a696e76616c696420706f6f6c206964000000000000000060448201526064015b60405180910390fd5b813410156107535760405162461bcd60e51b815260206004820152601960248201527f6d616b654265743a3a76616c7565206e6f7420656e6f7567680000000000000060448201526064016106fa565b63ffffffff8116158061076c57508063ffffffff166001145b6107b85760405162461bcd60e51b815260206004820152601960248201527f6d616b654265743a3a696e76616c69642069734269676765720000000000000060448201526064016106fa565b5f6107c4848484611e4d565b5f858152600860205260408120919250604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b9091041661010082015261086090611ec1565b6003811115610871576108716126c0565b146108be5760405162461bcd60e51b815260206004820152601860248201527f6d616b654265743a3a706f6f6c206973206c6f636b656420000000000000000060448201526064016106fa565b8263ffffffff165f036108e45783816002015f8282546108de919061276b565b90915550505b8263ffffffff1660010361090b5783816001015f828254610905919061276b565b90915550505b7f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb224421085858584600101548560020154338860405161094e979695949392919061277e565b60405180910390a15050505050565b5f8181526008602090815260408083208151610120810183528154815260018201549381019390935260028101549183019190915260038101546060830152600401546001600160a01b038116608083015263ffffffff600160a01b8204811660a0840181905261ffff600160c01b8404811660c0860152600160d01b84041660e0850152600160e01b9092041661010083018190528392918391610a01916127bd565b610a0d906103e86127e1565b63ffffffff16905081602001518183604001518460200151610a2f919061276b565b610a3991906127fe565b610a439190612815565b60408301516020840151919550908290610a5d908361276b565b610a6791906127fe565b610a719190612815565b92505050915091565b438411610ac95760405162461bcd60e51b815260206004820181905260248201527f637265617465506f6f6c3a3a696e76616c696420626c6f636b206e756d62657260448201526064016106fa565b81341015610b195760405162461bcd60e51b815260206004820152601d60248201527f637265617465506f6f6c3a3a76616c7565206e6f7420656e6f7567682000000060448201526064016106fa565b600754821015610b6b5760405162461bcd60e51b815260206004820152601c60248201527f637265617465506f6f6c3a3a73697a6520746f6f206c6974746c65200000000060448201526064016106fa565b6001548163ffffffff1610158015610b8b57506002548163ffffffff1611155b610bd75760405162461bcd60e51b815260206004820152601b60248201527f637265617465506f6f6c3a3a696e76616c696420706f6f6c466565000000000060448201526064016106fa565b5f60085f60045f8154610be990612834565b9182905550815260208101919091526040015f90812086815560048101805460038084018990556001600160c01b03199091163363ffffffff60a01b191617600160a01b63ffffffff888116919091029190911780845591546001600160e01b039092169116600160e01b021790559150610c65600285612815565b60018301819055600283018190556004549091505f90610c86908383611e4d565b90505f610c97600454846001611e4d565b60045460408051918252602082018b90528101899052606081018590526080810185905263ffffffff871660a08201523360c082015260e0810182905261010081018490529091507f3fa7d36493139750e1f1ec48d3dc9a9a7dfa5044b0ff10a1ce04c3db982e7a66906101200160405180910390a17f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb2244210600454846001865f3387604051610d4b979695949392919061277e565b60405180910390a17f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb2244210600454845f86873388604051610d90979695949392919061277e565b60405180910390a15050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dda57610dda61284c565b600655565b6004548311158015610df057508215155b610e3c5760405162461bcd60e51b815260206004820152601a60248201527f617070656e644265743a3a696e76616c696420706f6f6c20696400000000000060448201526064016106fa565b6005548211158015610e4d57508115155b610e995760405162461bcd60e51b815260206004820152601960248201527f6265745374617475733a3a696e76616c6964206265742069640000000000000060448201526064016106fa565b80341015610ee95760405162461bcd60e51b815260206004820152601b60248201527f617070656e644265743a3a76616c7565206e6f7420656e6f756768000000000060448201526064016106fa565b5f838152600960209081526040808320858452909152902060018101546001600160a01b03163314610f5d5760405162461bcd60e51b815260206004820152601960248201527f617070656e644265743a3a696e76616c69642073656e6465720000000000000060448201526064016106fa565b5f84815260086020526040812090604080516101208101825283548152600180850154602080840191909152600286015483850152600386015460608085019190915260048701546001600160a01b0380821660808088019190915263ffffffff600160a01b808504821660a08a015261ffff600160c01b808704821660c08c0152600160d01b870490911660e08b0152600160e01b90950482166101008a015289519283018a528c548352968c015492831695820195909552948104841696850196909652909404169281019290925261103791611f14565b6005811115611048576110486126c0565b146110955760405162461bcd60e51b815260206004820152601c60248201527f617070656e644265743a3a626574206973206e6f74206163746976650000000060448201526064016106fa565b82825f015f8282546110a7919061276b565b90915550506001820154600160a01b900463ffffffff165f8190036110df5783826002015f8282546110d9919061276b565b90915550505b8063ffffffff166001036111065783826001015f828254611100919061276b565b90915550505b7fb21aca59b16307112bc212caa3c3279b0dda34c4dd005e37d413a9e0201e47ff86858385600101548660020154338b604051611149979695949392919061277e565b60405180910390a1505050505050565b611161611faf565b80518251146111b25760405162461bcd60e51b815260206004820152601860248201527f7769746864726177426574733a3a77726f6e672061726773000000000000000060448201526064016106fa565b5f5b8251811015611209576111f98382815181106111d2576111d2612860565b60200260200101518383815181106111ec576111ec612860565b6020026020010151611fd7565b61120281612834565b90506111b4565b5061121360015f55565b5050565b61121f611faf565b6112298282611fd7565b61121360015f55565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461126a5761126a61284c565b600755565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112a7576112a761284c565b5f5b815181101561136d575f8382815181106112c5576112c5612860565b602002602001015190505f8383815181106112e2576112e2612860565b6020908102919091018101515f8481526008835260409081902060048101805461ffff60d01b1916600160d01b61ffff86169081029190911790915582518781529485015291935090917f659c4dedbfc6e8c74b68a4b8cc96cd040e4254b333dd497b93cb1277d5925f0b910160405180910390a1505050808061136590612834565b9150506112a9565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113aa576113aa61284c565b600155565b5f60055482111580156113c157508115155b6113dd5760405162461bcd60e51b81526004016106fa90612874565b5f8381526009602090815260408083208584528252808320815160808082018452825482526001928301546001600160a01b0380821684880152600160a01b80830463ffffffff90811686890152600160c01b9384900481166060808801919091528d8b5260088a52888b20895161012081018b5281548152988101549a89019a909a5260028a01549888019890985260038901549787019790975260049097015490811692850192909252948104841660a0840181905294810461ffff90811660c0850152600160d01b82041660e08401819052600160e01b9091049093166101008301819052909491936114d2916127bd565b6114e49063ffffffff166103e86128b8565b90505f8261ffff166003036115115784516103e8906115049084906127fe565b61150e9190612815565b90505b604085015161ffff84166115268260016127bd565b63ffffffff16036115cd576040850151602086015163ffffffff83165f03611582576115546103e8836127fe565b885186611561848661276b565b61156b91906127fe565b61157591906127fe565b61157f9190612815565b93505b8263ffffffff166001036115ca5761159c6103e8826127fe565b8851866115a9848661276b565b6115b391906127fe565b6115bd91906127fe565b6115c79190612815565b93505b50505b509450505050505b92915050565b5f82815260096020908152604080832084845282528083208151608081018352815481526001909101546001600160a01b03811693820184905263ffffffff600160a01b8204811693830193909352600160c01b90049091166060820152906116865760405162461bcd60e51b815260206004820152601760248201527f6265745374617475733a3a696e76616c6964206265742000000000000000000060448201526064016106fa565b806060015163ffffffff166001036116a25760039150506115d5565b5f8481526008602090815260409182902082516101208101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e08401819052600160e01b90920416610100830152801561178e578061ffff1660030361175757600593505050506115d5565b604083015163ffffffff1661176d6001836128cb565b61ffff160361178257600293505050506115d5565b600493505050506115d5565b4360065461179c919061276b565b8251116117af57600193505050506115d5565b505f95945050505050565b6117c2611faf565b60045483111580156117d357508215155b61181f5760405162461bcd60e51b815260206004820152601d60248201527f7769746864726177506f6f6c3a3a696e76616c696420706f6f6c20696400000060448201526064016106fa565b5f8381526008602052604090206002604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b909104166101008201526118ba90611ec1565b60038111156118cb576118cb6126c0565b146119185760405162461bcd60e51b815260206004820181905260248201527f7769746864726177506f6f6c3a3a706f6f6c206973206e6f74206f70656e656460448201526064016106fa565b60048101546001600160a01b031633146119745760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177506f6f6c3a3a77726f6e672073656e64657200000000000060448201526064016106fa565b600481018054600160c01b61ffff60c01b199091161790819055600182015460028301545f926103e892600160a01b90910463ffffffff16916119b7919061276b565b6119c191906127fe565b6119cb9190612815565b90505f6119d8868661219a565b5f878152600960209081526040808320898452909152812060018101805463ffffffff60c01b1916600160c01b179055919250611a15888761219a565b5f8981526009602090815260408083208a8452909152812060018101805463ffffffff60c01b1916600160c01b1790559192503383611a54878961276b565b611a5e919061276b565b6040515f81818185875af1925050503d805f8114611a97576040519150601f19603f3d011682016040523d82523d5f602084013e611a9c565b606091505b5050905080611af85760405162461bcd60e51b815260206004820152602260248201527f7769746864726177506f6f6c3a3a4661696c656420746f2073656e642045746860448201526132b960f11b60648201526084016106fa565b8415611b4657604080518b8152602081018b90529081018690523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800160405180910390a15b8215611b9457604080518b8152602081018a90529081018490523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800160405180910390a15b604080518b815260208101889052338183015290517f18e71488a52c33ebf71795ea5e4ac7ead55550e3984b311e263e3c786ab810529181900360600190a15050505050505061136d60015f55565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c1b57611c1b61284c565b600255565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c5857611c5861284c565b6003805463ffffffff191663ffffffff92909216919091179055565b5f6004548211158015611c8657508115155b611cd25760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c5374617475733a3a696e76616c696420706f6f6c206964000000000060448201526064016106fa565b5f82815260086020908152604091829020825161012081018452815481526001808301549382019390935260028201549381019390935260038101546060840152600401546001600160a01b038116608084015263ffffffff600160a01b8204811660a085015261ffff600160c01b8304811660c08601819052600160d01b840490911660e0860152600160e01b909204166101008401529003611d795750600392915050565b60e081015161ffff1615611d905750600292915050565b43600654611d9e919061276b565b815111611dae5750600192915050565b505f92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611dee57611dee61284c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611e37576040519150601f19603f3d011682016040523d82523d5f602084013e611e3c565b606091505b505090508061136d5761136d61284c565b5f8381526009602052604081206005805483929183918290611e6e90612834565b9182905550815260208101919091526040015f20848155600101805463ffffffff8516600160a01b0263ffffffff60a01b1933166001600160c01b03199092169190911717905550506005549392505050565b5f8160c0015161ffff16600103611eda57506003919050565b60e082015161ffff1615611ef057506002919050565b43600654611efe919061276b565b825111611f0d57506001919050565b505f919050565b5f816060015163ffffffff16600103611f2f575060036115d5565b60e083015161ffff811615611f87578061ffff16600303611f545760059150506115d5565b604083015163ffffffff16611f6a6001836128cb565b61ffff1603611f7d5760029150506115d5565b60049150506115d5565b43600654611f95919061276b565b845111611fa65760019150506115d5565b505f9392505050565b60025f5403611fd157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6004548211158015611fe857508115155b6120345760405162461bcd60e51b815260206004820152601c60248201527f77697468647261774265743a3a696e76616c696420706f6f6c2069640000000060448201526064016106fa565b5f61203f838361219a565b90505f81116120905760405162461bcd60e51b815260206004820152601860248201527f5f77697468647261774265743a3a6e6f742077696e6e6572000000000000000060448201526064016106fa565b5f83815260096020908152604080832085845290915280822060018101805463ffffffff60c01b1916600160c01b1790559051909190339084908381818185875af1925050503d805f8114612100576040519150601f19603f3d011682016040523d82523d5f602084013e612105565b606091505b50509050806121565760405162461bcd60e51b815260206004820152601760248201527f5f77697468647261774265743a3a73656e64206661696c00000000000000000060448201526064016106fa565b60408051868152602081018690529081018490523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800161094e565b5f60055482111580156121ac57508115155b6121c85760405162461bcd60e51b81526004016106fa90612874565b5f8381526009602090815260408083208584528252918290208251608081018452815481526001909101546001600160a01b03811692820183905263ffffffff600160a01b8204811694830194909452600160c01b9004909216606083015233146122835760405162461bcd60e51b815260206004820152602560248201527f5f676574426574576974686472617756616c75653a3a696e76616c69642073656044820152640373232b9160dd1b60648201526084016106fa565b5f84815260086020908152604091829020825161012081018452815481526001820154928101929092526002808201549383019390935260038101546060830152600401546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b90910416610100820152906123228284611f14565b6005811115612333576123336126c0565b1480612359575060046123468284611f14565b6005811115612357576123576126c0565b145b8061237e5750600561236b8284611f14565b600581111561237c5761237c6126c0565b145b6123ca5760405162461bcd60e51b815260206004820181905260248201527f5f676574426574576974686472617756616c75653a3a6e6f74206f70656e656460448201526064016106fa565b60e081015160a08201516101008301515f916114d2916127bd565b803563ffffffff811681146123f8575f80fd5b919050565b5f805f6060848603121561240f575f80fd5b8335925060208401359150612426604085016123e5565b90509250925092565b5f6020828403121561243f575f80fd5b5035919050565b5f805f8060808587031215612459575f80fd5b843593506020850135925060408501359150612477606086016123e5565b905092959194509250565b5f805f60608486031215612494575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124e8576124e86124ab565b604052919050565b5f67ffffffffffffffff821115612509576125096124ab565b5060051b60200190565b5f82601f830112612522575f80fd5b81356020612537612532836124f0565b6124bf565b82815260059290921b84018101918181019086841115612555575f80fd5b8286015b848110156125705780358352918301918301612559565b509695505050505050565b5f806040838503121561258c575f80fd5b823567ffffffffffffffff808211156125a3575f80fd5b6125af86838701612513565b935060208501359150808211156125c4575f80fd5b506125d185828601612513565b9150509250929050565b5f80604083850312156125ec575f80fd5b50508035926020909101359150565b5f806040838503121561260c575f80fd5b823567ffffffffffffffff80821115612623575f80fd5b61262f86838701612513565b9350602091508185013581811115612645575f80fd5b85019050601f81018613612657575f80fd5b8035612665612532826124f0565b81815260059190911b82018301908381019088831115612683575f80fd5b928401925b828410156126b157833561ffff811681146126a2575f8081fd5b82529284019290840190612688565b80955050505050509250929050565b634e487b7160e01b5f52602160045260245ffd5b60208101600683106126e8576126e86126c0565b91905290565b5f602082840312156126fe575f80fd5b612707826123e5565b9392505050565b60208101600483106126e8576126e86126c0565b5f8060408385031215612733575f80fd5b82356001600160a01b0381168114612749575f80fd5b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156115d5576115d5612757565b968752602087019590955263ffffffff939093166040860152606085019190915260808401526001600160a01b031660a083015260c082015260e00190565b63ffffffff8181168382160190808211156127da576127da612757565b5092915050565b63ffffffff8281168282160390808211156127da576127da612757565b80820281158282048414176115d5576115d5612757565b5f8261282f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001820161284557612845612757565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b60208082526024908201527f5f676574426574576974686472617756616c75653a3a696e76616c69642062656040820152631d081a5960e21b606082015260800190565b818103818111156115d5576115d5612757565b61ffff8281168282160390808211156127da576127da61275756fea26469706673582212209ff38d92fde51af8db287add7853c2af26cfd585212c68862c664ed1b51c8d1a64736f6c63430008140033000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c80638a051c49116100f2578063cfc1b95211610092578063f22851d711610062578063f22851d7146105a4578063f5eacb90146105c3578063f665d10b14610656578063fd9be52214610682575f80fd5b8063cfc1b95214610520578063d58f2f271461053f578063e92a6d5414610570578063eec091dc14610585575f80fd5b8063b18721ad116100cd578063b18721ad146103e1578063c047b365146104c0578063c6fd03df146104df578063cc43ca04146104f4575f80fd5b80638a051c49146103705780638da5cb5b1461038f5780639cabc9c4146103c2575f80fd5b806336875af91161015d57806346541a241161013857806346541a2414610308578063476be95f1461031d57806348058b1514610332578063708e346214610351575f80fd5b806336875af91461028957806339463695146102a85780633dc296ca146102f3575f80fd5b806314dc58ef1161019857806314dc58ef1461021f5780632a2a39e51461023e5780632cd18bec1461026157806334a892ae14610276575f80fd5b80630d058ba1146101be578063126c4166146101d35780631288575a1461020c575b5f80fd5b6101d16101cc3660046123fd565b6106a1565b005b3480156101de575f80fd5b506101f26101ed36600461242f565b61095d565b604080519283526020830191909152015b60405180910390f35b6101d161021a366004612446565b610a7a565b34801561022a575f80fd5b506101d161023936600461242f565b610da2565b348015610249575f80fd5b506102536103e881565b604051908152602001610203565b34801561026c575f80fd5b5061025360025481565b6101d1610284366004612482565b610ddf565b348015610294575f80fd5b506101d16102a336600461257b565b611159565b3480156102b3575f80fd5b506102db7f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a81565b6040516001600160a01b039091168152602001610203565b3480156102fe575f80fd5b5061025360055481565b348015610313575f80fd5b5061025360045481565b348015610328575f80fd5b5061025360015481565b34801561033d575f80fd5b506101d161034c3660046125db565b611217565b34801561035c575f80fd5b506101d161036b36600461242f565b611232565b34801561037b575f80fd5b506101d161038a3660046125fb565b61126f565b34801561039a575f80fd5b506102db7f0000000000000000000000000665738cf9f8db3831b5016256725373817f826d81565b3480156103cd575f80fd5b506101d16103dc36600461242f565b611372565b3480156103ec575f80fd5b506104636103fb36600461242f565b60086020525f908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b0381169063ffffffff600160a01b820481169161ffff600160c01b8204811692600160d01b830490911691600160e01b90041689565b60408051998a5260208a01989098529688019590955260608701939093526001600160a01b03909116608086015263ffffffff90811660a086015261ffff91821660c0860152911660e08401521661010082015261012001610203565b3480156104cb575f80fd5b506102536104da3660046125db565b6113af565b3480156104ea575f80fd5b5061025360075481565b3480156104ff575f80fd5b5061051361050e3660046125db565b6115db565b60405161020391906126d4565b34801561052b575f80fd5b506101d161053a366004612482565b6117ba565b34801561054a575f80fd5b5060035461055b9063ffffffff1681565b60405163ffffffff9091168152602001610203565b34801561057b575f80fd5b5061025360065481565b348015610590575f80fd5b506101d161059f36600461242f565b611be3565b3480156105af575f80fd5b506101d16105be3660046126ee565b611c20565b3480156105ce575f80fd5b506106226105dd3660046125db565b600960209081525f9283526040808420909152908252902080546001909101546001600160a01b0381169063ffffffff600160a01b8204811691600160c01b90041684565b604080519485526001600160a01b03909316602085015263ffffffff91821692840192909252166060820152608001610203565b348015610661575f80fd5b5061067561067036600461242f565b611c74565b604051610203919061270e565b34801561068d575f80fd5b506101d161069c366004612722565b611db6565b60045483111580156106b257508215155b6107035760405162461bcd60e51b815260206004820152601860248201527f6d616b654265743a3a696e76616c696420706f6f6c206964000000000000000060448201526064015b60405180910390fd5b813410156107535760405162461bcd60e51b815260206004820152601960248201527f6d616b654265743a3a76616c7565206e6f7420656e6f7567680000000000000060448201526064016106fa565b63ffffffff8116158061076c57508063ffffffff166001145b6107b85760405162461bcd60e51b815260206004820152601960248201527f6d616b654265743a3a696e76616c69642069734269676765720000000000000060448201526064016106fa565b5f6107c4848484611e4d565b5f858152600860205260408120919250604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b9091041661010082015261086090611ec1565b6003811115610871576108716126c0565b146108be5760405162461bcd60e51b815260206004820152601860248201527f6d616b654265743a3a706f6f6c206973206c6f636b656420000000000000000060448201526064016106fa565b8263ffffffff165f036108e45783816002015f8282546108de919061276b565b90915550505b8263ffffffff1660010361090b5783816001015f828254610905919061276b565b90915550505b7f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb224421085858584600101548560020154338860405161094e979695949392919061277e565b60405180910390a15050505050565b5f8181526008602090815260408083208151610120810183528154815260018201549381019390935260028101549183019190915260038101546060830152600401546001600160a01b038116608083015263ffffffff600160a01b8204811660a0840181905261ffff600160c01b8404811660c0860152600160d01b84041660e0850152600160e01b9092041661010083018190528392918391610a01916127bd565b610a0d906103e86127e1565b63ffffffff16905081602001518183604001518460200151610a2f919061276b565b610a3991906127fe565b610a439190612815565b60408301516020840151919550908290610a5d908361276b565b610a6791906127fe565b610a719190612815565b92505050915091565b438411610ac95760405162461bcd60e51b815260206004820181905260248201527f637265617465506f6f6c3a3a696e76616c696420626c6f636b206e756d62657260448201526064016106fa565b81341015610b195760405162461bcd60e51b815260206004820152601d60248201527f637265617465506f6f6c3a3a76616c7565206e6f7420656e6f7567682000000060448201526064016106fa565b600754821015610b6b5760405162461bcd60e51b815260206004820152601c60248201527f637265617465506f6f6c3a3a73697a6520746f6f206c6974746c65200000000060448201526064016106fa565b6001548163ffffffff1610158015610b8b57506002548163ffffffff1611155b610bd75760405162461bcd60e51b815260206004820152601b60248201527f637265617465506f6f6c3a3a696e76616c696420706f6f6c466565000000000060448201526064016106fa565b5f60085f60045f8154610be990612834565b9182905550815260208101919091526040015f90812086815560048101805460038084018990556001600160c01b03199091163363ffffffff60a01b191617600160a01b63ffffffff888116919091029190911780845591546001600160e01b039092169116600160e01b021790559150610c65600285612815565b60018301819055600283018190556004549091505f90610c86908383611e4d565b90505f610c97600454846001611e4d565b60045460408051918252602082018b90528101899052606081018590526080810185905263ffffffff871660a08201523360c082015260e0810182905261010081018490529091507f3fa7d36493139750e1f1ec48d3dc9a9a7dfa5044b0ff10a1ce04c3db982e7a66906101200160405180910390a17f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb2244210600454846001865f3387604051610d4b979695949392919061277e565b60405180910390a17f686ad2f4dd49975897ff8988c52c3b0e7f69fcdcfd3c3d3b8fe2802bb2244210600454845f86873388604051610d90979695949392919061277e565b60405180910390a15050505050505050565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a1614610dda57610dda61284c565b600655565b6004548311158015610df057508215155b610e3c5760405162461bcd60e51b815260206004820152601a60248201527f617070656e644265743a3a696e76616c696420706f6f6c20696400000000000060448201526064016106fa565b6005548211158015610e4d57508115155b610e995760405162461bcd60e51b815260206004820152601960248201527f6265745374617475733a3a696e76616c6964206265742069640000000000000060448201526064016106fa565b80341015610ee95760405162461bcd60e51b815260206004820152601b60248201527f617070656e644265743a3a76616c7565206e6f7420656e6f756768000000000060448201526064016106fa565b5f838152600960209081526040808320858452909152902060018101546001600160a01b03163314610f5d5760405162461bcd60e51b815260206004820152601960248201527f617070656e644265743a3a696e76616c69642073656e6465720000000000000060448201526064016106fa565b5f84815260086020526040812090604080516101208101825283548152600180850154602080840191909152600286015483850152600386015460608085019190915260048701546001600160a01b0380821660808088019190915263ffffffff600160a01b808504821660a08a015261ffff600160c01b808704821660c08c0152600160d01b870490911660e08b0152600160e01b90950482166101008a015289519283018a528c548352968c015492831695820195909552948104841696850196909652909404169281019290925261103791611f14565b6005811115611048576110486126c0565b146110955760405162461bcd60e51b815260206004820152601c60248201527f617070656e644265743a3a626574206973206e6f74206163746976650000000060448201526064016106fa565b82825f015f8282546110a7919061276b565b90915550506001820154600160a01b900463ffffffff165f8190036110df5783826002015f8282546110d9919061276b565b90915550505b8063ffffffff166001036111065783826001015f828254611100919061276b565b90915550505b7fb21aca59b16307112bc212caa3c3279b0dda34c4dd005e37d413a9e0201e47ff86858385600101548660020154338b604051611149979695949392919061277e565b60405180910390a1505050505050565b611161611faf565b80518251146111b25760405162461bcd60e51b815260206004820152601860248201527f7769746864726177426574733a3a77726f6e672061726773000000000000000060448201526064016106fa565b5f5b8251811015611209576111f98382815181106111d2576111d2612860565b60200260200101518383815181106111ec576111ec612860565b6020026020010151611fd7565b61120281612834565b90506111b4565b5061121360015f55565b5050565b61121f611faf565b6112298282611fd7565b61121360015f55565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a161461126a5761126a61284c565b600755565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a16146112a7576112a761284c565b5f5b815181101561136d575f8382815181106112c5576112c5612860565b602002602001015190505f8383815181106112e2576112e2612860565b6020908102919091018101515f8481526008835260409081902060048101805461ffff60d01b1916600160d01b61ffff86169081029190911790915582518781529485015291935090917f659c4dedbfc6e8c74b68a4b8cc96cd040e4254b333dd497b93cb1277d5925f0b910160405180910390a1505050808061136590612834565b9150506112a9565b505050565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a16146113aa576113aa61284c565b600155565b5f60055482111580156113c157508115155b6113dd5760405162461bcd60e51b81526004016106fa90612874565b5f8381526009602090815260408083208584528252808320815160808082018452825482526001928301546001600160a01b0380821684880152600160a01b80830463ffffffff90811686890152600160c01b9384900481166060808801919091528d8b5260088a52888b20895161012081018b5281548152988101549a89019a909a5260028a01549888019890985260038901549787019790975260049097015490811692850192909252948104841660a0840181905294810461ffff90811660c0850152600160d01b82041660e08401819052600160e01b9091049093166101008301819052909491936114d2916127bd565b6114e49063ffffffff166103e86128b8565b90505f8261ffff166003036115115784516103e8906115049084906127fe565b61150e9190612815565b90505b604085015161ffff84166115268260016127bd565b63ffffffff16036115cd576040850151602086015163ffffffff83165f03611582576115546103e8836127fe565b885186611561848661276b565b61156b91906127fe565b61157591906127fe565b61157f9190612815565b93505b8263ffffffff166001036115ca5761159c6103e8826127fe565b8851866115a9848661276b565b6115b391906127fe565b6115bd91906127fe565b6115c79190612815565b93505b50505b509450505050505b92915050565b5f82815260096020908152604080832084845282528083208151608081018352815481526001909101546001600160a01b03811693820184905263ffffffff600160a01b8204811693830193909352600160c01b90049091166060820152906116865760405162461bcd60e51b815260206004820152601760248201527f6265745374617475733a3a696e76616c6964206265742000000000000000000060448201526064016106fa565b806060015163ffffffff166001036116a25760039150506115d5565b5f8481526008602090815260409182902082516101208101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e08401819052600160e01b90920416610100830152801561178e578061ffff1660030361175757600593505050506115d5565b604083015163ffffffff1661176d6001836128cb565b61ffff160361178257600293505050506115d5565b600493505050506115d5565b4360065461179c919061276b565b8251116117af57600193505050506115d5565b505f95945050505050565b6117c2611faf565b60045483111580156117d357508215155b61181f5760405162461bcd60e51b815260206004820152601d60248201527f7769746864726177506f6f6c3a3a696e76616c696420706f6f6c20696400000060448201526064016106fa565b5f8381526008602052604090206002604080516101208101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b909104166101008201526118ba90611ec1565b60038111156118cb576118cb6126c0565b146119185760405162461bcd60e51b815260206004820181905260248201527f7769746864726177506f6f6c3a3a706f6f6c206973206e6f74206f70656e656460448201526064016106fa565b60048101546001600160a01b031633146119745760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177506f6f6c3a3a77726f6e672073656e64657200000000000060448201526064016106fa565b600481018054600160c01b61ffff60c01b199091161790819055600182015460028301545f926103e892600160a01b90910463ffffffff16916119b7919061276b565b6119c191906127fe565b6119cb9190612815565b90505f6119d8868661219a565b5f878152600960209081526040808320898452909152812060018101805463ffffffff60c01b1916600160c01b179055919250611a15888761219a565b5f8981526009602090815260408083208a8452909152812060018101805463ffffffff60c01b1916600160c01b1790559192503383611a54878961276b565b611a5e919061276b565b6040515f81818185875af1925050503d805f8114611a97576040519150601f19603f3d011682016040523d82523d5f602084013e611a9c565b606091505b5050905080611af85760405162461bcd60e51b815260206004820152602260248201527f7769746864726177506f6f6c3a3a4661696c656420746f2073656e642045746860448201526132b960f11b60648201526084016106fa565b8415611b4657604080518b8152602081018b90529081018690523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800160405180910390a15b8215611b9457604080518b8152602081018a90529081018490523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800160405180910390a15b604080518b815260208101889052338183015290517f18e71488a52c33ebf71795ea5e4ac7ead55550e3984b311e263e3c786ab810529181900360600190a15050505050505061136d60015f55565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a1614611c1b57611c1b61284c565b600255565b336001600160a01b037f000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a1614611c5857611c5861284c565b6003805463ffffffff191663ffffffff92909216919091179055565b5f6004548211158015611c8657508115155b611cd25760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c5374617475733a3a696e76616c696420706f6f6c206964000000000060448201526064016106fa565b5f82815260086020908152604091829020825161012081018452815481526001808301549382019390935260028201549381019390935260038101546060840152600401546001600160a01b038116608084015263ffffffff600160a01b8204811660a085015261ffff600160c01b8304811660c08601819052600160d01b840490911660e0860152600160e01b909204166101008401529003611d795750600392915050565b60e081015161ffff1615611d905750600292915050565b43600654611d9e919061276b565b815111611dae5750600192915050565b505f92915050565b336001600160a01b037f0000000000000000000000000665738cf9f8db3831b5016256725373817f826d1614611dee57611dee61284c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611e37576040519150601f19603f3d011682016040523d82523d5f602084013e611e3c565b606091505b505090508061136d5761136d61284c565b5f8381526009602052604081206005805483929183918290611e6e90612834565b9182905550815260208101919091526040015f20848155600101805463ffffffff8516600160a01b0263ffffffff60a01b1933166001600160c01b03199092169190911717905550506005549392505050565b5f8160c0015161ffff16600103611eda57506003919050565b60e082015161ffff1615611ef057506002919050565b43600654611efe919061276b565b825111611f0d57506001919050565b505f919050565b5f816060015163ffffffff16600103611f2f575060036115d5565b60e083015161ffff811615611f87578061ffff16600303611f545760059150506115d5565b604083015163ffffffff16611f6a6001836128cb565b61ffff1603611f7d5760029150506115d5565b60049150506115d5565b43600654611f95919061276b565b845111611fa65760019150506115d5565b505f9392505050565b60025f5403611fd157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b6004548211158015611fe857508115155b6120345760405162461bcd60e51b815260206004820152601c60248201527f77697468647261774265743a3a696e76616c696420706f6f6c2069640000000060448201526064016106fa565b5f61203f838361219a565b90505f81116120905760405162461bcd60e51b815260206004820152601860248201527f5f77697468647261774265743a3a6e6f742077696e6e6572000000000000000060448201526064016106fa565b5f83815260096020908152604080832085845290915280822060018101805463ffffffff60c01b1916600160c01b1790559051909190339084908381818185875af1925050503d805f8114612100576040519150601f19603f3d011682016040523d82523d5f602084013e612105565b606091505b50509050806121565760405162461bcd60e51b815260206004820152601760248201527f5f77697468647261774265743a3a73656e64206661696c00000000000000000060448201526064016106fa565b60408051868152602081018690529081018490523360608201527fc60bad134e35a45f1b1322cee1a67789132e04a185d4f4f71ed464125ef971b29060800161094e565b5f60055482111580156121ac57508115155b6121c85760405162461bcd60e51b81526004016106fa90612874565b5f8381526009602090815260408083208584528252918290208251608081018452815481526001909101546001600160a01b03811692820183905263ffffffff600160a01b8204811694830194909452600160c01b9004909216606083015233146122835760405162461bcd60e51b815260206004820152602560248201527f5f676574426574576974686472617756616c75653a3a696e76616c69642073656044820152640373232b9160dd1b60648201526084016106fa565b5f84815260086020908152604091829020825161012081018452815481526001820154928101929092526002808201549383019390935260038101546060830152600401546001600160a01b038116608083015263ffffffff600160a01b8204811660a084015261ffff600160c01b8304811660c0850152600160d01b83041660e0840152600160e01b90910416610100820152906123228284611f14565b6005811115612333576123336126c0565b1480612359575060046123468284611f14565b6005811115612357576123576126c0565b145b8061237e5750600561236b8284611f14565b600581111561237c5761237c6126c0565b145b6123ca5760405162461bcd60e51b815260206004820181905260248201527f5f676574426574576974686472617756616c75653a3a6e6f74206f70656e656460448201526064016106fa565b60e081015160a08201516101008301515f916114d2916127bd565b803563ffffffff811681146123f8575f80fd5b919050565b5f805f6060848603121561240f575f80fd5b8335925060208401359150612426604085016123e5565b90509250925092565b5f6020828403121561243f575f80fd5b5035919050565b5f805f8060808587031215612459575f80fd5b843593506020850135925060408501359150612477606086016123e5565b905092959194509250565b5f805f60608486031215612494575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124e8576124e86124ab565b604052919050565b5f67ffffffffffffffff821115612509576125096124ab565b5060051b60200190565b5f82601f830112612522575f80fd5b81356020612537612532836124f0565b6124bf565b82815260059290921b84018101918181019086841115612555575f80fd5b8286015b848110156125705780358352918301918301612559565b509695505050505050565b5f806040838503121561258c575f80fd5b823567ffffffffffffffff808211156125a3575f80fd5b6125af86838701612513565b935060208501359150808211156125c4575f80fd5b506125d185828601612513565b9150509250929050565b5f80604083850312156125ec575f80fd5b50508035926020909101359150565b5f806040838503121561260c575f80fd5b823567ffffffffffffffff80821115612623575f80fd5b61262f86838701612513565b9350602091508185013581811115612645575f80fd5b85019050601f81018613612657575f80fd5b8035612665612532826124f0565b81815260059190911b82018301908381019088831115612683575f80fd5b928401925b828410156126b157833561ffff811681146126a2575f8081fd5b82529284019290840190612688565b80955050505050509250929050565b634e487b7160e01b5f52602160045260245ffd5b60208101600683106126e8576126e86126c0565b91905290565b5f602082840312156126fe575f80fd5b612707826123e5565b9392505050565b60208101600483106126e8576126e86126c0565b5f8060408385031215612733575f80fd5b82356001600160a01b0381168114612749575f80fd5b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156115d5576115d5612757565b968752602087019590955263ffffffff939093166040860152606085019190915260808401526001600160a01b031660a083015260c082015260e00190565b63ffffffff8181168382160190808211156127da576127da612757565b5092915050565b63ffffffff8281168282160390808211156127da576127da612757565b80820281158282048414176115d5576115d5612757565b5f8261282f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001820161284557612845612757565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b60208082526024908201527f5f676574426574576974686472617756616c75653a3a696e76616c69642062656040820152631d081a5960e21b606082015260800190565b818103818111156115d5576115d5612757565b61ffff8281168282160390808211156127da576127da61275756fea26469706673582212209ff38d92fde51af8db287add7853c2af26cfd585212c68862c664ed1b51c8d1a64736f6c63430008140033

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

000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a

-----Decoded View---------------
Arg [0] : _resultSetter (address): 0x605Da936936C7771f4E10eCc788aE545E4f6238A

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000605da936936c7771f4e10ecc788ae545e4f6238a


Deployed Bytecode Sourcemap

4522:15840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8797:793;;;;;;:::i;:::-;;:::i;:::-;;16846:452;;;;;;;;;;-1:-1:-1;16846:452:0;;;;;:::i;:::-;;:::i;:::-;;;;866:25:1;;;922:2;907:18;;900:34;;;;839:18;16846:452:0;;;;;;;;7488:1299;;;;;;:::i;:::-;;:::i;6724:166::-;;;;;;;;;;-1:-1:-1;6724:166:0;;;;;:::i;:::-;;:::i;6077:39::-;;;;;;;;;;;;6112:4;6077:39;;;;;1485:25:1;;;1473:2;1458:18;6077:39:0;1339:177:1;6248:28:0;;;;;;;;;;;;;;;;9598:977;;;;;;:::i;:::-;;:::i;12502:297::-;;;;;;;;;;-1:-1:-1;12502:297:0;;;;;:::i;:::-;;:::i;6160:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3873:32:1;;;3855:51;;3843:2;3828:18;6160:37:0;3709:203:1;6366:26:0;;;;;;;;;;;;;;;;6332:27;;;;;;;;;;;;;;;;6206;;;;;;;;;;;;;;;;12376:118;;;;;;;;;;-1:-1:-1;12376:118:0;;;;;:::i;:::-;;:::i;6898:142::-;;;;;;;;;;-1:-1:-1;6898:142:0;;;;;:::i;:::-;;:::i;10591:415::-;;;;;;;;;;-1:-1:-1;10591:415:0;;;;;:::i;:::-;;:::i;6123:30::-;;;;;;;;;;;;;;;7048:138;;;;;;;;;;-1:-1:-1;7048:138:0;;;;;:::i;:::-;;:::i;6496:38::-;;;;;;;;;;-1:-1:-1;6496:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6496:38:0;;;;-1:-1:-1;;;6496:38:0;;;;;;-1:-1:-1;;;6496:38:0;;;;;-1:-1:-1;;;6496:38:0;;;;;;-1:-1:-1;;;6496:38:0;;;;;;;;;5846:25:1;;;5902:2;5887:18;;5880:34;;;;5930:18;;;5923:34;;;;5988:2;5973:18;;5966:34;;;;-1:-1:-1;;;;;6037:32:1;;;6031:3;6016:19;;6009:61;6089:10;6136:15;;;6057:3;6115:19;;6108:44;6171:6;6214:15;;;6208:3;6193:19;;6186:44;6267:15;;6261:3;6246:19;;6239:44;6320:15;6314:3;6299:19;;6292:44;5833:3;5818:19;6496:38:0;5483:859:1;18981:1378:0;;;;;;;;;;-1:-1:-1;18981:1378:0;;;;;:::i;:::-;;:::i;6450:37::-;;;;;;;;;;;;;;;;14916:975;;;;;;;;;;-1:-1:-1;14916:975:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11014:1323::-;;;;;;;;;;-1:-1:-1;11014:1323:0;;;;;:::i;:::-;;:::i;6288:30::-;;;;;;;;;;-1:-1:-1;6288:30:0;;;;;;;;;;;6902:10:1;6890:23;;;6872:42;;6860:2;6845:18;6288:30:0;6728:192:1;6399:35:0;;;;;;;;;;;;;;;;7194:138;;;;;;;;;;-1:-1:-1;7194:138:0;;;;;:::i;:::-;;:::i;7340:140::-;;;;;;;;;;-1:-1:-1;7340:140:0;;;;;:::i;:::-;;:::i;6541:56::-;;;;;;;;;;-1:-1:-1;6541:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6541:56:0;;;;-1:-1:-1;;;6541:56:0;;;;;-1:-1:-1;;;6541:56:0;;;;;;;;;7341:25:1;;;-1:-1:-1;;;;;7402:32:1;;;7397:2;7382:18;;7375:60;7454:10;7500:15;;;7480:18;;;7473:43;;;;7552:15;7547:2;7532:18;;7525:43;7328:3;7313:19;6541:56:0;7114:460:1;13820:537:0;;;;;;;;;;-1:-1:-1;13820:537:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13625:185::-;;;;;;;;;;-1:-1:-1;13625:185:0;;;;;:::i;:::-;;:::i;8797:793::-;8905:12;;8895:6;:22;;:37;;;;-1:-1:-1;8921:11:0;;;8895:37;8887:74;;;;-1:-1:-1;;;8887:74:0;;8390:2:1;8887:74:0;;;8372:21:1;8429:2;8409:18;;;8402:30;8468:26;8448:18;;;8441:54;8512:18;;8887:74:0;;;;;;;;;8993:8;8980:9;:21;;8972:59;;;;-1:-1:-1;;;8972:59:0;;8743:2:1;8972:59:0;;;8725:21:1;8782:2;8762:18;;;8755:30;8821:27;8801:18;;;8794:55;8866:18;;8972:59:0;8541:349:1;8972:59:0;9050:13;;;;;:30;;;9067:8;:13;;9079:1;9067:13;9050:30;9042:68;;;;-1:-1:-1;;;9042:68:0;;9097:2:1;9042:68:0;;;9079:21:1;9136:2;9116:18;;;9109:30;9175:27;9155:18;;;9148:55;9220:18;;9042:68:0;8895:349:1;9042:68:0;9123:10;9136:36;9145:6;9153:8;9163;9136;:36::i;:::-;9185:17;9205:14;;;:6;:14;;;;;9123:49;;-1:-1:-1;9238:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9238:17:0;;;;;;;-1:-1:-1;;;9238:17:0;;;;;;;;;-1:-1:-1;;;9238:17:0;;;;;;;;-1:-1:-1;;;9238:17:0;;;;;;;-1:-1:-1;;;9238:17:0;;;;;;;;;;:11;:17::i;:::-;:38;;;;;;;;:::i;:::-;;9230:75;;;;-1:-1:-1;;;9230:75:0;;9451:2:1;9230:75:0;;;9433:21:1;9490:2;9470:18;;;9463:30;9529:26;9509:18;;;9502:54;9573:18;;9230:75:0;9249:348:1;9230:75:0;9320:8;:13;;9332:1;9320:13;9316:73;;9369:8;9350:4;:15;;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;9316:73:0;9403:8;:13;;9415:1;9403:13;9399:75;;9454:8;9433:4;:17;;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;9399:75:0;9489:93;9500:6;9508:8;9518;9528:4;:17;;;9547:4;:15;;;9564:10;9576:5;9489:93;;;;;;;;;;;;:::i;:::-;;;;;;;;8876:714;;8797:793;;;:::o;16846:452::-;16900:15;17041;;;:6;:15;;;;;;;;17022:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17022:34:0;;;;;;;-1:-1:-1;;;17022:34:0;;;;;;;;;;;-1:-1:-1;;;17022:34:0;;;;;;;;-1:-1:-1;;;17022:34:0;;;;;;;-1:-1:-1;;;17022:34:0;;;;;;;;;;16900:15;;17022:34;16900:15;;17086:30;;;:::i;:::-;17078:39;;:4;:39;:::i;:::-;17067:50;;;;17190:4;:17;;;17183:3;17164:4;:15;;;17144:4;:17;;;:35;;;;:::i;:::-;17143:43;;;;:::i;:::-;:64;;;;:::i;:::-;17275:15;;;;17248:17;;;;17130:77;;-1:-1:-1;17275:15:0;17269:3;;17230:35;;17275:15;17230:35;:::i;:::-;17229:43;;;;:::i;:::-;:61;;;;:::i;:::-;17218:72;;16932:366;;16846:452;;;:::o;7488:1299::-;7624:12;7610:11;:26;7602:71;;;;-1:-1:-1;;;7602:71:0;;11471:2:1;7602:71:0;;;11453:21:1;;;11490:18;;;11483:30;11549:34;11529:18;;;11522:62;11601:18;;7602:71:0;11269:356:1;7602:71:0;7767:12;7754:9;:25;;7746:67;;;;-1:-1:-1;;;7746:67:0;;11832:2:1;7746:67:0;;;11814:21:1;11871:2;11851:18;;;11844:30;11910:31;11890:18;;;11883:59;11959:18;;7746:67:0;11630:353:1;7746:67:0;7848:11;;7832:12;:27;;7824:68;;;;-1:-1:-1;;;7824:68:0;;12190:2:1;7824:68:0;;;12172:21:1;12229:2;12209:18;;;12202:30;12268;12248:18;;;12241:58;12316:18;;7824:68:0;11988:352:1;7824:68:0;7922:10;;7911:7;:21;;;;:46;;;;;7947:10;;7936:7;:21;;;;7911:46;7903:86;;;;-1:-1:-1;;;7903:86:0;;12547:2:1;7903:86:0;;;12529:21:1;12586:2;12566:18;;;12559:30;12625:29;12605:18;;;12598:57;12672:18;;7903:86:0;12345:351:1;7903:86:0;8002:17;8022:6;:22;8031:12;;8029:14;;;;;:::i;:::-;;;;;-1:-1:-1;8022:22:0;;;;;;;;;;;-1:-1:-1;8022:22:0;;;8055:25;;;8091:12;;;:25;;8127:8;;;;:14;;;-1:-1:-1;;;;;;8152:22:0;;;8106:10;-1:-1:-1;;;;8152:22:0;;-1:-1:-1;;;8152:22:0;;;;;;;;;;;;;;;8203:10;;-1:-1:-1;;;;;8185:28:0;;;8203:10;;-1:-1:-1;;;8185:28:0;;;;8022:22;-1:-1:-1;8240:16:0;8255:1;8240:12;:16;:::i;:::-;8269:17;;;:28;;;8308:15;;;:26;;;8371:12;;8224:32;;-1:-1:-1;;;8362:35:0;;8224:32;-1:-1:-1;8362:8:0;:35::i;:::-;8345:52;;8408:16;8427:35;8436:12;;8450:8;8460:1;8427:8;:35::i;:::-;8492:12;;8480:108;;;13210:25:1;;;13266:2;13251:18;;13244:34;;;13294:18;;13287:34;;;13352:2;13337:18;;13330:34;;;13395:3;13380:19;;13373:35;;;13457:10;13445:23;;13439:3;13424:19;;13417:52;8553:10:0;13500:3:1;13485:19;;13478:61;13570:3;13555:19;;13548:35;;;13614:3;13599:19;;13592:35;;;8408:54:0;;-1:-1:-1;8480:108:0;;13197:3:1;13182:19;8480:108:0;;;;;;;8604:75;8615:12;;8629:8;8639:1;8642:8;8652:1;8655:10;8667:11;8604:75;;;;;;;;;;;;:::i;:::-;;;;;;;;8695:80;8706:12;;8720:8;8730:1;8733:8;8743;8753:10;8765:9;8695:80;;;;;;;;;;;;:::i;:::-;;;;;;;;7591:1196;;;;7488:1299;;;;:::o;6724:166::-;6806:10;-1:-1:-1;;;;;6820:12:0;6806:26;;6799:34;;;;:::i;:::-;6844:17;:38;6724:166::o;9598:977::-;9712:12;;9701:7;:23;;:39;;;;-1:-1:-1;9728:12:0;;;9701:39;9693:78;;;;-1:-1:-1;;;9693:78:0;;15304:2:1;9693:78:0;;;15286:21:1;15343:2;15323:18;;;15316:30;15382:28;15362:18;;;15355:56;15428:18;;9693:78:0;15102:350:1;9693:78:0;9800:11;;9790:6;:21;;:36;;;;-1:-1:-1;9815:11:0;;;9790:36;9782:74;;;;-1:-1:-1;;;9782:74:0;;15659:2:1;9782:74:0;;;15641:21:1;15698:2;15678:18;;;15671:30;15737:27;15717:18;;;15710:55;15782:18;;9782:74:0;15457:349:1;9782:74:0;9888:11;9875:9;:24;;9867:64;;;;-1:-1:-1;;;9867:64:0;;16013:2:1;9867:64:0;;;15995:21:1;16052:2;16032:18;;;16025:30;16091:29;16071:18;;;16064:57;16138:18;;9867:64:0;15811:351:1;9867:64:0;9944:15;9962:14;;;:5;:14;;;;;;;;:22;;;;;;;;10003:11;;;;-1:-1:-1;;;;;10003:11:0;10018:10;10003:25;9995:63;;;;-1:-1:-1;;;9995:63:0;;16369:2:1;9995:63:0;;;16351:21:1;16408:2;16388:18;;;16381:30;16447:27;16427:18;;;16420:55;16492:18;;9995:63:0;16167:349:1;9995:63:0;10069:17;10089:15;;;:6;:15;;;;;;10123:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10123:21:0;;;;;;;;;;;;-1:-1:-1;;;10123:21:0;;;;;;;;;;-1:-1:-1;;;10123:21:0;;;;;;;;;-1:-1:-1;;;10123:21:0;;;;;;;;;-1:-1:-1;;;10123:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:21::i;:::-;:41;;;;;;;;:::i;:::-;;10115:82;;;;-1:-1:-1;;;10115:82:0;;16723:2:1;10115:82:0;;;16705:21:1;16762:2;16742:18;;;16735:30;16801;16781:18;;;16774:58;16849:18;;10115:82:0;16521:352:1;10115:82:0;10224:11;10210:3;:10;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;10264:12:0;;;;-1:-1:-1;;;10264:12:0;;;;10246:15;10291:13;;;10287:76;;10340:11;10321:4;:15;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;10287:76:0;10377:8;:13;;10389:1;10377:13;10373:78;;10428:11;10407:4;:17;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;10373:78:0;10468:99;10480:7;10489:11;10502:8;10512:4;:17;;;10531:4;:15;;;10548:10;10560:6;10468:99;;;;;;;;;;;;:::i;:::-;;;;;;;;9682:893;;;9598:977;;;:::o;12502:297::-;3495:21;:19;:21::i;:::-;12631:7:::1;:14;12612:8;:15;:33;12604:70;;;::::0;-1:-1:-1;;;12604:70:0;;17080:2:1;12604:70:0::1;::::0;::::1;17062:21:1::0;17119:2;17099:18;;;17092:30;17158:26;17138:18;;;17131:54;17202:18;;12604:70:0::1;16878:348:1::0;12604:70:0::1;12690:6;12685:107;12706:8;:15;12702:1;:19;12685:107;;;12743:37;12756:8;12765:1;12756:11;;;;;;;;:::i;:::-;;;;;;;12769:7;12777:1;12769:10;;;;;;;;:::i;:::-;;;;;;;12743:12;:37::i;:::-;12723:3;::::0;::::1;:::i;:::-;;;12685:107;;;;3539:20:::0;2830:1;4081:7;:21;3898:212;3539:20;12502:297;;:::o;12376:118::-;3495:21;:19;:21::i;:::-;12457:29:::1;12470:7;12479:6;12457:12;:29::i;:::-;3539:20:::0;2830:1;4081:7;:21;3898:212;6898:142;6968:10;-1:-1:-1;;;;;6982:12:0;6968:26;;6961:34;;;;:::i;:::-;7006:11;:26;6898:142::o;10591:415::-;10688:10;-1:-1:-1;;;;;10702:12:0;10688:26;;10681:34;;;;:::i;:::-;10731:6;10726:273;10747:8;:15;10743:1;:19;10726:273;;;10784:12;10799:8;10808:1;10799:11;;;;;;;;:::i;:::-;;;;;;;10784:26;;10825:14;10842:8;10851:1;10842:11;;;;;;;;:::i;:::-;;;;;;;;;;;;10868:17;10888:15;;;:6;:15;;;;;;;10918:11;;;:21;;-1:-1:-1;;;;10918:21:0;-1:-1:-1;;;10918:21:0;;;;;;;;;;;;;10959:28;;17535:25:1;;;17576:18;;;17569:47;10842:11:0;;-1:-1:-1;10888:15:0;;10959:28;;17508:18:1;10959:28:0;;;;;;;10769:230;;;10764:3;;;;;:::i;:::-;;;;10726:273;;;;10591:415;;:::o;7048:138::-;7116:10;-1:-1:-1;;;;;7130:12:0;7116:26;;7109:34;;;;:::i;:::-;7154:10;:24;7048:138::o;18981:1378::-;19060:4;19095:11;;19085:6;:21;;:36;;;;-1:-1:-1;19110:11:0;;;19085:36;19077:85;;;;-1:-1:-1;;;19077:85:0;;;;;;;:::i;:::-;19173:14;19190;;;:5;:14;;;;;;;;:22;;;;;;;;19173:39;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19173:39:0;;;;;;;-1:-1:-1;;;19173:39:0;;;;;;;;;;;-1:-1:-1;;;19173:39:0;;;;;;;;;;;;;;19330:15;;;:6;:15;;;;;19311:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19311:34:0;;;;;;;;;-1:-1:-1;;;19311:34:0;;;;;;19173:39;19311:34;;;;;19173:39;;19311:34;;19614:30;;;:::i;:::-;19599:46;;;;6112:4;19599:46;:::i;:::-;19581:64;;19656:13;19686:6;:11;;19696:1;19686:11;19682:89;;19722:10;;6112:4;;19722:23;;19735:10;;19722:23;:::i;:::-;:37;;;;:::i;:::-;19714:45;;19682:89;19799:12;;;;19826:22;;;:12;19799;19837:1;19826:12;:::i;:::-;:22;;;19822:507;;19886:15;;;;19939:17;;;;20018:13;;;19865:18;20018:13;20014:144;;20117:24;6112:4;20117:10;:24;:::i;:::-;20103:10;;20090;20061:25;20074:12;20061:10;:25;:::i;:::-;20060:40;;;;:::i;:::-;:53;;;;:::i;:::-;:82;;;;:::i;:::-;20052:90;;20014:144;20176:8;:13;;20188:1;20176:13;20172:146;;20275:26;6112:4;20275:12;:26;:::i;:::-;20261:10;;20248;20219:25;20232:12;20219:10;:25;:::i;:::-;20218:40;;;;:::i;:::-;:53;;;;:::i;:::-;:84;;;;:::i;:::-;20210:92;;20172:146;19850:479;;19822:507;-1:-1:-1;20346:5:0;-1:-1:-1;;;;;18981:1378:0;;;;;:::o;14916:975::-;14988:9;15207:14;;;:5;:14;;;;;;;;:22;;;;;;;;15190:39;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15190:39:0;;;;;;;;;-1:-1:-1;;;15190:39:0;;;;;;;;;;;-1:-1:-1;;;15190:39:0;;;;;;;;;;15240:61;;;;-1:-1:-1;;;15240:61:0;;18367:2:1;15240:61:0;;;18349:21:1;18406:2;18386:18;;;18379:30;18445:25;18425:18;;;18418:53;18488:18;;15240:61:0;18165:347:1;15240:61:0;15316:3;:15;;;:20;;15335:1;15316:20;15312:79;;15360:19;15353:26;;;;;15312:79;15401:16;15420:15;;;:6;:15;;;;;;;;;15401:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15401:34:0;;;;;;;-1:-1:-1;;;15401:34:0;;;;;;;;;-1:-1:-1;;;15401:34:0;;;;;;;;-1:-1:-1;;;15401:34:0;;;;;;;;;-1:-1:-1;;;15401:34:0;;;;;;;;15488:10;;15484:253;;15519:6;:11;;15529:1;15519:11;15515:72;;15558:13;15551:20;;;;;;;15515:72;15619:12;;;;15605:26;;:10;15614:1;15605:6;:10;:::i;:::-;:26;;;15601:87;;15659:13;15652:20;;;;;;;15601:87;15709:16;15702:23;;;;;;;15484:253;15786:12;15766:17;;:32;;;;:::i;:::-;15751:11;;:47;15747:103;;15822:16;15815:23;;;;;;;15747:103;-1:-1:-1;15867:16:0;;14916:975;-1:-1:-1;;;;;14916:975:0:o;11014:1323::-;3495:21;:19;:21::i;:::-;11136:12:::1;;11125:7;:23;;:39;;;;-1:-1:-1::0;11152:12:0;;::::1;11125:39;11117:81;;;::::0;-1:-1:-1;;;11117:81:0;;18895:2:1;11117:81:0::1;::::0;::::1;18877:21:1::0;18934:2;18914:18;;;18907:30;18973:31;18953:18;;;18946:59;19022:18;;11117:81:0::1;18693:353:1::0;11117:81:0::1;11209:17;11229:15:::0;;;:6:::1;:15;::::0;;;;11284:17:::1;11263;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;11263:17:0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;11263:17:0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;11263:17:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11263:17:0;::::1;;::::0;;;;-1:-1:-1;;;11263:17:0;;::::1;;;::::0;;;::::1;::::0;:11:::1;:17::i;:::-;:38;;;;;;;;:::i;:::-;;11255:83;;;::::0;-1:-1:-1;;;11255:83:0;;19253:2:1;11255:83:0::1;::::0;::::1;19235:21:1::0;;;19272:18;;;19265:30;19331:34;19311:18;;;19304:62;19383:18;;11255:83:0::1;19051:356:1::0;11255:83:0::1;11371:12;::::0;::::1;::::0;-1:-1:-1;;;;;11371:12:0::1;11357:10;:26;11349:65;;;::::0;-1:-1:-1;;;11349:65:0;;19614:2:1;11349:65:0::1;::::0;::::1;19596:21:1::0;19653:2;19633:18;;;19626:30;19692:28;19672:18;;;19665:56;19738:18;;11349:65:0::1;19412:350:1::0;11349:65:0::1;11427:16;::::0;::::1;:20:::0;;-1:-1:-1;;;;;;;11427:20:0;;::::1;;::::0;;;;-1:-1:-1;11491:17:0;::::1;::::0;11473:15:::1;::::0;::::1;::::0;-1:-1:-1;;6112:4:0::1;::::0;-1:-1:-1;;;11512:12:0;;::::1;;;::::0;11473:35:::1;::::0;11491:17;11473:35:::1;:::i;:::-;11472:52;;;;:::i;:::-;:66;;;;:::i;:::-;11458:80;;11551:16;11570:42;11591:7;11600:11;11570:20;:42::i;:::-;11623:22;11648:14:::0;;;:5:::1;:14;::::0;;;;;;;:27;;;;;;;;11710:1:::1;11686:21:::0;::::1;:25:::0;;-1:-1:-1;;;;11686:25:0::1;-1:-1:-1::0;;;11686:25:0::1;::::0;;11551:61;;-1:-1:-1;11741:40:0::1;11654:7:::0;11771:9;11741:20:::1;:40::i;:::-;11792:20;11815:14:::0;;;:5:::1;:14;::::0;;;;;;;:25;;;;;;;;11873:1:::1;11851:19:::0;::::1;:23:::0;;-1:-1:-1;;;;11851:23:0::1;-1:-1:-1::0;;;11851:23:0::1;::::0;;11724:57;;-1:-1:-1;11910:10:0::1;11724:57:::0;11934:17:::1;11940:11:::0;11934:3;:17:::1;:::i;:::-;:29;;;;:::i;:::-;11902:66;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11887:81;;;11987:4;11979:51;;;::::0;-1:-1:-1;;;11979:51:0;;20179:2:1;11979:51:0::1;::::0;::::1;20161:21:1::0;20218:2;20198:18;;;20191:30;20257:34;20237:18;;;20230:62;-1:-1:-1;;;20308:18:1;;;20301:32;20350:19;;11979:51:0::1;19977:398:1::0;11979:51:0::1;12047:16:::0;;12043:113:::1;;12085:59;::::0;;20611:25:1;;;20667:2;20652:18;;20645:34;;;20695:18;;;20688:34;;;12133:10:0::1;20753:2:1::0;20738:18;;20731:60;12085:59:0::1;::::0;20598:3:1;20583:19;12085:59:0::1;;;;;;;12043:113;12170:14:::0;;12166:107:::1;;12206:55;::::0;;20611:25:1;;;20667:2;20652:18;;20645:34;;;20695:18;;;20688:34;;;12250:10:0::1;20753:2:1::0;20738:18;;20731:60;12206:55:0::1;::::0;20598:3:1;20583:19;12206:55:0::1;;;;;;;12166:107;12288:39;::::0;;21004:25:1;;;21060:2;21045:18;;21038:34;;;12316:10:0::1;21088:18:1::0;;;21081:60;12288:39:0;;::::1;::::0;;;;20992:2:1;12288:39:0;;::::1;11106:1231;;;;;;;3539:20:::0;2830:1;4081:7;:21;3898:212;7194:138;7262:10;-1:-1:-1;;;;;7276:12:0;7262:26;;7255:34;;;;:::i;:::-;7300:10;:24;7194:138::o;7340:140::-;7410:10;-1:-1:-1;;;;;7424:12:0;7410:26;;7403:34;;;;:::i;:::-;7448:10;:24;;-1:-1:-1;;7448:24:0;;;;;;;;;;;;7340:140::o;13820:537::-;13880:10;13922:12;;13911:7;:23;;:39;;;;-1:-1:-1;13938:12:0;;;13911:39;13903:79;;;;-1:-1:-1;;;13903:79:0;;21354:2:1;13903:79:0;;;21336:21:1;21393:2;21373:18;;;21366:30;21432:29;21412:18;;;21405:57;21479:18;;13903:79:0;21152:351:1;13903:79:0;13993:16;14012:15;;;:6;:15;;;;;;;;;13993:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13993:34:0;;;;;;;-1:-1:-1;;;13993:34:0;;;;;;;;;-1:-1:-1;;;13993:34:0;;;;;;;;;;-1:-1:-1;;;13993:34:0;;;;;;;;;-1:-1:-1;;;13993:34:0;;;;;;;;14042:21;;14038:81;;-1:-1:-1;14087:20:0;;13820:537;-1:-1:-1;;13820:537:0:o;14038:81::-;14133:11;;;;:15;;;14129:72;;-1:-1:-1;14172:17:0;;13820:537;-1:-1:-1;;13820:537:0:o;14129:72::-;14250:12;14230:17;;:32;;;;:::i;:::-;14215:11;;:47;14211:104;;-1:-1:-1;14286:17:0;;13820:537;-1:-1:-1;;13820:537:0:o;14211:104::-;-1:-1:-1;14332:17:0;;13820:537;-1:-1:-1;;13820:537:0:o;13625:185::-;13698:10;-1:-1:-1;;;;;13712:5:0;13698:19;;13691:27;;;;:::i;:::-;13730:9;13752:2;-1:-1:-1;;;;;13744:16:0;13768:6;13744:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13729:50;;;13797:4;13790:12;;;;:::i;17306:284::-;17387:4;17424:13;;;:5;:13;;;;;17440:11;17438:13;;17387:4;;17424:13;17387:4;;;;17438:13;;;:::i;:::-;;;;;-1:-1:-1;17424:28:0;;;;;;;;;;;-1:-1:-1;17424:28:0;17463:21;;;17495:11;;:24;;17530:23;;;-1:-1:-1;;;17530:23:0;-1:-1:-1;;;;17509:10:0;17530:23;-1:-1:-1;;;;;;17530:23:0;;;;;;;;;;-1:-1:-1;;17571:11:0;;17306:284;;;;;:::o;14365:543::-;14427:10;14593:4;:16;;;:21;;14613:1;14593:21;14589:81;;-1:-1:-1;14638:20:0;;14365:543;-1:-1:-1;14365:543:0:o;14589:81::-;14684:11;;;;:15;;;14680:72;;-1:-1:-1;14723:17:0;;14365:543;-1:-1:-1;14365:543:0:o;14680:72::-;14801:12;14781:17;;:32;;;;:::i;:::-;14766:11;;:47;14762:104;;-1:-1:-1;14837:17:0;;14365:543;-1:-1:-1;14365:543:0:o;14762:104::-;-1:-1:-1;14883:17:0;;14365:543;-1:-1:-1;14365:543:0:o;15899:939::-;15976:9;16308:3;:15;;;:20;;16327:1;16308:20;16304:79;;-1:-1:-1;16352:19:0;16345:26;;16304:79;16409:11;;;;16435:10;;;;16431:253;;16466:6;:11;;16476:1;16466:11;16462:72;;16505:13;16498:20;;;;;16462:72;16566:12;;;;16552:26;;:10;16561:1;16552:6;:10;:::i;:::-;:26;;;16548:87;;16606:13;16599:20;;;;;16548:87;16656:16;16649:23;;;;;16431:253;16733:12;16713:17;;:32;;;;:::i;:::-;16698:11;;:47;16694:103;;16769:16;16762:23;;;;;16694:103;-1:-1:-1;16814:16:0;;15899:939;-1:-1:-1;;;15899:939:0:o;3575:315::-;2873:1;3704:7;;:18;3700:88;;3746:30;;-1:-1:-1;;;3746:30:0;;;;;;;;;;;3700:88;2873:1;3865:7;:17;3575:315::o;12807:808::-;12895:12;;12884:7;:23;;:39;;;;-1:-1:-1;12911:12:0;;;12884:39;12876:80;;;;-1:-1:-1;;;12876:80:0;;21710:2:1;12876:80:0;;;21692:21:1;21749:2;21729:18;;;21722:30;21788;21768:18;;;21761:58;21836:18;;12876:80:0;21508:352:1;12876:80:0;13110:10;13123:37;13144:7;13153:6;13123:20;:37::i;:::-;13110:50;;13187:1;13179:5;:9;13171:46;;;;-1:-1:-1;;;13171:46:0;;22067:2:1;13171:46:0;;;22049:21:1;22106:2;22086:18;;;22079:30;22145:26;22125:18;;;22118:54;22189:18;;13171:46:0;21865:348:1;13171:46:0;13228:22;13253:14;;;:5;:14;;;;;;;;:22;;;;;;;;;13310:1;13286:21;;:25;;-1:-1:-1;;;;13286:25:0;-1:-1:-1;;;13286:25:0;;;13417:42;;13253:22;;13228;13425:10;;13449:5;;13228:22;13417:42;13228:22;13417:42;13449:5;13425:10;13417:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13402:57;;;13509:4;13501:40;;;;-1:-1:-1;;;13501:40:0;;22420:2:1;13501:40:0;;;22402:21:1;22459:2;22439:18;;;22432:30;22498:25;22478:18;;;22471:53;22541:18;;13501:40:0;22218:347:1;13501:40:0;13559:48;;;20611:25:1;;;20667:2;20652:18;;20645:34;;;20695:18;;;20688:34;;;13596:10:0;20753:2:1;20738:18;;20731:60;13559:48:0;;20598:3:1;20583:19;13559:48:0;20380:417:1;17598:1375:0;17678:4;17713:11;;17703:6;:21;;:36;;;;-1:-1:-1;17728:11:0;;;17703:36;17695:85;;;;-1:-1:-1;;;17695:85:0;;;;;;;:::i;:::-;17791:14;17808;;;:5;:14;;;;;;;;:22;;;;;;;;;17791:39;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17791:39:0;;;;;;;;;-1:-1:-1;;;17791:39:0;;;;;;;;;;;-1:-1:-1;;;17791:39:0;;;;;;;;;17864:10;17849:25;17841:75;;;;-1:-1:-1;;;17841:75:0;;22772:2:1;17841:75:0;;;22754:21:1;22811:2;22791:18;;;22784:30;22850:34;22830:18;;;22823:62;-1:-1:-1;;;22901:18:1;;;22894:35;22946:19;;17841:75:0;22570:401:1;17841:75:0;17927:16;17946:15;;;:6;:15;;;;;;;;;17927:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17927:34:0;;;;;;;-1:-1:-1;;;17927:34:0;;;;;;;;;-1:-1:-1;;;17927:34:0;;;;;;;;-1:-1:-1;;;17927:34:0;;;;;;;-1:-1:-1;;;17927:34:0;;;;;;;;;17980:21;17991:4;17997:3;17980:10;:21::i;:::-;:38;;;;;;;;:::i;:::-;;:83;;;-1:-1:-1;18047:16:0;18022:21;18033:4;18039:3;18022:10;:21::i;:::-;:41;;;;;;;;:::i;:::-;;17980:83;:125;;;-1:-1:-1;18092:13:0;18067:21;18078:4;18084:3;18067:10;:21::i;:::-;:38;;;;;;;;:::i;:::-;;17980:125;17972:170;;;;-1:-1:-1;;;17972:170:0;;23178:2:1;17972:170:0;;;23160:21:1;;;23197:18;;;23190:30;23256:34;23236:18;;;23229:62;23308:18;;17972:170:0;22976:356:1;17972:170:0;18173:11;;;;18246:12;;;;18228:15;;;;18157:13;;18228:30;;;:::i;14:163:1:-;81:20;;141:10;130:22;;120:33;;110:61;;167:1;164;157:12;110:61;14:163;;;:::o;182:320::-;258:6;266;274;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;379:9;366:23;356:33;;436:2;425:9;421:18;408:32;398:42;;459:37;492:2;481:9;477:18;459:37;:::i;:::-;449:47;;182:320;;;;;:::o;507:180::-;566:6;619:2;607:9;598:7;594:23;590:32;587:52;;;635:1;632;625:12;587:52;-1:-1:-1;658:23:1;;507:180;-1:-1:-1;507:180:1:o;945:389::-;1030:6;1038;1046;1054;1107:3;1095:9;1086:7;1082:23;1078:33;1075:53;;;1124:1;1121;1114:12;1075:53;1160:9;1147:23;1137:33;;1217:2;1206:9;1202:18;1189:32;1179:42;;1268:2;1257:9;1253:18;1240:32;1230:42;;1291:37;1324:2;1313:9;1309:18;1291:37;:::i;:::-;1281:47;;945:389;;;;;;;:::o;1521:316::-;1598:6;1606;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;-1:-1:-1;;1706:23:1;;;1776:2;1761:18;;1748:32;;-1:-1:-1;1827:2:1;1812:18;;;1799:32;;1521:316;-1:-1:-1;1521:316:1:o;1842:127::-;1903:10;1898:3;1894:20;1891:1;1884:31;1934:4;1931:1;1924:15;1958:4;1955:1;1948:15;1974:275;2045:2;2039:9;2110:2;2091:13;;-1:-1:-1;;2087:27:1;2075:40;;2145:18;2130:34;;2166:22;;;2127:62;2124:88;;;2192:18;;:::i;:::-;2228:2;2221:22;1974:275;;-1:-1:-1;1974:275:1:o;2254:183::-;2314:4;2347:18;2339:6;2336:30;2333:56;;;2369:18;;:::i;:::-;-1:-1:-1;2414:1:1;2410:14;2426:4;2406:25;;2254:183::o;2442:662::-;2496:5;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;2603:6;2590:20;2629:4;2653:60;2669:43;2709:2;2669:43;:::i;:::-;2653:60;:::i;:::-;2747:15;;;2833:1;2829:10;;;;2817:23;;2813:32;;;2778:12;;;;2857:15;;;2854:35;;;2885:1;2882;2875:12;2854:35;2921:2;2913:6;2909:15;2933:142;2949:6;2944:3;2941:15;2933:142;;;3015:17;;3003:30;;3053:12;;;;2966;;2933:142;;;-1:-1:-1;3093:5:1;2442:662;-1:-1:-1;;;;;;2442:662:1:o;3109:595::-;3227:6;3235;3288:2;3276:9;3267:7;3263:23;3259:32;3256:52;;;3304:1;3301;3294:12;3256:52;3344:9;3331:23;3373:18;3414:2;3406:6;3403:14;3400:34;;;3430:1;3427;3420:12;3400:34;3453:61;3506:7;3497:6;3486:9;3482:22;3453:61;:::i;:::-;3443:71;;3567:2;3556:9;3552:18;3539:32;3523:48;;3596:2;3586:8;3583:16;3580:36;;;3612:1;3609;3602:12;3580:36;;3635:63;3690:7;3679:8;3668:9;3664:24;3635:63;:::i;:::-;3625:73;;;3109:595;;;;;:::o;3917:248::-;3985:6;3993;4046:2;4034:9;4025:7;4021:23;4017:32;4014:52;;;4062:1;4059;4052:12;4014:52;-1:-1:-1;;4085:23:1;;;4155:2;4140:18;;;4127:32;;-1:-1:-1;3917:248:1:o;4170:1308::-;4287:6;4295;4348:2;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4404:9;4391:23;4433:18;4474:2;4466:6;4463:14;4460:34;;;4490:1;4487;4480:12;4460:34;4513:61;4566:7;4557:6;4546:9;4542:22;4513:61;:::i;:::-;4503:71;;4593:2;4583:12;;4648:2;4637:9;4633:18;4620:32;4677:2;4667:8;4664:16;4661:36;;;4693:1;4690;4683:12;4661:36;4716:24;;;-1:-1:-1;4771:4:1;4763:13;;4759:27;-1:-1:-1;4749:55:1;;4800:1;4797;4790:12;4749:55;4836:2;4823:16;4859:60;4875:43;4915:2;4875:43;:::i;4859:60::-;4953:15;;;5035:1;5031:10;;;;5023:19;;5019:28;;;4984:12;;;;5059:19;;;5056:39;;;5091:1;5088;5081:12;5056:39;5115:11;;;;5135:313;5151:6;5146:3;5143:15;5135:313;;;5231:3;5218:17;5279:6;5272:5;5268:18;5261:5;5258:29;5248:127;;5329:1;5358:2;5354;5347:14;5248:127;5388:18;;5168:12;;;;5426;;;;5135:313;;;5467:5;5457:15;;;;;;;4170:1308;;;;;:::o;6347:127::-;6408:10;6403:3;6399:20;6396:1;6389:31;6439:4;6436:1;6429:15;6463:4;6460:1;6453:15;6479:244;6624:2;6609:18;;6657:1;6646:13;;6636:47;;6663:18;;:::i;:::-;6692:25;;;6479:244;:::o;6925:184::-;6983:6;7036:2;7024:9;7015:7;7011:23;7007:32;7004:52;;;7052:1;7049;7042:12;7004:52;7075:28;7093:9;7075:28;:::i;:::-;7065:38;6925:184;-1:-1:-1;;;6925:184:1:o;7579:245::-;7725:2;7710:18;;7758:1;7747:13;;7737:47;;7764:18;;:::i;7829:354::-;7897:6;7905;7958:2;7946:9;7937:7;7933:23;7929:32;7926:52;;;7974:1;7971;7964:12;7926:52;8000:23;;-1:-1:-1;;;;;8052:31:1;;8042:42;;8032:70;;8098:1;8095;8088:12;8032:70;8121:5;8173:2;8158:18;;;;8145:32;;-1:-1:-1;;;7829:354:1:o;9602:127::-;9663:10;9658:3;9654:20;9651:1;9644:31;9694:4;9691:1;9684:15;9718:4;9715:1;9708:15;9734:125;9799:9;;;9820:10;;;9817:36;;;9833:18;;:::i;9864:648::-;10177:25;;;10233:2;10218:18;;10211:34;;;;10293:10;10281:23;;;;10276:2;10261:18;;10254:51;10336:2;10321:18;;10314:34;;;;10379:3;10364:19;;10357:35;-1:-1:-1;;;;;10429:32:1;10449:3;10408:19;;10401:61;10493:3;10478:19;;10471:35;10164:3;10149:19;;9864:648::o;10517:172::-;10584:10;10614;;;10626;;;10610:27;;10649:11;;;10646:37;;;10663:18;;:::i;:::-;10646:37;10517:172;;;;:::o;10694:175::-;10762:10;10805;;;10793;;;10789:27;;10828:12;;;10825:38;;;10843:18;;:::i;10874:168::-;10947:9;;;10978;;10995:15;;;10989:22;;10975:37;10965:71;;11016:18;;:::i;11047:217::-;11087:1;11113;11103:132;;11157:10;11152:3;11148:20;11145:1;11138:31;11192:4;11189:1;11182:15;11220:4;11217:1;11210:15;11103:132;-1:-1:-1;11249:9:1;;11047:217::o;12701:135::-;12740:3;12761:17;;;12758:43;;12781:18;;:::i;:::-;-1:-1:-1;12828:1:1;12817:13;;12701:135::o;14970:127::-;15031:10;15026:3;15022:20;15019:1;15012:31;15062:4;15059:1;15052:15;15086:4;15083:1;15076:15;17231:127;17292:10;17287:3;17283:20;17280:1;17273:31;17323:4;17320:1;17313:15;17347:4;17344:1;17337:15;17627:400;17829:2;17811:21;;;17868:2;17848:18;;;17841:30;17907:34;17902:2;17887:18;;17880:62;-1:-1:-1;;;17973:2:1;17958:18;;17951:34;18017:3;18002:19;;17627:400::o;18032:128::-;18099:9;;;18120:11;;;18117:37;;;18134:18;;:::i;18517:171::-;18585:6;18624:10;;;18612;;;18608:27;;18647:12;;;18644:38;;;18662:18;;:::i

Swarm Source

ipfs://9ff38d92fde51af8db287add7853c2af26cfd585212c68862c664ed1b51c8d1a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.