ETH Price: $2,028.10 (-1.24%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Sell Tokens244226522026-02-09 23:59:4717 days ago1770681587IN
0xaE76E83E...9D827631F
0 ETH0.00013721
Withdraw ETH244051232026-02-07 13:04:2319 days ago1770469463IN
0xaE76E83E...9D827631F
0 ETH0.000073832.10921267
Sell Tokens243950462026-02-06 3:17:1120 days ago1770347831IN
0xaE76E83E...9D827631F
0 ETH0.000366122.46603547
Buy Tokens243729392026-02-03 1:05:4724 days ago1770080747IN
0xaE76E83E...9D827631F
0.00166666 ETH0.000158771
Sell Tokens243729172026-02-03 1:01:2324 days ago1770080483IN
0xaE76E83E...9D827631F
0 ETH0.00013791
Buy Tokens243728952026-02-03 0:56:5924 days ago1770080219IN
0xaE76E83E...9D827631F
0.00166666 ETH0.000158771
Buy Tokens243728722026-02-03 0:52:2324 days ago1770079943IN
0xaE76E83E...9D827631F
0.00166666 ETH0.000158771
Sell Tokens243728462026-02-03 0:47:1124 days ago1770079631IN
0xaE76E83E...9D827631F
0 ETH0.00013791
Buy Tokens243728252026-02-03 0:42:4724 days ago1770079367IN
0xaE76E83E...9D827631F
0.00166666 ETH0.000158771
Sell Tokens243727952026-02-03 0:36:3524 days ago1770078995IN
0xaE76E83E...9D827631F
0 ETH0.00013791
Buy Tokens243727812026-02-03 0:33:4724 days ago1770078827IN
0xaE76E83E...9D827631F
0.00333333 ETH0.000158771
Sell Tokens243727602026-02-03 0:29:3524 days ago1770078575IN
0xaE76E83E...9D827631F
0 ETH0.00013791
Buy Tokens243727452026-02-03 0:26:3524 days ago1770078395IN
0xaE76E83E...9D827631F
0.00333333 ETH0.000141671
Withdraw ETH243727362026-02-03 0:24:4724 days ago1770078287IN
0xaE76E83E...9D827631F
0 ETH0.000074192.12087655
Buy Tokens243727282026-02-03 0:22:5924 days ago1770078179IN
0xaE76E83E...9D827631F
0.00333333 ETH0.000141671
Sell Tokens243727112026-02-03 0:19:3524 days ago1770077975IN
0xaE76E83E...9D827631F
0 ETH0.000297022.0815904
Sell Tokens243726942026-02-03 0:16:1124 days ago1770077771IN
0xaE76E83E...9D827631F
0 ETH0.000297912.08766734
Buy Tokens243726632026-02-03 0:09:5924 days ago1770077399IN
0xaE76E83E...9D827631F
0.00194387 ETH0.000141671
Buy Tokens243726132026-02-02 23:59:5924 days ago1770076799IN
0xaE76E83E...9D827631F
0.01666666 ETH0.000158771
Sell Tokens243726052026-02-02 23:58:2324 days ago1770076703IN
0xaE76E83E...9D827631F
0 ETH0.000141011
Buy Tokens243725972026-02-02 23:56:4724 days ago1770076607IN
0xaE76E83E...9D827631F
0.01435842 ETH0.000141671
Buy Tokens243725822026-02-02 23:53:4724 days ago1770076427IN
0xaE76E83E...9D827631F
0.01586616 ETH0.000147891
Buy Tokens243450902026-01-30 3:47:5927 days ago1769744879IN
0xaE76E83E...9D827631F
0.00617666 ETH0.000158771
Sell Tokens243450862026-01-30 3:47:1127 days ago1769744831IN
0xaE76E83E...9D827631F
0 ETH0.00013791
Buy Tokens243450792026-01-30 3:45:4727 days ago1769744747IN
0xaE76E83E...9D827631F
0.00758604 ETH0.000158771
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer244051232026-02-07 13:04:2319 days ago1770469463
0xaE76E83E...9D827631F
0.13478572 ETH
Transfer243950462026-02-06 3:17:1120 days ago1770347831
0xaE76E83E...9D827631F
0.02112737 ETH
Transfer243729172026-02-03 1:01:2324 days ago1770080483
0xaE76E83E...9D827631F
0.00165211 ETH
Transfer243728462026-02-03 0:47:1124 days ago1770079631
0xaE76E83E...9D827631F
0.00166101 ETH
Transfer243727952026-02-03 0:36:3524 days ago1770078995
0xaE76E83E...9D827631F
0.00233416 ETH
Transfer243727602026-02-03 0:29:3524 days ago1770078575
0xaE76E83E...9D827631F
0.00399898 ETH
Transfer243727362026-02-03 0:24:4724 days ago1770078287
0xaE76E83E...9D827631F
0.04279074 ETH
Transfer243727112026-02-03 0:19:3524 days ago1770077975
0xaE76E83E...9D827631F
0.00005247 ETH
Transfer243726942026-02-03 0:16:1124 days ago1770077771
0xaE76E83E...9D827631F
0.01290352 ETH
Transfer243726052026-02-02 23:58:2324 days ago1770076703
0xaE76E83E...9D827631F
0.01798913 ETH
Transfer243450862026-01-30 3:47:1127 days ago1769744831
0xaE76E83E...9D827631F
0.00593068 ETH
Transfer243450692026-01-30 3:43:4727 days ago1769744627
0xaE76E83E...9D827631F
0.00720661 ETH
Transfer243448502026-01-30 2:59:3527 days ago1769741975
0xaE76E83E...9D827631F
0.00328215 ETH
Transfer243448342026-01-30 2:56:2327 days ago1769741783
0xaE76E83E...9D827631F
0.0032694 ETH
Transfer243448192026-01-30 2:53:2327 days ago1769741603
0xaE76E83E...9D827631F
0.0057096 ETH
Transfer243448082026-01-30 2:51:1127 days ago1769741471
0xaE76E83E...9D827631F
0.00639605 ETH
Transfer243447922026-01-30 2:47:5927 days ago1769741279
0xaE76E83E...9D827631F
0.00773617 ETH
Transfer243424422026-01-29 18:55:5928 days ago1769712959
0xaE76E83E...9D827631F
0.00328451 ETH
Transfer243417152026-01-29 16:30:1128 days ago1769704211
0xaE76E83E...9D827631F
0.00327021 ETH
Transfer243376502026-01-29 2:53:5928 days ago1769655239
0xaE76E83E...9D827631F
0.00326754 ETH
Transfer243366922026-01-28 23:41:1129 days ago1769643671
0xaE76E83E...9D827631F
0.00329452 ETH
Transfer243366772026-01-28 23:38:1129 days ago1769643491
0xaE76E83E...9D827631F
0.00328851 ETH
Transfer243365872026-01-28 23:20:1129 days ago1769642411
0xaE76E83E...9D827631F
0.00326159 ETH
Transfer243365352026-01-28 23:09:4729 days ago1769641787
0xaE76E83E...9D827631F
0.00328372 ETH
Transfer243359402026-01-28 21:10:1129 days ago1769634611
0xaE76E83E...9D827631F
0.0033054 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
CMTDE_V3_TradingModule

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2026-01-03
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

/**
 * ═══════════════════════════════════════════════════════════════════════════
 * CMTDE V3 TRADING MODULE - BUY/SELL & ORACLE INTEGRATION
 * ═══════════════════════════════════════════════════════════════════════════
 * 
 * @title CMTDE_V3_TradingModule
 * @dev Handles token purchases, sales, and gold price oracle integration
 * @notice Deploy with: (CMTDE_V3 address, ConfigRegistry address, XAU/USD Feed, Backup XAU Feed, ETH/USD Feed)
 * 
 * Changes to this module require 24-hour timelock via CMTDE_V3.
 * 
 * MAINNET CHAINLINK ORACLES:
 * - XAU/USD (Gold):  0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
 * - ETH/USD:         0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
 * 
 * PRICING MODEL:
 * - 100 CMTDE tokens = 1 oz of gold (XAU)
 * - 1 CMTDE token = goldPrice / 100 (e.g., $4,313.49 / 100 = $43.13)
 * - ETH/USD oracle converts user's ETH to USD value for calculations
 * ═══════════════════════════════════════════════════════════════════════════
 */

interface AggregatorV3Interface {
    function decimals() external view returns (uint8);
    function latestRoundData() external view returns (
        uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound
    );
}

interface ICMTDE_V3_ConfigRegistry {
    function minGoldPrice() external view returns (uint256);
    function maxGoldPrice() external view returns (uint256);
    function priceStalenessThreshold() external view returns (uint256);
    function priceMarkup() external view returns (uint256);
    function priceDiscount() external view returns (uint256);
    function maxMintPerTx() external view returns (uint256);
    function maxDailyMint() external view returns (uint256);
    function maxPurchasePerTx() external view returns (uint256);
    function maxDailyPurchase() external view returns (uint256);
    function minPurchaseETH() external view returns (uint256);
    function maxPurchaseETH() external view returns (uint256);
    function maxSellPerTx() external view returns (uint256);
    function maxDailySell() external view returns (uint256);
    function minSellTokens() external view returns (uint256);
    function minContractBalance() external view returns (uint256);
    function purchaseEnabled() external view returns (bool);
    function sellEnabled() external view returns (bool);
    function manualPriceEnabled() external view returns (bool);
    function emergencyFallbackEnabled() external view returns (bool);
}

interface ICMTDE_V3 {
    function mint(address to, uint256 amount) external;
    function moduleBurn(address account, uint256 amount) external;
    function balanceOf(address account) external view returns (uint256);
}

contract CMTDE_V3_TradingModule {
    
    // ═══════════════════════════════════════════════════════════════════
    //                         STATE VARIABLES
    // ═══════════════════════════════════════════════════════════════════
    
    address public owner;
    address public pendingOwner;
    address public coreToken;
    address public configRegistry;
    
    AggregatorV3Interface public goldPriceFeed;
    AggregatorV3Interface public backupPriceFeed;
    AggregatorV3Interface public ethUsdPriceFeed;
    
    uint256 public manualGoldPrice;
    uint256 public manualPriceTimestamp;
    uint256 public emergencyFallbackPrice;
    
    // Daily limits tracking
    uint256 public dailyPurchaseAmount;
    uint256 public lastPurchaseResetTime;
    uint256 public dailySellAmount;
    uint256 public lastSellResetTime;
    
    uint256 private constant MANUAL_PRICE_VALIDITY = 86400; // 24 hours
    
    bool private _locked;

    // ═══════════════════════════════════════════════════════════════════
    //                           EVENTS
    // ═══════════════════════════════════════════════════════════════════

    event TokensPurchased(address indexed buyer, uint256 ethAmount, uint256 tokenAmount, uint256 tokenPrice);
    event TokensSold(address indexed seller, uint256 tokenAmount, uint256 ethAmount, uint256 tokenPrice);
    event LiquidityAdded(address indexed provider, uint256 amount);
    event LiquidityWithdrawn(address indexed provider, uint256 amount);
    event ManualPriceSet(uint256 price, uint256 timestamp);
    event EmergencyFallbackSet(uint256 price);
    event OracleUpdated(string indexed oracleType, address oldAddress, address newAddress);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    // ═══════════════════════════════════════════════════════════════════
    //                          MODIFIERS
    // ═══════════════════════════════════════════════════════════════════

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    modifier nonReentrant() {
        require(!_locked, "Reentrant call");
        _locked = true;
        _;
        _locked = false;
    }

    // ═══════════════════════════════════════════════════════════════════
    //                         CONSTRUCTOR
    // ═══════════════════════════════════════════════════════════════════

    constructor(
        address _coreToken,
        address _configRegistry,
        address _goldPriceFeed,
        address _backupPriceFeed,
        address _ethUsdPriceFeed
    ) {
        require(_coreToken != address(0), "Zero token");
        require(_configRegistry != address(0), "Zero config");
        require(_goldPriceFeed != address(0), "Zero gold feed");
        require(_ethUsdPriceFeed != address(0), "Zero ETH feed");
        
        owner = msg.sender;
        coreToken = _coreToken;
        configRegistry = _configRegistry;
        goldPriceFeed = AggregatorV3Interface(_goldPriceFeed);
        backupPriceFeed = AggregatorV3Interface(_backupPriceFeed);
        ethUsdPriceFeed = AggregatorV3Interface(_ethUsdPriceFeed);
        
        lastPurchaseResetTime = block.timestamp;
        lastSellResetTime = block.timestamp;
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      PRICE ORACLE
    // ═══════════════════════════════════════════════════════════════════

    function getLatestGoldPrice() public view returns (uint256) {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        // Check manual price first
        if (config.manualPriceEnabled() && manualGoldPrice > 0) {
            require(block.timestamp - manualPriceTimestamp <= MANUAL_PRICE_VALIDITY, "Manual price stale");
            return manualGoldPrice;
        }
        
        return _getValidatedPrice(goldPriceFeed, config);
    }

    function _getValidatedPrice(AggregatorV3Interface priceFeed, ICMTDE_V3_ConfigRegistry config) internal view returns (uint256) {
        (
            uint80 roundId,
            int256 price,
            ,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        
        require(timeStamp > 0, "Invalid timestamp");
        require(answeredInRound >= roundId, "Stale round");
        require(block.timestamp - timeStamp <= config.priceStalenessThreshold(), "Oracle stale");
        require(price > 0, "Invalid price");
        
        uint256 uPrice = uint256(price);
        require(uPrice >= config.minGoldPrice(), "Price below minimum");
        require(uPrice <= config.maxGoldPrice(), "Price above maximum");
        
        return uPrice;
    }

    function getGoldPriceWithFallback() public view returns (uint256) {
        try this.getLatestGoldPrice() returns (uint256 price) {
            return price;
        } catch {
            // Try backup feed
            ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
            try this._tryBackupFeed() returns (uint256 backupPrice) {
                return backupPrice;
            } catch {
                // Emergency fallback
                require(config.emergencyFallbackEnabled(), "No fallback enabled");
                require(emergencyFallbackPrice > 0, "No fallback price");
                return emergencyFallbackPrice;
            }
        }
    }

    function _tryBackupFeed() external view returns (uint256) {
        return _getValidatedPrice(backupPriceFeed, ICMTDE_V3_ConfigRegistry(configRegistry));
    }

    /**
     * @dev Get current ETH/USD price from Chainlink
     * @return ETH price in USD (8 decimals)
     */
    function getEthUsdPrice() public view returns (uint256) {
        (
            uint80 roundId,
            int256 price,
            ,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = ethUsdPriceFeed.latestRoundData();
        
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        require(timeStamp > 0, "ETH: Invalid timestamp");
        require(answeredInRound >= roundId, "ETH: Stale round");
        require(block.timestamp - timeStamp <= config.priceStalenessThreshold(), "ETH: Oracle stale");
        require(price > 0, "ETH: Invalid price");
        
        uint256 uPrice = uint256(price);
        // Sanity bounds for ETH: $100 - $100,000
        require(uPrice >= 100 * 10**8, "ETH: Price too low");
        require(uPrice <= 100000 * 10**8, "ETH: Price too high");
        
        return uPrice;
    }

    /**
     * @dev Convert ETH amount (wei) to USD value (8 decimals)
     * @param ethAmount Amount of ETH in wei
     * @return USD value with 8 decimals
     */
    function ethToUsd(uint256 ethAmount) public view returns (uint256) {
        uint256 ethPrice = getEthUsdPrice(); // 8 decimals
        // ethAmount (18 decimals) * ethPrice (8 decimals) / 1e18 = USD (8 decimals)
        return (ethAmount * ethPrice) / 1e18;
    }

    /**
     * @dev Convert USD amount (8 decimals) to ETH value (wei)
     * @param usdAmount Amount of USD with 8 decimals
     * @return ETH value in wei (18 decimals)
     */
    function usdToEth(uint256 usdAmount) public view returns (uint256) {
        uint256 ethPrice = getEthUsdPrice(); // 8 decimals
        // usdAmount (8 decimals) * 1e18 / ethPrice (8 decimals) = ETH (18 decimals)
        return (usdAmount * 1e18) / ethPrice;
    }

    /**
     * @dev Get current token value based on gold price
     * @return Price per 1 token (8 decimals)
     * @notice 100 tokens = 1 oz gold, so 1 token = goldPrice / 100
     */
    function getCurrentTokenValue() public view returns (uint256) {
        uint256 goldPrice = getGoldPriceWithFallback();
        return (goldPrice + 50) / 100; // Price per 1 token, rounded
    }

    /**
     * @dev Get token purchase price with markup
     * @return Price per 1 token (8 decimals)
     */
    function getTokenPurchasePrice() public view returns (uint256) {
        uint256 basePrice = getCurrentTokenValue();
        uint256 markup = ICMTDE_V3_ConfigRegistry(configRegistry).priceMarkup();
        return (basePrice * markup) / 100;
    }

    /**
     * @dev Get token sell price with discount
     * @return Price per 1 token (8 decimals)
     */
    function getTokenSellPrice() public view returns (uint256) {
        uint256 basePrice = getCurrentTokenValue();
        uint256 discount = ICMTDE_V3_ConfigRegistry(configRegistry).priceDiscount();
        return (basePrice * discount) / 100;
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      BUY/SELL FUNCTIONS
    // ═══════════════════════════════════════════════════════════════════

    /**
     * @dev Buy tokens with ETH
     * @notice Converts ETH to USD value, then calculates tokens based on gold price
     * 
     * Formula: 
     * 1. usdValue = ETH amount × ETH/USD price
     * 2. tokens = usdValue / tokenPrice
     */
    function buyTokens() external payable nonReentrant {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        require(config.purchaseEnabled(), "Purchases disabled");
        require(msg.value >= config.minPurchaseETH(), "Below min ETH");
        require(msg.value <= config.maxPurchaseETH(), "Above max ETH");
        
        // Reset daily counter if needed
        if (block.timestamp - lastPurchaseResetTime >= 86400) {
            dailyPurchaseAmount = 0;
            lastPurchaseResetTime = block.timestamp;
        }
        
        // Convert ETH to USD value (8 decimals)
        uint256 usdValue = ethToUsd(msg.value);
        
        // Get token price with markup (8 decimals, price per 1 token)
        uint256 tokenPrice = getTokenPurchasePrice();
        
        // Calculate tokens: (usdValue * 1e18) / tokenPrice
        // usdValue (8 dec) * 1e18 / tokenPrice (8 dec) = tokens (18 dec)
        uint256 tokensAmount = (usdValue * 1e18) / tokenPrice;
        
        require(tokensAmount > 0, "Zero tokens");
        require(tokensAmount <= config.maxPurchasePerTx(), "Exceeds tx limit");
        require(dailyPurchaseAmount + tokensAmount <= config.maxDailyPurchase(), "Exceeds daily limit");
        
        dailyPurchaseAmount += tokensAmount;
        ICMTDE_V3(coreToken).mint(msg.sender, tokensAmount);
        
        emit TokensPurchased(msg.sender, msg.value, tokensAmount, tokenPrice);
    }

    /**
     * @dev Sell tokens for ETH
     * @param tokenAmount Number of tokens to sell (18 decimals)
     * @notice Converts token value to USD, then to ETH
     * 
     * Formula:
     * 1. usdValue = tokens × tokenPrice
     * 2. ethAmount = usdValue / ETH price
     */
    function sellTokens(uint256 tokenAmount) external nonReentrant {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        require(config.sellEnabled(), "Sales disabled");
        require(tokenAmount >= config.minSellTokens(), "Below min tokens");
        require(tokenAmount <= config.maxSellPerTx(), "Above max tokens");
        require(ICMTDE_V3(coreToken).balanceOf(msg.sender) >= tokenAmount, "Insufficient balance");
        
        // Reset daily counter if needed
        if (block.timestamp - lastSellResetTime >= 86400) {
            dailySellAmount = 0;
            lastSellResetTime = block.timestamp;
        }
        require(dailySellAmount + tokenAmount <= config.maxDailySell(), "Exceeds daily limit");
        
        // Get token price with discount (8 decimals, price per 1 token)
        uint256 tokenPrice = getTokenSellPrice();
        
        // Calculate USD value of tokens: (tokenAmount * tokenPrice) / 1e18
        // tokenAmount (18 dec) * tokenPrice (8 dec) / 1e18 = usdValue (8 dec)
        uint256 usdValue = (tokenAmount * tokenPrice) / 1e18;
        
        // Convert USD value to ETH
        uint256 ethAmount = usdToEth(usdValue);
        
        require(address(this).balance >= ethAmount + config.minContractBalance(), "Insufficient liquidity");
        
        dailySellAmount += tokenAmount;
        ICMTDE_V3(coreToken).moduleBurn(msg.sender, tokenAmount);
        
        (bool success, ) = payable(msg.sender).call{value: ethAmount}("");
        require(success, "ETH transfer failed");
        
        emit TokensSold(msg.sender, tokenAmount, ethAmount, tokenPrice);
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      PEG STATUS & ARBITRAGE
    // ═══════════════════════════════════════════════════════════════════

    /**
     * @dev Get comprehensive peg status
     */
    function getPegStatus() external view returns (
        uint256 oracleGoldPrice,
        uint256 contractBuyPrice,
        uint256 contractSellPrice,
        uint256 spreadBps,
        uint256 ethLiquidity,
        bool canAcceptSells,
        uint256 maxBuyableTokens
    ) {
        oracleGoldPrice = getGoldPriceWithFallback();
        contractBuyPrice = getTokenPurchasePrice();
        contractSellPrice = getTokenSellPrice();
        
        if (contractBuyPrice > 0) {
            spreadBps = ((contractBuyPrice - contractSellPrice) * 10000) / contractBuyPrice;
        }
        
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        ethLiquidity = address(this).balance;
        uint256 minBalance = config.minContractBalance();
        canAcceptSells = ethLiquidity > minBalance;
        
        if (canAcceptSells && contractSellPrice > 0) {
            // Convert available ETH to USD, then calculate max tokens
            uint256 availableUsd = ethToUsd(ethLiquidity - minBalance);
            maxBuyableTokens = (availableUsd * 1e18) / contractSellPrice;
        }
    }

    /**
     * @dev Calculate arbitrage opportunity
     * @param dexPrice Current DEX price (8 decimals, per 1 token in USD)
     */
    function calculateArbitrageOpportunity(uint256 dexPrice) external view returns (
        uint8 arbDirection,
        uint256 profitBps,
        uint256 optimalAmount,
        string memory arbDescription
    ) {
        uint256 contractBuyPrice = getTokenPurchasePrice();
        uint256 contractSellPrice = getTokenSellPrice();
        
        if (dexPrice == 0 || contractBuyPrice == 0 || contractSellPrice == 0) {
            return (0, 0, 0, "Invalid prices");
        }
        
        // Buy on DEX, sell to contract
        if (dexPrice < contractSellPrice) {
            profitBps = ((contractSellPrice - dexPrice) * 10000) / dexPrice;
            
            ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
            uint256 availableETH = address(this).balance;
            uint256 minBalance = config.minContractBalance();
            
            if (availableETH > minBalance) {
                // Convert available ETH to USD, then calculate max tokens
                uint256 availableUsd = ethToUsd(availableETH - minBalance);
                uint256 maxSellable = (availableUsd * 1e18) / contractSellPrice;
                uint256 dailyLimit = config.maxSellPerTx();
                optimalAmount = maxSellable < dailyLimit ? maxSellable : dailyLimit;
            }
            
            return (1, profitBps, optimalAmount, "Buy on DEX, sell to contract");
        }
        
        // Buy from contract, sell on DEX
        if (dexPrice > contractBuyPrice) {
            profitBps = ((dexPrice - contractBuyPrice) * 10000) / contractBuyPrice;
            optimalAmount = ICMTDE_V3_ConfigRegistry(configRegistry).maxPurchasePerTx();
            return (2, profitBps, optimalAmount, "Buy from contract, sell on DEX");
        }
        
        return (0, 0, 0, "No profitable arbitrage");
    }

    /**
     * @dev Check if DEX price is within tolerance of oracle price
     */
    function checkPegHealth(uint256 dexPrice, uint256 toleranceBps) external view returns (
        bool isPegged,
        uint256 deviationBps,
        uint8 deviationDirection
    ) {
        uint256 oraclePrice = getCurrentTokenValue();
        
        if (dexPrice == 0 || oraclePrice == 0) {
            return (false, 10000, 0);
        }
        
        if (dexPrice >= oraclePrice) {
            deviationBps = ((dexPrice - oraclePrice) * 10000) / oraclePrice;
            deviationDirection = 2; // DEX above oracle
        } else {
            deviationBps = ((oraclePrice - dexPrice) * 10000) / oraclePrice;
            deviationDirection = 1; // DEX below oracle
        }
        
        isPegged = deviationBps <= toleranceBps;
    }

    /**
     * @dev Simulate a buy to preview results
     */
    function simulateBuy(uint256 ethAmount) external view returns (
        uint256 tokensOut,
        uint256 effectivePrice,
        bool withinLimits
    ) {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        if (ethAmount < config.minPurchaseETH() || ethAmount > config.maxPurchaseETH()) {
            return (0, 0, false);
        }
        
        // Convert ETH to USD
        uint256 usdValue = ethToUsd(ethAmount);
        
        effectivePrice = getTokenPurchasePrice(); // Price per 1 token (8 decimals)
        tokensOut = (usdValue * 1e18) / effectivePrice;
        
        uint256 remainingDaily = config.maxDailyPurchase() - dailyPurchaseAmount;
        withinLimits = tokensOut <= config.maxPurchasePerTx() && tokensOut <= remainingDaily;
    }

    /**
     * @dev Simulate a sell to preview results
     */
    function simulateSell(uint256 tokenAmount) external view returns (
        uint256 ethOut,
        uint256 effectivePrice,
        bool withinLimits
    ) {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        
        if (tokenAmount < config.minSellTokens() || tokenAmount > config.maxSellPerTx()) {
            return (0, 0, false);
        }
        
        effectivePrice = getTokenSellPrice(); // Price per 1 token (8 decimals)
        
        // Calculate USD value then convert to ETH
        uint256 usdValue = (tokenAmount * effectivePrice) / 1e18;
        ethOut = usdToEth(usdValue);
        
        uint256 remainingDaily = config.maxDailySell() - dailySellAmount;
        bool withinDailyLimit = tokenAmount <= remainingDaily;
        bool hasLiquidity = address(this).balance >= ethOut + config.minContractBalance();
        
        withinLimits = withinDailyLimit && hasLiquidity;
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      LIQUIDITY MANAGEMENT
    // ═══════════════════════════════════════════════════════════════════

    function addLiquidity() external payable onlyOwner {
        require(msg.value > 0, "No ETH sent");
        emit LiquidityAdded(msg.sender, msg.value);
    }

    function withdrawETH(uint256 amount) external onlyOwner {
        require(amount <= address(this).balance, "Insufficient balance");
        (bool success, ) = payable(owner).call{value: amount}("");
        require(success, "ETH transfer failed");
        emit LiquidityWithdrawn(owner, amount);
    }

    function getETHBalance() external view returns (uint256) {
        return address(this).balance;
    }

    receive() external payable {
        require(msg.sender == owner, "Only owner can send ETH directly");
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      ORACLE MANAGEMENT
    // ═══════════════════════════════════════════════════════════════════

    function setManualGoldPrice(uint256 price) external onlyOwner {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        require(price >= config.minGoldPrice(), "Price below minimum");
        require(price <= config.maxGoldPrice(), "Price above maximum");
        
        manualGoldPrice = price;
        manualPriceTimestamp = block.timestamp;
        emit ManualPriceSet(price, block.timestamp);
    }

    function clearManualPrice() external onlyOwner {
        manualGoldPrice = 0;
        manualPriceTimestamp = 0;
    }

    function setEmergencyFallbackPrice(uint256 price) external onlyOwner {
        ICMTDE_V3_ConfigRegistry config = ICMTDE_V3_ConfigRegistry(configRegistry);
        require(price >= config.minGoldPrice(), "Price below minimum");
        require(price <= config.maxGoldPrice(), "Price above maximum");
        
        emergencyFallbackPrice = price;
        emit EmergencyFallbackSet(price);
    }

    function setPrimaryOracle(address _oracle) external onlyOwner {
        require(_oracle != address(0), "Zero address");
        address old = address(goldPriceFeed);
        goldPriceFeed = AggregatorV3Interface(_oracle);
        emit OracleUpdated("Primary", old, _oracle);
    }

    function setBackupOracle(address _oracle) external onlyOwner {
        address old = address(backupPriceFeed);
        backupPriceFeed = AggregatorV3Interface(_oracle);
        emit OracleUpdated("Backup", old, _oracle);
    }

    function setEthUsdOracle(address _oracle) external onlyOwner {
        require(_oracle != address(0), "Zero address");
        address old = address(ethUsdPriceFeed);
        ethUsdPriceFeed = AggregatorV3Interface(_oracle);
        emit OracleUpdated("ETH/USD", old, _oracle);
    }

    // ═══════════════════════════════════════════════════════════════════
    //                      OWNERSHIP (2-step)
    // ═══════════════════════════════════════════════════════════════════

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Zero address");
        pendingOwner = newOwner;
    }

    function acceptOwnership() external {
        require(msg.sender == pendingOwner, "Not pending owner");
        address oldOwner = owner;
        owner = pendingOwner;
        pendingOwner = address(0);
        emit OwnershipTransferred(oldOwner, owner);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_coreToken","type":"address"},{"internalType":"address","name":"_configRegistry","type":"address"},{"internalType":"address","name":"_goldPriceFeed","type":"address"},{"internalType":"address","name":"_backupPriceFeed","type":"address"},{"internalType":"address","name":"_ethUsdPriceFeed","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EmergencyFallbackSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ManualPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oracleType","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenPrice","type":"uint256"}],"name":"TokensSold","type":"event"},{"inputs":[],"name":"_tryBackupFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"backupPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dexPrice","type":"uint256"}],"name":"calculateArbitrageOpportunity","outputs":[{"internalType":"uint8","name":"arbDirection","type":"uint8"},{"internalType":"uint256","name":"profitBps","type":"uint256"},{"internalType":"uint256","name":"optimalAmount","type":"uint256"},{"internalType":"string","name":"arbDescription","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dexPrice","type":"uint256"},{"internalType":"uint256","name":"toleranceBps","type":"uint256"}],"name":"checkPegHealth","outputs":[{"internalType":"bool","name":"isPegged","type":"bool"},{"internalType":"uint256","name":"deviationBps","type":"uint256"},{"internalType":"uint8","name":"deviationDirection","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearManualPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coreToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailySellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyFallbackPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"ethToUsd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethUsdPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGoldPriceWithFallback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestGoldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegStatus","outputs":[{"internalType":"uint256","name":"oracleGoldPrice","type":"uint256"},{"internalType":"uint256","name":"contractBuyPrice","type":"uint256"},{"internalType":"uint256","name":"contractSellPrice","type":"uint256"},{"internalType":"uint256","name":"spreadBps","type":"uint256"},{"internalType":"uint256","name":"ethLiquidity","type":"uint256"},{"internalType":"bool","name":"canAcceptSells","type":"bool"},{"internalType":"uint256","name":"maxBuyableTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenPurchasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldPriceFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPurchaseResetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSellResetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGoldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualPriceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setBackupOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setEmergencyFallbackPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setEthUsdOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setManualGoldPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setPrimaryOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"simulateBuy","outputs":[{"internalType":"uint256","name":"tokensOut","type":"uint256"},{"internalType":"uint256","name":"effectivePrice","type":"uint256"},{"internalType":"bool","name":"withinLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"simulateSell","outputs":[{"internalType":"uint256","name":"ethOut","type":"uint256"},{"internalType":"uint256","name":"effectivePrice","type":"uint256"},{"internalType":"bool","name":"withinLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"usdToEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b506040516200324c3803806200324c8339810160408190526200003391620001e4565b6001600160a01b0385166200007c5760405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b60448201526064015b60405180910390fd5b6001600160a01b038416620000c25760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20636f6e66696760a81b604482015260640162000073565b6001600160a01b0383166200010b5760405162461bcd60e51b815260206004820152600e60248201526d16995c9bc819dbdb19081999595960921b604482015260640162000073565b6001600160a01b038116620001535760405162461bcd60e51b815260206004820152600d60248201526c16995c9bc81155120819995959609a1b604482015260640162000073565b5f8054336001600160a01b0319918216179091556002805482166001600160a01b03978816179055600380548216958716959095179094556004805485169386169390931790925560058054841691851691909117905560068054909216921691909117905542600b819055600d5562000250565b80516001600160a01b0381168114620001df575f80fd5b919050565b5f805f805f60a08688031215620001f9575f80fd5b6200020486620001c8565b94506200021460208701620001c8565b93506200022460408701620001c8565b92506200023460608701620001c8565b91506200024460808701620001c8565b90509295509295909350565b612fee806200025e5f395ff3fe608060405260043610610241575f3560e01c806398b9a0f511610134578063da69d189116100b3578063e8078d9411610078578063e8078d94146106b7578063f14210a6146106bf578063f2188066146106de578063f2fde38b146106fd578063f79f6b591461071c578063fcd872cf1461074b575f80fd5b8063da69d18914610606578063ddca8e7c1461061a578063e1027bec14610665578063e30c397814610679578063e6b349b314610698575f80fd5b8063c0129e9b116100f9578063c0129e9b146105a3578063c422f9d0146105b7578063c9b3e736146105d6578063c9ce9c69146105ea578063d0febe4c146105fe575f80fd5b806398b9a0f5146104f65780639d8bce5114610515578063a0a8045e14610551578063a3cf3d4e14610565578063bcecf66714610584575f80fd5b80635e2de42a116101c057806379ba50971161018557806379ba50971461047b5780637a1c22131461048f5780637a296fd2146104a45780638da5cb5b146104b9578063946d1480146104d7575f80fd5b80635e2de42a1461040c5780636085aec314610421578063677aa974146104355780636c11bcd31461044a5780636e94729814610469575f80fd5b80632f7e177e116102065780632f7e177e146103865780633072f1f91461039a5780633c26651a146103af57806342f6fb29146103ce578063479069c7146103ed575f80fd5b806301eb1e0a146102aa5780630c2b72e9146102d25780630e1ac56e14610309578063244bb309146103485780632549840114610367575f80fd5b366102a6575f546001600160a01b031633146102a45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e2073656e6420455448206469726563746c7960448201526064015b60405180910390fd5b005b5f80fd5b3480156102b5575f80fd5b506102bf60075481565b6040519081526020015b60405180910390f35b3480156102dd575f80fd5b506002546102f1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b348015610314575f80fd5b50610328610323366004612d4c565b610760565b604080519315158452602084019290925260ff16908201526060016102c9565b348015610353575f80fd5b506003546102f1906001600160a01b031681565b348015610372575f80fd5b506102a4610381366004612d6c565b6107f9565b348015610391575f80fd5b506102bf6108ab565b3480156103a5575f80fd5b506102bf600c5481565b3480156103ba575f80fd5b506102a46103c9366004612d92565b6109a4565b3480156103d9575f80fd5b506006546102f1906001600160a01b031681565b3480156103f8575f80fd5b506005546102f1906001600160a01b031681565b348015610417575f80fd5b506102bf600d5481565b34801561042c575f80fd5b506102a4610b15565b348015610440575f80fd5b506102bf60085481565b348015610455575f80fd5b506102a4610464366004612d92565b610b49565b348015610474575f80fd5b50476102bf565b348015610486575f80fd5b506102a4611147565b34801561049a575f80fd5b506102bf600b5481565b3480156104af575f80fd5b506102bf600a5481565b3480156104c4575f80fd5b505f546102f1906001600160a01b031681565b3480156104e2575f80fd5b506102bf6104f1366004612d92565b6111ee565b348015610501575f80fd5b506102a4610510366004612d92565b61121e565b348015610520575f80fd5b5061053461052f366004612d92565b611394565b6040805193845260208401929092521515908201526060016102c9565b34801561055c575f80fd5b506102bf6115c3565b348015610570575f80fd5b5061053461057f366004612d92565b611880565b34801561058f575f80fd5b506102bf61059e366004612d92565b611a99565b3480156105ae575f80fd5b506102bf611ab8565b3480156105c2575f80fd5b506004546102f1906001600160a01b031681565b3480156105e1575f80fd5b506102bf611adb565b3480156105f5575f80fd5b506102bf611b7b565b6102a4611d3f565b348015610611575f80fd5b506102bf61222c565b348015610625575f80fd5b5061062e61224f565b6040805197885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e0016102c9565b348015610670575f80fd5b506102bf612365565b348015610684575f80fd5b506001546102f1906001600160a01b031681565b3480156106a3575f80fd5b506102a46106b2366004612d6c565b6123c2565b6102a461244c565b3480156106ca575f80fd5b506102a46106d9366004612d92565b6124e9565b3480156106e9575f80fd5b506102a46106f8366004612d6c565b61262d565b348015610708575f80fd5b506102a4610717366004612d6c565b6126b7565b348015610727575f80fd5b5061073b610736366004612d92565b612728565b6040516102c99493929190612da9565b348015610756575f80fd5b506102bf60095481565b5f805f8061076c611ab8565b9050851580610779575080155b1561078f575f6127105f935093509350506107f2565b8086106107c257806107a18188612e21565b6107ad90612710612e34565b6107b79190612e4b565b9250600291506107ea565b806107cd8782612e21565b6107d990612710612e34565b6107e39190612e4b565b9250600191505b848311159350505b9250925092565b5f546001600160a01b031633146108225760405162461bcd60e51b815260040161029b90612e6a565b600580546001600160a01b038381166001600160a01b031983161790925560405191169061085c906504261636b75760d41b815260060190565b604080519182900382206001600160a01b03808516845285166020840152917f4c247df77fd31829837512d6c006db1212e42ae4ea8a129aec0b44c1019a23ad91015b60405180910390a25050565b60035460408051635fd2b6af60e01b815290515f926001600160a01b0316918291635fd2b6af916004808201926020929091908290030181865afa1580156108f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190612e8d565b801561092657505f600754115b1561098857620151806008544261093d9190612e21565b11156109805760405162461bcd60e51b81526020600482015260126024820152714d616e75616c207072696365207374616c6560701b604482015260640161029b565b505060075490565b60045461099e906001600160a01b031682612a58565b91505090565b5f546001600160a01b031633146109cd5760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015610a16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612eac565b821015610a595760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab99190612eac565b821115610ad85760405162461bcd60e51b815260040161029b90612ef0565b60098290556040518281527f67e14a6d7ceb1fe07cc9a741b4a87cf22d19a27f9e009ff5e7473b85bb13f262906020015b60405180910390a15050565b5f546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161029b90612e6a565b5f6007819055600855565b600e5460ff1615610b8d5760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff19166001179055600354604080516358197a9d60e01b815290516001600160a01b039092169182916358197a9d9160048083019260209291908290030181865afa158015610be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c079190612e8d565b610c445760405162461bcd60e51b815260206004820152600e60248201526d14d85b195cc8191a5cd8589b195960921b604482015260640161029b565b806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca49190612eac565b821015610ce65760405162461bcd60e51b815260206004820152601060248201526f42656c6f77206d696e20746f6b656e7360801b604482015260640161029b565b806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612eac565b821115610d885760405162461bcd60e51b815260206004820152601060248201526f41626f7665206d617820746f6b656e7360801b604482015260640161029b565b6002546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015610dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df29190612eac565b1015610e375760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b62015180600d5442610e499190612e21565b10610e57575f600c5542600d555b806001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb79190612eac565b82600c54610ec59190612f1d565b1115610f095760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b5f610f12611adb565b90505f670de0b6b3a7640000610f288386612e34565b610f329190612e4b565b90505f610f3e82611a99565b9050836001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190612eac565b610faa9082612f1d565b471015610ff25760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206c697175696469747960501b604482015260640161029b565b84600c5f8282546110039190612f1d565b90915550506002546040516348dcc70760e11b8152336004820152602481018790526001600160a01b03909116906391b98e0e906044015f604051808303815f87803b158015611051575f80fd5b505af1158015611063573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146110a6576040519150601f19603f3d011682016040523d82523d5f602084013e6110ab565b606091505b50509050806110f25760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b604080518781526020810184905290810185905233907f6db63bebf1e6540277744df32846ebdb98385b1a73f2d5de49b28348add63f509060600160405180910390a25050600e805460ff1916905550505050565b6001546001600160a01b031633146111955760405162461bcd60e51b81526020600482015260116024820152702737ba103832b73234b7339037bbb732b960791b604482015260640161029b565b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f806111f86115c3565b9050670de0b6b3a764000061120d8285612e34565b6112179190612e4b565b9392505050565b5f546001600160a01b031633146112475760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015611290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b49190612eac565b8210156112d35760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113339190612eac565b8211156113525760405162461bcd60e51b815260040161029b90612ef0565b60078290554260088190556040805184815260208101929092527fb4e7056b10bc2d2d4fe5b2ff374b24edf94410f4620866b12b3bcf1765d918949101610b09565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140f9190612eac565b85108061147a5750806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611453573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114779190612eac565b85115b1561148e575f805f935093509350506115bc565b611496611adb565b92505f670de0b6b3a76400006114ac8588612e34565b6114b69190612e4b565b90506114c181611a99565b94505f600c54836001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190612eac565b6115319190612e21565b90505f8188111590505f846001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190612eac565b6115a59089612f1d565b47101590508180156115b45750805b955050505050505b9193909250565b5f805f805f60065f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611618573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163c9190612f46565b6003549498509296509450909250506001600160a01b03168261169a5760405162461bcd60e51b815260206004820152601660248201527504554483a20496e76616c69642074696d657374616d760541b604482015260640161029b565b846001600160501b0316826001600160501b031610156116ef5760405162461bcd60e51b815260206004820152601060248201526f1155120e8814dd185b19481c9bdd5b9960821b604482015260640161029b565b806001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174f9190612eac565b6117598442612e21565b111561179b5760405162461bcd60e51b81526020600482015260116024820152704554483a204f7261636c65207374616c6560781b604482015260640161029b565b5f84136117df5760405162461bcd60e51b81526020600482015260126024820152714554483a20496e76616c696420707269636560701b604482015260640161029b565b836402540be40081101561182a5760405162461bcd60e51b81526020600482015260126024820152714554483a20507269636520746f6f206c6f7760701b604482015260640161029b565b6509184e72a0008111156118765760405162461bcd60e51b815260206004820152601360248201527208aa8907440a0e4d2c6ca40e8dede40d0d2ced606b1b604482015260640161029b565b9695505050505050565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fb9190612eac565b8510806119665750806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190612eac565b85115b1561197a575f805f935093509350506115bc565b5f611984866111ee565b905061198e612365565b9350836119a382670de0b6b3a7640000612e34565b6119ad9190612e4b565b94505f600a54836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a139190612eac565b611a1d9190612e21565b9050826001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7f9190612eac565b8611158015611a8e5750808611155b959794965050505050565b5f80611aa36115c3565b90508061120d84670de0b6b3a7640000612e34565b5f80611ac2611b7b565b90506064611ad1826032612f1d565b61099e9190612e4b565b5f80611ae5611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663aa8930d26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5c9190612eac565b90506064611b6a8284612e34565b611b749190612e4b565b9250505090565b5f306001600160a01b0316632f7e177e6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bd6575060408051601f3d908101601f19168201909252611bd391810190612eac565b60015b611d3a576003546040805163da69d18960e01b815290516001600160a01b0390921691309163da69d1899160048083019260209291908290030181865afa925050508015611c41575060408051601f3d908101601f19168201909252611c3e91810190612eac565b60015b611d3457806001600160a01b031663248276696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca59190612e8d565b611ce75760405162461bcd60e51b8152602060048201526013602482015272139bc819985b1b189858dac8195b98589b1959606a1b604482015260640161029b565b5f60095411611d2c5760405162461bcd60e51b81526020600482015260116024820152704e6f2066616c6c6261636b20707269636560781b604482015260640161029b565b505060095490565b92915050565b919050565b600e5460ff1615611d835760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff191660011790556003546040805163a162f01960e01b815290516001600160a01b0390921691829163a162f0199160048083019260209291908290030181865afa158015611dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfd9190612e8d565b611e3e5760405162461bcd60e51b8152602060048201526012602482015271141d5c98da185cd95cc8191a5cd8589b195960721b604482015260640161029b565b806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e9190612eac565b341015611edd5760405162461bcd60e51b815260206004820152600d60248201526c084cad8deee40dad2dc408aa89609b1b604482015260640161029b565b806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3d9190612eac565b341115611f7c5760405162461bcd60e51b815260206004820152600d60248201526c082c4deecca40dac2f0408aa89609b1b604482015260640161029b565b62015180600b5442611f8e9190612e21565b10611f9c575f600a5542600b555b5f611fa6346111ee565b90505f611fb1612365565b90505f81611fc784670de0b6b3a7640000612e34565b611fd19190612e4b565b90505f81116120105760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20746f6b656e7360a81b604482015260640161029b565b836001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120709190612eac565b8111156120b25760405162461bcd60e51b815260206004820152601060248201526f115e18d959591cc81d1e081b1a5b5a5d60821b604482015260640161029b565b836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121129190612eac565b81600a546121209190612f1d565b11156121645760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b80600a5f8282546121759190612f1d565b90915550506002546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156121c3575f80fd5b505af11580156121d5573d5f803e3d5ffd5b505060408051348152602081018590529081018590523392507f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f1915060600160405180910390a25050600e805460ff191690555050565b6005546003545f9161224a916001600160a01b039182169116612a58565b905090565b5f805f805f805f61225e611b7b565b9650612268612365565b9550612272611adb565b9450851561229e57856122858682612e21565b61229190612710612e34565b61229b9190612e4b565b93505b60035460408051631a75515560e21b815290514795506001600160a01b03909216915f9183916369d54554916004808201926020929091908290030181865afa1580156122ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123119190612eac565b9050808511935083801561232457505f87115b1561235a575f6123376104f18388612e21565b90508761234c82670de0b6b3a7640000612e34565b6123569190612e4b565b9350505b505090919293949596565b5f8061236f611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b0316633e04619d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b5f546001600160a01b031633146123eb5760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166124115760405162461bcd60e51b815260040161029b90612f92565b600680546001600160a01b038381166001600160a01b031983161790925560405191169061085c90661155120bd554d160ca1b815260070190565b5f546001600160a01b031633146124755760405162461bcd60e51b815260040161029b90612e6a565b5f34116124b25760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015260640161029b565b60405134815233907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb3120889060200160405180910390a2565b5f546001600160a01b031633146125125760405162461bcd60e51b815260040161029b90612e6a565b478111156125595760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146125a3576040519150601f19603f3d011682016040523d82523d5f602084013e6125a8565b606091505b50509050806125ef5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b5f546040518381526001600160a01b03909116907fb1cce8684b4ffa8667b4577654e61ee3480d661ee9c27522ac80e211f6bd4d259060200161089f565b5f546001600160a01b031633146126565760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b03811661267c5760405162461bcd60e51b815260040161029b90612f92565b600480546001600160a01b038381166001600160a01b031983161790925560405191169061085c90665072696d61727960c81b815260070190565b5f546001600160a01b031633146126e05760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166127065760405162461bcd60e51b815260040161029b90612f92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f805f60605f612736612365565b90505f612741611adb565b905086158061274e575081155b80612757575080155b15612795575f805f6040518060400160405280600e81526020016d496e76616c69642070726963657360901b81525095509550955095505050612a51565b8087101561292957866127a88183612e21565b6127b490612710612e34565b6127be9190612e4b565b60035460408051631a75515560e21b815290519297506001600160a01b039091169147915f9184916369d545549160048083019260209291908290030181865afa15801561280e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128329190612eac565b9050808211156128e4575f61284a6104f18385612e21565b90505f8561286083670de0b6b3a7640000612e34565b61286a9190612e4b565b90505f856001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cd9190612eac565b90508082106128dc57806128de565b815b99505050505b505060408051808201909152601c81527f427579206f6e204445582c2073656c6c20746f20636f6e7472616374000000006020820152600197509350612a5192505050565b81871115612a0d578161293c8189612e21565b61294890612710612e34565b6129529190612e4b565b945060035f9054906101000a90046001600160a01b03166001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c89190612eac565b60408051808201909152601e81527f4275792066726f6d20636f6e74726163742c2073656c6c206f6e2044455800006020820152600297509094509250612a51915050565b5f805f6040518060400160405280601781526020017f4e6f2070726f66697461626c6520617262697472616765000000000000000000815250955095509550955050505b9193509193565b5f805f805f866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612a99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abd9190612f46565b9450945050935093505f8211612b095760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b604482015260640161029b565b836001600160501b0316816001600160501b03161015612b595760405162461bcd60e51b815260206004820152600b60248201526a14dd185b19481c9bdd5b9960aa1b604482015260640161029b565b856001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb99190612eac565b612bc38342612e21565b1115612c005760405162461bcd60e51b815260206004820152600c60248201526b4f7261636c65207374616c6560a01b604482015260640161029b565b5f8313612c3f5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015260640161029b565b5f839050866001600160a01b031663d197ae186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca39190612eac565b811015612cc25760405162461bcd60e51b815260040161029b90612ec3565b866001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d229190612eac565b811115612d415760405162461bcd60e51b815260040161029b90612ef0565b979650505050505050565b5f8060408385031215612d5d575f80fd5b50508035926020909101359150565b5f60208284031215612d7c575f80fd5b81356001600160a01b0381168114611217575f80fd5b5f60208284031215612da2575f80fd5b5035919050565b60ff851681525f602085818401528460408401526080606084015283518060808501525f5b81811015612dea5785810183015185820160a001528201612dce565b505f60a0828601015260a0601f19601f8301168501019250505095945050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611d3457611d34612e0d565b8082028115828204841417611d3457611d34612e0d565b5f82612e6557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b5f60208284031215612e9d575f80fd5b81518015158114611217575f80fd5b5f60208284031215612ebc575f80fd5b5051919050565b60208082526013908201527250726963652062656c6f77206d696e696d756d60681b604082015260600190565b60208082526013908201527250726963652061626f7665206d6178696d756d60681b604082015260600190565b80820180821115611d3457611d34612e0d565b80516001600160501b0381168114611d3a575f80fd5b5f805f805f60a08688031215612f5a575f80fd5b612f6386612f30565b9450602086015193506040860151925060608601519150612f8660808701612f30565b90509295509295909350565b6020808252600c908201526b5a65726f206164647265737360a01b60408201526060019056fea264697066735822122079aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace751733364736f6c63430008150033000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d60000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419

Deployed Bytecode

0x608060405260043610610241575f3560e01c806398b9a0f511610134578063da69d189116100b3578063e8078d9411610078578063e8078d94146106b7578063f14210a6146106bf578063f2188066146106de578063f2fde38b146106fd578063f79f6b591461071c578063fcd872cf1461074b575f80fd5b8063da69d18914610606578063ddca8e7c1461061a578063e1027bec14610665578063e30c397814610679578063e6b349b314610698575f80fd5b8063c0129e9b116100f9578063c0129e9b146105a3578063c422f9d0146105b7578063c9b3e736146105d6578063c9ce9c69146105ea578063d0febe4c146105fe575f80fd5b806398b9a0f5146104f65780639d8bce5114610515578063a0a8045e14610551578063a3cf3d4e14610565578063bcecf66714610584575f80fd5b80635e2de42a116101c057806379ba50971161018557806379ba50971461047b5780637a1c22131461048f5780637a296fd2146104a45780638da5cb5b146104b9578063946d1480146104d7575f80fd5b80635e2de42a1461040c5780636085aec314610421578063677aa974146104355780636c11bcd31461044a5780636e94729814610469575f80fd5b80632f7e177e116102065780632f7e177e146103865780633072f1f91461039a5780633c26651a146103af57806342f6fb29146103ce578063479069c7146103ed575f80fd5b806301eb1e0a146102aa5780630c2b72e9146102d25780630e1ac56e14610309578063244bb309146103485780632549840114610367575f80fd5b366102a6575f546001600160a01b031633146102a45760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206f776e65722063616e2073656e6420455448206469726563746c7960448201526064015b60405180910390fd5b005b5f80fd5b3480156102b5575f80fd5b506102bf60075481565b6040519081526020015b60405180910390f35b3480156102dd575f80fd5b506002546102f1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c9565b348015610314575f80fd5b50610328610323366004612d4c565b610760565b604080519315158452602084019290925260ff16908201526060016102c9565b348015610353575f80fd5b506003546102f1906001600160a01b031681565b348015610372575f80fd5b506102a4610381366004612d6c565b6107f9565b348015610391575f80fd5b506102bf6108ab565b3480156103a5575f80fd5b506102bf600c5481565b3480156103ba575f80fd5b506102a46103c9366004612d92565b6109a4565b3480156103d9575f80fd5b506006546102f1906001600160a01b031681565b3480156103f8575f80fd5b506005546102f1906001600160a01b031681565b348015610417575f80fd5b506102bf600d5481565b34801561042c575f80fd5b506102a4610b15565b348015610440575f80fd5b506102bf60085481565b348015610455575f80fd5b506102a4610464366004612d92565b610b49565b348015610474575f80fd5b50476102bf565b348015610486575f80fd5b506102a4611147565b34801561049a575f80fd5b506102bf600b5481565b3480156104af575f80fd5b506102bf600a5481565b3480156104c4575f80fd5b505f546102f1906001600160a01b031681565b3480156104e2575f80fd5b506102bf6104f1366004612d92565b6111ee565b348015610501575f80fd5b506102a4610510366004612d92565b61121e565b348015610520575f80fd5b5061053461052f366004612d92565b611394565b6040805193845260208401929092521515908201526060016102c9565b34801561055c575f80fd5b506102bf6115c3565b348015610570575f80fd5b5061053461057f366004612d92565b611880565b34801561058f575f80fd5b506102bf61059e366004612d92565b611a99565b3480156105ae575f80fd5b506102bf611ab8565b3480156105c2575f80fd5b506004546102f1906001600160a01b031681565b3480156105e1575f80fd5b506102bf611adb565b3480156105f5575f80fd5b506102bf611b7b565b6102a4611d3f565b348015610611575f80fd5b506102bf61222c565b348015610625575f80fd5b5061062e61224f565b6040805197885260208801969096529486019390935260608501919091526080840152151560a083015260c082015260e0016102c9565b348015610670575f80fd5b506102bf612365565b348015610684575f80fd5b506001546102f1906001600160a01b031681565b3480156106a3575f80fd5b506102a46106b2366004612d6c565b6123c2565b6102a461244c565b3480156106ca575f80fd5b506102a46106d9366004612d92565b6124e9565b3480156106e9575f80fd5b506102a46106f8366004612d6c565b61262d565b348015610708575f80fd5b506102a4610717366004612d6c565b6126b7565b348015610727575f80fd5b5061073b610736366004612d92565b612728565b6040516102c99493929190612da9565b348015610756575f80fd5b506102bf60095481565b5f805f8061076c611ab8565b9050851580610779575080155b1561078f575f6127105f935093509350506107f2565b8086106107c257806107a18188612e21565b6107ad90612710612e34565b6107b79190612e4b565b9250600291506107ea565b806107cd8782612e21565b6107d990612710612e34565b6107e39190612e4b565b9250600191505b848311159350505b9250925092565b5f546001600160a01b031633146108225760405162461bcd60e51b815260040161029b90612e6a565b600580546001600160a01b038381166001600160a01b031983161790925560405191169061085c906504261636b75760d41b815260060190565b604080519182900382206001600160a01b03808516845285166020840152917f4c247df77fd31829837512d6c006db1212e42ae4ea8a129aec0b44c1019a23ad91015b60405180910390a25050565b60035460408051635fd2b6af60e01b815290515f926001600160a01b0316918291635fd2b6af916004808201926020929091908290030181865afa1580156108f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109199190612e8d565b801561092657505f600754115b1561098857620151806008544261093d9190612e21565b11156109805760405162461bcd60e51b81526020600482015260126024820152714d616e75616c207072696365207374616c6560701b604482015260640161029b565b505060075490565b60045461099e906001600160a01b031682612a58565b91505090565b5f546001600160a01b031633146109cd5760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015610a16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612eac565b821015610a595760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab99190612eac565b821115610ad85760405162461bcd60e51b815260040161029b90612ef0565b60098290556040518281527f67e14a6d7ceb1fe07cc9a741b4a87cf22d19a27f9e009ff5e7473b85bb13f262906020015b60405180910390a15050565b5f546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161029b90612e6a565b5f6007819055600855565b600e5460ff1615610b8d5760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff19166001179055600354604080516358197a9d60e01b815290516001600160a01b039092169182916358197a9d9160048083019260209291908290030181865afa158015610be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c079190612e8d565b610c445760405162461bcd60e51b815260206004820152600e60248201526d14d85b195cc8191a5cd8589b195960921b604482015260640161029b565b806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca49190612eac565b821015610ce65760405162461bcd60e51b815260206004820152601060248201526f42656c6f77206d696e20746f6b656e7360801b604482015260640161029b565b806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d469190612eac565b821115610d885760405162461bcd60e51b815260206004820152601060248201526f41626f7665206d617820746f6b656e7360801b604482015260640161029b565b6002546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015610dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df29190612eac565b1015610e375760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b62015180600d5442610e499190612e21565b10610e57575f600c5542600d555b806001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb79190612eac565b82600c54610ec59190612f1d565b1115610f095760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b5f610f12611adb565b90505f670de0b6b3a7640000610f288386612e34565b610f329190612e4b565b90505f610f3e82611a99565b9050836001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa09190612eac565b610faa9082612f1d565b471015610ff25760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206c697175696469747960501b604482015260640161029b565b84600c5f8282546110039190612f1d565b90915550506002546040516348dcc70760e11b8152336004820152602481018790526001600160a01b03909116906391b98e0e906044015f604051808303815f87803b158015611051575f80fd5b505af1158015611063573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146110a6576040519150601f19603f3d011682016040523d82523d5f602084013e6110ab565b606091505b50509050806110f25760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b604080518781526020810184905290810185905233907f6db63bebf1e6540277744df32846ebdb98385b1a73f2d5de49b28348add63f509060600160405180910390a25050600e805460ff1916905550505050565b6001546001600160a01b031633146111955760405162461bcd60e51b81526020600482015260116024820152702737ba103832b73234b7339037bbb732b960791b604482015260640161029b565b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f806111f86115c3565b9050670de0b6b3a764000061120d8285612e34565b6112179190612e4b565b9392505050565b5f546001600160a01b031633146112475760405162461bcd60e51b815260040161029b90612e6a565b60035460408051631a32f5c360e31b815290516001600160a01b0390921691829163d197ae189160048083019260209291908290030181865afa158015611290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b49190612eac565b8210156112d35760405162461bcd60e51b815260040161029b90612ec3565b806001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113339190612eac565b8211156113525760405162461bcd60e51b815260040161029b90612ef0565b60078290554260088190556040805184815260208101929092527fb4e7056b10bc2d2d4fe5b2ff374b24edf94410f4620866b12b3bcf1765d918949101610b09565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b0316634ec06fc16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140f9190612eac565b85108061147a5750806001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611453573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114779190612eac565b85115b1561148e575f805f935093509350506115bc565b611496611adb565b92505f670de0b6b3a76400006114ac8588612e34565b6114b69190612e4b565b90506114c181611a99565b94505f600c54836001600160a01b0316633de13f2c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190612eac565b6115319190612e21565b90505f8188111590505f846001600160a01b03166369d545546040518163ffffffff1660e01b8152600401602060405180830381865afa158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190612eac565b6115a59089612f1d565b47101590508180156115b45750805b955050505050505b9193909250565b5f805f805f60065f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611618573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163c9190612f46565b6003549498509296509450909250506001600160a01b03168261169a5760405162461bcd60e51b815260206004820152601660248201527504554483a20496e76616c69642074696d657374616d760541b604482015260640161029b565b846001600160501b0316826001600160501b031610156116ef5760405162461bcd60e51b815260206004820152601060248201526f1155120e8814dd185b19481c9bdd5b9960821b604482015260640161029b565b806001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174f9190612eac565b6117598442612e21565b111561179b5760405162461bcd60e51b81526020600482015260116024820152704554483a204f7261636c65207374616c6560781b604482015260640161029b565b5f84136117df5760405162461bcd60e51b81526020600482015260126024820152714554483a20496e76616c696420707269636560701b604482015260640161029b565b836402540be40081101561182a5760405162461bcd60e51b81526020600482015260126024820152714554483a20507269636520746f6f206c6f7760701b604482015260640161029b565b6509184e72a0008111156118765760405162461bcd60e51b815260206004820152601360248201527208aa8907440a0e4d2c6ca40e8dede40d0d2ced606b1b604482015260640161029b565b9695505050505050565b5f805f8060035f9054906101000a90046001600160a01b03169050806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118fb9190612eac565b8510806119665750806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119639190612eac565b85115b1561197a575f805f935093509350506115bc565b5f611984866111ee565b905061198e612365565b9350836119a382670de0b6b3a7640000612e34565b6119ad9190612e4b565b94505f600a54836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a139190612eac565b611a1d9190612e21565b9050826001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7f9190612eac565b8611158015611a8e5750808611155b959794965050505050565b5f80611aa36115c3565b90508061120d84670de0b6b3a7640000612e34565b5f80611ac2611b7b565b90506064611ad1826032612f1d565b61099e9190612e4b565b5f80611ae5611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663aa8930d26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5c9190612eac565b90506064611b6a8284612e34565b611b749190612e4b565b9250505090565b5f306001600160a01b0316632f7e177e6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bd6575060408051601f3d908101601f19168201909252611bd391810190612eac565b60015b611d3a576003546040805163da69d18960e01b815290516001600160a01b0390921691309163da69d1899160048083019260209291908290030181865afa925050508015611c41575060408051601f3d908101601f19168201909252611c3e91810190612eac565b60015b611d3457806001600160a01b031663248276696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca59190612e8d565b611ce75760405162461bcd60e51b8152602060048201526013602482015272139bc819985b1b189858dac8195b98589b1959606a1b604482015260640161029b565b5f60095411611d2c5760405162461bcd60e51b81526020600482015260116024820152704e6f2066616c6c6261636b20707269636560781b604482015260640161029b565b505060095490565b92915050565b919050565b600e5460ff1615611d835760405162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015260640161029b565b600e805460ff191660011790556003546040805163a162f01960e01b815290516001600160a01b0390921691829163a162f0199160048083019260209291908290030181865afa158015611dd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfd9190612e8d565b611e3e5760405162461bcd60e51b8152602060048201526012602482015271141d5c98da185cd95cc8191a5cd8589b195960721b604482015260640161029b565b806001600160a01b031663f8c52f286040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9e9190612eac565b341015611edd5760405162461bcd60e51b815260206004820152600d60248201526c084cad8deee40dad2dc408aa89609b1b604482015260640161029b565b806001600160a01b0316635c433b086040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3d9190612eac565b341115611f7c5760405162461bcd60e51b815260206004820152600d60248201526c082c4deecca40dac2f0408aa89609b1b604482015260640161029b565b62015180600b5442611f8e9190612e21565b10611f9c575f600a5542600b555b5f611fa6346111ee565b90505f611fb1612365565b90505f81611fc784670de0b6b3a7640000612e34565b611fd19190612e4b565b90505f81116120105760405162461bcd60e51b815260206004820152600b60248201526a5a65726f20746f6b656e7360a81b604482015260640161029b565b836001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120709190612eac565b8111156120b25760405162461bcd60e51b815260206004820152601060248201526f115e18d959591cc81d1e081b1a5b5a5d60821b604482015260640161029b565b836001600160a01b0316636e93698b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121129190612eac565b81600a546121209190612f1d565b11156121645760405162461bcd60e51b8152602060048201526013602482015272115e18d959591cc819185a5b1e481b1a5b5a5d606a1b604482015260640161029b565b80600a5f8282546121759190612f1d565b90915550506002546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156121c3575f80fd5b505af11580156121d5573d5f803e3d5ffd5b505060408051348152602081018590529081018590523392507f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f1915060600160405180910390a25050600e805460ff191690555050565b6005546003545f9161224a916001600160a01b039182169116612a58565b905090565b5f805f805f805f61225e611b7b565b9650612268612365565b9550612272611adb565b9450851561229e57856122858682612e21565b61229190612710612e34565b61229b9190612e4b565b93505b60035460408051631a75515560e21b815290514795506001600160a01b03909216915f9183916369d54554916004808201926020929091908290030181865afa1580156122ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123119190612eac565b9050808511935083801561232457505f87115b1561235a575f6123376104f18388612e21565b90508761234c82670de0b6b3a7640000612e34565b6123569190612e4b565b9350505b505090919293949596565b5f8061236f611ab8565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b0316633e04619d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b38573d5f803e3d5ffd5b5f546001600160a01b031633146123eb5760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166124115760405162461bcd60e51b815260040161029b90612f92565b600680546001600160a01b038381166001600160a01b031983161790925560405191169061085c90661155120bd554d160ca1b815260070190565b5f546001600160a01b031633146124755760405162461bcd60e51b815260040161029b90612e6a565b5f34116124b25760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b604482015260640161029b565b60405134815233907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb3120889060200160405180910390a2565b5f546001600160a01b031633146125125760405162461bcd60e51b815260040161029b90612e6a565b478111156125595760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161029b565b5f80546040516001600160a01b039091169083908381818185875af1925050503d805f81146125a3576040519150601f19603f3d011682016040523d82523d5f602084013e6125a8565b606091505b50509050806125ef5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b604482015260640161029b565b5f546040518381526001600160a01b03909116907fb1cce8684b4ffa8667b4577654e61ee3480d661ee9c27522ac80e211f6bd4d259060200161089f565b5f546001600160a01b031633146126565760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b03811661267c5760405162461bcd60e51b815260040161029b90612f92565b600480546001600160a01b038381166001600160a01b031983161790925560405191169061085c90665072696d61727960c81b815260070190565b5f546001600160a01b031633146126e05760405162461bcd60e51b815260040161029b90612e6a565b6001600160a01b0381166127065760405162461bcd60e51b815260040161029b90612f92565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f805f60605f612736612365565b90505f612741611adb565b905086158061274e575081155b80612757575080155b15612795575f805f6040518060400160405280600e81526020016d496e76616c69642070726963657360901b81525095509550955095505050612a51565b8087101561292957866127a88183612e21565b6127b490612710612e34565b6127be9190612e4b565b60035460408051631a75515560e21b815290519297506001600160a01b039091169147915f9184916369d545549160048083019260209291908290030181865afa15801561280e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128329190612eac565b9050808211156128e4575f61284a6104f18385612e21565b90505f8561286083670de0b6b3a7640000612e34565b61286a9190612e4b565b90505f856001600160a01b0316634482b20b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cd9190612eac565b90508082106128dc57806128de565b815b99505050505b505060408051808201909152601c81527f427579206f6e204445582c2073656c6c20746f20636f6e7472616374000000006020820152600197509350612a5192505050565b81871115612a0d578161293c8189612e21565b61294890612710612e34565b6129529190612e4b565b945060035f9054906101000a90046001600160a01b03166001600160a01b031663879bdefd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c89190612eac565b60408051808201909152601e81527f4275792066726f6d20636f6e74726163742c2073656c6c206f6e2044455800006020820152600297509094509250612a51915050565b5f805f6040518060400160405280601781526020017f4e6f2070726f66697461626c6520617262697472616765000000000000000000815250955095509550955050505b9193509193565b5f805f805f866001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612a99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abd9190612f46565b9450945050935093505f8211612b095760405162461bcd60e51b81526020600482015260116024820152700496e76616c69642074696d657374616d7607c1b604482015260640161029b565b836001600160501b0316816001600160501b03161015612b595760405162461bcd60e51b815260206004820152600b60248201526a14dd185b19481c9bdd5b9960aa1b604482015260640161029b565b856001600160a01b031663bd1118706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb99190612eac565b612bc38342612e21565b1115612c005760405162461bcd60e51b815260206004820152600c60248201526b4f7261636c65207374616c6560a01b604482015260640161029b565b5f8313612c3f5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015260640161029b565b5f839050866001600160a01b031663d197ae186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ca39190612eac565b811015612cc25760405162461bcd60e51b815260040161029b90612ec3565b866001600160a01b031663d5527f846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cfe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d229190612eac565b811115612d415760405162461bcd60e51b815260040161029b90612ef0565b979650505050505050565b5f8060408385031215612d5d575f80fd5b50508035926020909101359150565b5f60208284031215612d7c575f80fd5b81356001600160a01b0381168114611217575f80fd5b5f60208284031215612da2575f80fd5b5035919050565b60ff851681525f602085818401528460408401526080606084015283518060808501525f5b81811015612dea5785810183015185820160a001528201612dce565b505f60a0828601015260a0601f19601f8301168501019250505095945050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611d3457611d34612e0d565b8082028115828204841417611d3457611d34612e0d565b5f82612e6557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b5f60208284031215612e9d575f80fd5b81518015158114611217575f80fd5b5f60208284031215612ebc575f80fd5b5051919050565b60208082526013908201527250726963652062656c6f77206d696e696d756d60681b604082015260600190565b60208082526013908201527250726963652061626f7665206d6178696d756d60681b604082015260600190565b80820180821115611d3457611d34612e0d565b80516001600160501b0381168114611d3a575f80fd5b5f805f805f60a08688031215612f5a575f80fd5b612f6386612f30565b9450602086015193506040860151925060608601519150612f8660808701612f30565b90509295509295909350565b6020808252600c908201526b5a65726f206164647265737360a01b60408201526060019056fea264697066735822122079aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace751733364736f6c63430008150033

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

000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d60000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419

-----Decoded View---------------
Arg [0] : _coreToken (address): 0xCd8eAbAc84eD4Bf824a414A04CC6bE7E3B0D140D
Arg [1] : _configRegistry (address): 0xB24adaAceBb8F84025a89816cE4784177610b288
Arg [2] : _goldPriceFeed (address): 0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
Arg [3] : _backupPriceFeed (address): 0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
Arg [4] : _ethUsdPriceFeed (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd8eabac84ed4bf824a414a04cc6be7e3b0d140d
Arg [1] : 000000000000000000000000b24adaacebb8f84025a89816ce4784177610b288
Arg [2] : 000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6
Arg [3] : 000000000000000000000000214ed9da11d2fbe465a6fc601a91e62ebec1a0d6
Arg [4] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419


Deployed Bytecode Sourcemap

3246:25345:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25332:5;;-1:-1:-1;;;;;25332:5:0;25318:10;:19;25310:64;;;;-1:-1:-1;;;25310:64:0;;216:2:1;25310:64:0;;;198:21:1;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;25310:64:0;;;;;;;;;3246:25345;;;;;4056:30;;;;;;;;;;;;;;;;;;;521:25:1;;;509:2;494:18;4056:30:0;;;;;;;;3826:24;;;;;;;;;;-1:-1:-1;3826:24:0;;;;-1:-1:-1;;;;;3826:24:0;;;;;;-1:-1:-1;;;;;721:32:1;;;703:51;;691:2;676:18;3826:24:0;557:203:1;21489:766:0;;;;;;;;;;-1:-1:-1;21489:766:0;;;;;:::i;:::-;;:::i;:::-;;;;1235:14:1;;1228:22;1210:41;;1282:2;1267:18;;1260:34;;;;1342:4;1330:17;1310:18;;;1303:45;1198:2;1183:18;21489:766:0;1018:336:1;3857:29:0;;;;;;;;;;-1:-1:-1;3857:29:0;;;;-1:-1:-1;;;;;3857:29:0;;;27146:230;;;;;;;;;;-1:-1:-1;27146:230:0;;;;;:::i;:::-;;:::i;8132:493::-;;;;;;;;;;;;;:::i;4299:30::-;;;;;;;;;;;;;;;;26443:402;;;;;;;;;;-1:-1:-1;26443:402:0;;;;;:::i;:::-;;:::i;3999:44::-;;;;;;;;;;-1:-1:-1;3999:44:0;;;;-1:-1:-1;;;;;3999:44:0;;;3948;;;;;;;;;;-1:-1:-1;3948:44:0;;;;-1:-1:-1;;;;;3948:44:0;;;4336:32;;;;;;;;;;;;;;;;26315:120;;;;;;;;;;;;;:::i;4093:35::-;;;;;;;;;;;;;;;;15964:1702;;;;;;;;;;-1:-1:-1;15964:1702:0;;;;;:::i;:::-;;:::i;25160:104::-;;;;;;;;;;-1:-1:-1;25235:21:0;25160:104;;28322:266;;;;;;;;;;;;;:::i;4256:36::-;;;;;;;;;;;;;;;;4215:34;;;;;;;;;;;;;;;;3765:20;;;;;;;;;;-1:-1:-1;3765:20:0;;;;-1:-1:-1;;;;;3765:20:0;;;11567:268;;;;;;;;;;-1:-1:-1;11567:268:0;;;;;:::i;:::-;;:::i;25859:448::-;;;;;;;;;;-1:-1:-1;25859:448:0;;;;;:::i;:::-;;:::i;23231:967::-;;;;;;;;;;-1:-1:-1;23231:967:0;;;;;:::i;:::-;;:::i;:::-;;;;2267:25:1;;;2323:2;2308:18;;2301:34;;;;2378:14;2371:22;2351:18;;;2344:50;2255:2;2240:18;23231:967:0;2071:329:1;10475:914:0;;;;;;;;;;;;;:::i;22328:829::-;;;;;;;;;;-1:-1:-1;22328:829:0;;;;;:::i;:::-;;:::i;12027:268::-;;;;;;;;;;-1:-1:-1;12027:268:0;;;;;:::i;:::-;;:::i;12494:197::-;;;;;;;;;;;;;:::i;3899:42::-;;;;;;;;;;-1:-1:-1;3899:42:0;;;;-1:-1:-1;;;;;3899:42:0;;;13185:252;;;;;;;;;;;;;:::i;9471:709::-;;;;;;;;;;;;;:::i;14171:1498::-;;;:::i;10188:161::-;;;;;;;;;;;;;:::i;18208:1152::-;;;;;;;;;;;;;:::i;:::-;;;;2714:25:1;;;2770:2;2755:18;;2748:34;;;;2798:18;;;2791:34;;;;2856:2;2841:18;;2834:34;;;;2899:3;2884:19;;2877:35;2956:14;2949:22;2943:3;2928:19;;2921:51;3003:3;2988:19;;2981:35;2701:3;2686:19;18208:1152:0;2405:617:1;12814:250:0;;;;;;;;;;;;;:::i;3792:27::-;;;;;;;;;;-1:-1:-1;3792:27:0;;;;-1:-1:-1;;;;;3792:27:0;;;27384:288;;;;;;;;;;-1:-1:-1;27384:288:0;;;;;:::i;:::-;;:::i;24678:160::-;;;:::i;24846:306::-;;;;;;;;;;-1:-1:-1;24846:306:0;;;;;:::i;:::-;;:::i;26853:285::-;;;;;;;;;;-1:-1:-1;26853:285:0;;;;;:::i;:::-;;:::i;28150:164::-;;;;;;;;;;-1:-1:-1;28150:164:0;;;;;:::i;:::-;;:::i;19506:1889::-;;;;;;;;;;-1:-1:-1;19506:1889:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;4135:37::-;;;;;;;;;;;;;;;;21489:766;21586:13;21610:20;21641:24;21684:19;21706:22;:20;:22::i;:::-;21684:44;-1:-1:-1;21753:13:0;;;:33;;-1:-1:-1;21770:16:0;;21753:33;21749:90;;;21811:5;21818;21825:1;21803:24;;;;;;;;;21749:90;21875:11;21863:8;:23;21859:329;;21955:11;21920:22;21955:11;21920:8;:22;:::i;:::-;21919:32;;21946:5;21919:32;:::i;:::-;21918:48;;;;:::i;:::-;21903:63;;22002:1;21981:22;;21859:329;;;22108:11;22073:22;22087:8;22108:11;22073:22;:::i;:::-;22072:32;;22099:5;22072:32;:::i;:::-;22071:48;;;;:::i;:::-;22056:63;;22155:1;22134:22;;21859:329;22235:12;22219;:28;;22208:39;;21673:582;21489:766;;;;;;:::o;27146:230::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;27240:15:::1;::::0;;-1:-1:-1;;;;;27267:48:0;;::::1;-1:-1:-1::0;;;;;;27267:48:0;::::1;;::::0;;;27331:37:::1;::::0;27240:15;::::1;::::0;27331:37:::1;::::0;-1:-1:-1;;;5004:21:1;;5050:1;5041:11;;4802:256;27331:37:0::1;;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;5293:15:1;;;5275:34;;5345:15;;5340:2;5325:18;;5318:43;27331:37:0;::::1;::::0;5210:18:1;27331:37:0::1;;;;;;;;27207:169;27146:230:::0;:::o;8132:493::-;8262:14;;8339:27;;;-1:-1:-1;;;8339:27:0;;;;8183:7;;-1:-1:-1;;;;;8262:14:0;;;;8339:25;;:27;;;;;;;;;;;;;;;8262:14;8339:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;;8388:1;8370:15;;:19;8339:50;8335:214;;;4430:5;8432:20;;8414:15;:38;;;;:::i;:::-;:63;;8406:94;;;;-1:-1:-1;;;8406:94:0;;5856:2:1;8406:94:0;;;5838:21:1;5895:2;5875:18;;;5868:30;-1:-1:-1;;;5914:18:1;;;5907:48;5972:18;;8406:94:0;5654:342:1;8406:94:0;-1:-1:-1;;8522:15:0;;;8132:493::o;8335:214::-;8595:13;;8576:41;;-1:-1:-1;;;;;8595:13:0;8610:6;8576:18;:41::i;:::-;8569:48;;;8132:493;:::o;26443:402::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;26582:14:::1;::::0;26625:21:::1;::::0;;-1:-1:-1;;;26625:21:0;;;;-1:-1:-1;;;;;26582:14:0;;::::1;::::0;;;26625:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;26582:14;26625:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26616:5;:30;;26608:62;;;;-1:-1:-1::0;;;26608:62:0::1;;;;;;;:::i;:::-;26698:6;-1:-1:-1::0;;;;;26698:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26689:5;:30;;26681:62;;;;-1:-1:-1::0;;;26681:62:0::1;;;;;;;:::i;:::-;26764:22;:30:::0;;;26810:27:::1;::::0;521:25:1;;;26810:27:0::1;::::0;509:2:1;494:18;26810:27:0::1;;;;;;;;26512:333;26443:402:::0;:::o;26315:120::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;26391:1:::1;26373:15;:19:::0;;;26403:20:::1;:24:::0;26315:120::o;15964:1702::-;6220:7;;;;6219:8;6211:35;;;;-1:-1:-1;;;6211:35:0;;7088:2:1;6211:35:0;;;7070:21:1;7127:2;7107:18;;;7100:30;-1:-1:-1;;;7146:18:1;;;7139:44;7200:18;;6211:35:0;6886:338:1;6211:35:0;6257:7;:14;;-1:-1:-1;;6257:14:0;6267:4;6257:14;;;16097::::1;::::0;16141:20:::1;::::0;;-1:-1:-1;;;16141:20:0;;;;-1:-1:-1;;;;;16097:14:0;;::::1;::::0;;;16141:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;16097:14;16141:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16133:47;;;::::0;-1:-1:-1;;;16133:47:0;;7431:2:1;16133:47:0::1;::::0;::::1;7413:21:1::0;7470:2;7450:18;;;7443:30;-1:-1:-1;;;7489:18:1;;;7482:44;7543:18;;16133:47:0::1;7229:338:1::0;16133:47:0::1;16214:6;-1:-1:-1::0;;;;;16214:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16199:11;:37;;16191:66;;;::::0;-1:-1:-1;;;16191:66:0;;7774:2:1;16191:66:0::1;::::0;::::1;7756:21:1::0;7813:2;7793:18;;;7786:30;-1:-1:-1;;;7832:18:1;;;7825:46;7888:18;;16191:66:0::1;7572:340:1::0;16191:66:0::1;16291:6;-1:-1:-1::0;;;;;16291:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16276:11;:36;;16268:65;;;::::0;-1:-1:-1;;;16268:65:0;;8119:2:1;16268:65:0::1;::::0;::::1;8101:21:1::0;8158:2;8138:18;;;8131:30;-1:-1:-1;;;8177:18:1;;;8170:46;8233:18;;16268:65:0::1;7917:340:1::0;16268:65:0::1;16362:9;::::0;16352:42:::1;::::0;-1:-1:-1;;;16352:42:0;;16383:10:::1;16352:42;::::0;::::1;703:51:1::0;16398:11:0;;-1:-1:-1;;;;;16362:9:0::1;::::0;16352:30:::1;::::0;676:18:1;;16352:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;16344:90;;;::::0;-1:-1:-1;;;16344:90:0;;8464:2:1;16344:90:0::1;::::0;::::1;8446:21:1::0;8503:2;8483:18;;;8476:30;-1:-1:-1;;;8522:18:1;;;8515:50;8582:18;;16344:90:0::1;8262:344:1::0;16344:90:0::1;16540:5;16519:17;;16501:15;:35;;;;:::i;:::-;:44;16497:146;;16580:1;16562:15;:19:::0;16616:15:::1;16596:17;:35:::0;16497:146:::1;16694:6;-1:-1:-1::0;;;;;16694:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16679:11;16661:15;;:29;;;;:::i;:::-;:54;;16653:86;;;::::0;-1:-1:-1;;;16653:86:0;;8943:2:1;16653:86:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;-1:-1:-1;;;9001:18:1;;;8994:49;9060:18;;16653:86:0::1;8741:343:1::0;16653:86:0::1;16834:18;16855:19;:17;:19::i;:::-;16834:40:::0;-1:-1:-1;17052:16:0::1;17100:4;17072:24;16834:40:::0;17072:11;:24:::1;:::i;:::-;17071:33;;;;:::i;:::-;17052:52;;17162:17;17182:18;17191:8;17182;:18::i;:::-;17162:38;;17266:6;-1:-1:-1::0;;;;;17266:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17254:39;::::0;:9;:39:::1;:::i;:::-;17229:21;:64;;17221:99;;;::::0;-1:-1:-1;;;17221:99:0;;9291:2:1;17221:99:0::1;::::0;::::1;9273:21:1::0;9330:2;9310:18;;;9303:30;-1:-1:-1;;;9349:18:1;;;9342:52;9411:18;;17221:99:0::1;9089:346:1::0;17221:99:0::1;17360:11;17341:15;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17392:9:0::1;::::0;17382:56:::1;::::0;-1:-1:-1;;;17382:56:0;;17414:10:::1;17382:56;::::0;::::1;9614:51:1::0;9681:18;;;9674:34;;;-1:-1:-1;;;;;17392:9:0;;::::1;::::0;17382:31:::1;::::0;9587:18:1;;17382:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17478:46:0::1;::::0;17460:12:::1;::::0;-1:-1:-1;17486:10:0::1;::::0;-1:-1:-1;17510:9:0;;17460:12;17478:46;17460:12;17478:46;17510:9;17486:10;17478:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17459:65;;;17543:7;17535:39;;;::::0;-1:-1:-1;;;17535:39:0;;10131:2:1;17535:39:0::1;::::0;::::1;10113:21:1::0;10170:2;10150:18;;;10143:30;-1:-1:-1;;;10189:18:1;;;10182:49;10248:18;;17535:39:0::1;9929:343:1::0;17535:39:0::1;17600:58;::::0;;10479:25:1;;;10535:2;10520:18;;10513:34;;;10563:18;;;10556:34;;;17611:10:0::1;::::0;17600:58:::1;::::0;10467:2:1;10452:18;17600:58:0::1;;;;;;;-1:-1:-1::0;;6294:7:0;:15;;-1:-1:-1;;6294:15:0;;;-1:-1:-1;;;;15964:1702:0:o;28322:266::-;28391:12;;-1:-1:-1;;;;;28391:12:0;28377:10;:26;28369:56;;;;-1:-1:-1;;;28369:56:0;;10803:2:1;28369:56:0;;;10785:21:1;10842:2;10822:18;;;10815:30;-1:-1:-1;;;10861:18:1;;;10854:47;10918:18;;28369:56:0;10601:341:1;28369:56:0;28436:16;28455:5;;;28479:12;;-1:-1:-1;;;;;28479:12:0;;;-1:-1:-1;;;;;;28471:20:0;;;;;;;28502:25;;;;;;28543:37;;28455:5;;;;;;;28543:37;;28436:16;28543:37;28358:230;28322:266::o;11567:268::-;11625:7;11645:16;11664;:14;:16::i;:::-;11645:35;-1:-1:-1;11823:4:0;11799:20;11645:35;11799:9;:20;:::i;:::-;11798:29;;;;:::i;:::-;11791:36;11567:268;-1:-1:-1;;;11567:268:0:o;25859:448::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;25991:14:::1;::::0;26034:21:::1;::::0;;-1:-1:-1;;;26034:21:0;;;;-1:-1:-1;;;;;25991:14:0;;::::1;::::0;;;26034:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;25991:14;26034:21:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26025:5;:30;;26017:62;;;;-1:-1:-1::0;;;26017:62:0::1;;;;;;;:::i;:::-;26107:6;-1:-1:-1::0;;;;;26107:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26098:5;:30;;26090:62;;;;-1:-1:-1::0;;;26090:62:0::1;;;;;;;:::i;:::-;26173:15;:23:::0;;;26230:15:::1;26207:20;:38:::0;;;26261::::1;::::0;;11121:25:1;;;11177:2;11162:18;;11155:34;;;;26261:38:0::1;::::0;11094:18:1;26261:38:0::1;10947:248:1::0;23231:967:0;23307:14;23332:22;23365:17;23401:31;23460:14;;;;;;;;;-1:-1:-1;;;;;23460:14:0;23401:74;;23514:6;-1:-1:-1;;;;;23514:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23500:11;:36;:75;;;;23554:6;-1:-1:-1;;;;;23554:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23540:11;:35;23500:75;23496:128;;;23600:1;23603;23606:5;23592:20;;;;;;;;;23496:128;23661:19;:17;:19::i;:::-;23644:36;-1:-1:-1;23787:16:0;23839:4;23807:28;23644:36;23807:11;:28;:::i;:::-;23806:37;;;;:::i;:::-;23787:56;;23863:18;23872:8;23863;:18::i;:::-;23854:27;;23902:22;23951:15;;23927:6;-1:-1:-1;;;;;23927:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;23902:64;;23977:21;24016:14;24001:11;:29;;23977:53;;24041:17;24095:6;-1:-1:-1;;;;;24095:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24086:36;;:6;:36;:::i;:::-;24061:21;:61;;24041:81;;24158:16;:32;;;;;24178:12;24158:32;24143:47;;23390:808;;;;;23231:967;;;;;;:::o;10475:914::-;10522:7;10557:14;10586:12;10628:17;10660:22;10696:15;;;;;;;;;-1:-1:-1;;;;;10696:15:0;-1:-1:-1;;;;;10696:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10809:14;;10542:187;;-1:-1:-1;10542:187:0;;-1:-1:-1;10542:187:0;-1:-1:-1;10542:187:0;;-1:-1:-1;;;;;;;10809:14:0;10853:13;10845:48;;;;-1:-1:-1;;;10845:48:0;;12064:2:1;10845:48:0;;;12046:21:1;12103:2;12083:18;;;12076:30;-1:-1:-1;;;12122:18:1;;;12115:52;12184:18;;10845:48:0;11862:346:1;10845:48:0;10931:7;-1:-1:-1;;;;;10912:26:0;:15;-1:-1:-1;;;;;10912:26:0;;;10904:55;;;;-1:-1:-1;;;10904:55:0;;12415:2:1;10904:55:0;;;12397:21:1;12454:2;12434:18;;;12427:30;-1:-1:-1;;;12473:18:1;;;12466:46;12529:18;;10904:55:0;12213:340:1;10904:55:0;11009:6;-1:-1:-1;;;;;11009:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10978:27;10996:9;10978:15;:27;:::i;:::-;:63;;10970:93;;;;-1:-1:-1;;;10970:93:0;;12760:2:1;10970:93:0;;;12742:21:1;12799:2;12779:18;;;12772:30;-1:-1:-1;;;12818:18:1;;;12811:47;12875:18;;10970:93:0;12558:341:1;10970:93:0;11090:1;11082:5;:9;11074:40;;;;-1:-1:-1;;;11074:40:0;;13106:2:1;11074:40:0;;;13088:21:1;13145:2;13125:18;;;13118:30;-1:-1:-1;;;13164:18:1;;;13157:48;13222:18;;11074:40:0;12904:342:1;11074:40:0;11160:5;11246:11;11236:21;;;11228:52;;;;-1:-1:-1;;;11228:52:0;;13453:2:1;11228:52:0;;;13435:21:1;13492:2;13472:18;;;13465:30;-1:-1:-1;;;13511:18:1;;;13504:48;13569:18;;11228:52:0;13251:342:1;11228:52:0;11309:14;11299:6;:24;;11291:56;;;;-1:-1:-1;;;11291:56:0;;13800:2:1;11291:56:0;;;13782:21:1;13839:2;13819:18;;;13812:30;-1:-1:-1;;;13858:18:1;;;13851:49;13917:18;;11291:56:0;13598:343:1;11291:56:0;11375:6;10475:914;-1:-1:-1;;;;;;10475:914:0:o;22328:829::-;22401:17;22429:22;22462:17;22498:31;22557:14;;;;;;;;;-1:-1:-1;;;;;22557:14:0;22498:74;;22609:6;-1:-1:-1;;;;;22609:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22597:9;:35;:74;;;;22648:6;-1:-1:-1;;;;;22648:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22636:9;:35;22597:74;22593:127;;;22696:1;22699;22702:5;22688:20;;;;;;;;;22593:127;22771:16;22790:19;22799:9;22790:8;:19::i;:::-;22771:38;;22847:23;:21;:23::i;:::-;22830:40;-1:-1:-1;22830:40:0;22928:15;:8;22939:4;22928:15;:::i;:::-;22927:34;;;;:::i;:::-;22915:46;;22982:22;23035:19;;23007:6;-1:-1:-1;;;;;23007:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;22982:72;;23093:6;-1:-1:-1;;;;;23093:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23080:9;:38;;:69;;;;;23135:14;23122:9;:27;;23080:69;22328:829;;;;-1:-1:-1;;;;;22328:829:0:o;12027:268::-;12085:7;12105:16;12124;:14;:16::i;:::-;12105:35;-1:-1:-1;12105:35:0;12259:16;:9;12271:4;12259:16;:::i;12494:197::-;12547:7;12567:17;12587:26;:24;:26::i;:::-;12567:46;-1:-1:-1;12650:3:0;12632:14;12567:46;12644:2;12632:14;:::i;:::-;12631:22;;;;:::i;13185:252::-;13235:7;13255:17;13275:22;:20;:22::i;:::-;13255:42;;13308:16;13352:14;;;;;;;;;-1:-1:-1;;;;;13352:14:0;-1:-1:-1;;;;;13327:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13308:75;-1:-1:-1;13426:3:0;13402:20;13308:75;13402:9;:20;:::i;:::-;13401:28;;;;:::i;:::-;13394:35;;;;13185:252;:::o;9471:709::-;9528:7;9552:4;-1:-1:-1;;;;;9552:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9552:25:0;;;;;;;;-1:-1:-1;;9552:25:0;;;;;;;;;;;;:::i;:::-;;;9548:625;;9754:14;;9788:21;;;-1:-1:-1;;;9788:21:0;;;;-1:-1:-1;;;;;9754:14:0;;;;9788:4;;:19;;:21;;;;;;;;;;;;;;:4;:21;;;;;;;;;;-1:-1:-1;9788:21:0;;;;;;;;-1:-1:-1;;9788:21:0;;;;;;;;;;;;:::i;:::-;;;9784:378;;9966:6;-1:-1:-1;;;;;9966:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9958:65;;;;-1:-1:-1;;;9958:65:0;;14148:2:1;9958:65:0;;;14130:21:1;14187:2;14167:18;;;14160:30;-1:-1:-1;;;14206:18:1;;;14199:49;14265:18;;9958:65:0;13946:343:1;9958:65:0;10075:1;10050:22;;:26;10042:56;;;;-1:-1:-1;;;10042:56:0;;14496:2:1;10042:56:0;;;14478:21:1;14535:2;14515:18;;;14508:30;-1:-1:-1;;;14554:18:1;;;14547:47;14611:18;;10042:56:0;14294:341:1;10042:56:0;-1:-1:-1;;10124:22:0;;;9471:709::o;9784:378::-;9866:11;9471:709;-1:-1:-1;;9471:709:0:o;9548:625::-;9624:5;9471:709;-1:-1:-1;9471:709:0:o;14171:1498::-;6220:7;;;;6219:8;6211:35;;;;-1:-1:-1;;;6211:35:0;;7088:2:1;6211:35:0;;;7070:21:1;7127:2;7107:18;;;7100:30;-1:-1:-1;;;7146:18:1;;;7139:44;7200:18;;6211:35:0;6886:338:1;6211:35:0;6257:7;:14;;-1:-1:-1;;6257:14:0;6267:4;6257:14;;;14292::::1;::::0;14336:24:::1;::::0;;-1:-1:-1;;;14336:24:0;;;;-1:-1:-1;;;;;14292:14:0;;::::1;::::0;;;14336:22:::1;::::0;:24:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;14292:14;14336:24:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14328:55;;;::::0;-1:-1:-1;;;14328:55:0;;14842:2:1;14328:55:0::1;::::0;::::1;14824:21:1::0;14881:2;14861:18;;;14854:30;-1:-1:-1;;;14900:18:1;;;14893:48;14958:18;;14328:55:0::1;14640:342:1::0;14328:55:0::1;14415:6;-1:-1:-1::0;;;;;14415:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14402:9;:36;;14394:62;;;::::0;-1:-1:-1;;;14394:62:0;;15189:2:1;14394:62:0::1;::::0;::::1;15171:21:1::0;15228:2;15208:18;;;15201:30;-1:-1:-1;;;15247:18:1;;;15240:43;15300:18;;14394:62:0::1;14987:337:1::0;14394:62:0::1;14488:6;-1:-1:-1::0;;;;;14488:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14475:9;:36;;14467:62;;;::::0;-1:-1:-1;;;14467:62:0;;15531:2:1;14467:62:0::1;::::0;::::1;15513:21:1::0;15570:2;15550:18;;;15543:30;-1:-1:-1;;;15589:18:1;;;15582:43;15642:18;;14467:62:0::1;15329:337:1::0;14467:62:0::1;14639:5;14614:21;;14596:15;:39;;;;:::i;:::-;:48;14592:158;;14683:1;14661:19;:23:::0;14723:15:::1;14699:21;:39:::0;14592:158:::1;14820:16;14839:19;14848:9;14839:8;:19::i;:::-;14820:38;;14951:18;14972:23;:21;:23::i;:::-;14951:44:::0;-1:-1:-1;15152:20:0::1;14951:44:::0;15176:15:::1;:8:::0;15187:4:::1;15176:15;:::i;:::-;15175:30;;;;:::i;:::-;15152:53;;15249:1;15234:12;:16;15226:40;;;::::0;-1:-1:-1;;;15226:40:0;;15873:2:1;15226:40:0::1;::::0;::::1;15855:21:1::0;15912:2;15892:18;;;15885:30;-1:-1:-1;;;15931:18:1;;;15924:41;15982:18;;15226:40:0::1;15671:335:1::0;15226:40:0::1;15301:6;-1:-1:-1::0;;;;;15301:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15285:12;:41;;15277:70;;;::::0;-1:-1:-1;;;15277:70:0;;16213:2:1;15277:70:0::1;::::0;::::1;16195:21:1::0;16252:2;16232:18;;;16225:30;-1:-1:-1;;;16271:18:1;;;16264:46;16327:18;;15277:70:0::1;16011:340:1::0;15277:70:0::1;15404:6;-1:-1:-1::0;;;;;15404:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15388:12;15366:19;;:34;;;;:::i;:::-;:63;;15358:95;;;::::0;-1:-1:-1;;;15358:95:0;;8943:2:1;15358:95:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;-1:-1:-1;;;9001:18:1;;;8994:49;9060:18;;15358:95:0::1;8741:343:1::0;15358:95:0::1;15497:12;15474:19;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15530:9:0::1;::::0;15520:51:::1;::::0;-1:-1:-1;;;15520:51:0;;15546:10:::1;15520:51;::::0;::::1;9614::1::0;9681:18;;;9674:34;;;-1:-1:-1;;;;;15530:9:0;;::::1;::::0;15520:25:::1;::::0;9587:18:1;;15520:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15597:64:0::1;::::0;;15625:9:::1;10479:25:1::0;;10535:2;10520:18;;10513:34;;;10563:18;;;10556:34;;;15613:10:0::1;::::0;-1:-1:-1;15597:64:0::1;::::0;-1:-1:-1;10467:2:1;10452:18;15597:64:0::1;;;;;;;-1:-1:-1::0;;6294:7:0;:15;;-1:-1:-1;;6294:15:0;;;-1:-1:-1;;14171:1498:0:o;10188:161::-;10283:15;;10325:14;;10237:7;;10264:77;;-1:-1:-1;;;;;10283:15:0;;;;10325:14;10264:18;:77::i;:::-;10257:84;;10188:161;:::o;18208:1152::-;18265:23;18299:24;18334:25;18370:17;18398:20;18429:19;18459:24;18520:26;:24;:26::i;:::-;18502:44;;18576:23;:21;:23::i;:::-;18557:42;;18630:19;:17;:19::i;:::-;18610:39;-1:-1:-1;18674:20:0;;18670:132;;18774:16;18725:36;18744:17;18774:16;18725:36;:::i;:::-;18724:46;;18765:5;18724:46;:::i;:::-;18723:67;;;;:::i;:::-;18711:79;;18670:132;18881:14;;18975:27;;;-1:-1:-1;;;18975:27:0;;;;18922:21;;-1:-1:-1;;;;;;18881:14:0;;;;18822:31;;18881:14;;18975:25;;:27;;;;;;;;;;;;;;;18881:14;18975:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18954:48;;19045:10;19030:12;:25;19013:42;;19080:14;:39;;;;;19118:1;19098:17;:21;19080:39;19076:277;;;19208:20;19231:35;19240:25;19255:10;19240:12;:25;:::i;19231:35::-;19208:58;-1:-1:-1;19324:17:0;19301:19;19208:58;19316:4;19301:19;:::i;:::-;19300:41;;;;:::i;:::-;19281:60;;19121:232;19076:277;18491:869;;18208:1152;;;;;;;:::o;12814:250::-;12868:7;12888:17;12908:22;:20;:22::i;:::-;12888:42;;12941:14;12983;;;;;;;;;-1:-1:-1;;;;;12983:14:0;-1:-1:-1;;;;;12958:52:0;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27384:288;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27464:21:0;::::1;27456:46;;;;-1:-1:-1::0;;;27456:46:0::1;;;;;;;:::i;:::-;27535:15;::::0;;-1:-1:-1;;;;;27562:48:0;;::::1;-1:-1:-1::0;;;;;;27562:48:0;::::1;;::::0;;;27626:38:::1;::::0;27535:15;::::1;::::0;27626:38:::1;::::0;-1:-1:-1;;;16899:22:1;;16946:1;16937:11;;16697:257;24678:160:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;24760:1:::1;24748:9;:13;24740:37;;;::::0;-1:-1:-1;;;24740:37:0;;17161:2:1;24740:37:0::1;::::0;::::1;17143:21:1::0;17200:2;17180:18;;;17173:30;-1:-1:-1;;;17219:18:1;;;17212:41;17270:18;;24740:37:0::1;16959:335:1::0;24740:37:0::1;24793;::::0;24820:9:::1;521:25:1::0;;24808:10:0::1;::::0;24793:37:::1;::::0;509:2:1;494:18;24793:37:0::1;;;;;;;24678:160::o:0;24846:306::-;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;24931:21:::1;24921:6;:31;;24913:64;;;::::0;-1:-1:-1;;;24913:64:0;;8464:2:1;24913:64:0::1;::::0;::::1;8446:21:1::0;8503:2;8483:18;;;8476:30;-1:-1:-1;;;8522:18:1;;;8515:50;8582:18;;24913:64:0::1;8262:344:1::0;24913:64:0::1;24989:12;25015:5:::0;;25007:38:::1;::::0;-1:-1:-1;;;;;25015:5:0;;::::1;::::0;25034:6;;24989:12;25007:38;24989:12;25007:38;25034:6;25015:5;25007:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24988:57;;;25064:7;25056:39;;;::::0;-1:-1:-1;;;25056:39:0;;10131:2:1;25056:39:0::1;::::0;::::1;10113:21:1::0;10170:2;10150:18;;;10143:30;-1:-1:-1;;;10189:18:1;;;10182:49;10248:18;;25056:39:0::1;9929:343:1::0;25056:39:0::1;25130:5;::::0;25111:33:::1;::::0;521:25:1;;;-1:-1:-1;;;;;25130:5:0;;::::1;::::0;25111:33:::1;::::0;509:2:1;494:18;25111:33:0::1;375:177:1::0;26853:285:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26934:21:0;::::1;26926:46;;;;-1:-1:-1::0;;;26926:46:0::1;;;;;;;:::i;:::-;27005:13;::::0;;-1:-1:-1;;;;;27030:46:0;;::::1;-1:-1:-1::0;;;;;;27030:46:0;::::1;;::::0;;;27092:38:::1;::::0;27005:13;::::1;::::0;27092:38:::1;::::0;-1:-1:-1;;;17501:22:1;;17548:1;17539:11;;17299:257;28150:164:0;6125:5;;-1:-1:-1;;;;;6125:5:0;6111:10;:19;6103:41;;;;-1:-1:-1;;;6103:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28233:22:0;::::1;28225:47;;;;-1:-1:-1::0;;;28225:47:0::1;;;;;;;:::i;:::-;28283:12;:23:::0;;-1:-1:-1;;;;;;28283:23:0::1;-1:-1:-1::0;;;;;28283:23:0;;;::::1;::::0;;;::::1;::::0;;28150:164::o;19506:1889::-;19596:18;19625:17;19653:21;19685:28;19732:24;19759:23;:21;:23::i;:::-;19732:50;;19793:25;19821:19;:17;:19::i;:::-;19793:47;-1:-1:-1;19865:13:0;;;:38;;-1:-1:-1;19882:21:0;;19865:38;:64;;;-1:-1:-1;19907:22:0;;19865:64;19861:131;;;19954:1;19957;19960;19946:34;;;;;;;;;;;;;-1:-1:-1;;;19946:34:0;;;;;;;;;;;;;;;19861:131;20068:17;20057:8;:28;20053:903;;;20157:8;20116:28;20157:8;20116:17;:28;:::i;:::-;20115:38;;20148:5;20115:38;:::i;:::-;20114:51;;;;:::i;:::-;20253:14;;20363:27;;;-1:-1:-1;;;20363:27:0;;;;20102:63;;-1:-1:-1;;;;;;20253:14:0;;;;20306:21;;20194:31;;20253:14;;20363:25;;:27;;;;;;;;;;;;;;20253:14;20363:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20342:48;;20438:10;20423:12;:25;20419:429;;;20545:20;20568:35;20577:25;20592:10;20577:12;:25;:::i;20568:35::-;20545:58;-1:-1:-1;20622:19:0;20668:17;20645:19;20545:58;20660:4;20645:19;:::i;:::-;20644:41;;;;:::i;:::-;20622:63;;20704:18;20725:6;-1:-1:-1;;;;;20725:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20704:42;;20795:10;20781:11;:24;:51;;20822:10;20781:51;;;20808:11;20781:51;20765:67;;20450:398;;;20419:429;-1:-1:-1;;20876:68:0;;;;;;;;;;;;;;;;;20884:1;;-1:-1:-1;20876:68:0;-1:-1:-1;20876:68:0;;-1:-1:-1;;;20876:68:0;20053:903;21034:16;21023:8;:27;21019:305;;;21121:16;21081:27;21121:16;21081:8;:27;:::i;:::-;21080:37;;21112:5;21080:37;:::i;:::-;21079:58;;;;:::i;:::-;21067:70;;21193:14;;;;;;;;;-1:-1:-1;;;;;21193:14:0;-1:-1:-1;;;;;21168:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21242:70;;;;;;;;;;;;;;;;;21250:1;;-1:-1:-1;21152:75:0;;-1:-1:-1;21242:70:0;-1:-1:-1;21242:70:0;;-1:-1:-1;;21242:70:0;21019:305;21352:1;21355;21358;21344:43;;;;;;;;;;;;;;;;;;;;;;;;;;;19506:1889;;;;;;:::o;8633:830::-;8750:7;8785:14;8814:12;8856:17;8888:22;8924:9;-1:-1:-1;;;;;8924:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8770:181;;;;;;;;;8992:1;8980:9;:13;8972:43;;;;-1:-1:-1;;;8972:43:0;;17763:2:1;8972:43:0;;;17745:21:1;17802:2;17782:18;;;17775:30;-1:-1:-1;;;17821:18:1;;;17814:47;17878:18;;8972:43:0;17561:341:1;8972:43:0;9053:7;-1:-1:-1;;;;;9034:26:0;:15;-1:-1:-1;;;;;9034:26:0;;;9026:50;;;;-1:-1:-1;;;9026:50:0;;18109:2:1;9026:50:0;;;18091:21:1;18148:2;18128:18;;;18121:30;-1:-1:-1;;;18167:18:1;;;18160:41;18218:18;;9026:50:0;17907:335:1;9026:50:0;9126:6;-1:-1:-1;;;;;9126:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9095:27;9113:9;9095:15;:27;:::i;:::-;:63;;9087:88;;;;-1:-1:-1;;;9087:88:0;;18449:2:1;9087:88:0;;;18431:21:1;18488:2;18468:18;;;18461:30;-1:-1:-1;;;18507:18:1;;;18500:42;18559:18;;9087:88:0;18247:336:1;9087:88:0;9202:1;9194:5;:9;9186:35;;;;-1:-1:-1;;;9186:35:0;;18790:2:1;9186:35:0;;;18772:21:1;18829:2;18809:18;;;18802:30;-1:-1:-1;;;18848:18:1;;;18841:43;18901:18;;9186:35:0;18588:337:1;9186:35:0;9242:14;9267:5;9242:31;;9302:6;-1:-1:-1;;;;;9302:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9292:6;:31;;9284:63;;;;-1:-1:-1;;;9284:63:0;;;;;;;:::i;:::-;9376:6;-1:-1:-1;;;;;9376:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9366:6;:31;;9358:63;;;;-1:-1:-1;;;9358:63:0;;;;;;;:::i;:::-;9449:6;8633:830;-1:-1:-1;;;;;;;8633:830:0:o;765:248:1:-;833:6;841;894:2;882:9;873:7;869:23;865:32;862:52;;;910:1;907;900:12;862:52;-1:-1:-1;;933:23:1;;;1003:2;988:18;;;975:32;;-1:-1:-1;765:248:1:o;1359:286::-;1418:6;1471:2;1459:9;1450:7;1446:23;1442:32;1439:52;;;1487:1;1484;1477:12;1439:52;1513:23;;-1:-1:-1;;;;;1565:31:1;;1555:42;;1545:70;;1611:1;1608;1601:12;1650:180;1709:6;1762:2;1750:9;1741:7;1737:23;1733:32;1730:52;;;1778:1;1775;1768:12;1730:52;-1:-1:-1;1801:23:1;;1650:180;-1:-1:-1;1650:180:1:o;3027:773::-;3268:4;3260:6;3256:17;3245:9;3238:36;3219:4;3293:2;3331:6;3326:2;3315:9;3311:18;3304:34;3374:6;3369:2;3358:9;3354:18;3347:34;3417:3;3412:2;3401:9;3397:18;3390:31;3450:6;3444:13;3494:6;3488:3;3477:9;3473:19;3466:35;3519:1;3529:141;3543:6;3540:1;3537:13;3529:141;;;3639:14;;;3635:23;;3629:30;3604:17;;;3623:3;3600:27;3593:67;3558:10;;3529:141;;;3533:3;3720:1;3714:3;3705:6;3694:9;3690:22;3686:32;3679:43;3790:3;3783:2;3779:7;3774:2;3766:6;3762:15;3758:29;3747:9;3743:45;3739:55;3731:63;;;;3027:773;;;;;;;:::o;3805:127::-;3866:10;3861:3;3857:20;3854:1;3847:31;3897:4;3894:1;3887:15;3921:4;3918:1;3911:15;3937:128;4004:9;;;4025:11;;;4022:37;;;4039:18;;:::i;4070:168::-;4143:9;;;4174;;4191:15;;;4185:22;;4171:37;4161:71;;4212:18;;:::i;4243:217::-;4283:1;4309;4299:132;;4353:10;4348:3;4344:20;4341:1;4334:31;4388:4;4385:1;4378:15;4416:4;4413:1;4406:15;4299:132;-1:-1:-1;4445:9:1;;4243:217::o;4465:332::-;4667:2;4649:21;;;4706:1;4686:18;;;4679:29;-1:-1:-1;;;4739:2:1;4724:18;;4717:39;4788:2;4773:18;;4465:332::o;5372:277::-;5439:6;5492:2;5480:9;5471:7;5467:23;5463:32;5460:52;;;5508:1;5505;5498:12;5460:52;5540:9;5534:16;5593:5;5586:13;5579:21;5572:5;5569:32;5559:60;;5615:1;5612;5605:12;6001:184;6071:6;6124:2;6112:9;6103:7;6099:23;6095:32;6092:52;;;6140:1;6137;6130:12;6092:52;-1:-1:-1;6163:16:1;;6001:184;-1:-1:-1;6001:184:1:o;6190:343::-;6392:2;6374:21;;;6431:2;6411:18;;;6404:30;-1:-1:-1;;;6465:2:1;6450:18;;6443:49;6524:2;6509:18;;6190:343::o;6538:::-;6740:2;6722:21;;;6779:2;6759:18;;;6752:30;-1:-1:-1;;;6813:2:1;6798:18;;6791:49;6872:2;6857:18;;6538:343::o;8611:125::-;8676:9;;;8697:10;;;8694:36;;;8710:18;;:::i;11200:179::-;11278:13;;-1:-1:-1;;;;;11320:34:1;;11310:45;;11300:73;;11369:1;11366;11359:12;11384:473;11487:6;11495;11503;11511;11519;11572:3;11560:9;11551:7;11547:23;11543:33;11540:53;;;11589:1;11586;11579:12;11540:53;11612:39;11641:9;11612:39;:::i;:::-;11602:49;;11691:2;11680:9;11676:18;11670:25;11660:35;;11735:2;11724:9;11720:18;11714:25;11704:35;;11779:2;11768:9;11764:18;11758:25;11748:35;;11802:49;11846:3;11835:9;11831:19;11802:49;:::i;:::-;11792:59;;11384:473;;;;;;;;:::o;16356:336::-;16558:2;16540:21;;;16597:2;16577:18;;;16570:30;-1:-1:-1;;;16631:2:1;16616:18;;16609:42;16683:2;16668:18;;16356:336::o

Swarm Source

ipfs://79aaf001245da8e83ef9d16851eadcb339f81f66599e0c8af50b02ace7517333

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

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