Contract 0x7d9d108445f7e59a67da7c16a2ceb08c85b76a35

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7caa88cfd0c03a5f66ef72d4fac30d84b49df5c87b529f376dd47b394fe0615bSet Prices With ...147748382022-05-16 14:45:527 secs ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.053526935 55
0x025311b31ac0a8d8b2848a529eb3ec3a185de0f9a596bcb081a702c5417eaf0fSet Prices With ...147748372022-05-16 14:45:518 secs ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xb31a5fa00c7b4eb282d69388e7cb5085d4b588a88178bb59976f25b04359b73fSet Prices With ...147747562022-05-16 14:43:042 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.035295627241 55.187358874
0xee997627cc4c214a5fb52402d61ca3fffbc9de831546d766886e57452356c6ceSet Prices With ...147747492022-05-16 14:42:503 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x23331bd6b712086f47dd1be5daa2be9cc8933a1c58eaa72bb4673245653ff8a8Set Prices With ...147747392022-05-16 14:42:303 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.004896228934 55.428588481
0x4f2d3b867f0f4f6b0ff9e3f2db981c59fb700588ff9c10fd7d5cf6cf66a0c6a1Set Prices With ...147747242022-05-16 14:42:023 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00470437 55
0x2160f263e3d49f2d5b826859be44588fc7ace92085b771c9d4241a14a64c2782Set Prices With ...147747222022-05-16 14:41:574 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.053834935 55
0xc3365b9d5734fe982839097c4b5216d31993578fb41ee766813f5be5a3bbd899Set Prices With ...147746962022-05-16 14:41:024 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x8871807b687b098a081f90916ba647d0a8980f40ab08b6cc8b4cd2a30ed812cdSet Prices With ...147746072022-05-16 14:38:047 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00455037 55
0x76ee0aa71bbee1ad83ec8a0546755334aeb596694328735060d236544a701a41Set Prices With ...147746062022-05-16 14:38:017 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.04189966 55
0x6ce711ffb4ceecc4e35cfcb881fba761b963c8420b7f18a1456b4b6f86434526Set Prices With ...147745342022-05-16 14:35:3610 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.035999607264 55.072638948
0x1df0f94d6714086cc7bdc4dfb9e913144bebb86895ceba452c1517f890251cabSet Prices With ...147745172022-05-16 14:35:0410 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00470437 55
0x78ddadccef3616da0794e62c2608ad07620eddc535c3a9041b3c68e50a8fd83bSet Prices With ...147744902022-05-16 14:34:0711 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.042858307129 55.681182277
0x18058d382da87741515390b7a78e3393715bd0f16cefb201c24d35033030210fSet Prices With ...147744882022-05-16 14:34:0311 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.004871003323 55.143017682
0x5d31bd7e5dfd7f759b6108572e737a5b5686eab285f9be83a1f7719132b3d18bSet Prices With ...147744722022-05-16 14:33:3212 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.03531891 55
0xcb660dfef483ebe997c2b55f9961dd1ecc67c1b3d19c3a580d171e54226a1de9Set Prices With ...147744362022-05-16 14:32:2113 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.04260839 55
0xde0ac37d4a17649890610f2dcdb82f42160704463afd55579394285ec49ecc02Set Prices With ...147744182022-05-16 14:31:4714 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x046e6fe58b85ad45c4f6ee589eb95b344e4224777fe2a280cdaa3cd1f8b1bfedSet Prices With ...147743822022-05-16 14:30:3315 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.053625715 55
0xbd77d783f90c7d1bf8ecd2abc4f76b97e6dcb7dd308c739e55ba170687011f42Set Prices With ...147743722022-05-16 14:30:1015 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.037974470299 55.103265176
0xb71e588a61628f6b3a827aad64c8779164aa38a26c5f7c88d0a6800bb29e1887Set Prices With ...147743572022-05-16 14:29:4416 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.054502965 55
0x6aaab7abf924d714bfa68b5bc37070d8037aa4c9baea4556abeb75ff881012e2Set Prices With ...147743512022-05-16 14:29:3016 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x745f176d922bbf0ff437b595c80864b62dd429b0d1a549cab5ae81811e16b77cSet Prices With ...147743432022-05-16 14:29:1516 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.004909768595 55.581866499
0x80b57eb0759a891b047428d6a14e630220734fcb46d1d96f99e1f4ebb3ce20baSet Prices With ...147743202022-05-16 14:28:2917 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.05307808 55
0x6c24a826ccbb368c1e6cf62e472bf53705e9bd0b9fc2415934a9f362d8424289Set Prices With ...147743072022-05-16 14:28:0317 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x76c61c394333f9ab8669c0e5f27390af9766682c08dc380e643fe6e9390d5705Set Prices With ...147742772022-05-16 14:27:0418 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.035322375 55
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FastPriceFeed

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-03-23
*/

// Sources flattened with hardhat v2.9.1 https://hardhat.org

// File contracts/libraries/math/SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


// File contracts/oracle/interfaces/ISecondaryPriceFeed.sol


pragma solidity 0.6.12;

interface ISecondaryPriceFeed {
    function getPrice(address _token, uint256 _referencePrice, bool _maximise) external view returns (uint256);
}


// File contracts/oracle/interfaces/IFastPriceFeed.sol


pragma solidity 0.6.12;

interface IFastPriceFeed {
    function lastUpdatedAt() external view returns (uint256);
    function lastUpdatedBlock() external view returns (uint256);
}


// File contracts/oracle/interfaces/IFastPriceEvents.sol


pragma solidity 0.6.12;

interface IFastPriceEvents {
    function emitPriceEvent(address _token, uint256 _price) external;
}


// File contracts/core/interfaces/IPositionRouter.sol


pragma solidity 0.6.12;

interface IPositionRouter {
    function executeIncreasePositions(uint256 _count, address payable _executionFeeReceiver) external;
    function executeDecreasePositions(uint256 _count, address payable _executionFeeReceiver) external;
}


// File contracts/access/Governable.sol


pragma solidity 0.6.12;

contract Governable {
    address public gov;

    constructor() public {
        gov = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == gov, "Governable: forbidden");
        _;
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }
}


// File contracts/oracle/FastPriceFeed.sol






pragma solidity 0.6.12;

contract FastPriceFeed is ISecondaryPriceFeed, IFastPriceFeed, Governable {
    using SafeMath for uint256;

    uint256 public constant PRICE_PRECISION = 10 ** 30;

    // uint256(~0) is 256 bits of 1s
    // shift the 1s by (256 - 32) to get (256 - 32) 0s followed by 32 1s
    uint256 constant public PRICE_BITMASK = uint256(~0) >> (256 - 32);

    uint256 public constant BASIS_POINTS_DIVISOR = 10000;

    uint256 public constant MAX_PRICE_DURATION = 30 minutes;

    bool public isInitialized;
    bool public isSpreadEnabled = false;
    address public fastPriceEvents;

    address public tokenManager;

    address public positionRouter;

    uint256 public override lastUpdatedAt;
    uint256 public override lastUpdatedBlock;

    uint256 public priceDuration;
    uint256 public minBlockInterval;
    uint256 public maxTimeDeviation;

    // volatility basis points
    uint256 public volBasisPoints;
    // max deviation from primary price
    uint256 public maxDeviationBasisPoints;

    uint256 public minAuthorizations;
    uint256 public disableFastPriceVoteCount = 0;

    mapping (address => bool) public isUpdater;

    mapping (address => uint256) public prices;

    mapping (address => bool) public isSigner;
    mapping (address => bool) public disableFastPriceVotes;

    // array of tokens used in setCompactedPrices, saves L1 calldata gas costs
    address[] public tokens;
    // array of tokenPrecisions used in setCompactedPrices, saves L1 calldata gas costs
    // if the token price will be sent with 3 decimals, then tokenPrecision for that token
    // should be 10 ** 3
    uint256[] public tokenPrecisions;

    event DisableFastPrice(address signer);
    event EnableFastPrice(address signer);

    modifier onlySigner() {
        require(isSigner[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyUpdater() {
        require(isUpdater[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyTokenManager() {
        require(msg.sender == tokenManager, "FastPriceFeed: forbidden");
        _;
    }

    constructor(
      uint256 _priceDuration,
      uint256 _minBlockInterval,
      uint256 _maxDeviationBasisPoints,
      address _fastPriceEvents,
      address _tokenManager,
      address _positionRouter
    ) public {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
        minBlockInterval = _minBlockInterval;
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
        fastPriceEvents = _fastPriceEvents;
        tokenManager = _tokenManager;
        positionRouter = _positionRouter;
    }

    function initialize(uint256 _minAuthorizations, address[] memory _signers, address[] memory _updaters) public onlyGov {
        require(!isInitialized, "FastPriceFeed: already initialized");
        isInitialized = true;

        minAuthorizations = _minAuthorizations;

        for (uint256 i = 0; i < _signers.length; i++) {
            address signer = _signers[i];
            isSigner[signer] = true;
        }

        for (uint256 i = 0; i < _updaters.length; i++) {
            address updater = _updaters[i];
            isUpdater[updater] = true;
        }
    }

    function setTokenManager(address _tokenManager) external onlyGov {
        tokenManager = _tokenManager;
    }

    function setSigner(address _account, bool _isActive) external onlyGov {
        isSigner[_account] = _isActive;
    }

    function setUpdater(address _account, bool _isActive) external onlyGov {
        isUpdater[_account] = _isActive;
    }

    function setFastPriceEvents(address _fastPriceEvents) external onlyGov {
      fastPriceEvents = _fastPriceEvents;
    }

    function setPriceDuration(uint256 _priceDuration) external onlyGov {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
    }

    function setMinBlockInterval(uint256 _minBlockInterval) external onlyGov {
        minBlockInterval = _minBlockInterval;
    }

    function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyGov {
        isSpreadEnabled = _isSpreadEnabled;
    }

    function setMaxTimeDeviation(uint256 _maxTimeDeviation) external onlyGov {
        maxTimeDeviation = _maxTimeDeviation;
    }

    function setLastUpdatedAt(uint256 _lastUpdatedAt) external onlyGov {
        lastUpdatedAt = _lastUpdatedAt;
    }

    function setVolBasisPoints(uint256 _volBasisPoints) external onlyGov {
        volBasisPoints = _volBasisPoints;
    }

    function setMaxDeviationBasisPoints(uint256 _maxDeviationBasisPoints) external onlyGov {
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
    }

    function setMinAuthorizations(uint256 _minAuthorizations) external onlyTokenManager {
        minAuthorizations = _minAuthorizations;
    }

    function setTokens(address[] memory _tokens, uint256[] memory _tokenPrecisions) external onlyGov {
        require(_tokens.length == _tokenPrecisions.length, "FastPriceFeed: invalid lengths");
        tokens = _tokens;
        tokenPrecisions = _tokenPrecisions;
    }

    function setPrices(address[] memory _tokens, uint256[] memory _prices, uint256 _timestamp) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _tokens.length; i++) {
                address token = _tokens[i];
                prices[token] = _prices[i];
                _emitPriceEvent(_fastPriceEvents, token,  _prices[i]);
            }
        }
    }

    function setCompactedPrices(uint256[] memory _priceBitArray, uint256 _timestamp) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _priceBitArray.length; i++) {
                uint256 priceBits = _priceBitArray[i];

                for (uint256 j = 0; j < 8; j++) {
                    uint256 index = i * 8 + j;
                    if (index >= tokens.length) { return; }

                    uint256 startBit = 32 * j;
                    uint256 price = (priceBits >> startBit) & PRICE_BITMASK;

                    address token = tokens[i * 8 + j];
                    uint256 tokenPrecision = tokenPrecisions[i * 8 + j];
                    uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                    prices[token] = adjustedPrice;

                    _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
                }
            }
        }
    }

    function setPricesWithBits(uint256 _priceBits, uint256 _timestamp) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);
    }

    function setPricesWithBitsAndExecute(uint256 _priceBits, uint256 _timestamp, uint256 _endIndexForIncreasePositions, uint256 _endIndexForDecreasePositions) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);

        IPositionRouter _positionRouter = IPositionRouter(positionRouter);
        _positionRouter.executeIncreasePositions(_endIndexForIncreasePositions, payable(msg.sender));
        _positionRouter.executeDecreasePositions(_endIndexForDecreasePositions, payable(msg.sender));
    }

    function disableFastPrice() external onlySigner {
        require(!disableFastPriceVotes[msg.sender], "FastPriceFeed: already voted");
        disableFastPriceVotes[msg.sender] = true;
        disableFastPriceVoteCount = disableFastPriceVoteCount.add(1);

        emit DisableFastPrice(msg.sender);
    }

    function enableFastPrice() external onlySigner {
        require(disableFastPriceVotes[msg.sender], "FastPriceFeed: already enabled");
        disableFastPriceVotes[msg.sender] = false;
        disableFastPriceVoteCount = disableFastPriceVoteCount.sub(1);

        emit EnableFastPrice(msg.sender);
    }

    function getPrice(address _token, uint256 _refPrice, bool _maximise) external override view returns (uint256) {
        if (block.timestamp > lastUpdatedAt.add(priceDuration)) { return _refPrice; }

        uint256 fastPrice = prices[_token];
        if (fastPrice == 0) { return _refPrice; }

        uint256 maxPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.add(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);
        uint256 minPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.sub(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);

        if (favorFastPrice()) {
            if (fastPrice >= minPrice && fastPrice <= maxPrice) {
                if (_maximise) {
                    if (_refPrice > fastPrice) {
                        uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.add(volBasisPoints)).div(BASIS_POINTS_DIVISOR);
                        // the volPrice should not be more than _refPrice
                        return volPrice > _refPrice ? _refPrice : volPrice;
                    }
                    return fastPrice;
                }

                if (_refPrice < fastPrice) {
                    uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.sub(volBasisPoints)).div(BASIS_POINTS_DIVISOR);
                    // the volPrice should not be less than _refPrice
                    return volPrice < _refPrice ? _refPrice : volPrice;
                }

                return fastPrice;
            }
        }

        if (_maximise) {
            if (_refPrice > fastPrice) { return _refPrice; }
            return fastPrice > maxPrice ? maxPrice : fastPrice;
        }

        if (_refPrice < fastPrice) { return _refPrice; }
        return fastPrice < minPrice ? minPrice : fastPrice;
    }

    function favorFastPrice() public view returns (bool) {
        if (isSpreadEnabled) {
            return false;
        }

        if (disableFastPriceVoteCount >= minAuthorizations) {
            return false;
        }

        return true;
    }

    function _setPricesWithBits(uint256 _priceBits, uint256 _timestamp) private {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 j = 0; j < 8; j++) {
                uint256 index = j;
                if (index >= tokens.length) { return; }

                uint256 startBit = 32 * j;
                uint256 price = (_priceBits >> startBit) & PRICE_BITMASK;

                address token = tokens[j];
                uint256 tokenPrecision = tokenPrecisions[j];
                uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                prices[token] = adjustedPrice;

                _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
            }
        }
    }

    function _emitPriceEvent(address _fastPriceEvents, address _token, uint256 _price) private {
        if (_fastPriceEvents == address(0)) {
            return;
        }

        IFastPriceEvents(_fastPriceEvents).emitPriceEvent(_token, _price);
    }

    function _setLastUpdatedValues(uint256 _timestamp) private returns (bool) {
        if (minBlockInterval > 0) {
            require(block.number.sub(lastUpdatedBlock) >= minBlockInterval, "FastPriceFeed: minBlockInterval not yet passed");
        }

        require(_timestamp > block.timestamp.sub(maxTimeDeviation), "FastPriceFeed: _timestamp below allowed range");
        require(_timestamp < block.timestamp.add(maxTimeDeviation), "FastPriceFeed: _timestamp exceeds allowed range");

        // do not update prices if _timestamp is before the current lastUpdatedAt value
        if (_timestamp < lastUpdatedAt) {
            return false;
        }

        lastUpdatedAt = _timestamp;
        lastUpdatedBlock = block.number;

        return true;
    }
}

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"},{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"},{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"},{"internalType":"address","name":"_fastPriceEvents","type":"address"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_positionRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"DisableFastPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"EnableFastPrice","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRICE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_BITMASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFastPriceVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disableFastPriceVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastPriceEvents","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorFastPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_refPrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"},{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_updaters","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpreadEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUpdater","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeviationBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTimeDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAuthorizations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_priceBitArray","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setCompactedPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fastPriceEvents","type":"address"}],"name":"setFastPriceEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSpreadEnabled","type":"bool"}],"name":"setIsSpreadEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdatedAt","type":"uint256"}],"name":"setLastUpdatedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"}],"name":"setMaxDeviationBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTimeDeviation","type":"uint256"}],"name":"setMaxTimeDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"}],"name":"setMinAuthorizations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"}],"name":"setMinBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"}],"name":"setPriceDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPricesWithBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_endIndexForIncreasePositions","type":"uint256"},{"internalType":"uint256","name":"_endIndexForDecreasePositions","type":"uint256"}],"name":"setPricesWithBitsAndExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_tokenPrecisions","type":"uint256[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_volBasisPoints","type":"uint256"}],"name":"setVolBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrecisions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526000805460ff60a81b19168155600c5534801561002057600080fd5b5060405161235a38038061235a833981810160405260c081101561004357600080fd5b508051602082015160408301516060840151608085015160a090950151600080546001600160a01b0319163317905593949293919290916107088611156100bb5760405162461bcd60e51b81526004018080602001828103825260258152602001806123356025913960400191505060405180910390fd5b600695909555600793909355600a91909155600180546001600160a01b039283166001600160a01b03199182161790915560028054938316938216939093179092556003805491909316911617905561221c806101196000396000f3fe608060405234801561001057600080fd5b50600436106102305760003560e01c806303b049361461023557806303cd25711461026f57806303f4d7dc146102895780630e9272ea1461032e578063114fbeb314610352578063126082cf1461035a57806312d43a51146103625780631389a3cc1461036a57806314dd2dce14610399578063162ac4e0146103b657806317835d1c146103dc5780631a153391146103ff578063287800c91461042d5780632a709b141461043557806331cb61051461043d578063392e53cd1461046b5780633aa08f861461047357806344c231931461047b5780634d11fb4a146104985780634f64b2be146104b55780634fdfb086146104d257806354aea127146104f857806361ef161f14610500578063668d3d6514610508578063695d4184146105105780636ccd47c414610518578063715c753614610520578063776d16c114610528578063782661bc146105455780637cb2b79c1461066a5780637df73e27146106905780637fbc79c6146106b65780637fece368146107e057806382553aad1461081457806395082d25146108315780639e4de0e314610839578063b0a2566614610856578063b3606b561461085e578063c0e4de8e14610866578063c8390a481461086e578063c84a912414610991578063ce98dfa814610999578063cfad57a2146109b8578063cfed246b146109de578063d6a153f114610a04578063d925351a14610a21578063f67e3bf014610a3e578063f90ce5ba14610a46575b600080fd5b61025b6004803603602081101561024b57600080fd5b50356001600160a01b0316610a4e565b604080519115158252519081900360200190f35b610277610a63565b60408051918252519081900360200190f35b61032c6004803603604081101561029f57600080fd5b810190602081018135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a69915050565b005b610336610bf1565b604080516001600160a01b039092168252519081900360200190f35b610277610c00565b610277610c06565b610336610c0c565b61032c6004803603608081101561038057600080fd5b5080359060208101359060408101359060600135610c1b565b61032c600480360360208110156103af57600080fd5b5035610d4f565b61032c600480360360208110156103cc57600080fd5b50356001600160a01b0316610da1565b61032c600480360360408110156103f257600080fd5b5080359060200135610e10565b61032c6004803603604081101561041557600080fd5b506001600160a01b0381351690602001351515610e6c565b610277610ee4565b610336610eea565b61032c6004803603604081101561045357600080fd5b506001600160a01b0381351690602001351515610ef9565b61025b610f71565b610277610f81565b61032c6004803603602081101561049157600080fd5b5035610f87565b610277600480360360208110156104ae57600080fd5b503561101a565b610336600480360360208110156104cb57600080fd5b5035611038565b61025b600480360360208110156104e857600080fd5b50356001600160a01b031661105f565b610277611074565b61033661107a565b610277611089565b61025b61108f565b61032c61109f565b6102776111b2565b61032c6004803603602081101561053e57600080fd5b50356111b8565b61032c6004803603606081101561055b57600080fd5b810190602081018135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460208302840111600160201b8311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061120a915050565b61032c6004803603602081101561068057600080fd5b50356001600160a01b031661130c565b61025b600480360360208110156106a657600080fd5b50356001600160a01b031661137b565b61032c600480360360608110156106cc57600080fd5b81359190810190604081016020820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111600160201b831117156107a257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611390945050505050565b610277600480360360608110156107f657600080fd5b506001600160a01b03813516906020810135906040013515156114e9565b61032c6004803603602081101561082a57600080fd5b50356116a7565b6102776116f9565b61032c6004803603602081101561084f57600080fd5b5035611709565b61027761175b565b610277611761565b61025b611767565b61032c6004803603604081101561088457600080fd5b810190602081018135600160201b81111561089e57600080fd5b8201836020820111156108b057600080fd5b803590602001918460208302840111600160201b831117156108d157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561092057600080fd5b82018360208201111561093257600080fd5b803590602001918460208302840111600160201b8311171561095357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061179c945050505050565b61032c611866565b61032c600480360360208110156109af57600080fd5b5035151561197d565b61032c600480360360208110156109ce57600080fd5b50356001600160a01b03166119e8565b610277600480360360208110156109f457600080fd5b50356001600160a01b0316611a57565b61032c60048036036020811015610a1a57600080fd5b5035611a69565b61032c60048036036020811015610a3757600080fd5b5035611abb565b610277611b0d565b610277611b15565b60106020526000908152604090205460ff1681565b60065481565b336000908152600d602052604090205460ff16610abb576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b6000610ac682611b1b565b90508015610beb576001546001600160a01b031660005b8451811015610be8576000858281518110610af457fe5b6020026020010151905060005b6008811015610bde57601154600884028201908110610b2557505050505050610bed565b60118054602084029185831c63ffffffff169160009190600889028701908110610b4b57fe5b6000918252602082200154601280546001600160a01b0390921693509060088a028801908110610b7757fe5b60009182526020822001549150610ba482610b9e8668327cb2734119d3b7a9601e1b611c2e565b90611c90565b6001600160a01b0384166000908152600e602052604090208190559050610bcc8a8483611ccf565b505060019094019350610b0192505050565b5050600101610add565b50505b505b5050565b6001546001600160a01b031681565b60095481565b61271081565b6000546001600160a01b031681565b336000908152600d602052604090205460ff16610c6d576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b610c778484611d56565b60035460408051629a208160e81b81526004810185905233602482015290516001600160a01b03909216918291639a20810091604480830192600092919082900301818387803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b50506040805163f3883d8b60e01b81526004810186905233602482015290516001600160a01b038516935063f3883d8b9250604480830192600092919082900301818387803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b03163314610d9c576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600455565b6000546001600160a01b03163314610dee576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600d602052604090205460ff16610e62576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b610bed8282611d56565b6000546001600160a01b03163314610eb9576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600b5481565b6002546001600160a01b031681565b6000546001600160a01b03163314610f46576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600054600160a01b900460ff1681565b60085481565b6000546001600160a01b03163314610fd4576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b6107088111156110155760405162461bcd60e51b81526004018080602001828103825260258152602001806120b56025913960400191505060405180910390fd5b600655565b6012818154811061102757fe5b600091825260209091200154905081565b6011818154811061104557fe5b6000918252602090912001546001600160a01b0316905081565b600d6020526000908152604090205460ff1681565b60045481565b6003546001600160a01b031681565b61070881565b600054600160a81b900460ff1681565b336000908152600f602052604090205460ff166110f1576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16611155576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20616c726561647920656e61626c65640000604482015290519081900360640190fd5b336000908152601060205260409020805460ff19169055600c5461117a906001611e3e565b600c556040805133815290517f9fe0c305c33aa92757a537936872a60be0d91549a4303cc99fd8b7fce8a002759181900360200190a1565b600a5481565b6000546001600160a01b03163314611205576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600855565b336000908152600d602052604090205460ff1661125c576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b600061126782611b1b565b90508015611306576001546001600160a01b031660005b855181101561130357600086828151811061129557fe5b602002602001015190508582815181106112ab57fe5b6020026020010151600e6000836001600160a01b03166001600160a01b03168152602001908152602001600020819055506112fa83828885815181106112ed57fe5b6020026020010151611ccf565b5060010161127e565b50505b50505050565b6000546001600160a01b03163314611359576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031633146113dd576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600054600160a01b900460ff16156114265760405162461bcd60e51b81526004018080602001828103825260228152602001806121c56022913960400191505060405180910390fd5b6000805460ff60a01b1916600160a01b178155600b8490555b825181101561149257600083828151811061145657fe5b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff1916600190811790915591909101905061143f565b5060005b81518110156113065760008282815181106114ad57fe5b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff19166001908117909155919091019050611496565b6000611502600654600454611e8090919063ffffffff16565b4211156115105750816116a0565b6001600160a01b0384166000908152600e60205260409020548061153757839150506116a0565b6000611560612710610b9e611559600a54612710611e8090919063ffffffff16565b8890611c2e565b9050600061158b612710610b9e611584600a54612710611e3e90919063ffffffff16565b8990611c2e565b9050611595611767565b15611646578083101580156115aa5750818311155b1561164657841561160d57828611156116025760006115e6612710610b9e6115df600954612710611e8090919063ffffffff16565b8790611c2e565b90508681116115f557806115f7565b865b9450505050506116a0565b8293505050506116a0565b82861015611602576000611637612710610b9e6115df600954612710611e3e90919063ffffffff16565b90508681106115f557806115f7565b8415611678578286111561165f578593505050506116a0565b81831161166c578261166e565b815b93505050506116a0565b8286101561168b578593505050506116a0565b808310611698578261169a565b805b93505050505b9392505050565b6000546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600a55565b68327cb2734119d3b7a9601e1b81565b6000546001600160a01b03163314611756576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600955565b600c5481565b60075481565b60008054600160a81b900460ff161561178257506000611799565b600b54600c541061179557506000611799565b5060015b90565b6000546001600160a01b031633146117e9576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b805182511461183f576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20696e76616c6964206c656e677468730000604482015290519081900360640190fd5b8151611852906011906020850190611fd4565b508051610beb906012906020840190612039565b336000908152600f602052604090205460ff166118b8576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff161561191c576040805162461bcd60e51b815260206004820152601c60248201527b11985cdd141c9a58d9519959590e88185b1c9958591e481d9bdd195960221b604482015290519081900360640190fd5b336000908152601060205260409020805460ff19166001908117909155600c5461194591611e80565b600c556040805133815290517f4c0c5fabf50e808e3bc8d19577d305e3a7163eea7e8a74a50caa8896694cd44b9181900360200190a1565b6000546001600160a01b031633146119ca576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b60008054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611a35576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e6020526000908152604090205481565b6000546001600160a01b03163314611ab6576040805162461bcd60e51b815260206004820152601560248201526000805160206120da833981519152604482015290519081900360640190fd5b600755565b6002546001600160a01b03163314611b08576040805162461bcd60e51b815260206004820152601860248201526000805160206120fa833981519152604482015290519081900360640190fd5b600b55565b63ffffffff81565b60055481565b60075460009015611b7457600754600554611b37904390611e3e565b1015611b745760405162461bcd60e51b815260040180806020018281038252602e815260200180612197602e913960400191505060405180910390fd5b600854611b82904290611e3e565b8211611bbf5760405162461bcd60e51b815260040180806020018281038252602d81526020018061216a602d913960400191505060405180910390fd5b600854611bcd904290611e80565b8210611c0a5760405162461bcd60e51b815260040180806020018281038252602f81526020018061211a602f913960400191505060405180910390fd5b600454821015611c1c57506000611c29565b5060048190554360055560015b919050565b600082611c3d57506000611c8a565b82820282848281611c4a57fe5b0414611c875760405162461bcd60e51b81526004018080602001828103825260218152602001806121496021913960400191505060405180910390fd5b90505b92915050565b6000611c8783836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611ed8565b6001600160a01b038316611ce257610beb565b826001600160a01b031663e0409c7183836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d3957600080fd5b505af1158015611d4d573d6000803e3d6000fd5b50505050505050565b6000611d6182611b1b565b90508015610beb576001546001600160a01b031660005b6008811015610be85760115481908110611d955750505050610bed565b60118054602084029188831c63ffffffff16916000919086908110611db657fe5b6000918252602082200154601280546001600160a01b0390921693509087908110611ddd57fe5b60009182526020822001549150611e0482610b9e8668327cb2734119d3b7a9601e1b611c2e565b6001600160a01b0384166000908152600e602052604090208190559050611e2c888483611ccf565b505060019094019350611d7892505050565b6000611c8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f7a565b600082820183811015611c87576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008183611f645760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f29578181015183820152602001611f11565b50505050905090810190601f168015611f565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f7057fe5b0495945050505050565b60008184841115611fcc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f29578181015183820152602001611f11565b505050900390565b828054828255906000526020600020908101928215612029579160200282015b8281111561202957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff4565b50612035929150612080565b5090565b828054828255906000526020600020908101928215612074579160200282015b82811115612074578251825591602001919060010190612059565b5061203592915061209f565b5b808211156120355780546001600160a01b0319168155600101612081565b5b8082111561203557600081556001016120a056fe466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e476f7665726e61626c653a20666f7262696464656e0000000000000000000000466173745072696365466565643a20666f7262696464656e0000000000000000466173745072696365466565643a205f74696d657374616d70206578636565647320616c6c6f7765642072616e6765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77466173745072696365466565643a205f74696d657374616d702062656c6f7720616c6c6f7765642072616e6765466173745072696365466565643a206d696e426c6f636b496e74657276616c206e6f742079657420706173736564466173745072696365466565643a20616c726561647920696e697469616c697a6564a2646970667358221220d8de10e4e5e8633d06e2468d8ecd2688b7a4c4b4bba4ac3e145ba7c1b3585ad264736f6c634300060c0033466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000b3daef947c56b76d588bd67a123a24c17f7891490000000000000000000000007f98d265ba2609c1534d12cf6b0976505ad7f653000000000000000000000000195256074192170d1530527abc9943759c7167d8

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

000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000b3daef947c56b76d588bd67a123a24c17f7891490000000000000000000000007f98d265ba2609c1534d12cf6b0976505ad7f653000000000000000000000000195256074192170d1530527abc9943759c7167d8

-----Decoded View---------------
Arg [0] : _priceDuration (uint256): 300
Arg [1] : _minBlockInterval (uint256): 0
Arg [2] : _maxDeviationBasisPoints (uint256): 250
Arg [3] : _fastPriceEvents (address): 0xb3daef947c56b76d588bd67a123a24c17f789149
Arg [4] : _tokenManager (address): 0x7f98d265ba2609c1534d12cf6b0976505ad7f653
Arg [5] : _positionRouter (address): 0x195256074192170d1530527abc9943759c7167d8

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [3] : 000000000000000000000000b3daef947c56b76d588bd67a123a24c17f789149
Arg [4] : 0000000000000000000000007f98d265ba2609c1534d12cf6b0976505ad7f653
Arg [5] : 000000000000000000000000195256074192170d1530527abc9943759c7167d8


Deployed ByteCode Sourcemap

6967:12227:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8244:54;;;;;;;;;;;;;;;;-1:-1:-1;8244:54:0;-1:-1:-1;;;;;8244:54:0;;:::i;:::-;;;;;;;;;;;;;;;;;;7733:28;;;:::i;:::-;;;;;;;;;;;;;;;;12838:1079;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12838:1079:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12838:1079:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12838:1079:0;;-1:-1:-1;;12838:1079:0;;;-1:-1:-1;12838:1079:0;;-1:-1:-1;;12838:1079:0:i;:::-;;7527:30;;;:::i;:::-;;;;-1:-1:-1;;;;;7527:30:0;;;;;;;;;;;;;;7878:29;;;:::i;7328:52::-;;;:::i;6599:18::-;;;:::i;14082:521::-;;;;;;;;;;;;;;;;-1:-1:-1;14082:521:0;;;;;;;;;;;;;;;;;:::i;11463:116::-;;;;;;;;;;;;;;;;-1:-1:-1;11463:116:0;;:::i;10711:122::-;;;;;;;;;;;;;;;;-1:-1:-1;10711:122:0;-1:-1:-1;;;;;10711:122:0;;:::i;13925:149::-;;;;;;;;;;;;;;;;-1:-1:-1;13925:149:0;;;;;;;:::i;10582:121::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10582:121:0;;;;;;;;;;:::i;8002:32::-;;;:::i;7566:27::-;;;:::i;10455:119::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10455:119:0;;;;;;;;;;:::i;7453:25::-;;;:::i;7806:31::-;;;:::i;10841:213::-;;;;;;;;;;;;;;;;-1:-1:-1;10841:213:0;;:::i;8624:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8624:32:0;;:::i;8387:23::-;;;;;;;;;;;;;;;;-1:-1:-1;8387:23:0;;:::i;8094:42::-;;;;;;;;;;;;;;;;-1:-1:-1;8094:42:0;-1:-1:-1;;;;;8094:42:0;;:::i;7640:37::-;;;:::i;7602:29::-;;;:::i;7389:55::-;;;:::i;7485:35::-;;;:::i;14929:310::-;;;:::i;7955:38::-;;;:::i;11327:128::-;;;;;;;;;;;;;;;;-1:-1:-1;11327:128:0;;:::i;12308:522::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12308:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12308:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12308:522:0;;;;;;;;-1:-1:-1;12308:522:0;;-1:-1:-1;;;;;12308:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12308:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12308:522:0;;-1:-1:-1;;12308:522:0;;;-1:-1:-1;12308:522:0;;-1:-1:-1;;12308:522:0:i;10335:112::-;;;;;;;;;;;;;;;;-1:-1:-1;10335:112:0;-1:-1:-1;;;;;10335:112:0;;:::i;8196:41::-;;;;;;;;;;;;;;;;-1:-1:-1;8196:41:0;-1:-1:-1;;;;;8196:41:0;;:::i;9740:587::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9740:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9740:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9740:587:0;;;;;;;;-1:-1:-1;9740:587:0;;-1:-1:-1;;;;;9740:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9740:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9740:587:0;;-1:-1:-1;9740:587:0;;-1:-1:-1;;;;;9740:587:0:i;15247:1775::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15247:1775:0;;;;;;;;;;;;;;;:::i;11715:156::-;;;;;;;;;;;;;;;;-1:-1:-1;11715:156:0;;:::i;7083:50::-;;;:::i;11587:120::-;;;;;;;;;;;;;;;;-1:-1:-1;11587:120:0;;:::i;8041:44::-;;;:::i;7768:31::-;;;:::i;17030:258::-;;;:::i;12028:272::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12028:272:0;;;;;;;;-1:-1:-1;12028:272:0;;-1:-1:-1;;;;;12028:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12028:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12028:272:0;;-1:-1:-1;12028:272:0;;-1:-1:-1;;;;;12028:272:0:i;14611:310::-;;;:::i;11198:121::-;;;;;;;;;;;;;;;;-1:-1:-1;11198:121:0;;;;:::i;6799:76::-;;;;;;;;;;;;;;;;-1:-1:-1;6799:76:0;-1:-1:-1;;;;;6799:76:0;;:::i;8145:42::-;;;;;;;;;;;;;;;;-1:-1:-1;8145:42:0;-1:-1:-1;;;;;8145:42:0;;:::i;11062:128::-;;;;;;;;;;;;;;;;-1:-1:-1;11062:128:0;;:::i;11879:141::-;;;;;;;;;;;;;;;;-1:-1:-1;11879:141:0;;:::i;7254:65::-;;;:::i;7684:40::-;;;:::i;8244:54::-;;;;;;;;;;;;;;;:::o;7733:28::-;;;;:::o;12838:1079::-;8926:10;8916:21;;;;:9;:21;;;;;;;;8908:58;;;;;-1:-1:-1;;;8908:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8908:58:0;;;;;;;;;;;;;;;12951:17:::1;12971:33;12993:10;12971:21;:33::i;:::-;12951:53;;13021:12;13017:893;;;13077:15;::::0;-1:-1:-1;;;;;13077:15:0::1;13050:24;13109:790;13133:14;:21;13129:1;:25;13109:790;;;13180:17;13200:14;13215:1;13200:17;;;;;;;;;;;;;;13180:37;;13243:9;13238:646;13262:1;13258;:5;13238:646;;;13354:6;:13:::0;13313:1:::1;13309:5:::0;::::1;:9:::0;::::1;::::0;13345:22;::::1;13341:39;;13371:7;;;;;;;;13341:39;13548:6;:17:::0;;13423:2:::1;:6:::0;::::1;::::0;13469:21;;::::1;7294:25:::0;13468:39:::1;::::0;13404:16:::1;::::0;13548:6;13559:1:::1;13555:5:::0;::::1;:9:::0;::::1;::::0;13548:17;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;13613:15:::1;:26:::0;;-1:-1:-1;;;;;13548:17:0;;::::1;::::0;-1:-1:-1;13613:15:0;13633:1:::1;13629:5:::0;::::1;:9:::0;::::1;::::0;13613:26;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;13686:46:0::1;13613:26:::0;13686::::1;:5:::0;-1:-1:-1;;;13686:9:0::1;:26::i;:::-;:30:::0;::::1;:46::i;:::-;-1:-1:-1::0;;;;;13755:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;:29;;;13662:70;-1:-1:-1;13809:55:0::1;13825:16:::0;13762:5;13662:70;13809:15:::1;:55::i;:::-;-1:-1:-1::0;;13265:3:0::1;::::0;;::::1;::::0;-1:-1:-1;13238:646:0::1;::::0;-1:-1:-1;;;13238:646:0::1;;-1:-1:-1::0;;13156:3:0::1;;13109:790;;;;13017:893;;8977:1;;12838:1079:::0;;:::o;7527:30::-;;;-1:-1:-1;;;;;7527:30:0;;:::o;7878:29::-;;;;:::o;7328:52::-;7375:5;7328:52;:::o;6599:18::-;;;-1:-1:-1;;;;;6599:18:0;;:::o;14082:521::-;8926:10;8916:21;;;;:9;:21;;;;;;;;8908:58;;;;;-1:-1:-1;;;8908:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8908:58:0;;;;;;;;;;;;;;;14269:42:::1;14288:10;14300;14269:18;:42::i;:::-;14374:14;::::0;14400:92:::1;::::0;;-1:-1:-1;;;14400:92:0;;::::1;::::0;::::1;::::0;;;14480:10:::1;14400:92:::0;;;;;;-1:-1:-1;;;;;14374:14:0;;::::1;::::0;;;14400:40:::1;::::0;:92;;;;;14324:31:::1;::::0;14400:92;;;;;;;14324:31;14374:14;14400:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14503:92:0::1;::::0;;-1:-1:-1;;;14503:92:0;;::::1;::::0;::::1;::::0;;;14583:10:::1;14503:92:::0;;;;;;-1:-1:-1;;;;;14503:40:0;::::1;::::0;-1:-1:-1;14503:40:0::1;::::0;-1:-1:-1;14503:92:0;;;;;-1:-1:-1;;14503:92:0;;;;;;;-1:-1:-1;14503:40:0;:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8977:1;14082:521:::0;;;;:::o;11463:116::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11541:13:::1;:30:::0;11463:116::o;10711:122::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;10791:15:::1;:34:::0;;-1:-1:-1;;;;;;10791:34:0::1;-1:-1:-1::0;;;;;10791:34:0;;;::::1;::::0;;;::::1;::::0;;10711:122::o;13925:149::-;8926:10;8916:21;;;;:9;:21;;;;;;;;8908:58;;;;;-1:-1:-1;;;8908:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8908:58:0;;;;;;;;;;;;;;;14024:42:::1;14043:10;14055;14024:18;:42::i;10582:121::-:0;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10664:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:31;;-1:-1:-1;;10664:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10582:121::o;8002:32::-;;;;:::o;7566:27::-;;;-1:-1:-1;;;;;7566:27:0;;:::o;10455:119::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10536:18:0;;;::::1;;::::0;;;:8:::1;:18;::::0;;;;:30;;-1:-1:-1;;10536:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10455:119::o;7453:25::-;;;-1:-1:-1;;;7453:25:0;;;;;:::o;7806:31::-;;;;:::o;10841:213::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;7434:10:::1;10927:14;:36;;10919:86;;;;-1:-1:-1::0;;;10919:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11016:13;:30:::0;10841:213::o;8624:32::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8624:32:0;:::o;8387:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8387:23:0;;-1:-1:-1;8387:23:0;:::o;8094:42::-;;;;;;;;;;;;;;;:::o;7640:37::-;;;;:::o;7602:29::-;;;-1:-1:-1;;;;;7602:29:0;;:::o;7389:55::-;7434:10;7389:55;:::o;7485:35::-;;;-1:-1:-1;;;7485:35:0;;;;;:::o;14929:310::-;8806:10;8797:20;;;;:8;:20;;;;;;;;8789:57;;;;;-1:-1:-1;;;8789:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8789:57:0;;;;;;;;;;;;;;;15017:10:::1;14995:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;14987:76;;;::::0;;-1:-1:-1;;;14987:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15096:10;15110:5;15074:33:::0;;;:21:::1;:33;::::0;;;;:41;;-1:-1:-1;;15074:41:0::1;::::0;;15154:25:::1;::::0;:32:::1;::::0;15074:41;15154:29:::1;:32::i;:::-;15126:25;:60:::0;15204:27:::1;::::0;;15220:10:::1;15204:27:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;14929:310::o:0;7955:38::-;;;;:::o;11327:128::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11411:16:::1;:36:::0;11327:128::o;12308:522::-;8926:10;8916:21;;;;:9;:21;;;;;;;;8908:58;;;;;-1:-1:-1;;;8908:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8908:58:0;;;;;;;;;;;;;;;12431:17:::1;12451:33;12473:10;12451:21;:33::i;:::-;12431:53;;12501:12;12497:326;;;12557:15;::::0;-1:-1:-1;;;;;12557:15:0::1;12530:24;12589:223;12613:7;:14;12609:1;:18;12589:223;;;12653:13;12669:7;12677:1;12669:10;;;;;;;;;;;;;;12653:26;;12714:7;12722:1;12714:10;;;;;;;;;;;;;;12698:6;:13;12705:5;-1:-1:-1::0;;;;;12698:13:0::1;-1:-1:-1::0;;;;;12698:13:0::1;;;;;;;;;;;;:26;;;;12743:53;12759:16;12777:5;12785:7;12793:1;12785:10;;;;;;;;;;;;;;12743:15;:53::i;:::-;-1:-1:-1::0;12629:3:0::1;;12589:223;;;;12497:326;;8977:1;12308:522:::0;;;:::o;10335:112::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;10411:12:::1;:28:::0;;-1:-1:-1;;;;;;10411:28:0::1;-1:-1:-1::0;;;;;10411:28:0;;;::::1;::::0;;;::::1;::::0;;10335:112::o;8196:41::-;;;;;;;;;;;;;;;:::o;9740:587::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;9878:13:::1;::::0;-1:-1:-1;;;9878:13:0;::::1;;;9877:14;9869:61;;;;-1:-1:-1::0;;;9869:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9941:13;:20:::0;;-1:-1:-1;;;;9941:20:0::1;-1:-1:-1::0;;;9941:20:0::1;::::0;;9974:17:::1;:38:::0;;;10025:139:::1;10049:8;:15;10045:1;:19;10025:139;;;10086:14;10103:8;10112:1;10103:11;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;10129:16:0::1;;::::0;;;:8:::1;:16:::0;;;;;;:23;;-1:-1:-1;;10129:23:0::1;10148:4;10129:23:::0;;::::1;::::0;;;10066:3;;;::::1;::::0;-1:-1:-1;10025:139:0::1;;;;10181:9;10176:144;10200:9;:16;10196:1;:20;10176:144;;;10238:15;10256:9;10266:1;10256:12;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;10283:18:0::1;;::::0;;;:9:::1;:18:::0;;;;;;:25;;-1:-1:-1;;10283:25:0::1;10304:4;10283:25:::0;;::::1;::::0;;;10218:3;;;::::1;::::0;-1:-1:-1;10176:144:0::1;;15247:1775:::0;15348:7;15390:32;15408:13;;15390;;:17;;:32;;;;:::i;:::-;15372:15;:50;15368:77;;;-1:-1:-1;15433:9:0;15426:16;;15368:77;-1:-1:-1;;;;;15477:14:0;;15457:17;15477:14;;;:6;:14;;;;;;15506;15502:41;;15531:9;15524:16;;;;;15502:41;15555:16;15574:90;7375:5;15574:64;15588:49;15613:23;;7375:5;15588:24;;:49;;;;:::i;:::-;15574:9;;:13;:64::i;:90::-;15555:109;;15675:16;15694:90;7375:5;15694:64;15708:49;15733:23;;7375:5;15708:24;;:49;;;;:::i;:::-;15694:9;;:13;:64::i;:90::-;15675:109;;15801:16;:14;:16::i;:::-;15797:931;;;15851:8;15838:9;:21;;:46;;;;;15876:8;15863:9;:21;;15838:46;15834:883;;;15909:9;15905:426;;;15959:9;15947;:21;15943:330;;;15997:16;16016:81;7375:5;16016:55;16030:40;16055:14;;7375:5;16030:24;;:40;;;;:::i;:::-;16016:9;;:13;:55::i;:81::-;15997:100;;16217:9;16206:8;:20;:43;;16241:8;16206:43;;;16229:9;16206:43;16199:50;;;;;;;;15943:330;16302:9;16295:16;;;;;;;15905:426;16367:9;16355;:21;16351:314;;;16401:16;16420:81;7375:5;16420:55;16434:40;16459:14;;7375:5;16434:24;;:40;;;;:::i;16420:81::-;16401:100;;16613:9;16602:8;:20;:43;;16637:8;16602:43;;15834:883;16744:9;16740:154;;;16786:9;16774;:21;16770:48;;;16806:9;16799:16;;;;;;;16770:48;16851:8;16839:9;:20;:43;;16873:9;16839:43;;;16862:8;16839:43;16832:50;;;;;;;16740:154;16922:9;16910;:21;16906:48;;;16942:9;16935:16;;;;;;;16906:48;16983:8;16971:9;:20;:43;;17005:9;16971:43;;;16994:8;16971:43;16964:50;;;;;15247:1775;;;;;;:::o;11715:156::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11813:23:::1;:50:::0;11715:156::o;7083:50::-;-1:-1:-1;;;7083:50:0;:::o;11587:120::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11667:14:::1;:32:::0;11587:120::o;8041:44::-;;;;:::o;7768:31::-;;;;:::o;17030:258::-;17077:4;17098:15;;-1:-1:-1;;;17098:15:0;;;;17094:60;;;-1:-1:-1;17137:5:0;17130:12;;17094:60;17199:17;;17170:25;;:46;17166:91;;-1:-1:-1;17240:5:0;17233:12;;17166:91;-1:-1:-1;17276:4:0;17030:258;;:::o;12028:272::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;12162:16:::1;:23;12144:7;:14;:41;12136:84;;;::::0;;-1:-1:-1;;;12136:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12231:16:::0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12258:34:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;14611:310::-:0;8806:10;8797:20;;;;:8;:20;;;;;;;;8789:57;;;;;-1:-1:-1;;;8789:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8789:57:0;;;;;;;;;;;;;;;14701:10:::1;14679:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;14678:34;14670:75;;;::::0;;-1:-1:-1;;;14670:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14670:75:0;;;;;;;;;;;;;::::1;;14778:10;14756:33;::::0;;;:21:::1;:33;::::0;;;;:40;;-1:-1:-1;;14756:40:0::1;14792:4;14756:40:::0;;::::1;::::0;;;14835:25:::1;::::0;:32:::1;::::0;:29:::1;:32::i;:::-;14807:25;:60:::0;14885:28:::1;::::0;;14902:10:::1;14885:28:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;14611:310::o:0;11198:121::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11277:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;11277:34:0::1;-1:-1:-1::0;;;;11277:34:0;;::::1;::::0;;;::::1;::::0;;11198:121::o;6799:76::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;6857:3:::1;:10:::0;;-1:-1:-1;;;;;;6857:10:0::1;-1:-1:-1::0;;;;;6857:10:0;;;::::1;::::0;;;::::1;::::0;;6799:76::o;8145:42::-;;;;;;;;;;;;;:::o;11062:128::-;6742:3;;-1:-1:-1;;;;;6742:3:0;6728:10;:17;6720:51;;;;;-1:-1:-1;;;6720:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6720:51:0;;;;;;;;;;;;;;;11146:16:::1;:36:::0;11062:128::o;11879:141::-;9055:12;;-1:-1:-1;;;;;9055:12:0;9041:10;:26;9033:63;;;;;-1:-1:-1;;;9033:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9033:63:0;;;;;;;;;;;;;;;11974:17:::1;:38:::0;11879:141::o;7254:65::-;7294:25;7254:65;:::o;7684:40::-;;;;:::o;18414:777::-;18503:16;;18482:4;;18503:20;18499:166;;18586:16;;18565;;18548:34;;:12;;:16;:34::i;:::-;:54;;18540:113;;;;-1:-1:-1;;;18540:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18718:16;;18698:37;;:15;;:19;:37::i;:::-;18685:10;:50;18677:108;;;;-1:-1:-1;;;18677:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18837:16;;18817:37;;:15;;:19;:37::i;:::-;18804:10;:50;18796:110;;;;-1:-1:-1;;;18796:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19025:13;;19012:10;:26;19008:71;;;-1:-1:-1;19062:5:0;19055:12;;19008:71;-1:-1:-1;19091:13:0;:26;;;19147:12;19128:16;:31;19179:4;18414:777;;;;:::o;2369:471::-;2427:7;2672:6;2668:47;;-1:-1:-1;2702:1:0;2695:8;;2668:47;2739:5;;;2743:1;2739;:5;:1;2763:5;;;;;:10;2755:56;;;;-1:-1:-1;;;2755:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2831:1;-1:-1:-1;2369:471:0;;;;;:::o;3316:132::-;3374:7;3401:39;3405:1;3408;3401:39;;;;;;;;;;;;;-1:-1:-1;;;3401:39:0;;;:3;:39::i;18150:256::-;-1:-1:-1;;;;;18256:30:0;;18252:69;;18303:7;;18252:69;18350:16;-1:-1:-1;;;;;18333:49:0;;18383:6;18391;18333:65;;;;;;;;;;;;;-1:-1:-1;;;;;18333:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18150:256;;;:::o;17296:846::-;17383:17;17403:33;17425:10;17403:21;:33::i;:::-;17383:53;;17453:12;17449:686;;;17509:15;;-1:-1:-1;;;;;17509:15:0;17482:24;17541:583;17565:1;17561;:5;17541:583;;;17641:6;:13;17608:1;;17632:22;;17628:39;;17658:7;;;;;;17628:39;17824:6;:9;;17706:2;:6;;;17748:22;;;7294:25;17747:40;;17687:16;;17824:6;17711:1;;17824:9;;;;;;;;;;;;;;;17877:15;:18;;-1:-1:-1;;;;;17824:9:0;;;;-1:-1:-1;17877:15:0;17893:1;;17877:18;;;;;;;;;;;;;;;;-1:-1:-1;17938:46:0;17877:18;17938:26;:5;-1:-1:-1;;;17938:9:0;:26::i;:46::-;-1:-1:-1;;;;;18003:13:0;;;;;;:6;:13;;;;;:29;;;17914:70;-1:-1:-1;18053:55:0;18069:16;18010:5;17914:70;18053:15;:55::i;:::-;-1:-1:-1;;17568:3:0;;;;;-1:-1:-1;17541:583:0;;-1:-1:-1;;;17541:583:0;1479:136;1537:7;1564:43;1568:1;1571;1564:43;;;;;;;;;;;;;;;;;:3;:43::i;1015:181::-;1073:7;1105:5;;;1129:6;;;;1121:46;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;;;3944:278;4030:7;4065:12;4058:5;4050:28;;;;-1:-1:-1;;;4050:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:9;4105:1;4101;:5;;;;;;;3944:278;-1:-1:-1;;;;;3944:278:0:o;1918:192::-;2004:7;2040:12;2032:6;;;;2024:29;;;;-1:-1:-1;;;2024:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2076:5:0;;;1918:192::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://d8de10e4e5e8633d06e2468d8ecd2688b7a4c4b4bba4ac3e145ba7c1b3585ad2
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.