POL Price: $0.447149 (-2.73%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Open Trade281755382022-05-11 3:04:50985 days ago1652238290IN
Gains Network: Trading 1
0 POL0.0040695150
Open Trade241581212022-01-25 19:58:571091 days ago1643140737IN
Gains Network: Trading 1
0 POL0.0017309464
Open Trade241580632022-01-25 19:56:571091 days ago1643140617IN
Gains Network: Trading 1
0 POL0.0015443557
Open Trade239011782022-01-19 9:15:441097 days ago1642583744IN
Gains Network: Trading 1
0 POL0.008121300
Open Trade239010952022-01-19 9:12:521097 days ago1642583572IN
Gains Network: Trading 1
0 POL0.008121300
Open Trade239007392022-01-19 9:00:321097 days ago1642582832IN
Gains Network: Trading 1
0 POL0.0081246300
Open Trade239007392022-01-19 9:00:321097 days ago1642582832IN
Gains Network: Trading 1
0 POL0.0081246300
Open Trade239006552022-01-19 8:57:361097 days ago1642582656IN
Gains Network: Trading 1
0 POL0.00380092140.41082085
Open Trade238403202022-01-17 21:02:301099 days ago1642453350IN
Gains Network: Trading 1
0 POL0.008139300
Open Trade238402582022-01-17 21:00:221099 days ago1642453222IN
Gains Network: Trading 1
0 POL0.0081246300
Open Trade237482232022-01-15 13:17:501101 days ago1642252670IN
Gains Network: Trading 1
0 POL0.001620660
Open Trade233471852022-01-04 19:11:541112 days ago1641323514IN
Gains Network: Trading 1
0 POL0.0162564600
Open Trade229002482021-12-24 9:02:451123 days ago1640336565IN
Gains Network: Trading 1
0 POL0.0020302575
Open Trade228887882021-12-24 1:39:461123 days ago1640309986IN
Gains Network: Trading 1
0 POL0.0023019785
Open Trade228882582021-12-24 1:19:261123 days ago1640308766IN
Gains Network: Trading 1
0 POL0.0025445894
Open Trade228882572021-12-24 1:19:241123 days ago1640308764IN
Gains Network: Trading 1
0 POL0.0020311575
Open Trade228880652021-12-24 1:12:481123 days ago1640308368IN
Gains Network: Trading 1
0 POL0.00338375125
Open Trade228844082021-12-23 22:54:221123 days ago1640300062IN
Gains Network: Trading 1
0 POL0.0017324864
Execute Nft Orde...227628742021-12-20 20:47:141127 days ago1640033234IN
Gains Network: Trading 1
0 POL0.01437612578.49289374
Execute Nft Orde...227628662021-12-20 20:46:581127 days ago1640033218IN
Gains Network: Trading 1
0 POL0.01437612578.49289374
Execute Nft Orde...227628642021-12-20 20:46:541127 days ago1640033214IN
Gains Network: Trading 1
0 POL0.01303959524.45784323
Execute Nft Orde...227627522021-12-20 20:43:061127 days ago1640032986IN
Gains Network: Trading 1
0 POL0.00352261141.68119714
Execute Nft Orde...227627452021-12-20 20:42:481127 days ago1640032968IN
Gains Network: Trading 1
0 POL0.00352261141.68119714
Execute Nft Orde...227627382021-12-20 20:42:341127 days ago1640032954IN
Gains Network: Trading 1
0 POL0.00352261141.68119714
Execute Nft Orde...227627312021-12-20 20:42:201127 days ago1640032940IN
Gains Network: Trading 1
0 POL0.00352261141.68119714
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GFarmTradingV5

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-10-12
*/

// File: contracts\interfaces\UniswapRouterInterfaceV5.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

interface UniswapRouterInterfaceV5{
	function swapExactTokensForTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);

	function swapTokensForExactTokens(
		uint amountOut,
		uint amountInMax,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
}

// File: contracts\interfaces\AggregatorInterfaceV5.sol

pragma solidity 0.8.7;

interface AggregatorInterfaceV5{
    enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE }
    function getPrice(uint,OrderType,uint) external returns(uint);
    function tokenPriceDai() external view returns(uint);
    function pairMinOpenLimitSlippageP(uint) external view returns(uint);
    function closeFeeP(uint) external view returns(uint);
    function linkFee(uint,uint) external view returns(uint);
    function openFeeP(uint) external view returns(uint);
    function pairMinLeverage(uint) external view returns(uint);
    function pairMaxLeverage(uint) external view returns(uint);
    function pairsCount() external view returns(uint);
    function tokenDaiReservesLp() external view returns(uint, uint);
    function referralP(uint) external view returns(uint);
    function nftLimitOrderFeeP(uint) external view returns(uint);
}

// File: contracts\interfaces\TokenInterfaceV5.sol

pragma solidity 0.8.7;

interface TokenInterfaceV5{
    function burn(address, uint256) external;
    function mint(address, uint256) external;
    function transfer(address, uint256) external returns (bool);
    function transferFrom(address, address, uint256) external returns(bool);
    function balanceOf(address) external view returns(uint256);
    function hasRole(bytes32, address) external view returns (bool);
    function approve(address, uint256) external returns (bool);
    function allowance(address, address) external view returns (uint256);
}

// File: contracts\interfaces\NftInterfaceV5.sol

pragma solidity 0.8.7;

interface NftInterfaceV5{
    function balanceOf(address) external view returns (uint);
    function ownerOf(uint) external view returns (address);
    function transferFrom(address, address, uint) external;
    function tokenOfOwnerByIndex(address, uint) external view returns(uint);
}

// File: contracts\interfaces\VaultInterfaceV5.sol

pragma solidity 0.8.7;

interface VaultInterfaceV5{
	function sendDaiToTrader(address, uint) external;
}

// File: contracts\interfaces\StorageInterfaceV5.sol

pragma solidity 0.8.7;






interface StorageInterfaceV5{
    enum LimitOrder { TP, SL, LIQ, OPEN }
    struct Trader{
        uint leverageUnlocked;
        address referral;
        uint referralRewardsTotal;  // 1e18
    }
    struct Trade{
        address trader;
        uint pairIndex;
        uint index;
        uint initialPosToken;       // 1e18
        uint positionSizeDai;       // 1e18
        uint openPrice;             // PRECISION
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION
        uint sl;                    // PRECISION
    }
    struct TradeInfo{
        uint tokenId;
        uint tokenPriceDai;         // PRECISION
        uint openInterestDai;       // 1e18
        uint tpLastUpdated;
        uint slLastUpdated;
        bool beingMarketClosed;
    }
    struct OpenLimitOrder{
        address trader;
        uint pairIndex;
        uint index;
        uint positionSize;          // 1e18 (DAI or GFARM2)
        uint spreadReductionP;
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION (%)
        uint sl;                    // PRECISION (%)
        uint minPrice;              // PRECISION
        uint maxPrice;              // PRECISION
        uint block;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingMarketOrder{
        Trade trade;
        uint block;
        uint wantedPrice;           // PRECISION
        uint slippageP;             // PRECISION (%)
        uint spreadReductionP;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingNftOrder{
        address nftHolder;
        uint nftId;
        address trader;
        uint pairIndex;
        uint index;
        LimitOrder orderType;
    }
    function PRECISION() external pure returns(uint);
    function gov() external view returns(address);
    function dev() external view returns(address);
    function dai() external view returns(TokenInterfaceV5);
    function token() external view returns(TokenInterfaceV5);
    function linkErc677() external view returns(TokenInterfaceV5);
    function tokenDaiRouter() external view returns(UniswapRouterInterfaceV5);
    function priceAggregator() external view returns(AggregatorInterfaceV5);
    function vault() external view returns(VaultInterfaceV5);
    function trading() external view returns(address);
    function callbacks() external view returns(address);
    function handleTokens(address,uint,bool) external;
    function transferDai(address, address, uint) external;
    function transferLinkToAggregator(address, uint, uint) external;
    function unregisterTrade(address, uint, uint) external;
    function unregisterPendingMarketOrder(uint, bool) external;
    function unregisterOpenLimitOrder(address, uint, uint) external;
    function hasOpenLimitOrder(address, uint, uint) external view returns(bool);
    function storePendingMarketOrder(PendingMarketOrder memory, uint, bool) external;
    function storeReferral(address, address) external;
    function openTrades(address, uint, uint) external view returns(Trade memory);
    function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory);
    function updateSl(address, uint, uint, uint) external;
    function updateTp(address, uint, uint, uint) external;
    function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory);
    function spreadReductionsP(uint) external view returns(uint);
    function positionSizeTokenDynamic(uint,uint) external view returns(uint);
    function maxSlP() external view returns(uint);
    function storeOpenLimitOrder(OpenLimitOrder memory) external;
    function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory);
    function storePendingNftOrder(PendingNftOrder memory, uint) external;
    function updateOpenLimitOrder(OpenLimitOrder calldata) external;
    function firstEmptyTradeIndex(address, uint) external view returns(uint);
    function firstEmptyOpenLimitIndex(address, uint) external view returns(uint);
    function increaseNftRewards(uint, uint) external;
    function nftSuccessTimelock() external view returns(uint);
    function currentPercentProfit(uint,uint,bool,uint) external view returns(int);
    function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory);
    function setNftLastSuccess(uint) external;
    function updateTrade(Trade memory) external;
    function nftLastSuccess(uint) external view returns(uint);
    function unregisterPendingNftOrder(uint) external;
    function handleDevGovFees(uint, uint, bool, bool) external returns(uint);
    function distributeLpRewards(uint) external;
    function getReferral(address) external view returns(address);
    function increaseReferralRewards(address, uint) external;
    function storeTrade(Trade memory, TradeInfo memory) external;
    function setLeverageUnlocked(address, uint) external;
    function getLeverageUnlocked(address) external view returns(uint);
    function openLimitOrdersCount(address, uint) external view returns(uint);
    function maxOpenLimitOrdersPerPair() external view returns(uint);
    function openTradesCount(address, uint) external view returns(uint);
    function pendingMarketOpenCount(address, uint) external view returns(uint);
    function pendingMarketCloseCount(address, uint) external view returns(uint);
    function maxTradesPerPair() external view returns(uint);
    function maxTradesPerBlock() external view returns(uint);
    function tradesPerBlock(uint) external view returns(uint);
    function pendingOrderIdsCount(address) external view returns(uint);
    function maxPendingMarketOrders() external view returns(uint);
    function maxGainP() external view returns(uint);
    function defaultLeverageUnlocked() external view returns(uint);
    function openInterestDai(uint, uint) external view returns(uint);
    function getPendingOrderIds(address) external view returns(uint[] memory);
    function traders(address) external view returns(Trader memory);
    function nfts(uint) external view returns(NftInterfaceV5);
}

// File: contracts\GFarmTradingV5.sol


pragma solidity 0.8.7;

contract GFarmTradingV5{

    // Is contract active
    bool public isPaused;

    // Trading storage
    StorageInterfaceV5 public storageT;

    // Variables (specific to this implementation)
    uint public maxPosDaiP = 0.3 * 1e10;                 // PRECISION (%)
    uint public minPosDai = 35 * 1e18;                   // 1e18 ($)
    uint public limitOrdersTimelock = 30;                // block
    uint public orderTimeout = 50;                       // block

    // Events
    event Pause(bool paused);
    event NumberUpdated(string name, uint value);
    event AddressUpdated(string name, address a);
    event MarketOrderInitiated(address trader, uint pairIndex, bool open, uint orderId);
    event NftOrderInitiated(address nftHolder, address trader, uint pairIndex, uint orderId);
    event OpenLimitPlaced(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitCanceled(address indexed trader, uint indexed pairIndex, uint index);
    event TpUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event SlUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event ChainlinkCallbackTimeout(uint orderId, StorageInterfaceV5.PendingMarketOrder order);
    event CouldNotCloseTrade(address indexed trader, uint indexed pairIndex, uint index, string message);

    constructor(StorageInterfaceV5 _storageT) {
        require(address(_storageT) != address(0));
        storageT = _storageT;
    }

    // 1. MANAGE STATE

    // Modifiers
    modifier onlyGov(){ require(msg.sender == storageT.gov(), "GOV_ONLY"); _; }

    // Manage trading storage address
    // CAREFUL: IF ADDRESS WRONG, CONTRACT CAN BE STUCK
    function setStorageT(StorageInterfaceV5 _storageT) external onlyGov{
        require(_storageT.gov() == storageT.gov());
        storageT = _storageT;
        emit AddressUpdated("storageT", address(_storageT));
    }

    // Prevent doing anything => during contracts update
    function pause() external onlyGov{ isPaused = !isPaused; emit Pause(isPaused); }

    // Manage variables
    function setMaxPosDaiP(uint _maxP) external onlyGov{
        require(_maxP > 0);
        maxPosDaiP = _maxP;
        emit NumberUpdated("maxPosDaiP", _maxP);
    }
    function setMinPosDai(uint _min) external onlyGov{
        require(_min > 0);
        minPosDai = _min;
        emit NumberUpdated("minPosDai", _min);
    }
    function setLimitOrdersTimelock(uint _blocks) external onlyGov{
        require(_blocks > 0);
        limitOrdersTimelock = _blocks;
        emit NumberUpdated("limitOrdersTimelock", _blocks);
    }
    function setOrderTimeout(uint _orderTimeout) external onlyGov{
        require(_orderTimeout > 0);
        orderTimeout = _orderTimeout;
        emit NumberUpdated("orderTimeout", _orderTimeout);
    }

    // 2. EXTERNAL TRADING FUNCTIONS

    // Modifiers
    modifier notContract(){ require(tx.origin == msg.sender); _; }
    modifier notPaused(){ require(!isPaused, "PAUSED"); _; }

    // Open a new trade (market or limit)
    function openTrade(
        StorageInterfaceV5.Trade memory t,
        bool _limit,
        uint _spreadReductionId,
        uint _slippageP,
        address _referral
    ) external notContract notPaused{

        require(storageT.openTradesCount(msg.sender, t.pairIndex) + storageT.pendingMarketOpenCount(msg.sender, t.pairIndex) 
            + storageT.openLimitOrdersCount(msg.sender, t.pairIndex) < storageT.maxTradesPerPair(), 
            "MAX_TRADES_PER_PAIR");
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        (, uint _reserveDai) = storageT.priceAggregator().tokenDaiReservesLp();
        require(t.positionSizeDai <= _reserveDai*maxPosDaiP/100/storageT.PRECISION(), 
            "ABOVE_MAX_POS");
        require(t.positionSizeDai >= minPosDai, "BELOW_MIN_POS");
        require(t.leverage > 0 && t.leverage >= storageT.priceAggregator().pairMinLeverage(t.pairIndex) 
            && t.leverage <= storageT.priceAggregator().pairMaxLeverage(t.pairIndex), 
            "LEVERAGE_INCORRECT");
        require(t.leverage <= storageT.defaultLeverageUnlocked() || t.leverage <= storageT.getLeverageUnlocked(msg.sender),
            "LEVERAGE_NOT_UNLOCKED");
        require(_spreadReductionId == 0 || storageT.nfts(_spreadReductionId-1).balanceOf(msg.sender) > 0,
            "NO_CORRESPONDING_NFT_SPREAD_REDUCTION");
        require(t.positionSizeDai * t.leverage + storageT.openInterestDai(t.pairIndex, t.buy ? 0 : 1) 
            <= storageT.openInterestDai(t.pairIndex, 2), "MAX_OPEN_INTEREST");
        require(t.tp == 0 || t.buy && t.openPrice < t.tp || !t.buy && t.openPrice > t.tp, "WRONG_TP");
        require(t.sl == 0 || t.buy && t.openPrice > t.sl || !t.buy && t.openPrice < t.sl, "WRONG_SL");

        storageT.transferDai(msg.sender, address(storageT), t.positionSizeDai);

        if(_limit){
            require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(t.pairIndex),
                "SLIPPAGE_TOO_SMALL");

            uint slip = t.openPrice*_slippageP/storageT.PRECISION()/100;
            uint index = storageT.firstEmptyOpenLimitIndex(msg.sender, t.pairIndex);

            storageT.storeOpenLimitOrder(StorageInterfaceV5.OpenLimitOrder(
                msg.sender,
                t.pairIndex,
                index,
                t.positionSizeDai,
                _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                t.buy,
                t.leverage,
                t.tp,
                t.sl,
                t.buy ? t.openPrice - slip : t.openPrice,
                t.buy ? t.openPrice : t.openPrice + slip,
                block.number,
                0
            ));

            emit OpenLimitPlaced(msg.sender, t.pairIndex, index);
        }else{
            uint order = storageT.priceAggregator().getPrice(
                t.pairIndex, 
                AggregatorInterfaceV5.OrderType.MARKET_OPEN, 
                t.positionSizeDai * t.leverage
            );

            storageT.storePendingMarketOrder(
                StorageInterfaceV5.PendingMarketOrder(
                    StorageInterfaceV5.Trade(
                        msg.sender,
                        t.pairIndex,
                        0, 0,
                        t.positionSizeDai,
                        0, 
                        t.buy,
                        t.leverage,
                        t.tp,
                        t.sl
                    ),
                    0,
                    t.openPrice,
                    _slippageP,
                    _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                    0
                ), order, true
            );

            emit MarketOrderInitiated(msg.sender, t.pairIndex, true, order);
        }

        storageT.storeReferral(msg.sender, _referral);
    }

    // Update open limit order
    function updateOpenLimitOrder(
        uint _pairIndex, 
        uint _index, 
        uint _price,        // PRECISION
        uint _slippageP,    // PRECISION,
        uint _tp,
        uint _sl
    ) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");
        require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(_pairIndex), 
            "MIN_LIMIT_SLIPPAGE_P");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, 
            "LIMIT_TIMELOCK");

        require(_tp == 0 || o.buy && _price < _tp || !o.buy && _price > _tp, "WRONG_TP");
        require(_sl == 0 || o.buy && _price > _sl || !o.buy && _price < _sl, "WRONG_SL");

        uint slip = _price*_slippageP/storageT.PRECISION()/100;
        o.minPrice = o.buy ? _price - slip : _price;
        o.maxPrice = o.buy ? _price : _price + slip;
        o.tp = _tp;
        o.sl = _sl;

        storageT.updateOpenLimitOrder(o);

        emit OpenLimitUpdated(msg.sender, _pairIndex, _index);
    }

    // Cancel open limit order
    function cancelOpenLimitOrder(uint _pairIndex, uint _index) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.transferDai(address(storageT), msg.sender, o.positionSize);

        storageT.unregisterOpenLimitOrder(msg.sender, _pairIndex, _index);
        emit OpenLimitCanceled(msg.sender, _pairIndex, _index);
    }

    // Update take profit for an open trade
    // Set to 0 to remove
    // Can be set in loss (for example exit long on a bounce even if in loss)
    // If long and tp is below current price => can be closed instantly
    // If short and tp is above current price => can be closed instantly
    function updateTp(uint _pairIndex, uint _index, uint _newTp) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);

        require(t.leverage > 0, "NO_TRADE");
        require(block.number - i.tpLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.updateTp(msg.sender, _pairIndex, _index, _newTp);

        emit TpUpdated(msg.sender, _pairIndex, _index);
    }

    // Update stop loss for an open trade
    // Set to 0 to remove
    // If long and sl is above current price => can be closed instantly
    // If short and sl is below current price => can be closed instantly
    // Can be set in profit = stop profit
    // must be above -STOP_LOSS_P profit => if liq at -90% => above -80%
    // otherwise can set at -89% and earn 11% of position size while at -90% liquidation earns 0 to trader
    function updateSl(uint _pairIndex, uint _index, uint _newSl) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(t.leverage > 0, "NO_TRADE");

        uint maxSlDist = t.openPrice * storageT.maxSlP() / 100 / t.leverage;
        require(_newSl == 0 || t.buy && _newSl >= t.openPrice - maxSlDist 
            || !t.buy && _newSl <= t.openPrice + maxSlDist, "SL_TOO_BIG");
        require(block.number - i.slLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");
        
        storageT.updateSl(msg.sender, _pairIndex, _index, _newSl);

        emit SlUpdated(msg.sender, _pairIndex, _index);
    }

    // Close open trade at current price
    function closeTradeMarket(uint _pairIndex, uint _index) external notContract notPaused{
        
        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        require(!i.beingMarketClosed, "ALREADY_BEING_CLOSED");
        require(t.leverage > 0, "NO_TRADE");

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            AggregatorInterfaceV5.OrderType.MARKET_CLOSE, 
            t.initialPosToken * t.leverage * i.tokenPriceDai / storageT.PRECISION()
        );

        storageT.storePendingMarketOrder(StorageInterfaceV5.PendingMarketOrder(
            StorageInterfaceV5.Trade(
                msg.sender,
                _pairIndex,
                _index,
                0, 0, 0, false, 0, 0, 0
            ),
            0, 0, 0, 0, 0
        ), order, false);
        emit MarketOrderInitiated(msg.sender, _pairIndex, false, order);
    }

    // Try to execute a tp, sl, liquidation, or limit long/short (only done by NFT holders)
    function executeNftOrder(
        StorageInterfaceV5.LimitOrder _orderType, 
        address _trader, 
        uint _pairIndex, 
        uint _index,
        uint _nftId, 
        uint _nftType
    ) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(_trader, _pairIndex, _index);
        require(_nftType > 0 && _nftType < 6, "WRONG_NFT_TYPE");
        require(msg.sender == storageT.gov() || storageT.nfts(_nftType-1).ownerOf(_nftId) == msg.sender,
            "NO_NFT");
        require(block.number >= storageT.nftLastSuccess(_nftId)+storageT.nftSuccessTimelock(),
            "SUCCESS_TIMELOCK");
        require(_orderType != StorageInterfaceV5.LimitOrder.OPEN || storageT.hasOpenLimitOrder(_trader, _pairIndex, _index), 
            "NO_LIMIT");
        require(_orderType == StorageInterfaceV5.LimitOrder.OPEN || t.leverage > 0, "NO_TRADE");
        require(_orderType != StorageInterfaceV5.LimitOrder.SL || t.sl > 0, "NO_SL");

        uint leveragedPosDai;
        if(_orderType == StorageInterfaceV5.LimitOrder.OPEN){
            StorageInterfaceV5.OpenLimitOrder memory l = storageT.getOpenLimitOrder(_trader, _pairIndex, _index);
            leveragedPosDai = l.positionSize * l.leverage;
        }else{
            StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(_trader, _pairIndex, _index);
            leveragedPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage / storageT.PRECISION();
        }

        storageT.transferLinkToAggregator(msg.sender, _pairIndex, leveragedPosDai);

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            _orderType == StorageInterfaceV5.LimitOrder.OPEN ? 
                AggregatorInterfaceV5.OrderType.LIMIT_OPEN : 
                AggregatorInterfaceV5.OrderType.LIMIT_CLOSE,
            leveragedPosDai
        );

        storageT.storePendingNftOrder(StorageInterfaceV5.PendingNftOrder(
            msg.sender,
            _nftId,
            _trader,
            _pairIndex,
            _index,
            _orderType
        ), order);
        emit NftOrderInitiated(msg.sender, _trader, _pairIndex, order);
    }

    // Claim back position size if market order callback not executed by oracle nodes after 50 blocks
    function openTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage > 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.transferDai(address(storageT), msg.sender, o.trade.positionSizeDai);
        storageT.unregisterPendingMarketOrder(_order, true);

        emit ChainlinkCallbackTimeout(_order, o);
    }

    // Trigger market close again if market close order callback not executed by oracle nodes after 50 blocks
    function closeTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);
        StorageInterfaceV5.Trade memory t = storageT.openTrades(o.trade.trader, o.trade.pairIndex, o.trade.index);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage == 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.unregisterPendingMarketOrder(_order, false);

        (bool success, bytes memory data) = address(this).delegatecall(
            abi.encodeWithSignature(
                "closeTradeMarket(uint256,uint256)",
                t.pairIndex,
                t.index
            )
        );

        if(!success){
            emit CouldNotCloseTrade(msg.sender, t.pairIndex, t.index, string(data));
        }

        emit ChainlinkCallbackTimeout(_order, o);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"indexed":false,"internalType":"struct StorageInterfaceV5.PendingMarketOrder","name":"order","type":"tuple"}],"name":"ChainlinkCallbackTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"CouldNotCloseTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"MarketOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"NftOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"SlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TpUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"cancelOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"closeTradeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"closeTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StorageInterfaceV5.LimitOrder","name":"_orderType","type":"uint8"},{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_nftType","type":"uint256"}],"name":"executeNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrdersTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPosDaiP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPosDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct StorageInterfaceV5.Trade","name":"t","type":"tuple"},{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_spreadReductionId","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"openTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orderTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setLimitOrdersTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxP","type":"uint256"}],"name":"setMaxPosDaiP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinPosDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderTimeout","type":"uint256"}],"name":"setOrderTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"name":"setStorageT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageT","outputs":[{"internalType":"contract StorageInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"uint256","name":"_tp","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSl","type":"uint256"}],"name":"updateSl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405263b2d05e006001556801e5b8fa8fe2ac0000600255601e60035560326004553480156200003057600080fd5b506040516200598338038062005983833981016040819052620000539162000093565b6001600160a01b0381166200006757600080fd5b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055620000c5565b600060208284031215620000a657600080fd5b81516001600160a01b0381168114620000be57600080fd5b9392505050565b6158ae80620000d56000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063a2a3c0cb116100d8578063be73fb991161008c578063d0eccac511610066578063d0eccac5146102db578063d4a1caa7146102ee578063d8defd151461030157600080fd5b8063be73fb99146102ac578063befa3411146102bf578063c641558e146102c857600080fd5b8063b8ebd5cc116100bd578063b8ebd5cc1461027d578063b9b6573a14610290578063ba206004146102a357600080fd5b8063a2a3c0cb1461024d578063b187bd261461026057600080fd5b80638456cb591161012f57806392818d661161011457806392818d6614610214578063990382cf146102275780639b0a24e21461023a57600080fd5b80638456cb59146101f9578063876d3abd1461020157600080fd5b8063530e40bb11610160578063530e40bb146101c85780635bd2150d146101dd57806381fc182b146101e657600080fd5b80630890d22a1461017c57806316fff07414610198575b600080fd5b61018560035481565b6040519081526020015b60405180910390f35b6000546101b09061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161018f565b6101db6101d63660046153b4565b610314565b005b61018560025481565b6101db6101f43660046153b4565b61046a565b6101db6105b4565b6101db61020f3660046153b4565b6106d2565b6101db61022236600461506c565b6109b7565b6101db6102353660046153b4565b610c47565b6101db6102483660046152d5565b61108c565b6101db61025b3660046153e6565b612a0b565b60005461026d9060ff1681565b604051901515815260200161018f565b6101db61028b366004615089565b6131b2565b6101db61029e3660046153e6565b613d05565b61018560045481565b6101db6102ba36600461542c565b61402e565b61018560015481565b6101db6102d6366004615458565b614447565b6101db6102e93660046153b4565b614a0b565b6101db6102fc3660046153b4565b614b55565b6101db61030f36600461542c565b614c9f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061502b565b6001600160a01b0316336001600160a01b0316146103ea5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f757600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061502b565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000811161054857600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a919061502b565b6001600160a01b0316336001600160a01b0316146106855760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106de57600080fd5b60005460ff161561071a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561076457600080fd5b505afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190615199565b9050600081602001511180156107c3575060045481602001516107bf9190615768565b4310155b6107fe5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8051516001600160a01b031633146108495760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b805160e0015161089b5760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60005481516080015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b5050600054604051630195728b60e71b815260048101869052600160248201526101009091046001600160a01b0316925063cab945809150604401600060405180830381600087803b15801561096257600080fd5b505af1158015610976573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb182826040516109ab9291906156e9565b60405180910390a15050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d919061502b565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e919061502b565b6001600160a01b0316816001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061502b565b6001600160a01b031614610b9b57600080fd5b600080546001600160a01b038316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9091161790556040517f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819061045f90839060408082526008908201527f73746f726167655400000000000000000000000000000000000000000000000060608201526001600160a01b0391909116602082015260800190565b323314610c5357600080fd5b60005460ff1615610c8f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610cd957600080fd5b505afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190615199565b6000805482518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529394509192610100909104169063a3a80ffe906064016101406040518083038186803b158015610d7f57600080fd5b505afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906152b8565b905060008260200151118015610dde57506004548260200151610dda9190615768565b4310155b610e195760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8151516001600160a01b03163314610e645760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b815160e0015115610eb75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60008054604051630195728b60e71b815260048101869052602481019290925261010090046001600160a01b03169063cab9458090604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610f52929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610fb59190615549565b600060405180830381855af49150503d8060008114610ff0576040519150601f19603f3d011682016040523d82523d6000602084013e610ff5565b606091505b50915091508161104c578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d498560400151846040516110439291906156af565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb1858560405161107d9291906156e9565b60405180910390a15050505050565b32331461109857600080fd5b60005460ff16156110d45760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906153cd565b60005460208701516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b0316906397e7995a9060440160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906153cd565b60005460208801516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690639c8912f19060440160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906153cd565b60005460208901516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690631c8636b49060440160206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906153cd565b6113539190615768565b61135d9190615768565b106113aa5760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af91906153cd565b106114fc5760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158291906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153cd565b1061164e5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d5919061502b565b6001600160a01b0316633a2fbfab6040518163ffffffff1660e01b8152600401604080518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190615408565b915050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561179557600080fd5b505afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd91906153cd565b6064600154836117dd91906157a2565b6117e79190615780565b6117f19190615780565b866080015111156118445760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103e1565b6002548660800151101561189a5760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103e1565b60008660e001511180156119b85750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f919061502b565b6001600160a01b03166359a992d087602001516040518263ffffffff1660e01b815260040161196091815260200190565b60206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b091906153cd565b8660e0015110155b8015611ace5750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061502b565b6001600160a01b031663281b693c87602001516040518263ffffffff1660e01b8152600401611a7691815260200190565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906153cd565b8660e0015111155b611b1a5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906153cd565b8660e00151111580611c4d57506000546040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b0316906368ca199d9060240160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4591906153cd565b8660e0015111155b611c995760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103e1565b831580611dc557506000805461010090046001600160a01b031663265aa621611cc36001886157c1565b6040518263ffffffff1660e01b8152600401611ce191815260200190565b60206040518083038186803b158015611cf957600080fd5b505afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d31919061502b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611d8b57600080fd5b505afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906153cd565b115b611e375760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103e1565b60005460208701516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201526101009091046001600160a01b0316906328daca219060440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd91906153cd565b600060019054906101000a90046001600160a01b03166001600160a01b03166328daca2188602001518960c00151611f16576001611f19565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906153cd565b8760e001518860800151611fbc91906157a2565b611fc69190615768565b11156120145760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103e1565b610100860151158061203a57508560c00151801561203a57508561010001518660a00151105b8061205a57508560c0015115801561205a57508561010001518660a00151115b6120915760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b61012086015115806120b757508560c0015180156120b757508561012001518660a00151115b806120d757508560c001511580156120d757508561012001518660a00151105b61210e5760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b600054608087015160405163373873db60e11b81523360048201526101009092046001600160a01b031660248301819052604483019190915290636e70e7b690606401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050841561265b57600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f919061502b565b6001600160a01b031663d5a9e90c87602001516040518263ffffffff1660e01b815260040161224091815260200190565b60206040518083038186803b15801561225857600080fd5b505afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229091906153cd565b8310156122df5760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236991906153cd565b858960a0015161237991906157a2565b6123839190615780565b61238d9190615780565b6000805460208a01516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915292935090916101009091046001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561240057600080fd5b505afa158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018b6020015181526020018481526020018b60800151815260200160008a116124a2576000612531565b60005461010090046001600160a01b0316633dae10a06124c360018d6157c1565b6040518263ffffffff1660e01b81526004016124e191815260200190565b60206040518083038186803b1580156124f957600080fd5b505afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906153cd565b81526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b610120015181526020018b60c00151612575578b60a00151612585565b858c60a0015161258591906157c1565b81526020018b60c001516125a857858c60a001516125a39190615768565b6125ae565b8b60a001515b815260200143815260200160008152506040518263ffffffff1660e01b81526004016125da9190615565565b600060405180830381600087803b1580156125f457600080fd5b505af1158015612608573d6000803e3d6000fd5b505050508760200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c18110593438360405161264c91815260200190565b60405180910390a3505061297f565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126aa57600080fd5b505afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061502b565b6001600160a01b031663fa8dd498886020015160008a60e001518b6080015161270b91906157a2565b6040518463ffffffff1660e01b81526004016127299392919061568e565b602060405180830381600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b91906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018c60200151815260200160008152602001600081526020018c608001518152602001600081526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c61012001518152508152602001600081526020018a60a001518152602001878152602001600089116128455760006128d4565b60005461010090046001600160a01b0316633dae10a061286660018c6157c1565b6040518263ffffffff1660e01b815260040161288491815260200190565b60206040518083038186803b15801561289c57600080fd5b505afa1580156128b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d491906153cd565b815260200160008152508360016040518463ffffffff1660e01b81526004016128ff93929190615605565b600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b50505050602087810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6000546040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03848116602483015261010090920490911690639d1a107390604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050505050505050565b323314612a1757600080fd5b60005460ff1615612a535760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101859052604481018490526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aaa57600080fd5b505afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae291906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018790526044810186905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015612b3d57600080fd5b505afa158015612b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b75919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc557600080fd5b505afa158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7c91906153cd565b10612cc95760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1757600080fd5b505afa158015612d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4f91906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612d9657600080fd5b505afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce91906153cd565b10612e1b5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b8060a0015115612e6d5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103e1565b60008260e0015111612eac5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612efb57600080fd5b505afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061502b565b6001600160a01b031663fa8dd498866001600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9257600080fd5b505afa158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca91906153cd565b86602001518860e001518960600151612fe391906157a2565b612fed91906157a2565b612ff79190615780565b6040518463ffffffff1660e01b81526004016130159392919061568e565b602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306791906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b815260040161313793929190615605565b600060405180830381600087803b15801561315157600080fd5b505af1158015613165573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9250608001905061107d565b3233146131be57600080fd5b60005460ff16156131fa5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063a3a80ffe906064016101406040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d91906152b8565b905060008211801561329f5750600682105b6132eb5760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613371919061502b565b6001600160a01b0316336001600160a01b031614806134a45750600054339061010090046001600160a01b031663265aa6216133ae6001866157c1565b6040518263ffffffff1660e01b81526004016133cc91815260200190565b60206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c919061502b565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161344991815260200190565b60206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061502b565b6001600160a01b0316145b6134f05760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561353e57600080fd5b505afa158015613552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357691906153cd565b6000546040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156135d757600080fd5b505afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f91906153cd565b6136199190615768565b4310156136685760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103e1565b600387600381111561367c5761367c61581e565b1415806137155750600054604051636e6f99cd60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063dcdf339a9060640160206040518083038186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613715919061504f565b61374c5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60038760038111156137605761376061581e565b1480613770575060008160e00151115b6137a75760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60018760038111156137bb576137bb61581e565b1415806137cd57506000816101200151115b6138195760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103e1565b6000600388600381111561382f5761382f61581e565b14156138e65760008054604051632e21e28b60e21b81526001600160a01b038a81166004830152602482018a9052604482018990526101009092049091169063b8878a2c906064016101a06040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c891906150e6565b90508060c0015181606001516138de91906157a2565b915050613a31565b60008054604051638c8ff1d560e01b81526001600160a01b038a81166004830152602482018a90526044820189905261010090920490911690638c8ff1d59060640160c06040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613978919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156139c857600080fd5b505afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906153cd565b8360e0015182602001518560600151613a1991906157a2565b613a2391906157a2565b613a2d9190615780565b9150505b6000546040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018390526101009091046001600160a01b031690636690a80690606401600060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b5050505060008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0857600080fd5b505afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b40919061502b565b6001600160a01b031663fa8dd4988860038c6003811115613b6357613b6361581e565b14613b6f576003613b72565b60025b856040518463ffffffff1660e01b8152600401613b919392919061568e565b602060405180830381600087803b158015613bab57600080fd5b505af1158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be391906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613c5657613c5661581e565b815250836040518363ffffffff1660e01b8152600401613c7792919061562c565b600060405180830381600087803b158015613c9157600080fd5b505af1158015613ca5573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613d1157600080fd5b60005460ff1615613d4d5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101849052604481018390526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda919061504f565b613e115760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101859052604481018490526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613e6857600080fd5b505afa158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea091906150e6565b905060035481610160015143613eb691906157c1565b1015613ef55760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b600054606082015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b50506000546040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018690526101009091046001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b32331461403a57600080fd5b60005460ff16156140765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156140cd57600080fd5b505afa1580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b15801561416057600080fd5b505afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614198919061522a565b905060008260e00151116141d95760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008260e001516064600060019054906101000a90046001600160a01b03166001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561423057600080fd5b505afa158015614244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426891906153cd565b8560a0015161427791906157a2565b6142819190615780565b61428b9190615780565b90508315806142b557508260c0015180156142b55750808360a001516142b191906157c1565b8410155b806142dc57508260c001511580156142dc5750808360a001516142d89190615768565b8411155b6143285760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103e1565b600354608083015161433a90436157c1565b10156143795760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810188905260448101879052606481018690526101009091046001600160a01b03169063a354418190608401600060405180830381600087803b1580156143f057600080fd5b505af1158015614404573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461445357600080fd5b60005460ff161561448f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101889052604481018790526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c919061504f565b6145535760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a157600080fd5b505afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061502b565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161460691815260200190565b60206040518083038186803b15801561461e57600080fd5b505afa158015614632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465691906153cd565b8310156146a55760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101899052604481018890526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473491906150e6565b90506003548161016001514361474a91906157c1565b10156147895760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b8215806147a157508060a0015180156147a157508285105b806147b857508060a001511580156147b857508285115b6147ef5760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b81158061480757508060a00151801561480757508185115b8061481e57508060a0015115801561481e57508185105b6148555760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a757600080fd5b505afa1580156148bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148df91906153cd565b6148e987896157a2565b6148f39190615780565b6148fd9190615780565b90508160a0015161490e5785614918565b61491881876157c1565b61012083015260a0820151614936576149318187615768565b614938565b855b61014083015260e082018490526101008083018490526000546040517fb767608a0000000000000000000000000000000000000000000000000000000081529190046001600160a01b03169063b767608a90614998908590600401615565565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5957600080fd5b505afa158015614a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a91919061502b565b6001600160a01b0316336001600160a01b031614614adc5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614ae957600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba357600080fd5b505afa158015614bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdb919061502b565b6001600160a01b0316336001600160a01b031614614c265760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614c3357600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b323314614cab57600080fd5b60005460ff1615614ce75760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7691906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015614dd157600080fd5b505afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e09919061522a565b905060008260e0015111614e4a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b6003546060820151614e5c90436157c1565b1015614e9b5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590526101009091046001600160a01b031690637fdb96f390608401600060405180830381600087803b158015614f1257600080fd5b505af1158015614f26573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b8035614f7281615855565b919050565b8051614f7281615855565b8035614f728161586a565b8051614f728161586a565b60006101408284031215614fab57600080fd5b614fb36156fe565b9050614fbe82614f77565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a0820152614ffe60c08301614f8d565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561503d57600080fd5b815161504881615855565b9392505050565b60006020828403121561506157600080fd5b81516150488161586a565b60006020828403121561507e57600080fd5b813561504881615855565b60008060008060008060c087890312156150a257600080fd5b8635600481106150b157600080fd5b955060208701356150c181615855565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156150f957600080fd5b615101615736565b61510a83614f77565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261514060a08401614f8d565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e082840312156151ac57600080fd5b60405160c0810181811067ffffffffffffffff821117156151dd57634e487b7160e01b600052604160045260246000fd5b6040526151ea8484614f98565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c0828403121561523c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561526d57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a08301516152ac8161586a565b60a08201529392505050565b600061014082840312156152cb57600080fd5b6150488383614f98565b60008060008060008587036101c08112156152ef57600080fd5b610140808212156152ff57600080fd5b6153076156fe565b915061531288614f67565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261535260c08901614f82565b60c083015260e088013560e0830152610100808901358184015250610120808901358184015250819650615387818901614f82565b95505050610160860135925061018086013591506153a86101a08701614f67565b90509295509295909350565b6000602082840312156153c657600080fd5b5035919050565b6000602082840312156153df57600080fd5b5051919050565b600080604083850312156153f957600080fd5b50508035926020909101359150565b6000806040838503121561541b57600080fd5b505080516020909101519092909150565b60008060006060848603121561544157600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561547157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c08101516154ef60c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b6000825161555b8184602087016157d8565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a08301516155b260a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b6102208101615614828661549b565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161567b81615834565b60a083015260c090910191909152919050565b8381526060810161569e84615834565b602082019390935260400152919050565b82815260406020820152600082518060408401526156d48160608501602087016157d8565b601f01601f1916919091016060019392505050565b8281526102008101615048602083018461549b565b604051610140810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b6000821982111561577b5761577b615808565b500190565b60008261579d57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156157bc576157bc615808565b500290565b6000828210156157d3576157d3615808565b500390565b60005b838110156157f35781810151838201526020016157db565b83811115615802576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6004811061585257634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b038116811461585257600080fd5b801515811461585257600080fdfea26469706673582212205dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b79864736f6c63430008070033000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101775760003560e01c8063a2a3c0cb116100d8578063be73fb991161008c578063d0eccac511610066578063d0eccac5146102db578063d4a1caa7146102ee578063d8defd151461030157600080fd5b8063be73fb99146102ac578063befa3411146102bf578063c641558e146102c857600080fd5b8063b8ebd5cc116100bd578063b8ebd5cc1461027d578063b9b6573a14610290578063ba206004146102a357600080fd5b8063a2a3c0cb1461024d578063b187bd261461026057600080fd5b80638456cb591161012f57806392818d661161011457806392818d6614610214578063990382cf146102275780639b0a24e21461023a57600080fd5b80638456cb59146101f9578063876d3abd1461020157600080fd5b8063530e40bb11610160578063530e40bb146101c85780635bd2150d146101dd57806381fc182b146101e657600080fd5b80630890d22a1461017c57806316fff07414610198575b600080fd5b61018560035481565b6040519081526020015b60405180910390f35b6000546101b09061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161018f565b6101db6101d63660046153b4565b610314565b005b61018560025481565b6101db6101f43660046153b4565b61046a565b6101db6105b4565b6101db61020f3660046153b4565b6106d2565b6101db61022236600461506c565b6109b7565b6101db6102353660046153b4565b610c47565b6101db6102483660046152d5565b61108c565b6101db61025b3660046153e6565b612a0b565b60005461026d9060ff1681565b604051901515815260200161018f565b6101db61028b366004615089565b6131b2565b6101db61029e3660046153e6565b613d05565b61018560045481565b6101db6102ba36600461542c565b61402e565b61018560015481565b6101db6102d6366004615458565b614447565b6101db6102e93660046153b4565b614a0b565b6101db6102fc3660046153b4565b614b55565b6101db61030f36600461542c565b614c9f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061502b565b6001600160a01b0316336001600160a01b0316146103ea5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f757600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061502b565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000811161054857600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a919061502b565b6001600160a01b0316336001600160a01b0316146106855760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106de57600080fd5b60005460ff161561071a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561076457600080fd5b505afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190615199565b9050600081602001511180156107c3575060045481602001516107bf9190615768565b4310155b6107fe5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8051516001600160a01b031633146108495760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b805160e0015161089b5760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60005481516080015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b5050600054604051630195728b60e71b815260048101869052600160248201526101009091046001600160a01b0316925063cab945809150604401600060405180830381600087803b15801561096257600080fd5b505af1158015610976573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb182826040516109ab9291906156e9565b60405180910390a15050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d919061502b565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e919061502b565b6001600160a01b0316816001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061502b565b6001600160a01b031614610b9b57600080fd5b600080546001600160a01b038316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9091161790556040517f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819061045f90839060408082526008908201527f73746f726167655400000000000000000000000000000000000000000000000060608201526001600160a01b0391909116602082015260800190565b323314610c5357600080fd5b60005460ff1615610c8f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610cd957600080fd5b505afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190615199565b6000805482518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529394509192610100909104169063a3a80ffe906064016101406040518083038186803b158015610d7f57600080fd5b505afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906152b8565b905060008260200151118015610dde57506004548260200151610dda9190615768565b4310155b610e195760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8151516001600160a01b03163314610e645760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b815160e0015115610eb75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60008054604051630195728b60e71b815260048101869052602481019290925261010090046001600160a01b03169063cab9458090604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610f52929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610fb59190615549565b600060405180830381855af49150503d8060008114610ff0576040519150601f19603f3d011682016040523d82523d6000602084013e610ff5565b606091505b50915091508161104c578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d498560400151846040516110439291906156af565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb1858560405161107d9291906156e9565b60405180910390a15050505050565b32331461109857600080fd5b60005460ff16156110d45760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906153cd565b60005460208701516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b0316906397e7995a9060440160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906153cd565b60005460208801516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690639c8912f19060440160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906153cd565b60005460208901516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690631c8636b49060440160206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906153cd565b6113539190615768565b61135d9190615768565b106113aa5760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af91906153cd565b106114fc5760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158291906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153cd565b1061164e5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d5919061502b565b6001600160a01b0316633a2fbfab6040518163ffffffff1660e01b8152600401604080518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190615408565b915050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561179557600080fd5b505afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd91906153cd565b6064600154836117dd91906157a2565b6117e79190615780565b6117f19190615780565b866080015111156118445760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103e1565b6002548660800151101561189a5760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103e1565b60008660e001511180156119b85750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f919061502b565b6001600160a01b03166359a992d087602001516040518263ffffffff1660e01b815260040161196091815260200190565b60206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b091906153cd565b8660e0015110155b8015611ace5750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061502b565b6001600160a01b031663281b693c87602001516040518263ffffffff1660e01b8152600401611a7691815260200190565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906153cd565b8660e0015111155b611b1a5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906153cd565b8660e00151111580611c4d57506000546040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b0316906368ca199d9060240160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4591906153cd565b8660e0015111155b611c995760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103e1565b831580611dc557506000805461010090046001600160a01b031663265aa621611cc36001886157c1565b6040518263ffffffff1660e01b8152600401611ce191815260200190565b60206040518083038186803b158015611cf957600080fd5b505afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d31919061502b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611d8b57600080fd5b505afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906153cd565b115b611e375760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103e1565b60005460208701516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201526101009091046001600160a01b0316906328daca219060440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd91906153cd565b600060019054906101000a90046001600160a01b03166001600160a01b03166328daca2188602001518960c00151611f16576001611f19565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906153cd565b8760e001518860800151611fbc91906157a2565b611fc69190615768565b11156120145760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103e1565b610100860151158061203a57508560c00151801561203a57508561010001518660a00151105b8061205a57508560c0015115801561205a57508561010001518660a00151115b6120915760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b61012086015115806120b757508560c0015180156120b757508561012001518660a00151115b806120d757508560c001511580156120d757508561012001518660a00151105b61210e5760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b600054608087015160405163373873db60e11b81523360048201526101009092046001600160a01b031660248301819052604483019190915290636e70e7b690606401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050841561265b57600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f919061502b565b6001600160a01b031663d5a9e90c87602001516040518263ffffffff1660e01b815260040161224091815260200190565b60206040518083038186803b15801561225857600080fd5b505afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229091906153cd565b8310156122df5760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236991906153cd565b858960a0015161237991906157a2565b6123839190615780565b61238d9190615780565b6000805460208a01516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915292935090916101009091046001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561240057600080fd5b505afa158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018b6020015181526020018481526020018b60800151815260200160008a116124a2576000612531565b60005461010090046001600160a01b0316633dae10a06124c360018d6157c1565b6040518263ffffffff1660e01b81526004016124e191815260200190565b60206040518083038186803b1580156124f957600080fd5b505afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906153cd565b81526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b610120015181526020018b60c00151612575578b60a00151612585565b858c60a0015161258591906157c1565b81526020018b60c001516125a857858c60a001516125a39190615768565b6125ae565b8b60a001515b815260200143815260200160008152506040518263ffffffff1660e01b81526004016125da9190615565565b600060405180830381600087803b1580156125f457600080fd5b505af1158015612608573d6000803e3d6000fd5b505050508760200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c18110593438360405161264c91815260200190565b60405180910390a3505061297f565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126aa57600080fd5b505afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061502b565b6001600160a01b031663fa8dd498886020015160008a60e001518b6080015161270b91906157a2565b6040518463ffffffff1660e01b81526004016127299392919061568e565b602060405180830381600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b91906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018c60200151815260200160008152602001600081526020018c608001518152602001600081526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c61012001518152508152602001600081526020018a60a001518152602001878152602001600089116128455760006128d4565b60005461010090046001600160a01b0316633dae10a061286660018c6157c1565b6040518263ffffffff1660e01b815260040161288491815260200190565b60206040518083038186803b15801561289c57600080fd5b505afa1580156128b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d491906153cd565b815260200160008152508360016040518463ffffffff1660e01b81526004016128ff93929190615605565b600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b50505050602087810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6000546040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03848116602483015261010090920490911690639d1a107390604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050505050505050565b323314612a1757600080fd5b60005460ff1615612a535760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101859052604481018490526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aaa57600080fd5b505afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae291906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018790526044810186905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015612b3d57600080fd5b505afa158015612b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b75919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc557600080fd5b505afa158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7c91906153cd565b10612cc95760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1757600080fd5b505afa158015612d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4f91906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612d9657600080fd5b505afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce91906153cd565b10612e1b5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b8060a0015115612e6d5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103e1565b60008260e0015111612eac5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612efb57600080fd5b505afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061502b565b6001600160a01b031663fa8dd498866001600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9257600080fd5b505afa158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca91906153cd565b86602001518860e001518960600151612fe391906157a2565b612fed91906157a2565b612ff79190615780565b6040518463ffffffff1660e01b81526004016130159392919061568e565b602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306791906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b815260040161313793929190615605565b600060405180830381600087803b15801561315157600080fd5b505af1158015613165573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9250608001905061107d565b3233146131be57600080fd5b60005460ff16156131fa5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063a3a80ffe906064016101406040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d91906152b8565b905060008211801561329f5750600682105b6132eb5760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613371919061502b565b6001600160a01b0316336001600160a01b031614806134a45750600054339061010090046001600160a01b031663265aa6216133ae6001866157c1565b6040518263ffffffff1660e01b81526004016133cc91815260200190565b60206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c919061502b565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161344991815260200190565b60206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061502b565b6001600160a01b0316145b6134f05760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561353e57600080fd5b505afa158015613552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357691906153cd565b6000546040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156135d757600080fd5b505afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f91906153cd565b6136199190615768565b4310156136685760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103e1565b600387600381111561367c5761367c61581e565b1415806137155750600054604051636e6f99cd60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063dcdf339a9060640160206040518083038186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613715919061504f565b61374c5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60038760038111156137605761376061581e565b1480613770575060008160e00151115b6137a75760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60018760038111156137bb576137bb61581e565b1415806137cd57506000816101200151115b6138195760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103e1565b6000600388600381111561382f5761382f61581e565b14156138e65760008054604051632e21e28b60e21b81526001600160a01b038a81166004830152602482018a9052604482018990526101009092049091169063b8878a2c906064016101a06040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c891906150e6565b90508060c0015181606001516138de91906157a2565b915050613a31565b60008054604051638c8ff1d560e01b81526001600160a01b038a81166004830152602482018a90526044820189905261010090920490911690638c8ff1d59060640160c06040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613978919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156139c857600080fd5b505afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906153cd565b8360e0015182602001518560600151613a1991906157a2565b613a2391906157a2565b613a2d9190615780565b9150505b6000546040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018390526101009091046001600160a01b031690636690a80690606401600060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b5050505060008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0857600080fd5b505afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b40919061502b565b6001600160a01b031663fa8dd4988860038c6003811115613b6357613b6361581e565b14613b6f576003613b72565b60025b856040518463ffffffff1660e01b8152600401613b919392919061568e565b602060405180830381600087803b158015613bab57600080fd5b505af1158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be391906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613c5657613c5661581e565b815250836040518363ffffffff1660e01b8152600401613c7792919061562c565b600060405180830381600087803b158015613c9157600080fd5b505af1158015613ca5573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613d1157600080fd5b60005460ff1615613d4d5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101849052604481018390526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda919061504f565b613e115760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101859052604481018490526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613e6857600080fd5b505afa158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea091906150e6565b905060035481610160015143613eb691906157c1565b1015613ef55760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b600054606082015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b50506000546040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018690526101009091046001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b32331461403a57600080fd5b60005460ff16156140765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156140cd57600080fd5b505afa1580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b15801561416057600080fd5b505afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614198919061522a565b905060008260e00151116141d95760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008260e001516064600060019054906101000a90046001600160a01b03166001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561423057600080fd5b505afa158015614244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426891906153cd565b8560a0015161427791906157a2565b6142819190615780565b61428b9190615780565b90508315806142b557508260c0015180156142b55750808360a001516142b191906157c1565b8410155b806142dc57508260c001511580156142dc5750808360a001516142d89190615768565b8411155b6143285760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103e1565b600354608083015161433a90436157c1565b10156143795760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810188905260448101879052606481018690526101009091046001600160a01b03169063a354418190608401600060405180830381600087803b1580156143f057600080fd5b505af1158015614404573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461445357600080fd5b60005460ff161561448f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101889052604481018790526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c919061504f565b6145535760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a157600080fd5b505afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061502b565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161460691815260200190565b60206040518083038186803b15801561461e57600080fd5b505afa158015614632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465691906153cd565b8310156146a55760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101899052604481018890526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473491906150e6565b90506003548161016001514361474a91906157c1565b10156147895760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b8215806147a157508060a0015180156147a157508285105b806147b857508060a001511580156147b857508285115b6147ef5760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b81158061480757508060a00151801561480757508185115b8061481e57508060a0015115801561481e57508185105b6148555760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a757600080fd5b505afa1580156148bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148df91906153cd565b6148e987896157a2565b6148f39190615780565b6148fd9190615780565b90508160a0015161490e5785614918565b61491881876157c1565b61012083015260a0820151614936576149318187615768565b614938565b855b61014083015260e082018490526101008083018490526000546040517fb767608a0000000000000000000000000000000000000000000000000000000081529190046001600160a01b03169063b767608a90614998908590600401615565565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5957600080fd5b505afa158015614a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a91919061502b565b6001600160a01b0316336001600160a01b031614614adc5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614ae957600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba357600080fd5b505afa158015614bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdb919061502b565b6001600160a01b0316336001600160a01b031614614c265760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614c3357600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b323314614cab57600080fd5b60005460ff1615614ce75760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7691906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015614dd157600080fd5b505afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e09919061522a565b905060008260e0015111614e4a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b6003546060820151614e5c90436157c1565b1015614e9b5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590526101009091046001600160a01b031690637fdb96f390608401600060405180830381600087803b158015614f1257600080fd5b505af1158015614f26573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b8035614f7281615855565b919050565b8051614f7281615855565b8035614f728161586a565b8051614f728161586a565b60006101408284031215614fab57600080fd5b614fb36156fe565b9050614fbe82614f77565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a0820152614ffe60c08301614f8d565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561503d57600080fd5b815161504881615855565b9392505050565b60006020828403121561506157600080fd5b81516150488161586a565b60006020828403121561507e57600080fd5b813561504881615855565b60008060008060008060c087890312156150a257600080fd5b8635600481106150b157600080fd5b955060208701356150c181615855565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156150f957600080fd5b615101615736565b61510a83614f77565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261514060a08401614f8d565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e082840312156151ac57600080fd5b60405160c0810181811067ffffffffffffffff821117156151dd57634e487b7160e01b600052604160045260246000fd5b6040526151ea8484614f98565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c0828403121561523c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561526d57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a08301516152ac8161586a565b60a08201529392505050565b600061014082840312156152cb57600080fd5b6150488383614f98565b60008060008060008587036101c08112156152ef57600080fd5b610140808212156152ff57600080fd5b6153076156fe565b915061531288614f67565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261535260c08901614f82565b60c083015260e088013560e0830152610100808901358184015250610120808901358184015250819650615387818901614f82565b95505050610160860135925061018086013591506153a86101a08701614f67565b90509295509295909350565b6000602082840312156153c657600080fd5b5035919050565b6000602082840312156153df57600080fd5b5051919050565b600080604083850312156153f957600080fd5b50508035926020909101359150565b6000806040838503121561541b57600080fd5b505080516020909101519092909150565b60008060006060848603121561544157600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561547157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c08101516154ef60c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b6000825161555b8184602087016157d8565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a08301516155b260a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b6102208101615614828661549b565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161567b81615834565b60a083015260c090910191909152919050565b8381526060810161569e84615834565b602082019390935260400152919050565b82815260406020820152600082518060408401526156d48160608501602087016157d8565b601f01601f1916919091016060019392505050565b8281526102008101615048602083018461549b565b604051610140810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b6000821982111561577b5761577b615808565b500190565b60008261579d57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156157bc576157bc615808565b500290565b6000828210156157d3576157d3615808565b500390565b60005b838110156157f35781810151838201526020016157db565b83811115615802576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6004811061585257634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b038116811461585257600080fd5b801515811461585257600080fdfea26469706673582212205dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b79864736f6c63430008070033

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

000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

-----Decoded View---------------
Arg [0] : _storageT (address): 0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd


Deployed Bytecode Sourcemap

9097:16979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9449:36;;;;;;;;;28776:25:1;;;28764:2;28749:18;9449:36:0;;;;;;;;9209:34;;;;;;;;-1:-1:-1;;;;;9209:34:0;;;;;;-1:-1:-1;;;;;11472:55:1;;;11454:74;;11442:2;11427:18;9209:34:0;11308:226:1;11491:160:0;;;;;;:::i;:::-;;:::i;:::-;;9379:33;;;;;;11318:167;;;;;;:::i;:::-;;:::i;11205:80::-;;;:::i;24295:628::-;;;;;;:::i;:::-;;:::i;10918:221::-;;;;;;:::i;:::-;;:::i;25042:1031::-;;;;;;:::i;:::-;;:::i;12311:4150::-;;;;;;:::i;:::-;;:::i;20544:1311::-;;;;;;:::i;:::-;;:::i;9156:20::-;;;;;;;;;;;;14489:14:1;;14482:22;14464:41;;14452:2;14437:18;9156:20:0;14324:187:1;21956:2228:0;;;;;;:::i;:::-;;:::i;17742:612::-;;;;;;:::i;:::-;;:::i;9516:29::-;;;;;;19683:811;;;;;;:::i;:::-;;:::i;9304:35::-;;;;;;16501:1201;;;;;;:::i;:::-;;:::i;11865:205::-;;;;;;:::i;:::-;;:::i;11657:202::-;;;;;;:::i;:::-;;:::i;18660:573::-;;;;;;:::i;:::-;;:::i;11491:160::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;;;;;;;;;11566:1:::1;11559:4;:8;11551:17;;;::::0;::::1;;11579:9;:16:::0;;;11611:32:::1;::::0;;18814:21:1;;;18871:1;18851:18;;;18844:29;;;;18909:11;18904:2;18889:18;;18882:39;18988:4;18973:20;;18966:36;;;11611:32:0::1;::::0;18953:3:1;18938:19;11611:32:0::1;;;;;;;;11491:160:::0;:::o;11318:167::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11396:1:::1;11388:5;:9;11380:18;;;::::0;::::1;;11409:10;:18:::0;;;11443:34:::1;::::0;;24294:21:1;;;24351:2;24331:18;;;24324:30;;;;24390:12;24385:2;24370:18;;24363:40;24470:4;24455:20;;24448:36;;;11443:34:0::1;::::0;24435:3:1;24420:19;11443:34:0::1;24082:408:1::0;11205:80:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11252:8:::1;::::0;;::::1;::::0;;::::1;11251:9;-1:-1:-1::0;;11240:20:0;;::::1;::::0;::::1;::::0;;;11267:15:::1;::::0;11273:8;;14489:14:1;14482:22;14464:41;;11267:15:0::1;::::0;14452:2:1;14437:18;11267:15:0::1;;;;;;;11205:80::o:0;24295:628::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;24383:46:::2;24432:8:::0;;:41:::2;::::0;-1:-1:-1;;;24432:41:0;;::::2;::::0;::::2;28776:25:1::0;;;24432:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24432:8:0::2;::::0;:33:::2;::::0;28749:18:1;;24432:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24383:90;;24504:1;24494;:7;;;:11;:53;;;;;24535:12;;24525:1;:7;;;:22;;;;:::i;:::-;24509:12;:38;;24494:53;24486:92;;;::::0;-1:-1:-1;;;24486:92:0;;16736:2:1;24486:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;24486:92:0::2;16534:336:1::0;24486:92:0::2;24597:7:::0;;:14;-1:-1:-1;;;;;24597:28:0::2;24615:10;24597:28;24589:55;;;::::0;-1:-1:-1;;;24589:55:0;;21531:2:1;24589:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;24589:55:0::2;21329:338:1::0;24589:55:0::2;24663:7:::0;;:16:::2;;::::0;24655:56:::2;;;::::0;-1:-1:-1;;;24655:56:0;;23932:2:1;24655:56:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;24655:56:0::2;23730:347:1::0;24655:56:0::2;24724:8;::::0;24776:7;;:23:::2;;::::0;24724:76:::2;::::0;-1:-1:-1;;;24724:76:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;24724:8:0::2;:76;::::0;::::2;12134:34:1::0;;;24764:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;24724:8:0;:20:::2;::::0;12046:18:1;;24724:76:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24811:8:0::2;::::0;:51:::2;::::0;-1:-1:-1;;;24811:51:0;;::::2;::::0;::::2;28980:25:1::0;;;24811:8:0::2;29021:18:1::0;;;29014:50;24811:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24811:8:0::2;::::0;-1:-1:-1;24811:37:0::2;::::0;-1:-1:-1;28953:18:1;;24811:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24880:35;24905:6;24913:1;24880:35;;;;;;;:::i;:::-;;;;;;;;24370:553;24295:628:::0;:::o;10918:221::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11023:8:::1;;;;;;;;;-1:-1:-1::0;;;;;11023:8:0::1;-1:-1:-1::0;;;;;11023:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;:9;-1:-1:-1::0;;;;;11004:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;;10996:42;;;::::0;::::1;;11049:8;:20:::0;;-1:-1:-1;;;;;11049:20:0;::::1;;;::::0;;;::::1;;::::0;;11085:46:::1;::::0;::::1;::::0;::::1;::::0;11060:9;;19579:2:1;19561:21;;;19618:1;19598:18;;;19591:29;19656:10;19651:2;19636:18;;19629:38;-1:-1:-1;;;;;19741:55:1;;;;19734:4;19719:20;;19712:85;19699:3;19684:19;;19349:454;25042:1031:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;25131:46:::2;25180:8:::0;;:41:::2;::::0;-1:-1:-1;;;25180:41:0;;::::2;::::0;::::2;28776:25:1::0;;;25180:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;25180:8:0::2;::::0;:33:::2;::::0;28749:18:1;;25180:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:33;25268:8:::0;;25288:7;;:14;;25304:17:::2;::::0;::::2;::::0;25323:13:::2;::::0;;::::2;::::0;25268:69;;-1:-1:-1;;;25268:69:0;;-1:-1:-1;;;;;13726:55:1;;;25268:69:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;;13841:18;;;13834:34;;;;25288:7:0;;-1:-1:-1;25232:33:0;;25268:8:::2;::::0;;::::2;;::::0;:19:::2;::::0;13681:18:1;;25268:69:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:105;;25368:1;25358;:7;;;:11;:53;;;;;25399:12;;25389:1;:7;;;:22;;;;:::i;:::-;25373:12;:38;;25358:53;25350:92;;;::::0;-1:-1:-1;;;25350:92:0;;16736:2:1;25350:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;25350:92:0::2;16534:336:1::0;25350:92:0::2;25461:7:::0;;:14;-1:-1:-1;;;;;25461:28:0::2;25479:10;25461:28;25453:55;;;::::0;-1:-1:-1;;;25453:55:0;;21531:2:1;25453:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;25453:55:0::2;21329:338:1::0;25453:55:0::2;25527:7:::0;;:16:::2;;::::0;:21;25519:57:::2;;;::::0;-1:-1:-1;;;25519:57:0;;23932:2:1;25519:57:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;25519:57:0::2;23730:347:1::0;25519:57:0::2;25589:8;::::0;;:52:::2;::::0;-1:-1:-1;;;25589:52:0;;::::2;::::0;::::2;28980:25:1::0;;;29021:18;;;29014:50;;;;25589:8:0::2;::::0;::::2;-1:-1:-1::0;;;;;25589:8:0::2;::::0;:37:::2;::::0;28953:18:1;;25589:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25655:12;25669:17:::0;25698:4:::2;-1:-1:-1::0;;;;;25690:26:0::2;25827:1;:11;;;25857:1;:7;;;25731:148;;;;;;;;29640:25:1::0;;;29696:2;29681:18;;29674:34;29628:2;29613:18;;29458:256;25731:148:0::2;;::::0;;-1:-1:-1;;25731:148:0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;::::2;;;;::::0;;25690:200;::::2;::::0;25731:148;25690:200:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25654:236;;;;25907:7;25903:110;;25966:1;:11;;;25954:10;-1:-1:-1::0;;;;;25935:66:0::2;;25979:1;:7;;;25995:4;25935:66;;;;;;;:::i;:::-;;;;;;;;25903:110;26030:35;26055:6;26063:1;26030:35;;;;;;;:::i;:::-;;;;;;;;25118:955;;;;25042:1031:::0;:::o;12311:4150::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;12724:8:::2;;;;;;;;;-1:-1:-1::0;;;;;12724:8:0::2;-1:-1:-1::0;;;;;12724:25:0::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12667:8;::::0;12709:11:::2;::::0;::::2;::::0;12667:54:::2;::::0;;;;12697:10:::2;12667:54;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12667:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12667:8:0::2;::::0;:29:::2;::::0;12896:18:1;;12667:54:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12594:8;::::0;12638:11:::2;::::0;::::2;::::0;12594:56:::2;::::0;;;;12626:10:::2;12594:56;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12594:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12594:8:0::2;::::0;:31:::2;::::0;12896:18:1;;12594:56:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12542:8;::::0;12579:11:::2;::::0;::::2;::::0;12542:49:::2;::::0;;;;12567:10:::2;12542:49;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12542:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12542:8:0::2;::::0;:24:::2;::::0;12896:18:1;;12542:49:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:108;;;;:::i;:::-;:179;;;;:::i;:::-;:209;12534:255;;;::::0;-1:-1:-1;;;12534:255:0;;20346:2:1;12534:255:0::2;::::0;::::2;20328:21:1::0;20385:2;20365:18;;;20358:30;20424:21;20404:18;;;20397:49;20463:18;;12534:255:0::2;20144:343:1::0;12534:255:0::2;12848:8;;;;;;;;;-1:-1:-1::0;;;;;12848:8:0::2;-1:-1:-1::0;;;;;12848:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12808:8;::::0;:37:::2;::::0;-1:-1:-1;;;12808:37:0;;12832:12:::2;12808:37;::::0;::::2;28776:25:1::0;12808:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12808:8:0::2;::::0;:23:::2;::::0;28749:18:1;;12808:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;12800:115;;;::::0;-1:-1:-1;;;12800:115:0;;23583:2:1;12800:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;12800:115:0::2;23381:344:1::0;12800:115:0::2;12978:8;;;;;;;;;-1:-1:-1::0;;;;;12978:8:0::2;-1:-1:-1::0;;;;;12978:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12934:8;::::0;:41:::2;::::0;-1:-1:-1;;;12934:41:0;;12964:10:::2;12934:41;::::0;::::2;11454:74:1::0;12934:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12934:8:0::2;::::0;:29:::2;::::0;11427:18:1;;12934:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;12926:122;;;::::0;-1:-1:-1;;;12926:122:0;;22554:2:1;12926:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;12926:122:0::2;22352:342:1::0;12926:122:0::2;13062:16;13082:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;13082:8:0::2;-1:-1:-1::0;;;;;13082:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13082:45:0::2;;:47;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13059:70;;;13196:8;;;;;;;;;-1:-1:-1::0;;;;;13196:8:0::2;-1:-1:-1::0;;;;;13196:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13192:3;13181:10;;13169:11;:22;;;;:::i;:::-;:26;;;;:::i;:::-;:47;;;;:::i;:::-;13148:1;:17;;;:68;;13140:108;;;::::0;-1:-1:-1;;;13140:108:0;;15309:2:1;13140:108:0::2;::::0;::::2;15291:21:1::0;15348:2;15328:18;;;15321:30;15387:15;15367:18;;;15360:43;15420:18;;13140:108:0::2;15107:337:1::0;13140:108:0::2;13288:9;;13267:1;:17;;;:30;;13259:56;;;::::0;-1:-1:-1;;;13259:56:0;;17772:2:1;13259:56:0::2;::::0;::::2;17754:21:1::0;17811:2;17791:18;;;17784:30;17850:15;17830:18;;;17823:43;17883:18;;13259:56:0::2;17570:337:1::0;13259:56:0::2;13347:1;13334;:10;;;:14;:87;;;;;13366:8;;;;;;;;;-1:-1:-1::0;;;;;13366:8:0::2;-1:-1:-1::0;;;;;13366:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13366:42:0::2;;13409:1;:11;;;13366:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13366:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13352:1;:10;;;:69;;13334:87;:174;;;;;13453:8;;;;;;;;;-1:-1:-1::0;;;;;13453:8:0::2;-1:-1:-1::0;;;;;13453:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13453:42:0::2;;13496:1;:11;;;13453:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13453:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13439:1;:10;;;:69;;13334:174;13326:219;;;::::0;-1:-1:-1;;;13326:219:0;;18114:2:1;13326:219:0::2;::::0;::::2;18096:21:1::0;18153:2;18133:18;;;18126:30;18192:20;18172:18;;;18165:48;18230:18;;13326:219:0::2;17912:342:1::0;13326:219:0::2;13578:8;;;;;;;;;-1:-1:-1::0;;;;;13578:8:0::2;-1:-1:-1::0;;;;;13578:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13564:1;:10;;;:48;;:106;;;-1:-1:-1::0;13630:8:0::2;::::0;:40:::2;::::0;;;;13659:10:::2;13630:40;::::0;::::2;11454:74:1::0;13630:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13630:8:0::2;::::0;:28:::2;::::0;11427:18:1;;13630:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13616:1;:10;;;:54;;13564:106;13556:153;;;::::0;-1:-1:-1;;;13556:153:0;;17422:2:1;13556:153:0::2;::::0;::::2;17404:21:1::0;17461:2;17441:18;;;17434:30;17500:23;17480:18;;;17473:51;17541:18;;13556:153:0::2;17220:345:1::0;13556:153:0::2;13728:23:::0;;;:88:::2;;-1:-1:-1::0;13815:1:0::2;13755:8:::0;;::::2;::::0;::::2;-1:-1:-1::0;;;;;13755:8:0::2;:13;13769:20;13755:8;13769:18:::0;:20:::2;:::i;:::-;13755:35;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13755:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;::::0;;;;13801:10:::2;13755:57;::::0;::::2;11454:74:1::0;-1:-1:-1;;;;;13755:45:0;;;::::2;::::0;::::2;::::0;11427:18:1;;13755:57:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;13728:88;13720:151;;;::::0;-1:-1:-1;;;13720:151:0;;15651:2:1;13720:151:0::2;::::0;::::2;15633:21:1::0;15690:2;15670:18;;;15663:30;15729:34;15709:18;;;15702:62;15800:7;15780:18;;;15773:35;15825:19;;13720:151:0::2;15449:401:1::0;13720:151:0::2;13993:8;::::0;14018:11:::2;::::0;::::2;::::0;13993:40:::2;::::0;;;;::::2;::::0;::::2;29640:25:1::0;;;;14031:1:0::2;29681:18:1::0;;;29674:34;13993:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13993:8:0::2;::::0;:24:::2;::::0;29613:18:1;;13993:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13923:8;;;;;;;;;-1:-1:-1::0;;;;;13923:8:0::2;-1:-1:-1::0;;;;;13923:24:0::2;;13948:1;:11;;;13961:1;:5;;;:13;;13973:1;13961:13;;;13969:1;13961:13;13923:52;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;30957:25:1::0;;;;31030:4;31018:17;30998:18;;;30991:45;30930:18;;13923:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13910:1;:10;;;13890:1;:17;;;:30;;;;:::i;:::-;:85;;;;:::i;:::-;:143;;13882:173;;;::::0;-1:-1:-1;;;13882:173:0;;23237:2:1;13882:173:0::2;::::0;::::2;23219:21:1::0;23276:2;23256:18;;;23249:30;23315:19;23295:18;;;23288:47;23352:18;;13882:173:0::2;23035:341:1::0;13882:173:0::2;14074:4;::::0;::::2;::::0;:9;;:40:::2;;;14087:1;:5;;;:27;;;;;14110:1;:4;;;14096:1;:11;;;:18;14087:27;14074:72;;;;14119:1;:5;;;14118:6;:28;;;;;14142:1;:4;;;14128:1;:11;;;:18;14118:28;14066:93;;;::::0;-1:-1:-1;;;14066:93:0;;19215:2:1;14066:93:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;14066:93:0::2;19013:331:1::0;14066:93:0::2;14178:4;::::0;::::2;::::0;:9;;:40:::2;;;14191:1;:5;;;:27;;;;;14214:1;:4;;;14200:1;:11;;;:18;14191:27;14178:72;;;;14223:1;:5;;;14222:6;:28;;;;;14246:1;:4;;;14232:1;:11;;;:18;14222:28;14170:93;;;::::0;-1:-1:-1;;;14170:93:0;;20010:2:1;14170:93:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;14170:93:0::2;19808:331:1::0;14170:93:0::2;14276:8;::::0;14328:17:::2;::::0;::::2;::::0;14276:70:::2;::::0;-1:-1:-1;;;14276:70:0;;14297:10:::2;14276:70;::::0;::::2;12134:34:1::0;14276:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;14276:8:0::2;12184:18:1::0;;;12177:43;;;12236:18;;;12229:34;;;;14276:8:0;:20:::2;::::0;12046:18:1;;14276:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14362:6;14359:2037;;;14406:8;;;;;;;;;-1:-1:-1::0;;;;;14406:8:0::2;-1:-1:-1::0;;;;;14406:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14406:52:0::2;;14459:1;:11;;;14406:65;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14406:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14392:10;:79;;14384:127;;;::::0;-1:-1:-1;;;14384:127:0;;21874:2:1;14384:127:0::2;::::0;::::2;21856:21:1::0;21913:2;21893:18;;;21886:30;21952:20;21932:18;;;21925:48;21990:18;;14384:127:0::2;21672:342:1::0;14384:127:0::2;14528:9;14584:3;14563:8;;;;;;;;;-1:-1:-1::0;;;;;14563:8:0::2;-1:-1:-1::0;;;;;14563:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14552:10;14540:1;:11;;;:22;;;;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;14602:10;14615:8:::0;;14661:11:::2;::::0;::::2;::::0;14615:58:::2;::::0;;;;14649:10:::2;14615:58;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;14528:59:0;;-1:-1:-1;14602:10:0;;14615:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;14615:8:0::2;::::0;:33:::2;::::0;12896:18:1;;14615:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14602:71;;14690:8;;;;;;;;;-1:-1:-1::0;;;;;14690:8:0::2;-1:-1:-1::0;;;;;14690:28:0::2;;14719:531;;;;;;;;14771:10;-1:-1:-1::0;;;;;14719:531:0::2;;;;;14800:1;:11;;;14719:531;;;;14830:5;14719:531;;;;14854:1;:17;;;14719:531;;;;14911:1;14890:18;:22;:77;;14966:1;14890:77;;;14915:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;14915:8:0::2;:26;14942:20;14915:8;14942:18:::0;:20:::2;:::i;:::-;14915:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14915:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14719:531;;;;14986:1;:5;;;14719:531;;;;;;15010:1;:10;;;14719:531;;;;15039:1;:4;;;14719:531;;;;15062:1;:4;;;14719:531;;;;15085:1;:5;;;:40;;15114:1;:11;;;15085:40;;;15107:4;15093:1;:11;;;:18;;;;:::i;:::-;14719:531;;;;15144:1;:5;;;:40;;15180:4;15166:1;:11;;;:18;;;;:::i;:::-;15144:40;;;15152:1;:11;;;15144:40;14719:531;;;;15203:12;14719:531;;;;15234:1;14719:531;;::::0;14690:561:::2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15301:1;:11;;;15289:10;-1:-1:-1::0;;;;;15273:47:0::2;;15314:5;15273:47;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;15273:47:0::2;;;;;;;;14369:963;;14359:2037;;;15351:10;15364:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;15364:8:0::2;-1:-1:-1::0;;;;;15364:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15364:35:0::2;;15418:1;:11;;;15449:43;15532:1;:10;;;15512:1;:17;;;:30;;;;:::i;:::-;15364:193;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15351:206;;15574:8;;;;;;;;;-1:-1:-1::0;;;;;15574:8:0::2;-1:-1:-1::0;;;;;15574:32:0::2;;15625:651;;;;;;;;15685:357;;;;;;;;15736:10;-1:-1:-1::0;;;;;15685:357:0::2;;;;;15773:1;:11;;;15685:357;;;;15811:1;15685:357;;;;15814:1;15685:357;;;;15842:1;:17;;;15685:357;;;;15886:1;15685:357;;;;15915:1;:5;;;15685:357;;;;;;15947:1;:10;;;15685:357;;;;15984:1;:4;;;15685:357;;;;16015:1;:4;;;15685:357;;::::0;15625:651:::2;;;;16065:1;15625:651;;;;16089:1;:11;;;15625:651;;;;16123:10;15625:651;;;;16177:1;16156:18;:22;:77;;16232:1;16156:77;;;16181:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;16181:8:0::2;:26;16208:20;16181:8;16208:18:::0;:20:::2;:::i;:::-;16181:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16181:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15625:651;;;;16256:1;15625:651;;::::0;16278:5:::2;16285:4;15574:730;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;16359:11:0::2;::::0;;::::2;::::0;16326:58:::2;::::0;;16347:10:::2;13276:74:1::0;;13366:18;;;13359:34;;;;16372:4:0::2;13409:18:1::0;;;13402:50;13483:2;13468:18;;13461:34;;;16326:58:0;::::2;::::0;;;;13263:3:1;16326:58:0;;::::2;15336:1060;14359:2037;16408:8;::::0;:45:::2;::::0;;;;16431:10:::2;16408:45;::::0;::::2;11774:34:1::0;-1:-1:-1;;;;;11844:15:1;;;11824:18;;;11817:43;16408:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:22:::2;::::0;11686:18:1;;16408:45:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12521:3940;12311:4150:::0;;;;;:::o;20544:1311::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;20651:33:::2;20687:8:::0;;:51:::2;::::0;-1:-1:-1;;;20687:51:0;;20707:10:::2;20687:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20687:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20687:8:0::2;::::0;:19:::2;::::0;13681:18:1;;20687:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:37;20789:8:::0;;:55:::2;::::0;-1:-1:-1;;;20789:55:0;;20813:10:::2;20789:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20651:87:0;;-1:-1:-1;20749:37:0;;20789:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;20789:8:0::2;::::0;:23:::2;::::0;13681:18:1;;20789:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:95;;20903:8;;;;;;;;;-1:-1:-1::0;;;;;20903:8:0::2;-1:-1:-1::0;;;;;20903:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20863:8;::::0;:37:::2;::::0;-1:-1:-1;;;20863:37:0;;20887:12:::2;20863:37;::::0;::::2;28776:25:1::0;20863:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20863:8:0::2;::::0;:23:::2;::::0;28749:18:1;;20863:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;20855:115;;;::::0;-1:-1:-1;;;20855:115:0;;23583:2:1;20855:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;20855:115:0::2;23381:344:1::0;20855:115:0::2;21033:8;;;;;;;;;-1:-1:-1::0;;;;;21033:8:0::2;-1:-1:-1::0;;;;;21033:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20989:8;::::0;:41:::2;::::0;-1:-1:-1;;;20989:41:0;;21019:10:::2;20989:41;::::0;::::2;11454:74:1::0;20989:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20989:8:0::2;::::0;:29:::2;::::0;11427:18:1;;20989:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;20981:122;;;::::0;-1:-1:-1;;;20981:122:0;;22554:2:1;20981:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;20981:122:0::2;22352:342:1::0;20981:122:0::2;21123:1;:19;;;21122:20;21114:53;;;::::0;-1:-1:-1;;;21114:53:0;;25036:2:1;21114:53:0::2;::::0;::::2;25018:21:1::0;25075:2;25055:18;;;25048:30;25114:22;25094:18;;;25087:50;25154:18;;21114:53:0::2;24834:344:1::0;21114:53:0::2;21199:1;21186;:10;;;:14;21178:35;;;::::0;-1:-1:-1;;;21178:35:0;;16057:2:1;21178:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;21178:35:0::2;15855:331:1::0;21178:35:0::2;21226:10;21239:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;21239:8:0::2;-1:-1:-1::0;;;;;21239:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21239:35:0::2;;21289:10;21315:44;21426:8;;;;;;;;;-1:-1:-1::0;;;;;21426:8:0::2;-1:-1:-1::0;;;;;21426:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21408:1;:15;;;21395:1;:10;;;21375:1;:17;;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;21239:218;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21226:231;;21470:8;;;;;;;;;-1:-1:-1::0;;;;;21470:8:0::2;-1:-1:-1::0;;;;;21470:32:0::2;;21503:255;;;;;;;;21555:164;;;;;;;;21598:10;-1:-1:-1::0;;;;;21555:164:0::2;;;;;21627:10;21555:164;;;;21656:6;21555:164;;;;21681:1;21555:164;;;;21684:1;21555:164;;;;21687:1;21555:164;;;;21690:5;21555:164;;;;;;21697:1;21555:164;;;;21700:1;21555:164;;;;21703:1;21555:164;;::::0;21503:255:::2;;;;21734:1;21503:255;;;;21737:1;21503:255;;;;21740:1;21503:255;;;;21743:1;21503:255;;;;21746:1;21503:255;;::::0;21760:5:::2;21767;21470:303;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21789:58:0::2;::::0;;21810:10:::2;13276:74:1::0;;13381:2;13366:18;;13359:34;;;21834:5:0::2;13409:18:1::0;;;13402:50;;;;13483:2;13468:18;;13461:34;;;21789:58:0::2;::::0;-1:-1:-1;13263:3:1;13248:19;;-1:-1:-1;21789:58:0::2;13051:450:1::0;21956:2228:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;22206:33:::2;22242:8:::0;;:48:::2;::::0;-1:-1:-1;;;22242:48:0;;-1:-1:-1;;;;;13726:55:1;;;22242:48:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22242:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:19:::2;::::0;13681:18:1;;22242:48:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22206:84;;22320:1;22309:8;:12;:28;;;;;22336:1;22325:8;:12;22309:28;22301:55;;;::::0;-1:-1:-1;;;22301:55:0;;16393:2:1;22301:55:0::2;::::0;::::2;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:16;16451:18;;;16444:44;16505:18;;22301:55:0::2;16191:338:1::0;22301:55:0::2;22389:8;;;;;;;;;-1:-1:-1::0;;;;;22389:8:0::2;-1:-1:-1::0;;;;;22389:12:0::2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22375:28:0::2;:10;-1:-1:-1::0;;;;;22375:28:0::2;;:87;;;-1:-1:-1::0;22407:8:0::2;::::0;22452:10:::2;::::0;22407:8:::2;::::0;::::2;-1:-1:-1::0;;;;;22407:8:0::2;:13;22421:10;22407:8;22421::::0;:10:::2;:::i;:::-;22407:25;;;;;;;;;;;;;28776::1::0;;28764:2;28749:18;;28630:177;22407:25:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:33:0::2;;22441:6;22407:41;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;22407:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:55:0::2;;22375:87;22367:119;;;::::0;-1:-1:-1;;;22367:119:0;;25385:2:1;22367:119:0::2;::::0;::::2;25367:21:1::0;25424:1;25404:18;;;25397:29;25462:8;25442:18;;;25435:36;25488:18;;22367:119:0::2;25183:329:1::0;22367:119:0::2;22553:8;;;;;;;;;-1:-1:-1::0;;;;;22553:8:0::2;-1:-1:-1::0;;;;;22553:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22521:8;::::0;:31:::2;::::0;;;;::::2;::::0;::::2;28776:25:1::0;;;22521:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;22521:8:0::2;::::0;:23:::2;::::0;28749:18:1;;22521:31:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;22505:12;:77;;22497:119;;;::::0;-1:-1:-1;;;22497:119:0;;17077:2:1;22497:119:0::2;::::0;::::2;17059:21:1::0;17116:2;17096:18;;;17089:30;17155:18;17135;;;17128:46;17191:18;;22497:119:0::2;16875:340:1::0;22497:119:0::2;22649:34;22635:10;:48;;;;;;;;:::i;:::-;;;:107;;;-1:-1:-1::0;22687:8:0::2;::::0;:55:::2;::::0;-1:-1:-1;;;22687:55:0;;-1:-1:-1;;;;;13726:55:1;;;22687::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22687:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;22687:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22627:142;;;::::0;-1:-1:-1;;;22627:142:0;;22901:2:1;22627:142:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;22627:142:0::2;22699:331:1::0;22627:142:0::2;22802:34;22788:10;:48;;;;;;;;:::i;:::-;;:66;;;;22853:1;22840;:10;;;:14;22788:66;22780:87;;;::::0;-1:-1:-1;;;22780:87:0;;16057:2:1;22780:87:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;22780:87:0::2;15855:331:1::0;22780:87:0::2;22900:32;22886:10;:46;;;;;;;;:::i;:::-;;;:58;;;;22943:1;22936;:4;;;:8;22886:58;22878:76;;;::::0;-1:-1:-1;;;22878:76:0;;22221:2:1;22878:76:0::2;::::0;::::2;22203:21:1::0;22260:1;22240:18;;;22233:29;22298:7;22278:18;;;22271:35;22323:18;;22878:76:0::2;22019:328:1::0;22878:76:0::2;22967:20;23015:34;23001:10;:48;;;;;;;;:::i;:::-;;22998:466;;;23065:42;23110:8:::0;;:55:::2;::::0;-1:-1:-1;;;23110:55:0;;-1:-1:-1;;;;;13726:55:1;;;23110::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23110:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;23110:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23065:100;;23215:1;:10;;;23198:1;:14;;;:27;;;;:::i;:::-;23180:45;;23050:187;22998:466;;;23256:37;23296:8:::0;;:52:::2;::::0;-1:-1:-1;;;23296:52:0;;-1:-1:-1;;;;;13726:55:1;;;23296:52:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23296:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:23:::2;::::0;13681:18:1;;23296:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23256:92;;23432:8;;;;;;;;;-1:-1:-1::0;;;;;23432:8:0::2;-1:-1:-1::0;;;;;23432:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23419:1;:10;;;23401:1;:15;;;23381:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;23363:89;;23241:223;22998:466;23476:8;::::0;:74:::2;::::0;;;;23510:10:::2;23476:74;::::0;::::2;13708::1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23476:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;23476:8:0::2;::::0;:33:::2;::::0;13681:18:1;;23476:74:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23563:10;23576:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;23576:8:0::2;-1:-1:-1::0;;;;;23576:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23576:35:0::2;;23626:10:::0;23666:34:::2;23652:10;:48;;;;;;;;:::i;:::-;;:175;;23784:43;23652:175;;;23721:42;23652:175;23842:15;23576:292;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23563:305;;23881:8;;;;;;;;;-1:-1:-1::0;;;;;23881:8:0::2;-1:-1:-1::0;;;;;23881:29:0::2;;23911:184;;;;;;;;23960:10;-1:-1:-1::0;;;;;23911:184:0::2;;;;;23985:6;23911:184;;;;24006:7;-1:-1:-1::0;;;;;23911:184:0::2;;;;;24028:10;23911:184;;;;24053:6;23911:184;;;;24074:10;23911:184;;;;;;;;:::i;:::-;;;::::0;24097:5:::2;23881:222;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24119:57:0::2;::::0;;24137:10:::2;12566:34:1::0;;-1:-1:-1;;;;;12636:15:1;;12631:2;12616:18;;12609:43;12668:18;;;12661:34;;;12726:2;12711:18;;12704:34;;;24119:57:0::2;::::0;-1:-1:-1;12492:3:1;12477:19;;-1:-1:-1;24119:57:0::2;;;;;;;22193:1991;;;21956:2228:::0;;;;;;:::o;17742:612::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;17853:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;17853:58:0;;17880:10:::2;17853:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17853:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17853:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17853:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17845:79;;;::::0;-1:-1:-1;;;17845:79:0;;22901:2:1;17845:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;17845:79:0::2;22699:331:1::0;17845:79:0::2;17937:42;17982:8:::0;;:58:::2;::::0;-1:-1:-1;;;17982:58:0;;18009:10:::2;17982:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17982:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17982:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17982:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17937:103;;18085:19;;18074:1;:7;;;18059:12;:22;;;;:::i;:::-;:45;;18051:72;;;::::0;-1:-1:-1;;;18051:72:0;;18461:2:1;18051:72:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;18051:72:0::2;18259:338:1::0;18051:72:0::2;18136:8;::::0;18188:14:::2;::::0;::::2;::::0;18136:67:::2;::::0;-1:-1:-1;;;18136:67:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18136:8:0::2;:67;::::0;::::2;12134:34:1::0;;;18176:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;18136:8:0;:20:::2;::::0;12046:18:1;;18136:67:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18216:8:0::2;::::0;:65:::2;::::0;;;;18250:10:::2;18216:65;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18216:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18216:8:0::2;::::0;-1:-1:-1;18216:33:0::2;::::0;-1:-1:-1;13681:18:1;;18216:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18297:49:0::2;::::0;28776:25:1;;;18327:10:0;;-1:-1:-1;18315:10:0::2;::::0;-1:-1:-1;18297:49:0::2;::::0;28764:2:1;28749:18;18297:49:0::2;;;;;;;17832:522;17742:612:::0;;:::o;19683:811::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;19787:33:::2;19823:8:::0;;:51:::2;::::0;-1:-1:-1;;;19823:51:0;;19843:10:::2;19823:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19823:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19823:8:0::2;::::0;:19:::2;::::0;13681:18:1;;19823:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:37;19925:8:::0;;:55:::2;::::0;-1:-1:-1;;;19925:55:0;;19949:10:::2;19925:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19787:87:0;;-1:-1:-1;19885:37:0;;19925:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;19925:8:0::2;::::0;:23:::2;::::0;13681:18:1;;19925:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:95;;20012:1;19999;:10;;;:14;19991:35;;;::::0;-1:-1:-1;;;19991:35:0;;16057:2:1;19991:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;19991:35:0::2;15855:331:1::0;19991:35:0::2;20039:14;20096:1;:10;;;20090:3;20070:8;;;;;;;;;-1:-1:-1::0;;;;;20070:8:0::2;-1:-1:-1::0;;;;;20070:15:0::2;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20056:1;:11;;;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;20039:67:::0;-1:-1:-1;20125:11:0;;;:57:::2;;;20140:1;:5;;;:42;;;;;20173:9;20159:1;:11;;;:23;;;;:::i;:::-;20149:6;:33;;20140:42;20125:118;;;;20201:1;:5;;;20200:6;:43;;;;;20234:9;20220:1;:11;;;:23;;;;:::i;:::-;20210:6;:33;;20200:43;20117:141;;;::::0;-1:-1:-1;;;20117:141:0;;24697:2:1;20117:141:0::2;::::0;::::2;24679:21:1::0;24736:2;24716:18;;;24709:30;24775:12;24755:18;;;24748:40;24805:18;;20117:141:0::2;24495:334:1::0;20117:141:0::2;20311:19;::::0;20292:15:::2;::::0;::::2;::::0;20277:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;20269:80;;;::::0;-1:-1:-1;;;20269:80:0;;18461:2:1;20269:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;20269:80:0::2;18259:338:1::0;20269:80:0::2;20370:8;::::0;:57:::2;::::0;;;;20388:10:::2;20370:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;20370:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20370:8:0::2;::::0;:17:::2;::::0;14082:19:1;;20370:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20445:41:0::2;::::0;28776:25:1;;;20467:10:0;;-1:-1:-1;20455:10:0::2;::::0;-1:-1:-1;20445:41:0::2;::::0;28764:2:1;28749:18;20445:41:0::2;;;;;;;19774:720;;;19683:811:::0;;;:::o;16501:1201::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;16762:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;16762:58:0;;16789:10:::2;16762:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;16762:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;16762:8:0::2;::::0;:26:::2;::::0;13681:18:1;;16762:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16754:79;;;::::0;-1:-1:-1;;;16754:79:0;;22901:2:1;16754:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;16754:79:0::2;22699:331:1::0;16754:79:0::2;16866:8;;;;;;;;;-1:-1:-1::0;;;;;16866:8:0::2;-1:-1:-1::0;;;;;16866:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16866:52:0::2;;16919:10;16866:64;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16866:64:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16852:10;:78;;16844:125;;;::::0;-1:-1:-1;;;16844:125:0;;26055:2:1;16844:125:0::2;::::0;::::2;26037:21:1::0;26094:2;26074:18;;;26067:30;26133:22;26113:18;;;26106:50;26173:18;;16844:125:0::2;25853:344:1::0;16844:125:0::2;16982:42;17027:8:::0;;:58:::2;::::0;-1:-1:-1;;;17027:58:0;;17054:10:::2;17027:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17027:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17027:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17027:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16982:103;;17130:19;;17119:1;:7;;;17104:12;:22;;;;:::i;:::-;:45;;17096:86;;;::::0;-1:-1:-1;;;17096:86:0;;18461:2:1;17096:86:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;17096:86:0::2;18259:338:1::0;17096:86:0::2;17203:8:::0;;;:33:::2;;;17215:1;:5;;;:21;;;;;17233:3;17224:6;:12;17215:21;17203:59;;;;17241:1;:5;;;17240:6;:22;;;;;17259:3;17250:6;:12;17240:22;17195:80;;;::::0;-1:-1:-1;;;17195:80:0;;19215:2:1;17195:80:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;17195:80:0::2;19013:331:1::0;17195:80:0::2;17294:8:::0;;;:33:::2;;;17306:1;:5;;;:21;;;;;17324:3;17315:6;:12;17306:21;17294:59;;;;17332:1;:5;;;17331:6;:22;;;;;17350:3;17341:6;:12;17331:22;17286:80;;;::::0;-1:-1:-1;;;17286:80:0;;20010:2:1;17286:80:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;17286:80:0::2;19808:331:1::0;17286:80:0::2;17379:9;17430:3;17409:8;;;;;;;;;-1:-1:-1::0;;;;;17409:8:0::2;-1:-1:-1::0;;;;;17409:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17391:17;17398:10:::0;17391:6;:17:::2;:::i;:::-;:38;;;;:::i;:::-;:42;;;;:::i;:::-;17379:54;;17457:1;:5;;;:30;;17481:6;17457:30;;;17465:13;17474:4:::0;17465:6;:13:::2;:::i;:::-;17444:10;::::0;::::2;:43:::0;17511:5:::2;::::0;::::2;::::0;:30:::2;;17528:13;17537:4:::0;17528:6;:13:::2;:::i;:::-;17511:30;;;17519:6;17511:30;17498:10;::::0;::::2;:43:::0;17552:4:::2;::::0;::::2;:10:::0;;;17573:4:::2;::::0;;::::2;:10:::0;;;-1:-1:-1;17596:8:0;-1:-1:-1;17596:32:0;;;;:8;;::::2;-1:-1:-1::0;;;;;17596:8:0::2;::::0;:29:::2;::::0;:32:::2;::::0;17498:10;;17596:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17646:48:0::2;::::0;28776:25:1;;;17675:10:0;;-1:-1:-1;17663:10:0::2;::::0;-1:-1:-1;17646:48:0::2;::::0;28764:2:1;28749:18;17646:48:0::2;;;;;;;16741:961;;16501:1201:::0;;;;;;:::o;11865:205::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11961:1:::1;11945:13;:17;11937:26;;;::::0;::::1;;11974:12;:28:::0;;;12018:44:::1;::::0;;20704:21:1;;;20761:2;20741:18;;;20734:30;;;;20800:14;20795:2;20780:18;;20773:42;20882:4;20867:20;;20860:36;;;12018:44:0::1;::::0;20847:3:1;20832:19;12018:44:0::1;20492:410:1::0;11657:202:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11748:1:::1;11738:7;:11;11730:20;;;::::0;::::1;;11761:19;:29:::0;;;11806:45:::1;::::0;;21119:21:1;;;21176:2;21156:18;;;21149:30;;;;21215:21;21210:2;21195:18;;21188:49;21304:4;21289:20;;21282:36;;;11806:45:0::1;::::0;21269:3:1;21254:19;11806:45:0::1;20907:417:1::0;18660:573:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;18764:33:::2;18800:8:::0;;:51:::2;::::0;-1:-1:-1;;;18800:51:0;;18820:10:::2;18800:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18800:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18800:8:0::2;::::0;:19:::2;::::0;13681:18:1;;18800:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:37;18902:8:::0;;:55:::2;::::0;-1:-1:-1;;;18902:55:0;;18926:10:::2;18902:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18764:87:0;;-1:-1:-1;18862:37:0;;18902:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18902:8:0::2;::::0;:23:::2;::::0;13681:18:1;;18902:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:95;;18991:1;18978;:10;;;:14;18970:35;;;::::0;-1:-1:-1;;;18970:35:0;;16057:2:1;18970:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;18970:35:0::2;15855:331:1::0;18970:35:0::2;19058:19;::::0;19039:15:::2;::::0;::::2;::::0;19024:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;19016:80;;;::::0;-1:-1:-1;;;19016:80:0;;18461:2:1;19016:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;19016:80:0::2;18259:338:1::0;19016:80:0::2;19109:8;::::0;:57:::2;::::0;;;;19127:10:::2;19109:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;19109:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19109:8:0::2;::::0;:17:::2;::::0;14082:19:1;;19109:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;19184:41:0::2;::::0;28776:25:1;;;19206:10:0;;-1:-1:-1;19194:10:0::2;::::0;-1:-1:-1;19184:41:0::2;::::0;28764:2:1;28749:18;19184:41:0::2;;;;;;;18751:482;;18660:573:::0;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:138::-;232:13;;254:31;232:13;254:31;:::i;296:128::-;361:20;;390:28;361:20;390:28;:::i;429:132::-;505:13;;527:28;505:13;527:28;:::i;566:840::-;629:5;677:6;665:9;660:3;656:19;652:32;649:52;;;697:1;694;687:12;649:52;719:22;;:::i;:::-;710:31;;764:40;794:9;764:40;:::i;:::-;757:5;750:55;858:2;847:9;843:18;837:25;832:2;825:5;821:14;814:49;916:2;905:9;901:18;895:25;890:2;883:5;879:14;872:49;974:2;963:9;959:18;953:25;948:2;941:5;937:14;930:49;1033:3;1022:9;1018:19;1012:26;1006:3;999:5;995:15;988:51;1093:3;1082:9;1078:19;1072:26;1066:3;1059:5;1055:15;1048:51;1132:47;1174:3;1163:9;1159:19;1132:47;:::i;:::-;1126:3;1119:5;1115:15;1108:72;1234:3;1223:9;1219:19;1213:26;1207:3;1200:5;1196:15;1189:51;1259:3;1315:2;1304:9;1300:18;1294:25;1289:2;1282:5;1278:14;1271:49;;1339:3;1395:2;1384:9;1380:18;1374:25;1369:2;1362:5;1358:14;1351:49;;566:840;;;;:::o;1411:251::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1582:9;1576:16;1601:31;1626:5;1601:31;:::i;:::-;1651:5;1411:251;-1:-1:-1;;;1411:251:1:o;1667:245::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1835:9;1829:16;1854:28;1876:5;1854:28;:::i;2480:273::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2673:9;2660:23;2692:31;2717:5;2692:31;:::i;2758:686::-;2876:6;2884;2892;2900;2908;2916;2969:3;2957:9;2948:7;2944:23;2940:33;2937:53;;;2986:1;2983;2976:12;2937:53;3025:9;3012:23;3064:1;3057:5;3054:12;3044:40;;3080:1;3077;3070:12;3044:40;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2758:686;;3225:7;;-1:-1:-1;;;;3279:2:1;3264:18;;3251:32;;3330:2;3315:18;;3302:32;;3381:3;3366:19;;3353:33;;-1:-1:-1;3433:3:1;3418:19;;;3405:33;;-1:-1:-1;2758:686:1:o;3449:1143::-;3550:6;3603:3;3591:9;3582:7;3578:23;3574:33;3571:53;;;3620:1;3617;3610:12;3571:53;3646:17;;:::i;:::-;3686:40;3716:9;3686:40;:::i;:::-;3679:5;3672:55;3780:2;3769:9;3765:18;3759:25;3754:2;3747:5;3743:14;3736:49;3838:2;3827:9;3823:18;3817:25;3812:2;3805:5;3801:14;3794:49;3896:2;3885:9;3881:18;3875:25;3870:2;3863:5;3859:14;3852:49;3955:3;3944:9;3940:19;3934:26;3928:3;3921:5;3917:15;3910:51;3994:47;4036:3;4025:9;4021:19;3994:47;:::i;:::-;3988:3;3977:15;;3970:72;4096:3;4081:19;;;4075:26;4058:15;;;4051:51;4156:3;4141:19;;;4135:26;4118:15;;;4111:51;4181:3;4222:18;;;4216:25;4200:14;;;4193:49;4261:3;4302:18;;;4296:25;4280:14;;;4273:49;4341:3;4382:18;;;4376:25;4360:14;;;4353:49;4421:3;4462:18;;;4456:25;4440:14;;;4433:49;4501:3;4542:18;;;4536:25;4520:14;;;4513:49;;;;-1:-1:-1;3981:5:1;3449:1143;-1:-1:-1;3449:1143:1:o;4597:955::-;4702:6;4755:3;4743:9;4734:7;4730:23;4726:33;4723:53;;;4772:1;4769;4762:12;4723:53;4805:2;4799:9;4847:4;4839:6;4835:17;4918:6;4906:10;4903:22;4882:18;4870:10;4867:34;4864:62;4861:242;;;-1:-1:-1;;;4956:1:1;4949:88;5060:4;5057:1;5050:15;5088:4;5085:1;5078:15;4861:242;5119:2;5112:22;5158:54;5204:7;5193:9;5158:54;:::i;:::-;5143:70;;5269:3;5254:19;;5248:26;5241:4;5229:17;;5222:53;5329:3;5314:19;;5308:26;5303:2;5291:15;;5284:51;5391:3;5376:19;;5370:26;5363:4;5351:17;;5344:53;5453:3;5438:19;;5432:26;5425:4;5413:17;;5406:53;5515:3;5500:19;;;5494:26;5487:4;5475:17;;5468:53;-1:-1:-1;5150:6:1;4597:955;-1:-1:-1;4597:955:1:o;5557:962::-;5653:6;5706:3;5694:9;5685:7;5681:23;5677:33;5674:53;;;5723:1;5720;5713:12;5674:53;5756:2;5750:9;5798:3;5790:6;5786:16;5868:6;5856:10;5853:22;5832:18;5820:10;5817:34;5814:62;5811:242;;;-1:-1:-1;;;5906:1:1;5899:88;6010:4;6007:1;6000:15;6038:4;6035:1;6028:15;5811:242;6073:10;6069:2;6062:22;;6114:9;6108:16;6100:6;6093:32;6179:2;6168:9;6164:18;6158:25;6153:2;6145:6;6141:15;6134:50;6238:2;6227:9;6223:18;6217:25;6212:2;6204:6;6200:15;6193:50;6297:2;6286:9;6282:18;6276:25;6271:2;6263:6;6259:15;6252:50;6357:3;6346:9;6342:19;6336:26;6330:3;6322:6;6318:16;6311:52;6406:3;6395:9;6391:19;6385:26;6420:28;6442:5;6420:28;:::i;:::-;6476:3;6464:16;;6457:31;6468:6;5557:962;-1:-1:-1;;;5557:962:1:o;6524:245::-;6616:6;6669:3;6657:9;6648:7;6644:23;6640:33;6637:53;;;6686:1;6683;6676:12;6637:53;6709:54;6755:7;6744:9;6709:54;:::i;6774:1289::-;6888:6;6896;6904;6912;6920;6964:9;6955:7;6951:23;6994:3;6990:2;6986:12;6983:32;;;7011:1;7008;7001:12;6983:32;7034:6;7060:2;7056;7052:11;7049:31;;;7076:1;7073;7066:12;7049:31;7102:22;;:::i;:::-;7089:35;;7147:29;7166:9;7147:29;:::i;:::-;7140:5;7133:44;7237:2;7226:9;7222:18;7209:32;7204:2;7197:5;7193:14;7186:56;7302:2;7291:9;7287:18;7274:32;7269:2;7262:5;7258:14;7251:56;7367:2;7356:9;7352:18;7339:32;7334:2;7327:5;7323:14;7316:56;7433:3;7422:9;7418:19;7405:33;7399:3;7392:5;7388:15;7381:58;7500:3;7489:9;7485:19;7472:33;7466:3;7459:5;7455:15;7448:58;7539:36;7570:3;7559:9;7555:19;7539:36;:::i;:::-;7533:3;7526:5;7522:15;7515:61;7637:3;7626:9;7622:19;7609:33;7603:3;7596:5;7592:15;7585:58;7662:3;7725:2;7714:9;7710:18;7697:32;7692:2;7685:5;7681:14;7674:56;;7749:3;7812:2;7801:9;7797:18;7784:32;7779:2;7772:5;7768:14;7761:56;;7836:5;7826:15;;7860:35;7891:2;7880:9;7876:18;7860:35;:::i;:::-;7850:45;;;;7942:3;7931:9;7927:19;7914:33;7904:43;;7994:3;7983:9;7979:19;7966:33;7956:43;;8018:39;8052:3;8041:9;8037:19;8018:39;:::i;:::-;8008:49;;6774:1289;;;;;;;;:::o;8068:180::-;8127:6;8180:2;8168:9;8159:7;8155:23;8151:32;8148:52;;;8196:1;8193;8186:12;8148:52;-1:-1:-1;8219:23:1;;8068:180;-1:-1:-1;8068:180:1:o;8253:184::-;8323:6;8376:2;8364:9;8355:7;8351:23;8347:32;8344:52;;;8392:1;8389;8382:12;8344:52;-1:-1:-1;8415:16:1;;8253:184;-1:-1:-1;8253:184:1:o;8442:248::-;8510:6;8518;8571:2;8559:9;8550:7;8546:23;8542:32;8539:52;;;8587:1;8584;8577:12;8539:52;-1:-1:-1;;8610:23:1;;;8680:2;8665:18;;;8652:32;;-1:-1:-1;8442:248:1:o;8695:245::-;8774:6;8782;8835:2;8823:9;8814:7;8810:23;8806:32;8803:52;;;8851:1;8848;8841:12;8803:52;-1:-1:-1;;8874:16:1;;8930:2;8915:18;;;8909:25;8874:16;;8909:25;;-1:-1:-1;8695:245:1:o;8945:316::-;9022:6;9030;9038;9091:2;9079:9;9070:7;9066:23;9062:32;9059:52;;;9107:1;9104;9097:12;9059:52;-1:-1:-1;;9130:23:1;;;9200:2;9185:18;;9172:32;;-1:-1:-1;9251:2:1;9236:18;;;9223:32;;8945:316;-1:-1:-1;8945:316:1:o;9266:523::-;9370:6;9378;9386;9394;9402;9410;9463:3;9451:9;9442:7;9438:23;9434:33;9431:53;;;9480:1;9477;9470:12;9431:53;-1:-1:-1;;9503:23:1;;;9573:2;9558:18;;9545:32;;-1:-1:-1;9624:2:1;9609:18;;9596:32;;9675:2;9660:18;;9647:32;;-1:-1:-1;9726:3:1;9711:19;;9698:33;;-1:-1:-1;9778:3:1;9763:19;9750:33;;-1:-1:-1;9266:523:1;-1:-1:-1;9266:523:1:o;10022:1002::-;10104:12;;10144:9;;-1:-1:-1;;;;;9860:54:1;9848:67;;10205:4;10201:2;10197:13;10191:20;10184:4;10179:3;10175:14;10168:44;10258:4;10254:2;10250:13;10244:20;10237:4;10232:3;10228:14;10221:44;10311:4;10307:2;10303:13;10297:20;10290:4;10285:3;10281:14;10274:44;10364:4;10360:2;10356:13;10350:20;10343:4;10338:3;10334:14;10327:44;10417:4;10413:2;10409:13;10403:20;10396:4;10391:3;10387:14;10380:44;10467:4;10463:2;10459:13;10453:20;10482:45;10521:4;10516:3;10512:14;10498:12;9996:13;9989:21;9977:34;;9926:91;10482:45;-1:-1:-1;10573:4:1;10565:13;;;10559:20;10543:14;;;10536:44;10599:6;10641:11;;;10635:18;10621:12;;;10614:40;10673:6;10715:11;;;10709:18;10695:12;;;10688:40;10779:4;10768:16;;10762:23;10753:6;10744:16;;10737:49;10837:4;10826:16;;10820:23;10811:6;10802:16;;10795:49;10895:4;10884:16;;10878:23;10869:6;10860:16;;10853:49;10953:4;10942:16;;10936:23;10927:6;10918:16;;10911:49;11011:4;11000:16;10994:23;10985:6;10976:16;;;10969:49;10022:1002::o;11029:274::-;11158:3;11196:6;11190:13;11212:53;11258:6;11253:3;11246:4;11238:6;11234:17;11212:53;:::i;:::-;11281:16;;;;;11029:274;-1:-1:-1;;11029:274:1:o;26202:1170::-;26430:13;;-1:-1:-1;;;;;9860:54:1;9848:67;;26398:3;26383:19;;26511:4;26503:6;26499:17;26493:24;26486:4;26475:9;26471:20;26464:54;26574:4;26566:6;26562:17;26556:24;26549:4;26538:9;26534:20;26527:54;26637:4;26629:6;26625:17;26619:24;26612:4;26601:9;26597:20;26590:54;26700:4;26692:6;26688:17;26682:24;26675:4;26664:9;26660:20;26653:54;26754:4;26746:6;26742:17;26736:24;26769:51;26814:4;26803:9;26799:20;26785:12;9996:13;9989:21;9977:34;;9926:91;26769:51;-1:-1:-1;26876:4:1;26864:17;;;26858:24;26836:20;;;26829:54;26939:4;26927:17;;;26921:24;26899:20;;;26892:54;26965:6;27013:15;;;27007:22;26987:18;;;26980:50;27049:6;27097:15;;;27091:22;27071:18;;;27064:50;27133:6;27181:15;;;27175:22;27155:18;;;27148:50;27217:6;27265:15;;;27259:22;27239:18;;;27232:50;27301:6;27349:15;;;27343:22;27323:18;;;;27316:50;;;;26202:1170;:::o;27377:432::-;27631:3;27616:19;;27644:55;27620:9;27681:6;27644:55;:::i;:::-;27736:6;27730:3;27719:9;27715:19;27708:35;27794:6;27787:14;27780:22;27774:3;27763:9;27759:19;27752:51;27377:432;;;;;;:::o;27814:811::-;27998:4;28040:3;28029:9;28025:19;28017:27;;-1:-1:-1;;;;;28151:2:1;28142:6;28136:13;28132:22;28121:9;28114:41;28211:4;28203:6;28199:17;28193:24;28186:4;28175:9;28171:20;28164:54;28286:2;28278:4;28270:6;28266:17;28260:24;28256:33;28249:4;28238:9;28234:20;28227:63;;28346:4;28338:6;28334:17;28328:24;28321:4;28310:9;28306:20;28299:54;28409:4;28401:6;28397:17;28391:24;28384:4;28373:9;28369:20;28362:54;28463:4;28455:6;28451:17;28445:24;28478:46;28511:12;28478:46;:::i;:::-;28555:4;28540:20;;28533:42;28606:3;28591:19;;;28584:35;;;;27814:811;;-1:-1:-1;27814:811:1:o;29075:378::-;29287:25;;;29275:2;29260:18;;29321:40;29354:6;29321:40;:::i;:::-;29392:2;29377:18;;29370:34;;;;29435:2;29420:18;29413:34;29075:378;;-1:-1:-1;29075:378:1:o;29719:454::-;29896:6;29885:9;29878:25;29939:2;29934;29923:9;29919:18;29912:30;29859:4;29971:6;29965:13;30014:6;30009:2;29998:9;29994:18;29987:34;30030:66;30089:6;30084:2;30073:9;30069:18;30064:2;30056:6;30052:15;30030:66;:::i;:::-;30157:2;30136:15;-1:-1:-1;;30132:29:1;30117:45;;;;30164:2;30113:54;;29719:454;-1:-1:-1;;;29719:454:1:o;30178:349::-;30423:25;;;30410:3;30395:19;;30457:64;30517:2;30502:18;;30494:6;30457:64;:::i;31047:409::-;31119:2;31113:9;31161:6;31149:19;;31198:18;31183:34;;31219:22;;;31180:62;31177:242;;;-1:-1:-1;;;31272:1:1;31265:88;31376:4;31373:1;31366:15;31404:4;31401:1;31394:15;31177:242;31435:2;31428:22;31047:409;:::o;31461:401::-;31528:2;31522:9;31570:3;31558:16;;31604:18;31589:34;;31625:22;;;31586:62;31583:242;;;-1:-1:-1;;;31678:1:1;31671:88;31782:4;31779:1;31772:15;31810:4;31807:1;31800:15;31867:128;31907:3;31938:1;31934:6;31931:1;31928:13;31925:39;;;31944:18;;:::i;:::-;-1:-1:-1;31980:9:1;;31867:128::o;32000:274::-;32040:1;32066;32056:189;;-1:-1:-1;;;32098:1:1;32091:88;32202:4;32199:1;32192:15;32230:4;32227:1;32220:15;32056:189;-1:-1:-1;32259:9:1;;32000:274::o;32279:168::-;32319:7;32385:1;32381;32377:6;32373:14;32370:1;32367:21;32362:1;32355:9;32348:17;32344:45;32341:71;;;32392:18;;:::i;:::-;-1:-1:-1;32432:9:1;;32279:168::o;32452:125::-;32492:4;32520:1;32517;32514:8;32511:34;;;32525:18;;:::i;:::-;-1:-1:-1;32562:9:1;;32452:125::o;32582:258::-;32654:1;32664:113;32678:6;32675:1;32672:13;32664:113;;;32754:11;;;32748:18;32735:11;;;32728:39;32700:2;32693:10;32664:113;;;32795:6;32792:1;32789:13;32786:48;;;32830:1;32821:6;32816:3;32812:16;32805:27;32786:48;;32582:258;;;:::o;32845:184::-;-1:-1:-1;;;32894:1:1;32887:88;32994:4;32991:1;32984:15;33018:4;33015:1;33008:15;33034:184;-1:-1:-1;;;33083:1:1;33076:88;33183:4;33180:1;33173:15;33207:4;33204:1;33197:15;33223:269;33306:1;33299:5;33296:12;33286:200;;-1:-1:-1;;;33339:1:1;33332:88;33443:4;33440:1;33433:15;33471:4;33468:1;33461:15;33286:200;33223:269;:::o;33497:154::-;-1:-1:-1;;;;;33576:5:1;33572:54;33565:5;33562:65;33552:93;;33641:1;33638;33631:12;33656:118;33742:5;33735:13;33728:21;33721:5;33718:32;33708:60;;33764:1;33761;33754:12

Swarm Source

ipfs://5dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b798

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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