Contract 0x7d9d108445f7e59a67da7c16a2ceb08c85b76a35

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd2ec1e707489616e348181a2ff7aa44e26a5b070866897bd01ca81b0c6c2e6fcSet Prices With ...166070342022-06-28 0:53:2613 secs ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.053757825 55
0x0fa55a0e1531d013d6c5c58aee1987d3abe83784b6d3c0f0c2861a2a7ba63567Set Prices With ...166070252022-06-28 0:53:0930 secs ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.053624285 55
0xdb17c515dca52d3abf29113641c738d795b6d33956ab94b9325106569907873eSet Prices With ...166070252022-06-28 0:53:0930 secs ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x8d11723e5af2587400cffffaec75e45fd166c9014f58b253a390a93958d79cefSet Prices With ...166070112022-06-28 0:52:4158 secs ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.038014075 55
0xd7f6a3dbc4f95b38e4fbc422d3392ea396c9874f431da7a89994f89cbe1a0429Set Prices With ...166069912022-06-28 0:52:021 min ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.03853564 55
0xf82b271b807b444e14d9d89f489371e737d542c7c25f1b8cd0a9bd88beb90750Set Prices With ...166069662022-06-28 0:51:122 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.042437505 55
0xe7d7e06c77594d1ac80de90a9d3609c88ee2a1ef6279f3614c878706bd7a8d68Set Prices With ...166069352022-06-28 0:50:103 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xad4a2281e0e42820c3f49bf249cfd80ffdfa43e3700667e8443be709770b59e4Set Prices With ...166069022022-06-28 0:49:034 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00470437 55
0xa012bcfa5d1d74d9ccab2f160142d85ba6cf59ffa49a4e88730f6ad05738600dSet Prices With ...166068992022-06-28 0:48:564 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xb78c65bdc0a50e83c0810591f1082c45d4f866a34246e44e44ab0555e394c1f4Set Prices With ...166068742022-06-28 0:48:065 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.042129505 55
0x56d4fb21029a6f205659acea180cdc17b6e9cd5e41f98e7ca34b560475a9c5c1Set Prices With ...166068682022-06-28 0:47:545 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.03597 55
0xf1b94955fab222ca21d580493bc61b3f03158973fa177f1db74bc3fe17433f64Set Prices With ...166068092022-06-28 0:45:577 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00455037 55
0x98119f229c6288ac831833e158faf805de1d8bbda729aa980af7e5f696379a90Set Prices With ...166068072022-06-28 0:45:537 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x4009f3449e557c59de5a1b8bed50443cdc7e23c8c579edb089f00b3b5e30e460Set Prices With ...166067982022-06-28 0:45:358 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xe021fec335412a1b46faa14f1d478a9e8cf75ed36387e22349eb9e54f5835d3eSet Prices With ...166067472022-06-28 0:43:529 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.05337112 55
0x56a1bb5c7816114f1c2fce59f87aa323cb70a43f0ad546fbb52e8f9620d2d9e9Set Prices With ...166067262022-06-28 0:43:1210 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x61c6430e38960f7162a4a1242bc09ac212966fbe6ff7e182a670a8016e50eb89Set Prices With ...166067162022-06-28 0:42:5510 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.03522684 55
0x2c824fec3d2acd9688d7dae6df94b84c3b4df8b1095693d0202ac094e6401a74Set Prices With ...166067092022-06-28 0:42:4210 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.03702666 55
0x13e0bf16b129c837e3bc0c5dbbe2b3e9051abbc7ae38ccc1a2874cec4e490375Set Prices With ...166066932022-06-28 0:42:0411 mins ago0x864db9152169d68299b599331c6bfc77e3f91070 IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.035868745 55
0x577a5b881194d0daf92ac95cbab94e101de2cf3c4d257ee76d6be5992b56dc7cSet Prices With ...166066922022-06-28 0:42:0311 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xe148dd1340f66be9895ed6f98b2aa3c14e6882deaa47600a36be73a4028f2df8Set Prices With ...166066742022-06-28 0:41:2412 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xee1de412246dffaef2577ee14d19576f8a148e02b25d3d0801b9e7527b1e11f6Set Prices With ...166066602022-06-28 0:41:0012 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0x17f8495f5f25d41d93647312d498e3d408ce295ab486b278b16e595957e815c7Set Prices With ...166066562022-06-28 0:40:5312 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xe0bb921481f55fb2a11b4a41a735d6f80817e38878986eccbac0b632018f4a8fSet Prices With ...166066542022-06-28 0:40:4612 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 55
0xa17df53725dbce5d016662f6ad65808d6f5ef96203d5ad5176c65b08084bd30eSet Prices With ...166066522022-06-28 0:40:4412 mins ago0x89a072f18c7d0bdf568e93553b715bbf5205690e IN  0x7d9d108445f7e59a67da7c16a2ceb08c85b76a350 AVAX0.00485837 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.