ETH Price: $3,138.98 (-8.66%)
Gas: 9 Gwei

Contract

0x51F8670Bb49CB4213a71E74e9aFa04e0FB815b60
 

Overview

ETH Balance

1.20345 ETH

Eth Value

$3,777.61 (@ $3,138.98/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Acl_set_tax_mult...138979652021-12-29 4:09:19939 days ago1640750959IN
0x51F8670B...0FB815b60
0 ETH0.0021152473.68126086
Operate_svt_to_n...138979392021-12-29 4:03:02939 days ago1640750582IN
0x51F8670B...0FB815b60
0 ETH0.0039486866.47955534
Operate_native_t...138979322021-12-29 4:01:54939 days ago1640750514IN
0x51F8670B...0FB815b60
0 ETH0.0036710162.08696655
Exit_to_eth138979222021-12-29 4:00:18939 days ago1640750418IN
0x51F8670B...0FB815b60
0 ETH0.0047103368.82936794
Operate_svt_to_n...138979182021-12-29 3:59:46939 days ago1640750386IN
0x51F8670B...0FB815b60
0 ETH0.0038702265.19817375
Exit_to_token138977962021-12-29 3:35:19939 days ago1640748919IN
0x51F8670B...0FB815b60
0 ETH0.01076493124.22320964
Operate_svt_to_n...138977852021-12-29 3:31:18939 days ago1640748678IN
0x51F8670B...0FB815b60
0 ETH0.00642207108.14301002
Entry_from_eth138977812021-12-29 3:29:47939 days ago1640748587IN
0x51F8670B...0FB815b60
0.099 ETH0.0125034699.73088352
Operate_svt_to_n...138977762021-12-29 3:28:06939 days ago1640748486IN
0x51F8670B...0FB815b60
0 ETH0.00628699105.84703903
Acl_set_tax_mult...138977342021-12-29 3:17:28939 days ago1640747848IN
0x51F8670B...0FB815b60
0 ETH0.00324017112.81946281
Collect_taxes_to...138977142021-12-29 3:13:06939 days ago1640747586IN
0x51F8670B...0FB815b60
0 ETH0.00619549115.06809542
Collect_taxes_et...138977142021-12-29 3:13:06939 days ago1640747586IN
0x51F8670B...0FB815b60
0 ETH0.00323548115.06809542
Operate_native_t...138977052021-12-29 3:10:21939 days ago1640747421IN
0x51F8670B...0FB815b60
0 ETH0.0052898689.46610984
Acl_set_tax_mult...138977002021-12-29 3:09:05939 days ago1640747345IN
0x51F8670B...0FB815b60
0 ETH0.0027688596.44882487
Collect_taxes_et...138976942021-12-29 3:07:12939 days ago1640747232IN
0x51F8670B...0FB815b60
0 ETH0.0023718972.27412451
Operate_svt_to_n...138976412021-12-29 2:56:59939 days ago1640746619IN
0x51F8670B...0FB815b60
0 ETH0.0050812685.54758316
Operate_svt_to_n...138976252021-12-29 2:53:39939 days ago1640746419IN
0x51F8670B...0FB815b60
0 ETH0.0057200796.39987834
Operate_native_t...138976202021-12-29 2:52:18939 days ago1640746338IN
0x51F8670B...0FB815b60
0 ETH0.0050700785.74884852
Exit_to_eth138975932021-12-29 2:46:31939 days ago1640745991IN
0x51F8670B...0FB815b60
0 ETH0.007903579.15936764
Operate_svt_to_n...138975482021-12-29 2:37:45939 days ago1640745465IN
0x51F8670B...0FB815b60
0 ETH0.0055309393.11803779
Exit_to_eth138968842021-12-29 0:11:53939 days ago1640736713IN
0x51F8670B...0FB815b60
0 ETH0.01220185180.13576585
Entry_from_eth138960952021-12-28 21:12:30939 days ago1640725950IN
0x51F8670B...0FB815b60
0.02 ETH0.0105998297.9
Operate_native_t...138960392021-12-28 21:01:06939 days ago1640725266IN
0x51F8670B...0FB815b60
0 ETH0.00785811103.10452417
Operate_native_t...138960332021-12-28 20:59:55939 days ago1640725195IN
0x51F8670B...0FB815b60
0 ETH0.00419068101.63660423
Operate_native_t...138960112021-12-28 20:55:27939 days ago1640724927IN
0x51F8670B...0FB815b60
0 ETH0.007268695.35470836
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
138979222021-12-29 4:00:18939 days ago1640750418
0x51F8670B...0FB815b60
0.18905 ETH
138976942021-12-29 3:07:12939 days ago1640747232
0x51F8670B...0FB815b60
0.007 ETH
138975932021-12-29 2:46:31939 days ago1640745991
0x51F8670B...0FB815b60
0.0995 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kaiba_IVC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-28
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.7;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory  errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory  errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (bytes32 );
    function symbol() external pure returns (bytes32 );
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// IVC (Internal Virtual Chain)
// (c) Kaiba DeFi DAO 2021

// This source code is distributed under the CC-BY-ND-4.0 License https://spdx.org/licenses/CC-BY-ND-4.0.html#licenseText

interface ERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address tokenOwner) external view returns (uint balance);
    function allowance(address tokenOwner, address spender) external view returns (uint remaining);
    function transfer(address to, uint tokens) external returns (bool success);
    function approve(address spender, uint tokens) external returns (bool success);
    function transferFrom(address from, address to, uint tokens) external returns (bool success);

    function symbol() external view returns (bytes32 );
    function name() external view returns (bytes32 );
    function decimals() external view returns (uint8);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

 /////////////////////////////////////////////////////// Plugin interface

    interface IVC_Plugin {
        // pay extreme attention to these methods
        function exists() external view returns (bool success);      
        function svt_plugin_initialize() external view returns (bool, uint256[] memory, bytes32[] memory);
        function svt_method_call_id(uint256 mid) external returns (bool, bytes32 );  
        function svt_method_call_name(bytes32  mname) external returns (bool, bytes32 );  
  }

  /// @notice the following method is implemented externally

  interface IVC_Pair_Adding {
      function create_svt_pair_existing(uint256 orig_qty1, uint256 orig_qty2,  address to_bridge, address to_pair, uint256 qty_1, uint256 qty_2) external returns(bool);
      function create_svt_pair_from_eth_existing(uint256 orig_qty1, uint256 orig_qty2, address to_bridge, uint256 qty_1, uint256 qty_2) external returns(bool);
  }

contract Kaiba_IVC {

    using SafeMath for uint256;

    // Pair manipulation
    IVC_Pair_Adding pair_adder;
    bool create_svt_pair_existing_enabled;

    /// @notice Fees balances
    uint256 tax_multiplier = 995; //0.05%
    uint256 taxes_eth_total;
    mapping(address => uint256) taxes_token_total;
    mapping (uint256 => uint256) taxes_native_total;
    address kaiba_address = 0x8BB048845Ee0d75BE8e07954b2e1E5b51B64b442;
    address owner;
    // Rinkeby: 0xc778417E063141139Fce010982780140Aa0cD5Ab
    // Mainnet: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address constant ZERO = 0x000000000000000000000000000000000000dEaD;
    ERC20 kaiba = ERC20(kaiba_address);

    // Constructor
    constructor () {
        is_team[msg.sender] = true;
        owner = msg.sender;
        is_locked[841] = true;
        /// @notice defining WETH -> KVETH
        SVT_address[0].deployed = true;
        SVT_address[0].tokenOwner = owner;
        SVT_address[0].totalSupply = 0;
        SVT_address[0].circulatingSupply = 0;
        SVT_address[0].fees.push(10000000000000000);
        SVT_address[0].name = "Kaiba Virtual ETH";
        SVT_address[0].ticker = "WETH";
        SVT_address[0].isBridged = true;
        SVT_address[0].original_token = WETH; 
        SVT_address[0].SVT_Liquidity_storage = 0;
        /// @notice also defining the liquidity
        SVT_Liquidity_index[0].deployed = true;
        SVT_Liquidity_index[0].active = true;
        SVT_Liquidity_index[0].liq_mode = 4;
        SVT_Liquidity_index[0].token_1 = ERC20(SVT_address[0].original_token);
        SVT_Liquidity_index[0].SVT_token_id = 0;
    }

    /////////////////////////////////////////////////////// Access control

    mapping (address => bool) is_team;

    struct auth_control {
        mapping(address => bool) is_auth;
    }

    mapping(address => auth_control) bridge_is_auth;

    mapping(uint256 => bool) is_locked;

    bool internal locked;
    bool internal open_bridge;

    modifier safe() {
        require(!locked, "No re-entrancy");
        locked = true;
        _;
        locked = false;
    }

    modifier Unlocked(uint256 name) {
        require(!is_locked[name]);
        _;
    }

    modifier onlyAuth(address to_bridge) {
        require(bridge_is_auth[msg.sender].is_auth[to_bridge] ||  msg.sender==owner || open_bridge, "Not authorized");
        _;
    }

    modifier onlyTeam {
        require(is_team[msg.sender]);
        _;
    }

    modifier onlyOwner {
        require(owner==msg.sender);
        _;
    }

    function acl_add_team(address addy) public onlyTeam {
        is_team[addy] = true;
    }

    function acl_remove_team(address addy) public onlyTeam {
        is_team[addy] = false;
    }

    function acl_locked_function(uint256 name, bool booly) public onlyTeam {
        is_locked[name] = booly;
    }

    function acl_open_bridge(bool booly) public onlyTeam {
        open_bridge = booly;
    }

    function acl_set_kaiba(address addy) public onlyTeam {
        kaiba_address = addy;
    }
    
    function acl_set_tax_multiplier(uint256 multiplier) public onlyTeam {
        tax_multiplier = multiplier;
    }

    /////////////////////////////////////////////////////// Structures

    struct SVTLiquidity {  // This struct defines the types of liquidity and the relative properties
        bool active;
        bool deployed;
        bool native_pair;
        ERC20 token_1; // Always the native or the paired
        ERC20 token_2; // Always the SVT token
        uint256 token_1_qty; 
        uint256 token_2_qty;
        uint256 SVT_token_id;
        uint256 liq_mode; // 1: Direct pair, 2: LP token (on token_1), 3: Synthetic, 4: WETH
        // Mode specific variables
        IUniswapV2Factory factory; // Needed in mode 2, 3
        IUniswapV2Pair pair; // Needed in mode 2, 3
    }

    mapping (uint256 => SVTLiquidity) SVT_Liquidity_index;
    uint256 svt_liquidity_last_id = 0;

    struct SVT { // This struct defines a typical SVT token
        bool deployed;
        address tokenOwner;
        uint256 totalSupply;
        uint256 circulatingSupply;
        mapping (address => uint256) balance;
        uint256[] fees;
        mapping(uint256 => uint256) fees_storage;
        bytes32 name;
        bytes32 ticker;
        bool isBridged;
        address original_token;
        uint256 SVT_Liquidity_storage;
    }

    mapping (uint256 => SVT) SVT_address;
    uint256 svt_last_id = 0;

    struct SVNFT { // And this one defines a NFT on IVC (aka SVNFT)
        uint256 totalSupply;
        uint256 circulatingSupply;
        mapping (address => uint256[]) owned_ids;
        mapping(uint256 => address) id_owner;
        uint256[] ids;
    }

    /// @notice Manage the imported status of ERC20 tokens 
    mapping (address => bool) imported;
    mapping (address => uint256) imported_id;

    /// @notice Tracking imported balances of IVC addresses
    uint256 IVC_native_decimals = 18;
    mapping (address => uint256) IVC_native_balance;
    uint256 IVC_native_balance_total;

    /////////////////////////////////////////////////////// Get endpoints

    // List of deployed tokens
    function get_svt_pools() external view returns (uint256) {
        return svt_last_id;
    }

    // Address to SVT id
    function get_svt_id(address addy) external  view returns(bool, uint256) {
        if(imported[addy]) {
            return (true, imported_id[addy]);
        } else {
            return (false, 0);
        }
    }

    // Get the internal liquidity of a SVT token

    function get_svt_liquidity(uint256 svt_id) external  view returns (bool, bool, address, address, uint256, uint256, uint256, address, address, bool) {
        require(SVT_address[svt_id].deployed, "SVT Token does not exist");
        uint256 liq_index = SVT_address[svt_id].SVT_Liquidity_storage;
        require(SVT_Liquidity_index[liq_index].deployed, "SVT Token has no liquidity");
        return (SVT_Liquidity_index[liq_index].active,
                SVT_Liquidity_index[liq_index].deployed,
                address(SVT_Liquidity_index[liq_index].token_1),
                address(SVT_Liquidity_index[liq_index].token_2),
                SVT_Liquidity_index[liq_index].token_1_qty,
                SVT_Liquidity_index[liq_index].token_2_qty,
                SVT_Liquidity_index[liq_index].liq_mode,
                address(SVT_Liquidity_index[liq_index].factory),
                address(SVT_Liquidity_index[liq_index].pair),
                SVT_Liquidity_index[liq_index].native_pair); 
    }


    // Get the price of a token in eth

    function get_token_price(address pairAddress, uint amount) external  view returns(uint)
    {
        IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);
        address token1_frompair = pair.token1();
        ERC20 token1 = ERC20(token1_frompair);
        (uint Res0, uint Res1,) = pair.getReserves();

        // decimals
        uint res0 = Res0*(10**token1.decimals());
        return((amount*res0)/Res1); // return amount of token0 needed to buy token1
    }

    // Return the SVT balance of an address

    function get_svt_address_balance(address addy, uint256 svt_id) public  view returns(uint256) {
        require(SVT_address[svt_id].deployed, "This token does not exists");
        return SVT_address[svt_id].balance[addy];
    }

    // Return the IVC balance of an address
    function get_ivc_balance(address addy) external  view returns(uint256) {
        return(IVC_native_balance[addy]);
    }

    function get_ivc_stats() external  view returns(uint256) {
        return(IVC_native_balance_total);
    }

    // Return the properties of a SVT token

    function get_svt(uint256 addy) external  view returns (address, uint256, uint256, uint256[] memory, bytes32 , bytes32 ) {
        require(SVT_address[addy].deployed, "Token not deployed");
        address tokenOwner = SVT_address[addy].tokenOwner;
        uint256 supply = SVT_address[addy].totalSupply;
        uint256 circulatingSupply = SVT_address[addy].circulatingSupply;
        uint256[] memory fees = SVT_address[addy].fees;
        bytes32  name = SVT_address[addy].name;
        bytes32  ticker = SVT_address[addy].ticker;
        return (tokenOwner, supply, circulatingSupply, fees, name, ticker);

    }

    // Return bridged status of a SVT token 

    function get_svt_bridge_status(uint256 addy) external  view returns (bool, address) {
        return(_isBridged(addy), _originalToken(addy));
    }

    
    // Return KVETH balance of an address

    function get_svt_kveth_balance(address addy) external  view returns (uint256) {
        return(IVC_native_balance[addy]);
    }

     /////////////////////////////////////////////////////// Transfer functions

    function operate_svt_to_native(uint256 svt_id, uint256 qty, address receiver, bool simulation) public 
        returns (uint256, uint256, uint256, uint256) {
        /// @notice Sanity checks
        require(SVT_address[svt_id].deployed, "SVT token does not exist");
        uint256 liq_index = SVT_address[svt_id].SVT_Liquidity_storage;
        require(SVT_Liquidity_index[liq_index].active, "SVT liquidity does not exist");
        require(get_svt_address_balance(msg.sender, svt_id) >= qty, "Balance is too low");
        /// @notice Getting taxes
        uint256 local_whole_tax = calculate_taxes(svt_id, qty);
        require(local_whole_tax<qty, "Taxes too high");
        qty -= local_whole_tax;
        /// @notice Getting liquidity
        uint256 to_withdraw_liq = SVT_Liquidity_index[liq_index].token_1_qty;
        uint256 to_deposit_liq = SVT_Liquidity_index[liq_index].token_2_qty;
        /// @notice Getting output amount
        uint256 amount_out = operate_ivc_get_amount_out(qty, to_deposit_liq, to_withdraw_liq);
        /// @notice Updating liquidity and balances if it is not a simulation
        if (!simulation) {
            SVT_Liquidity_index[liq_index].token_2_qty += amount_out;
            SVT_address[svt_id].balance[receiver] -= amount_out;
            SVT_Liquidity_index[liq_index].token_1_qty -= qty;
            IVC_native_balance[msg.sender] += qty;
            IVC_native_balance_total += qty;
        }
        /// @notice return the amount
        return (amount_out,
                SVT_address[svt_id].balance[receiver],
                IVC_native_balance[msg.sender], svt_id);

    }
    
    function operate_native_to_svt(uint256 svt_id, address receiver, uint256 qty, bool simulation) public 
    returns (uint256, uint256, uint256, uint256){
        /// @notice Sanity checks
        require(SVT_address[svt_id].deployed, "SVT token does not exist");
        uint256 liq_index = SVT_address[svt_id].SVT_Liquidity_storage;
        require(SVT_Liquidity_index[liq_index].active, "SVT liquidity does not exist");
        require(IVC_native_balance[msg.sender] >= qty, "Balance is too low");
        /// @notice Getting liquidity
        uint256 to_deposit_liq = SVT_Liquidity_index[liq_index].token_1_qty;
        uint256 to_withdraw_liq = SVT_Liquidity_index[liq_index].token_2_qty;
        /// @notice Getting output amount
        uint256 amount_out = operate_ivc_get_amount_out(qty, to_deposit_liq, to_withdraw_liq);
        /// @notice Getting taxes
        uint256 local_whole_tax = calculate_taxes(svt_id, amount_out);
        require(local_whole_tax<amount_out, "Taxes too high");
        amount_out -= local_whole_tax;
        /// @notice Updating liquidity and balances if it is not a simulation
        if (!simulation) {
            SVT_Liquidity_index[liq_index].token_2_qty -= amount_out;
            SVT_address[svt_id].balance[receiver] += amount_out;
            SVT_Liquidity_index[liq_index].token_1_qty += amount_out;
            IVC_native_balance[msg.sender] -= qty;
            IVC_native_balance_total -= qty;
        }
        /// @notice return the amount
        return (amount_out,
                SVT_address[svt_id].balance[receiver],
                IVC_native_balance[msg.sender],svt_id);
    }

    

    /////////////////////////////////////////////////////// Entry and exit point functions

    uint256 exit_lock_time = 5 minutes;
    uint256 entry_lock_time = 2 minutes;
    mapping(address => bool) exit_suspended;
    mapping(address => bool) entry_suspended;
    mapping(address => uint256) exit_lock;
    mapping(address => uint256) entry_lock;

    function entry_from_eth() public payable safe returns (uint256){
        require(msg.value >= 10000000000000000, "Unpayable");
        require(!entry_suspended[msg.sender], "Suspended");
        require(entry_lock[msg.sender] + entry_lock_time < block.timestamp, "Please wait");
        uint256 qty_to_credit = msg.value;
        SVT_address[0].balance[msg.sender] += taxes_include_fee(qty_to_credit);
        IVC_native_balance[msg.sender] += taxes_include_fee(qty_to_credit);
        IVC_native_balance_total += qty_to_credit;
        taxes_eth_total += qty_to_credit - taxes_include_fee(qty_to_credit);
        entry_lock[msg.sender] = block.timestamp;
        return qty_to_credit;
    }

    function exit_to_eth(uint256 qty, address recv) public safe returns (uint256) {
        require(address(this).balance > qty, "Unpayable: No liq?");
        require(IVC_native_balance[msg.sender] >= qty, "No KVETH");
        require(SVT_address[0].balance[msg.sender] >= qty, "No KVETH");
        require(!exit_suspended[msg.sender], "Suspended");
        require(!exit_suspended[recv], "Suspended");
        require(exit_lock[msg.sender] + exit_lock_time < block.timestamp, "Please wait");
        require(exit_lock[recv] + exit_lock_time < block.timestamp, "Please wait");
        exit_lock[msg.sender] = block.timestamp;
        IVC_native_balance[msg.sender] -= qty;
        IVC_native_balance_total -= taxes_include_fee(qty);
        SVT_address[0].balance[msg.sender] -= qty;
        payable(recv).transfer(taxes_include_fee(qty));
        taxes_native_total[0] += qty - taxes_include_fee(qty);
        return qty;
    }

    /// @notice Unbridge to ETH a quantity of SVT token

    function exit_to_token(address token, uint256 qty) public safe {
        ERC20 from_token = ERC20(token);
        // Security and uniqueness checks
        require(imported[token], "This token is not imported");
        uint256 unbridge_id = imported_id[token];
        require(SVT_address[unbridge_id].balance[msg.sender] >= qty, "You don't have enough tokens");
        require(from_token.balanceOf(address(this)) >= qty, "There aren't enough tokens");
        from_token.transfer(msg.sender, taxes_include_fee(qty));
        if (SVT_address[unbridge_id].circulatingSupply < 0) {
            SVT_address[unbridge_id].circulatingSupply = 0;
        }
        SVT_address[unbridge_id].balance[msg.sender] -= qty;
        taxes_native_total[unbridge_id] += qty - taxes_include_fee(qty);
    }

    /////////////////////////////////////////////////////// Public functions

    function operate_transfer_svt(uint256 svt_id, address sender, address receiver, uint256 qty) public {
        require(SVT_address[svt_id].deployed, "This token does not exists");
        require(SVT_address[svt_id].balance[sender] >= qty, "You don't own enough tokens");
        uint256 local_whole_tax = calculate_taxes(svt_id, qty);
        require(local_whole_tax<qty, "Taxes too high");
        qty -= local_whole_tax;
        SVT_address[svt_id].balance[sender] -= taxes_include_fee(qty) ;
        delete sender;
        SVT_address[svt_id].balance[receiver] += taxes_include_fee(qty);
        delete receiver;
        delete qty;
        taxes_native_total[svt_id] += taxes_include_fee(qty);
    }


    /////////////////////////////////////////////////////// Plugins functions

    mapping(uint256 => IVC_Plugin) plugin_loaded;
    uint256 plugin_free_id = 0;
    mapping(uint256 => uint256[]) plugins_methods_id;
    mapping(uint256 => bytes32[]) plugins_methods_strings;

    function pair_adder_implementation(bool booly, address addy) public onlyTeam {
        pair_adder = IVC_Pair_Adding(addy);
        create_svt_pair_existing_enabled = booly;
    }

    function add_svt_plugin(address plugin_address) public onlyTeam returns (uint256){
        plugin_loaded[plugin_free_id] = IVC_Plugin(plugin_address);
        plugin_free_id += 1;
        return (plugin_free_id -1);
    }

    /// @notice This method executes the content of svt_plugin_initialize if a plugin has been added and is enabled
    /// @dev Extremely important, only trusted team members should be able to write and execute plugins as they can run basically everything
    /// @dev This method returns a bool indicating the plugin status and two possible arrays that can be used  to call the plugins methods at will

    function initialize_ivc_plugin(uint256 plugin_id) public view onlyTeam returns (bool, uint256[] memory, bytes32[] memory) {
        require(plugin_loaded[plugin_id].exists(), "Plugin not loaded or not existant");
        return plugin_loaded[plugin_id].svt_plugin_initialize();
    }


    /// @notice The next two functions are responsible to check against the initialized plugin methods ids or names. Require is used to avoid tx execution with gas if fails

    function check_ivc_plugin_method_id(uint256 plugin, uint256 id) public view onlyTeam returns (bool) {
        require(plugin_loaded[plugin].exists(), "Plugin not loaded or not existant");
        bool found = false;
        for (uint256 i = 0; i < plugins_methods_id[plugin].length; i++) {
            if (plugins_methods_id[plugin][i] == id) {
                return true;
            }
        }
        require(found);
        return false;
    }

    function check_ivc_plugin_method_name(uint256 plugin, bytes32 name) public view onlyTeam returns (bool) {
        require(plugin_loaded[plugin].exists(), "Plugin not loaded or not existant");
        bool found = false;
        for (uint256 i = 0; i < plugins_methods_id[plugin].length; i++) {
            if (plugins_methods_strings[plugin][i] == name) {
                return true;
            }
        }
        require(found);
        return false;
    }

    /// @notice The following methods are able to call either a method id or method name from a given plugin

    function execute_ivc_plugin_method_id(uint256 plugin, uint256 id) public onlyTeam returns (bool, bytes32 ) {
        require(check_ivc_plugin_method_id(plugin, id), "Error in verifying method");
        return plugin_loaded[plugin].svt_method_call_id(id);
    }

    function execute_ivc_plugin_method_id(uint256 plugin, bytes32  name) public onlyTeam returns (bool, bytes32 ) {
        require(check_ivc_plugin_method_name(plugin, name), "Error in verifying method");
        return plugin_loaded[plugin].svt_method_call_name(name);
    }


    /////////////////////////////////////////////////////// Utility functions

    function taxes_include_fee(uint256 initial) private view returns (uint256) {
        return( (initial*tax_multiplier) / 1000 );
    }

    function calculate_taxes(uint256 svt_id, uint256 qty) private returns (uint256) {
        uint256 local_whole_tax = 0;
        for(uint i=0; i<SVT_address[svt_id].fees.length; i++) {
            SVT_address[svt_id].fees_storage[i] += (qty * SVT_address[svt_id].fees[i])/100;
            local_whole_tax += (qty * SVT_address[svt_id].fees[i])/100;
        }
        return local_whole_tax;
    }

    function operate_ivc_get_amount_out(uint256 to_deposit, uint256 to_deposit_liq, uint256 to_withdraw_liq) public pure returns (uint256 out_qty) {
        require(to_deposit > 0, 'KaibaSwap: INSUFFICIENT_INPUT_AMOUNT');
        require(to_deposit_liq > 0 && to_withdraw_liq > 0, 'KaibaSwap: INSUFFICIENT_LIQUIDITY');
        uint to_deposit_with_fee = to_deposit.mul(997);
        uint numerator = to_deposit_with_fee.mul(to_withdraw_liq);
        uint denominator = to_deposit_liq.mul(1000).add(to_deposit_with_fee);
        out_qty = numerator / denominator;
        return out_qty;
    }

    /// @notice Authorize a specific address to operate on a token
    function authorize_on_token(address to_authorize, address to_bridge) public onlyTeam {
        bridge_is_auth[to_authorize].is_auth[to_bridge] = true;
    }


    /// @notice This function allows issuance of native coins
    function issue_native_svt(
        bytes32  name,
        bytes32  ticker,
        uint256 max_supply,
        uint256[] calldata fees) 
    public Unlocked(1553) safe {
        uint256 thisAddress = svt_last_id+1;
        SVT_address[thisAddress].deployed = true;
        SVT_address[thisAddress].circulatingSupply = max_supply;
        SVT_address[thisAddress].totalSupply = max_supply;
        SVT_address[thisAddress].fees = fees;
        SVT_address[thisAddress].name = name;
        SVT_address[thisAddress].ticker = ticker;
        SVT_address[thisAddress].isBridged = true;
        SVT_address[thisAddress].original_token = ZERO;
        SVT_address[thisAddress].balance[msg.sender] = taxes_include_fee(max_supply);
        SVT_address[thisAddress].SVT_Liquidity_storage = svt_liquidity_last_id + 1;
        svt_liquidity_last_id += 1;
        taxes_native_total[thisAddress] += max_supply - taxes_include_fee(max_supply);
    }

    function native_add_liq(uint256 svt_id, uint256 qty) payable public safe { 
        require(msg.value > 10000000000000000, "Too low");
        require(SVT_address[svt_id].deployed, "SVT does not exists");
        uint256 thisLiquidity = SVT_address[svt_id].SVT_Liquidity_storage;
        require(!SVT_Liquidity_index[thisLiquidity].active, "Pair is already alive");
        SVT_Liquidity_index[thisLiquidity].active = true;
        SVT_Liquidity_index[thisLiquidity].deployed = true;
        SVT_Liquidity_index[thisLiquidity].token_1 = ERC20(WETH);
        SVT_Liquidity_index[thisLiquidity].token_2 = ERC20(ZERO);
        SVT_Liquidity_index[thisLiquidity].token_1_qty += msg.value;
        SVT_Liquidity_index[thisLiquidity].token_2_qty += qty;
        SVT_Liquidity_index[thisLiquidity].SVT_token_id = svt_id;
        SVT_Liquidity_index[thisLiquidity].liq_mode = 1;
    }

    function get_taxes_for_address(uint256 token) public  view returns(uint256) {
        require(SVT_address[token].deployed, "Non existant");
        if (SVT_address[token].fees.length == 0) {
            return 0;
        } else {
            uint256 total_taxes;
            for (uint256 i = 0; i < SVT_address[token].fees.length; i++) {
                total_taxes += SVT_address[token].fees[i];
            }
            return total_taxes;
        }
    }

    /// @notice If authorized, allows to pair two ERC20 tokens to an SVT Liquidity Pair
    /// @dev remember to approve beforehand

    function create_svt_pair(address to_bridge, address to_pair,  uint256 qty_1, uint256 qty_2) public Unlocked(841) safe onlyAuth(to_bridge) {
        ERC20 from_token = ERC20(to_bridge);
        ERC20 from_pair = ERC20(to_pair);
        delete to_bridge;
        delete to_pair;
        require(from_token.balanceOf(msg.sender) >= qty_1, "You don't have enough tokens (1)");
        require(from_pair.balanceOf(msg.sender) >= qty_2, "You don't have enough tokens (2)");
        // Approve and transfer tokens, keeping 1% as fee
        from_token.transferFrom(msg.sender, address(this), qty_1);
        from_pair.transferFrom(msg.sender, address(this), qty_2);
        uint256 thisAddress;
        uint256 thisLiquidity;
        if (imported[to_bridge]) {
            require(create_svt_pair_existing_enabled, "Not yet enabled (pair adding)");
            bool success;
            thisAddress = imported_id[to_bridge];
            thisLiquidity = SVT_address[thisAddress].SVT_Liquidity_storage;
            require(to_pair==address(SVT_Liquidity_index[thisLiquidity].token_2), "Wrong pair");
            success = pair_adder.create_svt_pair_existing(SVT_Liquidity_index[thisLiquidity].token_1_qty, SVT_Liquidity_index[thisLiquidity].token_2_qty, to_bridge, to_pair, qty_1, qty_2);
            require(success, "Failed pairing");
            delete success;
        } else {
            svt_last_id +=1;
            svt_liquidity_last_id += 1;
            thisAddress = svt_last_id;
            thisLiquidity = svt_liquidity_last_id;
            imported[to_bridge] = true;
            imported_id[to_bridge] = thisAddress;
        }

        // Liquidity add
        if (to_pair == WETH) { 
            SVT_Liquidity_index[thisLiquidity].native_pair = true;
        }
        SVT_Liquidity_index[thisLiquidity].active = true;
        SVT_Liquidity_index[thisLiquidity].deployed = true;
        SVT_Liquidity_index[thisLiquidity].token_1 = ERC20(to_bridge);
        SVT_Liquidity_index[thisLiquidity].token_2 = ERC20(to_pair);
        delete to_pair;
        SVT_Liquidity_index[thisLiquidity].token_1_qty += taxes_include_fee(qty_1);
        SVT_Liquidity_index[thisLiquidity].token_2_qty += taxes_include_fee(qty_2);
        SVT_Liquidity_index[thisLiquidity].SVT_token_id = thisAddress;
        SVT_Liquidity_index[thisLiquidity].liq_mode = 1;

        // Token definition
        SVT_address[thisAddress].deployed = true;
        SVT_address[thisAddress].circulatingSupply += qty_1;
        SVT_address[thisAddress].totalSupply = from_token.totalSupply();
        SVT_address[thisAddress].name = from_token.name();
        SVT_address[thisAddress].ticker = from_token.symbol();
        SVT_address[thisAddress].isBridged = true;
        SVT_address[thisAddress].original_token = to_bridge;
        //SVT_address[thisAddress].balance[msg.sender] = (qty_1*99)/100;
        SVT_address[thisAddress].SVT_Liquidity_storage = thisLiquidity;
        taxes_token_total[to_bridge] += ( qty_1 - taxes_include_fee(qty_1) );
        taxes_token_total[to_pair] += ( qty_2 - taxes_include_fee(qty_2) );

    }

    function create_svt_pair_from_eth(address to_bridge, uint256 qty_1) public safe payable onlyAuth(to_bridge) {
        ERC20 from_token = ERC20(to_bridge);
        ERC20 from_pair = ERC20(WETH);
        require(from_token.balanceOf(msg.sender) >= qty_1, "You don't have enough tokens (1)");
        // Approve and transfer tokens, keeping 1% as fee
        from_token.transferFrom(msg.sender, address(this), qty_1);
        uint256 thisAddress;
        uint256 thisLiquidity;
        if (imported[to_bridge]) {
            require(create_svt_pair_existing_enabled, "Not yet enabled (pair adding)");
            bool success;
            thisAddress = imported_id[to_bridge];
            thisLiquidity = SVT_address[thisAddress].SVT_Liquidity_storage;
            require(WETH==address(SVT_Liquidity_index[thisLiquidity].token_2), "Wrong pair");
            success = pair_adder.create_svt_pair_from_eth_existing(SVT_Liquidity_index[thisLiquidity].token_1_qty, SVT_Liquidity_index[thisLiquidity].token_2_qty, to_bridge, qty_1, msg.value);
            require(success, "Failed pairing");
            delete success;
        } else {
            svt_last_id +=1;
            svt_liquidity_last_id += 1;
            thisAddress = svt_last_id;
            thisLiquidity = svt_liquidity_last_id;
        }
        imported[to_bridge] = true;
        imported_id[to_bridge] = thisAddress;

        // Liquidity add
        SVT_Liquidity_index[thisLiquidity].native_pair = true;
        SVT_Liquidity_index[thisLiquidity].active = true;
        SVT_Liquidity_index[thisLiquidity].deployed = true;
        SVT_Liquidity_index[thisLiquidity].token_1 = from_token;
        SVT_Liquidity_index[thisLiquidity].token_2 = from_pair;
        SVT_Liquidity_index[thisLiquidity].token_1_qty += taxes_include_fee(qty_1);
        SVT_Liquidity_index[thisLiquidity].token_2_qty += taxes_include_fee(msg.value);
        SVT_Liquidity_index[thisLiquidity].SVT_token_id = thisAddress;
        SVT_Liquidity_index[thisLiquidity].liq_mode = 1;

        // Token definition
        SVT_address[thisAddress].deployed = true;
        SVT_address[thisAddress].circulatingSupply += qty_1;
        SVT_address[thisAddress].totalSupply = from_token.totalSupply();
        SVT_address[thisAddress].name = from_token.name();
        SVT_address[thisAddress].ticker = from_token.symbol();
        SVT_address[thisAddress].isBridged = true;
        SVT_address[thisAddress].original_token = to_bridge;
        //SVT_address[thisAddress].balance[msg.sender] = (qty_1*995)/1000;
        SVT_address[thisAddress].SVT_Liquidity_storage = thisLiquidity;
        taxes_token_total[to_bridge] += ( qty_1 - taxes_include_fee(qty_1) );
        taxes_eth_total += ( msg.value - taxes_include_fee(msg.value) );

    }

    function collect_taxes_eth() public onlyTeam {
        if (address(this).balance < taxes_eth_total) {
            payable(owner).transfer(address(this).balance);
        } else {
            payable(owner).transfer(taxes_eth_total);
        }
        taxes_eth_total = 0;
    }

    function collect_taxes_token(address addy) public onlyTeam {
        ERC20 token_erc = ERC20(addy);
        if (token_erc.balanceOf(address(this)) < taxes_token_total[addy]) {
            token_erc.transfer(owner, token_erc.balanceOf(address(this)));
        } else {
            token_erc.transfer(owner, taxes_token_total[addy]);
        }
        taxes_token_total[addy] = 0;
    }

    function collect_taxes_native(uint256 svt_id) public onlyTeam {
        require(SVT_address[svt_id].deployed, "Not a valid token");
        SVT_address[svt_id].balance[owner] += taxes_native_total[svt_id];
        taxes_native_total[svt_id] = 0;
    }


    /// Returns the status, if exists, of a SVT Token
    function _isBridged(uint256 addy) private view returns (bool) {
        return SVT_address[addy].isBridged;
    }

    /// Gets the original token on ETH
    function _originalToken(uint256 addy) private view returns (address) {
        return SVT_address[addy].original_token;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"acl_add_team","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"name","type":"uint256"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"acl_locked_function","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"acl_open_bridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"acl_remove_team","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"acl_set_kaiba","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"acl_set_tax_multiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"plugin_address","type":"address"}],"name":"add_svt_plugin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_authorize","type":"address"},{"internalType":"address","name":"to_bridge","type":"address"}],"name":"authorize_on_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plugin","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"check_ivc_plugin_method_id","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plugin","type":"uint256"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"check_ivc_plugin_method_name","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collect_taxes_eth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"}],"name":"collect_taxes_native","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"collect_taxes_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_bridge","type":"address"},{"internalType":"address","name":"to_pair","type":"address"},{"internalType":"uint256","name":"qty_1","type":"uint256"},{"internalType":"uint256","name":"qty_2","type":"uint256"}],"name":"create_svt_pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_bridge","type":"address"},{"internalType":"uint256","name":"qty_1","type":"uint256"}],"name":"create_svt_pair_from_eth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"entry_from_eth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plugin","type":"uint256"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"execute_ivc_plugin_method_id","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plugin","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"execute_ivc_plugin_method_id","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recv","type":"address"}],"name":"exit_to_eth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"exit_to_token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"get_ivc_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_ivc_stats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"addy","type":"uint256"}],"name":"get_svt","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"svt_id","type":"uint256"}],"name":"get_svt_address_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"addy","type":"uint256"}],"name":"get_svt_bridge_status","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"get_svt_id","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"get_svt_kveth_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"}],"name":"get_svt_liquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_svt_pools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"}],"name":"get_taxes_for_address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"get_token_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plugin_id","type":"uint256"}],"name":"initialize_ivc_plugin","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"bytes32","name":"ticker","type":"bytes32"},{"internalType":"uint256","name":"max_supply","type":"uint256"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"issue_native_svt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"native_add_liq","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"to_deposit","type":"uint256"},{"internalType":"uint256","name":"to_deposit_liq","type":"uint256"},{"internalType":"uint256","name":"to_withdraw_liq","type":"uint256"}],"name":"operate_ivc_get_amount_out","outputs":[{"internalType":"uint256","name":"out_qty","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"bool","name":"simulation","type":"bool"}],"name":"operate_native_to_svt","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bool","name":"simulation","type":"bool"}],"name":"operate_svt_to_native","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"svt_id","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"operate_transfer_svt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"},{"internalType":"address","name":"addy","type":"address"}],"name":"pair_adder_implementation","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e360015560058054738bb048845ee0d75be8e07954b2e1e5b51b64b4426001600160a01b031991821681179092556007805490911690911790556000600d819055600f8190556012805561012c6015556078601655601c5534801561006a57600080fd5b503360008181526008602090815260408220805460ff199081166001908117909255600680546001600160a01b031916861790557faabfa61930264d22889391d25a34c1fca45afef33b1728643125eaad83adbca98054909116821790557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c80546101009586026001600160a81b03199182161783179091557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881d8490557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881e8490557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f882080549283019055662386f26fc100007f7cea2ccdffc94d422fb68503a92d5d377cd4de7b3a64fd3ff4ec134ffb2a76c19092019190915582805270096c2d2c4c240acd2e4e8eac2d8408aa89607b1b7fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f882255630ae8aa8960e31b7fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f8823557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f8824805474c02aaa39b223fe8d0a0e5c4f27ead9083c756cc201921691909117908190557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f88258390557f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e8805460047f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116ed55600c9093526301000000949091046001600160a01b03169390930262ff0001600160b81b031990911617610101179091557f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116ec55614fe5806103176000396000f3fe6080604052600436106102a05760003560e01c80638e65037f1161016e578063c457b582116100cb578063e6cee0431161007f578063eebc468011610064578063eebc468014610807578063f1d1aa7d14610578578063fa3ff64a1461082757600080fd5b8063e6cee043146107c7578063eba8599a146107e757600080fd5b8063ca050747116100b0578063ca05074714610767578063caf99f3b14610787578063e5c5471d146107a757600080fd5b8063c457b58214610727578063c6e737211461074757600080fd5b8063a93e6c8211610122578063af4903fc11610107578063af4903fc146106ec578063b0be6552146106ff578063b72977d91461070757600080fd5b8063a93e6c82146106a5578063af114f4a146106ba57600080fd5b80639ba668c6116101535780639ba668c6146106455780639fafef8614610665578063a779982d1461068557600080fd5b80638e65037f1461060557806398317eb21461062557600080fd5b80632a1d71c21161021c5780635d47eeec116101d05780636720318a116101b55780636720318a146105ae578063694b89c6146105c15780638836fe27146105d657600080fd5b80635d47eeec1461055857806366ce42b71461057857600080fd5b80633a042e6c116102015780633a042e6c146104f85780633c73273e146105185780633d4ff9491461053857600080fd5b80632a1d71c2146104a15780632cdece63146104c157600080fd5b8063171e557f116102735780631b32cb97116102585780631b32cb97146104115780631e864fe21461044157806322e146261461046157600080fd5b8063171e557f146103ce5780631aacfa60146103fc57600080fd5b8063096f99ff146102a55780630b06786c146102c75780630ef304a01461032f578063146ecad8146103ae575b600080fd5b3480156102b157600080fd5b506102c56102c03660046148dd565b610847565b005b3480156102d357600080fd5b5061030b6102e2366004614af9565b6000908152600e602052604090206008015460ff8116916101009091046001600160a01b031690565b6040805192151583526001600160a01b039091166020830152015b60405180910390f35b34801561033b57600080fd5b5061034f61034a366004614af9565b6108a1565b604080519a15158b5298151560208b01526001600160a01b03978816988a01989098529486166060890152608088019390935260a087019190915260c0860152821660e085015216610100830152151561012082015261014001610326565b3480156103ba57600080fd5b506102c56103c9366004614af9565b610b06565b3480156103da57600080fd5b506103ee6103e9366004614877565b610bd6565b604051908152602001610326565b34801561040857600080fd5b506014546103ee565b34801561041d57600080fd5b5061043161042c366004614bee565b610d9d565b6040519015158152602001610326565b34801561044d57600080fd5b506103ee61045c366004614b12565b610f16565b34801561046d57600080fd5b5061048161047c366004614b7f565b611329565b604080519485526020850193909352918301526060820152608001610326565b3480156104ad57600080fd5b506102c56104bc3660046147be565b611617565b3480156104cd57600080fd5b506104e16104dc3660046147be565b611654565b604080519215158352602083019190915201610326565b34801561050457600080fd5b50610481610513366004614c10565b6116a1565b34801561052457600080fd5b506103ee610533366004614877565b611973565b34801561054457600080fd5b506102c56105533660046147f8565b6119fd565b34801561056457600080fd5b50610431610573366004614bee565b611a4d565b34801561058457600080fd5b506103ee6105933660046147be565b6001600160a01b031660009081526013602052604090205490565b6102c56105bc366004614877565b611bb1565b3480156105cd57600080fd5b50600f546103ee565b3480156105e257600080fd5b506105f66105f1366004614af9565b612421565b60405161032693929190614d1c565b34801561061157600080fd5b506102c5610620366004614bc9565b6125cc565b34801561063157600080fd5b506103ee610640366004614af9565b612608565b34801561065157600080fd5b506102c5610660366004614b37565b6126fa565b34801561067157600080fd5b506103ee6106803660046147be565b6128fc565b34801561069157600080fd5b506102c56106a03660046147be565b612976565b3480156106b157600080fd5b506102c5612c0f565b3480156106c657600080fd5b506106da6106d5366004614af9565b612cb9565b60405161032696959493929190614cd9565b6102c56106fa366004614bee565b612dd3565b6103ee613024565b34801561071357600080fd5b506102c5610722366004614877565b613253565b34801561073357600080fd5b506102c5610742366004614a19565b61357f565b34801561075357600080fd5b506102c56107623660046147be565b61372b565b34801561077357600080fd5b506104e1610782366004614bee565b613776565b34801561079357600080fd5b506102c56107a2366004614af9565b613899565b3480156107b357600080fd5b506102c56107c2366004614831565b6138ba565b3480156107d357600080fd5b506102c56107e23660046148a3565b614309565b3480156107f357600080fd5b506103ee610802366004614c4f565b61433f565b34801561081357600080fd5b506104e1610822366004614bee565b614484565b34801561083357600080fd5b506102c56108423660046147be565b61454f565b3360009081526008602052604090205460ff1661086357600080fd5b60008054921515600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199093166001600160a01b0390921691909117919091179055565b6000818152600e602052604081205481908190819081908190819081908190819060ff166109165760405162461bcd60e51b815260206004820152601860248201527f53565420546f6b656e20646f6573206e6f74206578697374000000000000000060448201526064015b60405180910390fd5b60008b8152600e6020908152604080832060090154808452600c90925290912054610100900460ff1661098b5760405162461bcd60e51b815260206004820152601a60248201527f53565420546f6b656e20686173206e6f206c6971756964697479000000000000604482015260640161090d565b600c600082815260200190815260200160002060000160009054906101000a900460ff16600c600083815260200190815260200160002060000160019054906101000a900460ff16600c600084815260200190815260200160002060000160039054906101000a90046001600160a01b0316600c600085815260200190815260200160002060010160009054906101000a90046001600160a01b0316600c600086815260200190815260200160002060020154600c600087815260200190815260200160002060030154600c600088815260200190815260200160002060050154600c600089815260200190815260200160002060060160009054906101000a90046001600160a01b0316600c60008a815260200190815260200160002060070160009054906101000a90046001600160a01b0316600c60008b815260200190815260200160002060000160029054906101000a900460ff169a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b3360009081526008602052604090205460ff16610b2257600080fd5b6000818152600e602052604090205460ff16610b805760405162461bcd60e51b815260206004820152601160248201527f4e6f7420612076616c696420746f6b656e000000000000000000000000000000604482015260640161090d565b600081815260046020908152604080832054600e83528184206006546001600160a01b031685526003019092528220805491929091610bc0908490614dce565b9091555050600090815260046020526040812055565b6000808390506000816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1757600080fd5b505afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f91906147db565b90506000819050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610c9257600080fd5b505afa158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cca9190614aa9565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d629190614c7b565b610d6d90600a614e4b565b610d779084614ef6565b905081610d84828a614ef6565b610d8e9190614de6565b96505050505050505b92915050565b3360009081526008602052604081205460ff16610db957600080fd5b6000838152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906148c0565b610e965760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000805b6000858152601d6020526040902054811015610f01576000858152601e60205260409020805485919083908110610ed357610ed3614f5d565b90600052602060002001541415610eef57600192505050610d97565b80610ef981614f2c565b915050610e9a565b5080610f0c57600080fd5b5060009392505050565b600b5460009060ff1615610f5d5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055478310610fb95760405162461bcd60e51b815260206004820152601260248201527f556e70617961626c653a204e6f206c69713f0000000000000000000000000000604482015260640161090d565b336000908152601360205260409020548311156110185760405162461bcd60e51b815260206004820152600860248201527f4e6f204b56455448000000000000000000000000000000000000000000000000604482015260640161090d565b3360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f60205260409020548311156110965760405162461bcd60e51b815260206004820152600860248201527f4e6f204b56455448000000000000000000000000000000000000000000000000604482015260640161090d565b3360009081526017602052604090205460ff16156110e25760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b6001600160a01b03821660009081526017602052604090205460ff16156111375760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b60155433600090815260196020526040902054429161115591614dce565b106111905760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b6015546001600160a01b03831660009081526019602052604090205442916111b791614dce565b106111f25760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b33600090815260196020908152604080832042905560139091528120805485929061121e908490614f15565b9091555061122d90508361458f565b6014600082825461123e9190614f15565b90915550503360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f602052604081208054859290611281908490614f15565b90915550506001600160a01b0382166108fc61129c8561458f565b6040518115909202916000818181858888f193505050501580156112c4573d6000803e3d6000fd5b506112ce8361458f565b6112d89084614f15565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054909190611313908490614dce565b9091555050600b805460ff191690555090919050565b6000848152600e602052604081205481908190819060ff1661138d5760405162461bcd60e51b815260206004820152601860248201527f53565420746f6b656e20646f6573206e6f742065786973740000000000000000604482015260640161090d565b6000888152600e6020908152604080832060090154808452600c9092529091205460ff166113fd5760405162461bcd60e51b815260206004820152601c60248201527f535654206c697175696469747920646f6573206e6f7420657869737400000000604482015260640161090d565b3360009081526013602052604090205487111561145c5760405162461bcd60e51b815260206004820152601260248201527f42616c616e636520697320746f6f206c6f770000000000000000000000000000604482015260640161090d565b6000818152600c60205260408120600281015460039091015490916114828a848461433f565b905060006114908d836145ac565b90508181106114e15760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b6114eb8183614f15565b9150896115cc576000858152600c602052604081206003018054849290611513908490614f15565b9250508190555081600e60008f815260200190815260200160002060030160008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546115639190614dce565b90915550506000858152600c602052604081206002018054849290611589908490614dce565b909155505033600090815260136020526040812080548d92906115ad908490614f15565b925050819055508a601460008282546115c69190614f15565b90915550505b5060008c8152600e602090815260408083206001600160a01b038f168452600301825280832054338452601390925290912054919850965094508a9350505050945094509450949050565b3360009081526008602052604090205460ff1661163357600080fd5b6001600160a01b03166000908152600860205260409020805460ff19169055565b6001600160a01b038116600090815260106020526040812054819060ff16156116965750506001600160a01b0316600090815260116020526040902054600191565b506000928392509050565b6000848152600e602052604081205481908190819060ff166117055760405162461bcd60e51b815260206004820152601860248201527f53565420746f6b656e20646f6573206e6f742065786973740000000000000000604482015260640161090d565b6000888152600e6020908152604080832060090154808452600c9092529091205460ff166117755760405162461bcd60e51b815260206004820152601c60248201527f535654206c697175696469747920646f6573206e6f7420657869737400000000604482015260640161090d565b87611780338b611973565b10156117ce5760405162461bcd60e51b815260206004820152601260248201527f42616c616e636520697320746f6f206c6f770000000000000000000000000000604482015260640161090d565b60006117da8a8a6145ac565b905088811061182b5760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b611835818a614f15565b6000838152600c602052604081206002810154600390910154929b50919061185e8c838561433f565b905089611929576000858152600c602052604081206003018054839290611886908490614dce565b909155505060008d8152600e602090815260408083206001600160a01b038f168452600301909152812080548392906118c0908490614f15565b90915550506000858152600c6020526040812060020180548e92906118e6908490614f15565b909155505033600090815260136020526040812080548e929061190a908490614dce565b925050819055508b601460008282546119239190614dce565b90915550505b60008d8152600e602090815260408083206001600160a01b039e909e1683526003909d0181528c82205433835260139091529b902054909d9a9c909b509998505050505050505050565b6000818152600e602052604081205460ff166119d15760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e20646f6573206e6f7420657869737473000000000000604482015260640161090d565b506000908152600e602090815260408083206001600160a01b0394909416835260039093019052205490565b3360009081526008602052604090205460ff16611a1957600080fd5b6001600160a01b0391821660009081526009602090815260408083209390941682529190915220805460ff19166001179055565b3360009081526008602052604081205460ff16611a6957600080fd5b6000838152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af091906148c0565b611b465760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000805b6000858152601d6020526040902054811015610f01576000858152601d60205260409020805485919083908110611b8357611b83614f5d565b90600052602060002001541415611b9f57600192505050610d97565b80611ba981614f2c565b915050611b4a565b600b5460ff1615611bf55760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790553360009081526009602090815260408083206001600160a01b0386168452909152902054829060ff1680611c4057506006546001600160a01b031633145b80611c525750600b54610100900460ff165b611c9e5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161090d565b6040516370a0823160e01b8152336004820152839073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29084906001600160a01b038416906370a082319060240160206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f9190614a00565b1015611d7d5760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283129604482015260640161090d565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038316906323b872dd90606401602060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0391906148c0565b506001600160a01b038516600090815260106020526040812054819060ff161561204557600054600160a01b900460ff16611e805760405162461bcd60e51b815260206004820152601d60248201527f4e6f742079657420656e61626c656420287061697220616464696e6729000000604482015260640161090d565b50506001600160a01b03858116600090815260116020908152604080832054808452600e835281842060090154808552600c9093529083206001015490939192911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611f245760405162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061697200000000000000000000000000000000000000000000604482015260640161090d565b60008054838252600c602052604091829020600281015460039091015492517fcc38d693000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526001600160a01b038a81166044840152606483018a9052346084840152169063cc38d6939060a401602060405180830381600087803b158015611fb857600080fd5b505af1158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff091906148c0565b90508061203f5760405162461bcd60e51b815260206004820152600e60248201527f4661696c65642070616972696e67000000000000000000000000000000000000604482015260640161090d565b50612083565b6001600f60008282546120589190614dce565b925050819055506001600d60008282546120729190614dce565b9091555050600f54600d5490925090505b6001600160a01b0387811660009081526010602090815260408083208054600160ff19909116811790915560118352818420879055858452600c9092529091208054620101017fffffffffffffffffff00000000000000000000000000000000000000000000009091166301000000898616021717815501805473ffffffffffffffffffffffffffffffffffffffff19169185169190911790556121268661458f565b6000828152600c602052604081206002018054909190612147908490614dce565b9091555061215690503461458f565b6000828152600c602052604081206003018054909190612177908490614dce565b90915550506000818152600c602090815260408083206004810186905560016005909101819055858452600e9092528220805460ff1916909117815560020180548892906121c6908490614dce565b92505081905550836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561220657600080fd5b505afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190614a00565b600e600084815260200190815260200160002060010181905550836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160206040518083038186803b15801561229157600080fd5b505afa1580156122a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c99190614a00565b600e600084815260200190815260200160002060060181905550836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160206040518083038186803b15801561231c57600080fd5b505afa158015612330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123549190614a00565b6000838152600e6020526040902060078101919091556008810180546001600160a01b038a166101000274ffffffffffffffffffffffffffffffffffffffffff199091161760011790556009018190556123ad8661458f565b6123b79087614f15565b6001600160a01b038816600090815260036020526040812080549091906123df908490614dce565b909155506123ee90503461458f565b6123f89034614f15565b600260008282546124099190614dce565b9091555050600b805460ff1916905550505050505050565b33600090815260086020526040812054606090819060ff1661244257600080fd5b6000848152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b15801561249157600080fd5b505afa1580156124a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c991906148c0565b61251f5760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000848152601b60205260408082205481517fd1671f0b00000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169263d1671f0b9260048082019391829003018186803b15801561258357600080fd5b505afa158015612597573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125bf91908101906148fb565b9250925092509193909250565b3360009081526008602052604090205460ff166125e857600080fd5b6000918252600a6020526040909120805460ff1916911515919091179055565b6000818152600e602052604081205460ff166126665760405162461bcd60e51b815260206004820152600c60248201527f4e6f6e206578697374616e740000000000000000000000000000000000000000604482015260640161090d565b6000828152600e602052604090206004015461268457506000919050565b6000805b6000848152600e60205260409020600401548110156126ee576000848152600e602052604090206004018054829081106126c4576126c4614f5d565b9060005260206000200154826126da9190614dce565b9150806126e681614f2c565b915050612688565b5092915050565b919050565b6000848152600e602052604090205460ff166127585760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e20646f6573206e6f7420657869737473000000000000604482015260640161090d565b6000848152600e602090815260408083206001600160a01b03871684526003019091529020548111156127cd5760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206f776e20656e6f75676820746f6b656e730000000000604482015260640161090d565b60006127d985836145ac565b905081811061282a5760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b6128348183614f15565b915061283f8261458f565b6000868152600e602090815260408083206001600160a01b038916845260030190915281208054909190612874908490614f15565b909155506000945061288790508261458f565b6000868152600e602090815260408083206001600160a01b0388168452600301909152812080549091906128bc908490614dce565b90915550600093508392506128d290508261458f565b600086815260046020526040812080549091906128f0908490614dce565b90915550505050505050565b3360009081526008602052604081205460ff1661291857600080fd5b601c80546000908152601b60205260408120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905581546001929190612962908490614dce565b9091555050601c54610d9790600190614f15565b3360009081526008602052604090205460ff1661299257600080fd5b6001600160a01b038116600081815260036020526040908190205490516370a0823160e01b81523060048201528392906370a082319060240160206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190614a00565b1015612b43576006546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015612a6f57600080fd5b505afa158015612a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa79190614a00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612b0557600080fd5b505af1158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906148c0565b50612bf4565b6006546001600160a01b03838116600090815260036020526040908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081529282166004840152602483015282169063a9059cbb90604401602060405180830381600087803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf291906148c0565b505b506001600160a01b0316600090815260036020526040812055565b3360009081526008602052604090205460ff16612c2b57600080fd5b600254471015612c74576006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612c6e573d6000803e3d6000fd5b50612cb2565b6006546002546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612cb0573d6000803e3d6000fd5b505b6000600255565b6000818152600e6020526040812054819081906060908290819060ff16612d225760405162461bcd60e51b815260206004820152601260248201527f546f6b656e206e6f74206465706c6f7965640000000000000000000000000000604482015260640161090d565b6000878152600e60209081526040808320805460018201546002830154600490930180548551818802810188019096528086526101009093046001600160a01b03169691959394919391929091830182828015612d9e57602002820191906000526020600020905b815481526020019060010190808311612d8a575b50505060009d8e525050600e6020526040909b206006810154600790910154949c939b929a5091985090965091945092505050565b600b5460ff1615612e175760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055662386f26fc100003411612e7a5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f7700000000000000000000000000000000000000000000000000604482015260640161090d565b6000828152600e602052604090205460ff16612ed85760405162461bcd60e51b815260206004820152601360248201527f53565420646f6573206e6f742065786973747300000000000000000000000000604482015260640161090d565b6000828152600e6020908152604080832060090154808452600c9092529091205460ff1615612f495760405162461bcd60e51b815260206004820152601560248201527f5061697220697320616c726561647920616c6976650000000000000000000000604482015260640161090d565b6000818152600c60205260408120805476c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001017fffffffffffffffffff0000000000000000000000000000000000000000ff000090911617815560018101805473ffffffffffffffffffffffffffffffffffffffff191661dead1790556002018054349290612fce908490614dce565b90915550506000818152600c602052604081206003018054849290612ff4908490614dce565b90915550506000908152600c602052604090206004810192909255506001600590910155600b805460ff19169055565b600b5460009060ff161561306b5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055662386f26fc100003410156130cf5760405162461bcd60e51b815260206004820152600960248201527f556e70617961626c650000000000000000000000000000000000000000000000604482015260640161090d565b3360009081526018602052604090205460ff161561311b5760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b601654336000908152601a6020526040902054429161313991614dce565b106131745760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b3461317e8161458f565b3360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f6020526040812080549091906131bc908490614dce565b909155506131cb90508161458f565b33600090815260136020526040812080549091906131ea908490614dce565b9250508190555080601460008282546132039190614dce565b9091555061321290508161458f565b61321c9082614f15565b6002600082825461322d9190614dce565b9091555050336000908152601a602052604090204290559050600b805460ff1916905590565b600b5460ff16156132975760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790556001600160a01b038216600090815260106020526040902054829060ff1661330e5760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e206973206e6f7420696d706f72746564000000000000604482015260640161090d565b6001600160a01b038316600090815260116020908152604080832054808452600e8352818420338552600301909252909120548311156133905760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7300000000604482015260640161090d565b6040516370a0823160e01b815230600482015283906001600160a01b038416906370a082319060240160206040518083038186803b1580156133d157600080fd5b505afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190614a00565b10156134575760405162461bcd60e51b815260206004820152601a60248201527f5468657265206172656e277420656e6f75676820746f6b656e73000000000000604482015260640161090d565b816001600160a01b031663a9059cbb336134708661458f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350691906148c0565b506000818152600e6020908152604080832033845260030190915281208054859290613533908490614f15565b9091555061354290508361458f565b61354c9084614f15565b6000828152600460205260408120805490919061356a908490614dce565b9091555050600b805460ff1916905550505050565b6106116000819052600a6020527fec4a50b3af720b74cdfb46989ffe58d371b83c41b1761698309b267350e989655460ff16156135bb57600080fd5b600b5460ff16156135ff5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001908117909155600f5460009161361f9190614dce565b6000818152600e60205260409020805460ff1916600190811782556002820188905581018790559091506136579060040185856146ce565b506000818152600e602052604090206006810188905560078101879055600801805474ffffffffffffffffffffffffffffffffffffffffff191662dead011790556136a18561458f565b6000828152600e60209081526040808320338452600301909152902055600d546136cc906001614dce565b6000828152600e6020526040812060090191909155600d8054600192906136f4908490614dce565b9091555061370390508561458f565b61370d9086614f15565b60008281526004602052604081208054909190612409908490614dce565b3360009081526008602052604090205460ff1661374757600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33600090815260086020526040812054819060ff1661379457600080fd5b61379e8484610d9d565b6137ea5760405162461bcd60e51b815260206004820152601960248201527f4572726f7220696e20766572696679696e67206d6574686f6400000000000000604482015260640161090d565b6000848152601b6020526040908190205490517f9ee6d1d4000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b0390911690639ee6d1d4906024015b6040805180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388e91906149d2565b915091509250929050565b3360009081526008602052604090205460ff166138b557600080fd5b600155565b6103496000819052600a6020527faabfa61930264d22889391d25a34c1fca45afef33b1728643125eaad83adbca95460ff16156138f657600080fd5b600b5460ff161561393a5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790553360009081526009602090815260408083206001600160a01b0389168452909152902054859060ff168061398557506006546001600160a01b031633145b806139975750600b54610100900460ff165b6139e35760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161090d565b6040516370a0823160e01b81523360048201526000968796909186906001600160a01b038416906370a082319060240160206040518083038186803b158015613a2b57600080fd5b505afa158015613a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a639190614a00565b1015613ab15760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283129604482015260640161090d565b6040516370a0823160e01b815233600482015285906001600160a01b038316906370a082319060240160206040518083038186803b158015613af257600080fd5b505afa158015613b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2a9190614a00565b1015613b785760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283229604482015260640161090d565b6040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b038316906323b872dd90606401602060405180830381600087803b158015613bc657600080fd5b505af1158015613bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfe91906148c0565b506040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038216906323b872dd90606401602060405180830381600087803b158015613c4d57600080fd5b505af1158015613c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8591906148c0565b506001600160a01b038816600090815260106020526040812054819060ff1615613ebf57600054600160a01b900460ff16613d025760405162461bcd60e51b815260206004820152601d60248201527f4e6f742079657420656e61626c656420287061697220616464696e6729000000604482015260640161090d565b50506001600160a01b03808916600090815260116020908152604080832054808452600e835281842060090154808552600c9093529083206001015490939192918b8116911614613d955760405162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061697200000000000000000000000000000000000000000000604482015260640161090d565b60008054838252600c602052604091829020600281015460039091015492517ffafffbe9000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526001600160a01b038d811660448401528c81166064840152608483018c905260a483018b9052169063fafffbe99060c401602060405180830381600087803b158015613e3257600080fd5b505af1158015613e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6a91906148c0565b905080613eb95760405162461bcd60e51b815260206004820152600e60248201527f4661696c65642070616972696e67000000000000000000000000000000000000604482015260640161090d565b50613f2d565b6001600f6000828254613ed29190614dce565b925050819055506001600d6000828254613eec9190614dce565b9091555050600f54600d546001600160a01b038c166000908152601060209081526040808320805460ff191660011790556011909152902082905590925090505b6001600160a01b03891673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415613f70576000818152600c60205260409020805462ff00001916620100001790555b6000818152600c6020526040812080546001600160a01b03808e166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ff00009092169190911761010117825560019190910180549b90911673ffffffffffffffffffffffffffffffffffffffff19909b169a909a17909955613ff48861458f565b6000828152600c602052604081206002018054909190614015908490614dce565b9091555061402490508761458f565b6000828152600c602052604081206003018054909190614045908490614dce565b90915550506000818152600c602090815260408083206004810186905560016005909101819055858452600e9092528220805460ff1916909117815560020180548a9290614094908490614dce565b92505081905550836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140d457600080fd5b505afa1580156140e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410c9190614a00565b600e600084815260200190815260200160002060010181905550836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160206040518083038186803b15801561415f57600080fd5b505afa158015614173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141979190614a00565b600e600084815260200190815260200160002060060181905550836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160206040518083038186803b1580156141ea57600080fd5b505afa1580156141fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142229190614a00565b6000838152600e6020526040902060078101919091556008810180546001600160a01b038d166101000274ffffffffffffffffffffffffffffffffffffffffff1990911617600117905560090181905561427b8861458f565b6142859089614f15565b6001600160a01b038b16600090815260036020526040812080549091906142ad908490614dce565b909155506142bc90508761458f565b6142c69088614f15565b6001600160a01b038a16600090815260036020526040812080549091906142ee908490614dce565b9091555050600b805460ff1916905550505050505050505050565b3360009081526008602052604090205460ff1661432557600080fd5b600b80549115156101000261ff0019909216919091179055565b60008084116143b55760405162461bcd60e51b8152602060048201526024808201527f4b61696261537761703a20494e53554646494349454e545f494e5055545f414d60448201527f4f554e5400000000000000000000000000000000000000000000000000000000606482015260840161090d565b6000831180156143c55750600082115b6144375760405162461bcd60e51b815260206004820152602160248201527f4b61696261537761703a20494e53554646494349454e545f4c4951554944495460448201527f5900000000000000000000000000000000000000000000000000000000000000606482015260840161090d565b6000614445856103e56146af565b9050600061445382856146af565b9050600061446d83614467886103e86146af565b906146c2565b90506144798183614de6565b979650505050505050565b33600090815260086020526040812054819060ff166144a257600080fd5b6144ac8484611a4d565b6144f85760405162461bcd60e51b815260206004820152601960248201527f4572726f7220696e20766572696679696e67206d6574686f6400000000000000604482015260640161090d565b6000848152601b6020526040908190205490517f31b2cc1b000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03909116906331b2cc1b9060240161383d565b3360009081526008602052604090205460ff1661456b57600080fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006103e8600154836145a29190614ef6565b610d979190614de6565b600080805b6000858152600e60205260409020600401548110156146a7576000858152600e60205260409020600401805460649190839081106145f1576145f1614f5d565b9060005260206000200154856146079190614ef6565b6146119190614de6565b6000868152600e602090815260408083208584526005019091528120805490919061463d908490614dce565b90915550506000858152600e602052604090206004018054606491908390811061466957614669614f5d565b90600052602060002001548561467f9190614ef6565b6146899190614de6565b6146939083614dce565b91508061469f81614f2c565b9150506145b1565b509392505050565b60006146bb8284614ef6565b9392505050565b60006146bb8284614dce565b828054828255906000526020600020908101928215614709579160200282015b828111156147095782358255916020019190600101906146ee565b50614715929150614719565b5090565b5b80821115614715576000815560010161471a565b600082601f83011261473f57600080fd5b8151602061475461474f83614daa565b614d79565b80838252828201915082860187848660051b890101111561477457600080fd5b60005b8581101561479357815184529284019290840190600101614777565b5090979650505050505050565b80516dffffffffffffffffffffffffffff811681146126f557600080fd5b6000602082840312156147d057600080fd5b81356146bb81614f89565b6000602082840312156147ed57600080fd5b81516146bb81614f89565b6000806040838503121561480b57600080fd5b823561481681614f89565b9150602083013561482681614f89565b809150509250929050565b6000806000806080858703121561484757600080fd5b843561485281614f89565b9350602085013561486281614f89565b93969395505050506040820135916060013590565b6000806040838503121561488a57600080fd5b823561489581614f89565b946020939093013593505050565b6000602082840312156148b557600080fd5b81356146bb81614fa1565b6000602082840312156148d257600080fd5b81516146bb81614fa1565b600080604083850312156148f057600080fd5b823561481681614fa1565b60008060006060848603121561491057600080fd5b835161491b81614fa1565b8093505060208085015167ffffffffffffffff8082111561493b57600080fd5b818701915087601f83011261494f57600080fd5b815161495d61474f82614daa565b8082825285820191508585018b878560051b880101111561497d57600080fd5b600095505b838610156149a0578051835260019590950194918601918601614982565b5060408a015190975094505050808311156149ba57600080fd5b50506149c88682870161472e565b9150509250925092565b600080604083850312156149e557600080fd5b82516149f081614fa1565b6020939093015192949293505050565b600060208284031215614a1257600080fd5b5051919050565b600080600080600060808688031215614a3157600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff80821115614a5e57600080fd5b818801915088601f830112614a7257600080fd5b813581811115614a8157600080fd5b8960208260051b8501011115614a9657600080fd5b9699959850939650602001949392505050565b600080600060608486031215614abe57600080fd5b614ac7846147a0565b9250614ad5602085016147a0565b9150604084015163ffffffff81168114614aee57600080fd5b809150509250925092565b600060208284031215614b0b57600080fd5b5035919050565b60008060408385031215614b2557600080fd5b82359150602083013561482681614f89565b60008060008060808587031215614b4d57600080fd5b843593506020850135614b5f81614f89565b92506040850135614b6f81614f89565b9396929550929360600135925050565b60008060008060808587031215614b9557600080fd5b843593506020850135614ba781614f89565b9250604085013591506060850135614bbe81614fa1565b939692955090935050565b60008060408385031215614bdc57600080fd5b82359150602083013561482681614fa1565b60008060408385031215614c0157600080fd5b50508035926020909101359150565b60008060008060808587031215614c2657600080fd5b84359350602085013592506040850135614c3f81614f89565b91506060850135614bbe81614fa1565b600080600060608486031215614c6457600080fd5b505081359360208301359350604090920135919050565b600060208284031215614c8d57600080fd5b815160ff811681146146bb57600080fd5b600081518084526020808501945080840160005b83811015614cce57815187529582019590820190600101614cb2565b509495945050505050565b6001600160a01b038716815285602082015284604082015260c060608201526000614d0760c0830186614c9e565b60808301949094525060a00152949350505050565b831515815260006020606081840152614d386060840186614c9e565b838103604085015284518082528286019183019060005b81811015614d6b57835183529284019291840191600101614d4f565b509098975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614da257614da2614f73565b604052919050565b600067ffffffffffffffff821115614dc457614dc4614f73565b5060051b60200190565b60008219821115614de157614de1614f47565b500190565b600082614e0357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115614e43578160001904821115614e2957614e29614f47565b80851615614e3657918102915b93841c9390800290614e0d565b509250929050565b60006146bb60ff841683600082614e6457506001610d97565b81614e7157506000610d97565b8160018114614e875760028114614e9157614ead565b6001915050610d97565b60ff841115614ea257614ea2614f47565b50506001821b610d97565b5060208310610133831016604e8410600b8410161715614ed0575081810a610d97565b614eda8383614e08565b8060001904821115614eee57614eee614f47565b029392505050565b6000816000190483118215151615614f1057614f10614f47565b500290565b600082821015614f2757614f27614f47565b500390565b6000600019821415614f4057614f40614f47565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614f9e57600080fd5b50565b8015158114614f9e57600080fdfea2646970667358221220ae113f033d572c1704e39776cb58813cb9bc37064417aa6da721efdaed84bde964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102a05760003560e01c80638e65037f1161016e578063c457b582116100cb578063e6cee0431161007f578063eebc468011610064578063eebc468014610807578063f1d1aa7d14610578578063fa3ff64a1461082757600080fd5b8063e6cee043146107c7578063eba8599a146107e757600080fd5b8063ca050747116100b0578063ca05074714610767578063caf99f3b14610787578063e5c5471d146107a757600080fd5b8063c457b58214610727578063c6e737211461074757600080fd5b8063a93e6c8211610122578063af4903fc11610107578063af4903fc146106ec578063b0be6552146106ff578063b72977d91461070757600080fd5b8063a93e6c82146106a5578063af114f4a146106ba57600080fd5b80639ba668c6116101535780639ba668c6146106455780639fafef8614610665578063a779982d1461068557600080fd5b80638e65037f1461060557806398317eb21461062557600080fd5b80632a1d71c21161021c5780635d47eeec116101d05780636720318a116101b55780636720318a146105ae578063694b89c6146105c15780638836fe27146105d657600080fd5b80635d47eeec1461055857806366ce42b71461057857600080fd5b80633a042e6c116102015780633a042e6c146104f85780633c73273e146105185780633d4ff9491461053857600080fd5b80632a1d71c2146104a15780632cdece63146104c157600080fd5b8063171e557f116102735780631b32cb97116102585780631b32cb97146104115780631e864fe21461044157806322e146261461046157600080fd5b8063171e557f146103ce5780631aacfa60146103fc57600080fd5b8063096f99ff146102a55780630b06786c146102c75780630ef304a01461032f578063146ecad8146103ae575b600080fd5b3480156102b157600080fd5b506102c56102c03660046148dd565b610847565b005b3480156102d357600080fd5b5061030b6102e2366004614af9565b6000908152600e602052604090206008015460ff8116916101009091046001600160a01b031690565b6040805192151583526001600160a01b039091166020830152015b60405180910390f35b34801561033b57600080fd5b5061034f61034a366004614af9565b6108a1565b604080519a15158b5298151560208b01526001600160a01b03978816988a01989098529486166060890152608088019390935260a087019190915260c0860152821660e085015216610100830152151561012082015261014001610326565b3480156103ba57600080fd5b506102c56103c9366004614af9565b610b06565b3480156103da57600080fd5b506103ee6103e9366004614877565b610bd6565b604051908152602001610326565b34801561040857600080fd5b506014546103ee565b34801561041d57600080fd5b5061043161042c366004614bee565b610d9d565b6040519015158152602001610326565b34801561044d57600080fd5b506103ee61045c366004614b12565b610f16565b34801561046d57600080fd5b5061048161047c366004614b7f565b611329565b604080519485526020850193909352918301526060820152608001610326565b3480156104ad57600080fd5b506102c56104bc3660046147be565b611617565b3480156104cd57600080fd5b506104e16104dc3660046147be565b611654565b604080519215158352602083019190915201610326565b34801561050457600080fd5b50610481610513366004614c10565b6116a1565b34801561052457600080fd5b506103ee610533366004614877565b611973565b34801561054457600080fd5b506102c56105533660046147f8565b6119fd565b34801561056457600080fd5b50610431610573366004614bee565b611a4d565b34801561058457600080fd5b506103ee6105933660046147be565b6001600160a01b031660009081526013602052604090205490565b6102c56105bc366004614877565b611bb1565b3480156105cd57600080fd5b50600f546103ee565b3480156105e257600080fd5b506105f66105f1366004614af9565b612421565b60405161032693929190614d1c565b34801561061157600080fd5b506102c5610620366004614bc9565b6125cc565b34801561063157600080fd5b506103ee610640366004614af9565b612608565b34801561065157600080fd5b506102c5610660366004614b37565b6126fa565b34801561067157600080fd5b506103ee6106803660046147be565b6128fc565b34801561069157600080fd5b506102c56106a03660046147be565b612976565b3480156106b157600080fd5b506102c5612c0f565b3480156106c657600080fd5b506106da6106d5366004614af9565b612cb9565b60405161032696959493929190614cd9565b6102c56106fa366004614bee565b612dd3565b6103ee613024565b34801561071357600080fd5b506102c5610722366004614877565b613253565b34801561073357600080fd5b506102c5610742366004614a19565b61357f565b34801561075357600080fd5b506102c56107623660046147be565b61372b565b34801561077357600080fd5b506104e1610782366004614bee565b613776565b34801561079357600080fd5b506102c56107a2366004614af9565b613899565b3480156107b357600080fd5b506102c56107c2366004614831565b6138ba565b3480156107d357600080fd5b506102c56107e23660046148a3565b614309565b3480156107f357600080fd5b506103ee610802366004614c4f565b61433f565b34801561081357600080fd5b506104e1610822366004614bee565b614484565b34801561083357600080fd5b506102c56108423660046147be565b61454f565b3360009081526008602052604090205460ff1661086357600080fd5b60008054921515600160a01b0274ffffffffffffffffffffffffffffffffffffffffff199093166001600160a01b0390921691909117919091179055565b6000818152600e602052604081205481908190819081908190819081908190819060ff166109165760405162461bcd60e51b815260206004820152601860248201527f53565420546f6b656e20646f6573206e6f74206578697374000000000000000060448201526064015b60405180910390fd5b60008b8152600e6020908152604080832060090154808452600c90925290912054610100900460ff1661098b5760405162461bcd60e51b815260206004820152601a60248201527f53565420546f6b656e20686173206e6f206c6971756964697479000000000000604482015260640161090d565b600c600082815260200190815260200160002060000160009054906101000a900460ff16600c600083815260200190815260200160002060000160019054906101000a900460ff16600c600084815260200190815260200160002060000160039054906101000a90046001600160a01b0316600c600085815260200190815260200160002060010160009054906101000a90046001600160a01b0316600c600086815260200190815260200160002060020154600c600087815260200190815260200160002060030154600c600088815260200190815260200160002060050154600c600089815260200190815260200160002060060160009054906101000a90046001600160a01b0316600c60008a815260200190815260200160002060070160009054906101000a90046001600160a01b0316600c60008b815260200190815260200160002060000160029054906101000a900460ff169a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b3360009081526008602052604090205460ff16610b2257600080fd5b6000818152600e602052604090205460ff16610b805760405162461bcd60e51b815260206004820152601160248201527f4e6f7420612076616c696420746f6b656e000000000000000000000000000000604482015260640161090d565b600081815260046020908152604080832054600e83528184206006546001600160a01b031685526003019092528220805491929091610bc0908490614dce565b9091555050600090815260046020526040812055565b6000808390506000816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1757600080fd5b505afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f91906147db565b90506000819050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610c9257600080fd5b505afa158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cca9190614aa9565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d629190614c7b565b610d6d90600a614e4b565b610d779084614ef6565b905081610d84828a614ef6565b610d8e9190614de6565b96505050505050505b92915050565b3360009081526008602052604081205460ff16610db957600080fd5b6000838152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b158015610e0857600080fd5b505afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906148c0565b610e965760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000805b6000858152601d6020526040902054811015610f01576000858152601e60205260409020805485919083908110610ed357610ed3614f5d565b90600052602060002001541415610eef57600192505050610d97565b80610ef981614f2c565b915050610e9a565b5080610f0c57600080fd5b5060009392505050565b600b5460009060ff1615610f5d5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055478310610fb95760405162461bcd60e51b815260206004820152601260248201527f556e70617961626c653a204e6f206c69713f0000000000000000000000000000604482015260640161090d565b336000908152601360205260409020548311156110185760405162461bcd60e51b815260206004820152600860248201527f4e6f204b56455448000000000000000000000000000000000000000000000000604482015260640161090d565b3360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f60205260409020548311156110965760405162461bcd60e51b815260206004820152600860248201527f4e6f204b56455448000000000000000000000000000000000000000000000000604482015260640161090d565b3360009081526017602052604090205460ff16156110e25760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b6001600160a01b03821660009081526017602052604090205460ff16156111375760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b60155433600090815260196020526040902054429161115591614dce565b106111905760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b6015546001600160a01b03831660009081526019602052604090205442916111b791614dce565b106111f25760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b33600090815260196020908152604080832042905560139091528120805485929061121e908490614f15565b9091555061122d90508361458f565b6014600082825461123e9190614f15565b90915550503360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f602052604081208054859290611281908490614f15565b90915550506001600160a01b0382166108fc61129c8561458f565b6040518115909202916000818181858888f193505050501580156112c4573d6000803e3d6000fd5b506112ce8361458f565b6112d89084614f15565b600080805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054909190611313908490614dce565b9091555050600b805460ff191690555090919050565b6000848152600e602052604081205481908190819060ff1661138d5760405162461bcd60e51b815260206004820152601860248201527f53565420746f6b656e20646f6573206e6f742065786973740000000000000000604482015260640161090d565b6000888152600e6020908152604080832060090154808452600c9092529091205460ff166113fd5760405162461bcd60e51b815260206004820152601c60248201527f535654206c697175696469747920646f6573206e6f7420657869737400000000604482015260640161090d565b3360009081526013602052604090205487111561145c5760405162461bcd60e51b815260206004820152601260248201527f42616c616e636520697320746f6f206c6f770000000000000000000000000000604482015260640161090d565b6000818152600c60205260408120600281015460039091015490916114828a848461433f565b905060006114908d836145ac565b90508181106114e15760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b6114eb8183614f15565b9150896115cc576000858152600c602052604081206003018054849290611513908490614f15565b9250508190555081600e60008f815260200190815260200160002060030160008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546115639190614dce565b90915550506000858152600c602052604081206002018054849290611589908490614dce565b909155505033600090815260136020526040812080548d92906115ad908490614f15565b925050819055508a601460008282546115c69190614f15565b90915550505b5060008c8152600e602090815260408083206001600160a01b038f168452600301825280832054338452601390925290912054919850965094508a9350505050945094509450949050565b3360009081526008602052604090205460ff1661163357600080fd5b6001600160a01b03166000908152600860205260409020805460ff19169055565b6001600160a01b038116600090815260106020526040812054819060ff16156116965750506001600160a01b0316600090815260116020526040902054600191565b506000928392509050565b6000848152600e602052604081205481908190819060ff166117055760405162461bcd60e51b815260206004820152601860248201527f53565420746f6b656e20646f6573206e6f742065786973740000000000000000604482015260640161090d565b6000888152600e6020908152604080832060090154808452600c9092529091205460ff166117755760405162461bcd60e51b815260206004820152601c60248201527f535654206c697175696469747920646f6573206e6f7420657869737400000000604482015260640161090d565b87611780338b611973565b10156117ce5760405162461bcd60e51b815260206004820152601260248201527f42616c616e636520697320746f6f206c6f770000000000000000000000000000604482015260640161090d565b60006117da8a8a6145ac565b905088811061182b5760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b611835818a614f15565b6000838152600c602052604081206002810154600390910154929b50919061185e8c838561433f565b905089611929576000858152600c602052604081206003018054839290611886908490614dce565b909155505060008d8152600e602090815260408083206001600160a01b038f168452600301909152812080548392906118c0908490614f15565b90915550506000858152600c6020526040812060020180548e92906118e6908490614f15565b909155505033600090815260136020526040812080548e929061190a908490614dce565b925050819055508b601460008282546119239190614dce565b90915550505b60008d8152600e602090815260408083206001600160a01b039e909e1683526003909d0181528c82205433835260139091529b902054909d9a9c909b509998505050505050505050565b6000818152600e602052604081205460ff166119d15760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e20646f6573206e6f7420657869737473000000000000604482015260640161090d565b506000908152600e602090815260408083206001600160a01b0394909416835260039093019052205490565b3360009081526008602052604090205460ff16611a1957600080fd5b6001600160a01b0391821660009081526009602090815260408083209390941682529190915220805460ff19166001179055565b3360009081526008602052604081205460ff16611a6957600080fd5b6000838152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af091906148c0565b611b465760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000805b6000858152601d6020526040902054811015610f01576000858152601d60205260409020805485919083908110611b8357611b83614f5d565b90600052602060002001541415611b9f57600192505050610d97565b80611ba981614f2c565b915050611b4a565b600b5460ff1615611bf55760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790553360009081526009602090815260408083206001600160a01b0386168452909152902054829060ff1680611c4057506006546001600160a01b031633145b80611c525750600b54610100900460ff165b611c9e5760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161090d565b6040516370a0823160e01b8152336004820152839073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29084906001600160a01b038416906370a082319060240160206040518083038186803b158015611cf757600080fd5b505afa158015611d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2f9190614a00565b1015611d7d5760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283129604482015260640161090d565b6040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b038316906323b872dd90606401602060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0391906148c0565b506001600160a01b038516600090815260106020526040812054819060ff161561204557600054600160a01b900460ff16611e805760405162461bcd60e51b815260206004820152601d60248201527f4e6f742079657420656e61626c656420287061697220616464696e6729000000604482015260640161090d565b50506001600160a01b03858116600090815260116020908152604080832054808452600e835281842060090154808552600c9093529083206001015490939192911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214611f245760405162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061697200000000000000000000000000000000000000000000604482015260640161090d565b60008054838252600c602052604091829020600281015460039091015492517fcc38d693000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526001600160a01b038a81166044840152606483018a9052346084840152169063cc38d6939060a401602060405180830381600087803b158015611fb857600080fd5b505af1158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff091906148c0565b90508061203f5760405162461bcd60e51b815260206004820152600e60248201527f4661696c65642070616972696e67000000000000000000000000000000000000604482015260640161090d565b50612083565b6001600f60008282546120589190614dce565b925050819055506001600d60008282546120729190614dce565b9091555050600f54600d5490925090505b6001600160a01b0387811660009081526010602090815260408083208054600160ff19909116811790915560118352818420879055858452600c9092529091208054620101017fffffffffffffffffff00000000000000000000000000000000000000000000009091166301000000898616021717815501805473ffffffffffffffffffffffffffffffffffffffff19169185169190911790556121268661458f565b6000828152600c602052604081206002018054909190612147908490614dce565b9091555061215690503461458f565b6000828152600c602052604081206003018054909190612177908490614dce565b90915550506000818152600c602090815260408083206004810186905560016005909101819055858452600e9092528220805460ff1916909117815560020180548892906121c6908490614dce565b92505081905550836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561220657600080fd5b505afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190614a00565b600e600084815260200190815260200160002060010181905550836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160206040518083038186803b15801561229157600080fd5b505afa1580156122a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c99190614a00565b600e600084815260200190815260200160002060060181905550836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160206040518083038186803b15801561231c57600080fd5b505afa158015612330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123549190614a00565b6000838152600e6020526040902060078101919091556008810180546001600160a01b038a166101000274ffffffffffffffffffffffffffffffffffffffffff199091161760011790556009018190556123ad8661458f565b6123b79087614f15565b6001600160a01b038816600090815260036020526040812080549091906123df908490614dce565b909155506123ee90503461458f565b6123f89034614f15565b600260008282546124099190614dce565b9091555050600b805460ff1916905550505050505050565b33600090815260086020526040812054606090819060ff1661244257600080fd5b6000848152601b602090815260409182902054825163099f12b960e21b815292516001600160a01b039091169263267c4ae4926004808301939192829003018186803b15801561249157600080fd5b505afa1580156124a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c991906148c0565b61251f5760405162461bcd60e51b815260206004820152602160248201527f506c7567696e206e6f74206c6f61646564206f72206e6f74206578697374616e6044820152601d60fa1b606482015260840161090d565b6000848152601b60205260408082205481517fd1671f0b00000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169263d1671f0b9260048082019391829003018186803b15801561258357600080fd5b505afa158015612597573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125bf91908101906148fb565b9250925092509193909250565b3360009081526008602052604090205460ff166125e857600080fd5b6000918252600a6020526040909120805460ff1916911515919091179055565b6000818152600e602052604081205460ff166126665760405162461bcd60e51b815260206004820152600c60248201527f4e6f6e206578697374616e740000000000000000000000000000000000000000604482015260640161090d565b6000828152600e602052604090206004015461268457506000919050565b6000805b6000848152600e60205260409020600401548110156126ee576000848152600e602052604090206004018054829081106126c4576126c4614f5d565b9060005260206000200154826126da9190614dce565b9150806126e681614f2c565b915050612688565b5092915050565b919050565b6000848152600e602052604090205460ff166127585760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e20646f6573206e6f7420657869737473000000000000604482015260640161090d565b6000848152600e602090815260408083206001600160a01b03871684526003019091529020548111156127cd5760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206f776e20656e6f75676820746f6b656e730000000000604482015260640161090d565b60006127d985836145ac565b905081811061282a5760405162461bcd60e51b815260206004820152600e60248201527f546178657320746f6f2068696768000000000000000000000000000000000000604482015260640161090d565b6128348183614f15565b915061283f8261458f565b6000868152600e602090815260408083206001600160a01b038916845260030190915281208054909190612874908490614f15565b909155506000945061288790508261458f565b6000868152600e602090815260408083206001600160a01b0388168452600301909152812080549091906128bc908490614dce565b90915550600093508392506128d290508261458f565b600086815260046020526040812080549091906128f0908490614dce565b90915550505050505050565b3360009081526008602052604081205460ff1661291857600080fd5b601c80546000908152601b60205260408120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905581546001929190612962908490614dce565b9091555050601c54610d9790600190614f15565b3360009081526008602052604090205460ff1661299257600080fd5b6001600160a01b038116600081815260036020526040908190205490516370a0823160e01b81523060048201528392906370a082319060240160206040518083038186803b1580156129e357600080fd5b505afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190614a00565b1015612b43576006546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015612a6f57600080fd5b505afa158015612a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa79190614a00565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612b0557600080fd5b505af1158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906148c0565b50612bf4565b6006546001600160a01b03838116600090815260036020526040908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081529282166004840152602483015282169063a9059cbb90604401602060405180830381600087803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf291906148c0565b505b506001600160a01b0316600090815260036020526040812055565b3360009081526008602052604090205460ff16612c2b57600080fd5b600254471015612c74576006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612c6e573d6000803e3d6000fd5b50612cb2565b6006546002546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015612cb0573d6000803e3d6000fd5b505b6000600255565b6000818152600e6020526040812054819081906060908290819060ff16612d225760405162461bcd60e51b815260206004820152601260248201527f546f6b656e206e6f74206465706c6f7965640000000000000000000000000000604482015260640161090d565b6000878152600e60209081526040808320805460018201546002830154600490930180548551818802810188019096528086526101009093046001600160a01b03169691959394919391929091830182828015612d9e57602002820191906000526020600020905b815481526020019060010190808311612d8a575b50505060009d8e525050600e6020526040909b206006810154600790910154949c939b929a5091985090965091945092505050565b600b5460ff1615612e175760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055662386f26fc100003411612e7a5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f7700000000000000000000000000000000000000000000000000604482015260640161090d565b6000828152600e602052604090205460ff16612ed85760405162461bcd60e51b815260206004820152601360248201527f53565420646f6573206e6f742065786973747300000000000000000000000000604482015260640161090d565b6000828152600e6020908152604080832060090154808452600c9092529091205460ff1615612f495760405162461bcd60e51b815260206004820152601560248201527f5061697220697320616c726561647920616c6976650000000000000000000000604482015260640161090d565b6000818152600c60205260408120805476c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001017fffffffffffffffffff0000000000000000000000000000000000000000ff000090911617815560018101805473ffffffffffffffffffffffffffffffffffffffff191661dead1790556002018054349290612fce908490614dce565b90915550506000818152600c602052604081206003018054849290612ff4908490614dce565b90915550506000908152600c602052604090206004810192909255506001600590910155600b805460ff19169055565b600b5460009060ff161561306b5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001179055662386f26fc100003410156130cf5760405162461bcd60e51b815260206004820152600960248201527f556e70617961626c650000000000000000000000000000000000000000000000604482015260640161090d565b3360009081526018602052604090205460ff161561311b5760405162461bcd60e51b815260206004820152600960248201526814dd5cdc195b99195960ba1b604482015260640161090d565b601654336000908152601a6020526040902054429161313991614dce565b106131745760405162461bcd60e51b815260206004820152600b60248201526a141b19585cd9481dd85a5d60aa1b604482015260640161090d565b3461317e8161458f565b3360009081527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881f6020526040812080549091906131bc908490614dce565b909155506131cb90508161458f565b33600090815260136020526040812080549091906131ea908490614dce565b9250508190555080601460008282546132039190614dce565b9091555061321290508161458f565b61321c9082614f15565b6002600082825461322d9190614dce565b9091555050336000908152601a602052604090204290559050600b805460ff1916905590565b600b5460ff16156132975760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790556001600160a01b038216600090815260106020526040902054829060ff1661330e5760405162461bcd60e51b815260206004820152601a60248201527f5468697320746f6b656e206973206e6f7420696d706f72746564000000000000604482015260640161090d565b6001600160a01b038316600090815260116020908152604080832054808452600e8352818420338552600301909252909120548311156133905760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7300000000604482015260640161090d565b6040516370a0823160e01b815230600482015283906001600160a01b038416906370a082319060240160206040518083038186803b1580156133d157600080fd5b505afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190614a00565b10156134575760405162461bcd60e51b815260206004820152601a60248201527f5468657265206172656e277420656e6f75676820746f6b656e73000000000000604482015260640161090d565b816001600160a01b031663a9059cbb336134708661458f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350691906148c0565b506000818152600e6020908152604080832033845260030190915281208054859290613533908490614f15565b9091555061354290508361458f565b61354c9084614f15565b6000828152600460205260408120805490919061356a908490614dce565b9091555050600b805460ff1916905550505050565b6106116000819052600a6020527fec4a50b3af720b74cdfb46989ffe58d371b83c41b1761698309b267350e989655460ff16156135bb57600080fd5b600b5460ff16156135ff5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff19166001908117909155600f5460009161361f9190614dce565b6000818152600e60205260409020805460ff1916600190811782556002820188905581018790559091506136579060040185856146ce565b506000818152600e602052604090206006810188905560078101879055600801805474ffffffffffffffffffffffffffffffffffffffffff191662dead011790556136a18561458f565b6000828152600e60209081526040808320338452600301909152902055600d546136cc906001614dce565b6000828152600e6020526040812060090191909155600d8054600192906136f4908490614dce565b9091555061370390508561458f565b61370d9086614f15565b60008281526004602052604081208054909190612409908490614dce565b3360009081526008602052604090205460ff1661374757600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b33600090815260086020526040812054819060ff1661379457600080fd5b61379e8484610d9d565b6137ea5760405162461bcd60e51b815260206004820152601960248201527f4572726f7220696e20766572696679696e67206d6574686f6400000000000000604482015260640161090d565b6000848152601b6020526040908190205490517f9ee6d1d4000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b0390911690639ee6d1d4906024015b6040805180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388e91906149d2565b915091509250929050565b3360009081526008602052604090205460ff166138b557600080fd5b600155565b6103496000819052600a6020527faabfa61930264d22889391d25a34c1fca45afef33b1728643125eaad83adbca95460ff16156138f657600080fd5b600b5460ff161561393a5760405162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015260640161090d565b600b805460ff191660011790553360009081526009602090815260408083206001600160a01b0389168452909152902054859060ff168061398557506006546001600160a01b031633145b806139975750600b54610100900460ff165b6139e35760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420617574686f72697a6564000000000000000000000000000000000000604482015260640161090d565b6040516370a0823160e01b81523360048201526000968796909186906001600160a01b038416906370a082319060240160206040518083038186803b158015613a2b57600080fd5b505afa158015613a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a639190614a00565b1015613ab15760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283129604482015260640161090d565b6040516370a0823160e01b815233600482015285906001600160a01b038316906370a082319060240160206040518083038186803b158015613af257600080fd5b505afa158015613b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2a9190614a00565b1015613b785760405162461bcd60e51b815260206004820181905260248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320283229604482015260640161090d565b6040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b038316906323b872dd90606401602060405180830381600087803b158015613bc657600080fd5b505af1158015613bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfe91906148c0565b506040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038216906323b872dd90606401602060405180830381600087803b158015613c4d57600080fd5b505af1158015613c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8591906148c0565b506001600160a01b038816600090815260106020526040812054819060ff1615613ebf57600054600160a01b900460ff16613d025760405162461bcd60e51b815260206004820152601d60248201527f4e6f742079657420656e61626c656420287061697220616464696e6729000000604482015260640161090d565b50506001600160a01b03808916600090815260116020908152604080832054808452600e835281842060090154808552600c9093529083206001015490939192918b8116911614613d955760405162461bcd60e51b815260206004820152600a60248201527f57726f6e67207061697200000000000000000000000000000000000000000000604482015260640161090d565b60008054838252600c602052604091829020600281015460039091015492517ffafffbe9000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526001600160a01b038d811660448401528c81166064840152608483018c905260a483018b9052169063fafffbe99060c401602060405180830381600087803b158015613e3257600080fd5b505af1158015613e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6a91906148c0565b905080613eb95760405162461bcd60e51b815260206004820152600e60248201527f4661696c65642070616972696e67000000000000000000000000000000000000604482015260640161090d565b50613f2d565b6001600f6000828254613ed29190614dce565b925050819055506001600d6000828254613eec9190614dce565b9091555050600f54600d546001600160a01b038c166000908152601060209081526040808320805460ff191660011790556011909152902082905590925090505b6001600160a01b03891673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415613f70576000818152600c60205260409020805462ff00001916620100001790555b6000818152600c6020526040812080546001600160a01b03808e166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ff00009092169190911761010117825560019190910180549b90911673ffffffffffffffffffffffffffffffffffffffff19909b169a909a17909955613ff48861458f565b6000828152600c602052604081206002018054909190614015908490614dce565b9091555061402490508761458f565b6000828152600c602052604081206003018054909190614045908490614dce565b90915550506000818152600c602090815260408083206004810186905560016005909101819055858452600e9092528220805460ff1916909117815560020180548a9290614094908490614dce565b92505081905550836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140d457600080fd5b505afa1580156140e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410c9190614a00565b600e600084815260200190815260200160002060010181905550836001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160206040518083038186803b15801561415f57600080fd5b505afa158015614173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141979190614a00565b600e600084815260200190815260200160002060060181905550836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160206040518083038186803b1580156141ea57600080fd5b505afa1580156141fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142229190614a00565b6000838152600e6020526040902060078101919091556008810180546001600160a01b038d166101000274ffffffffffffffffffffffffffffffffffffffffff1990911617600117905560090181905561427b8861458f565b6142859089614f15565b6001600160a01b038b16600090815260036020526040812080549091906142ad908490614dce565b909155506142bc90508761458f565b6142c69088614f15565b6001600160a01b038a16600090815260036020526040812080549091906142ee908490614dce565b9091555050600b805460ff1916905550505050505050505050565b3360009081526008602052604090205460ff1661432557600080fd5b600b80549115156101000261ff0019909216919091179055565b60008084116143b55760405162461bcd60e51b8152602060048201526024808201527f4b61696261537761703a20494e53554646494349454e545f494e5055545f414d60448201527f4f554e5400000000000000000000000000000000000000000000000000000000606482015260840161090d565b6000831180156143c55750600082115b6144375760405162461bcd60e51b815260206004820152602160248201527f4b61696261537761703a20494e53554646494349454e545f4c4951554944495460448201527f5900000000000000000000000000000000000000000000000000000000000000606482015260840161090d565b6000614445856103e56146af565b9050600061445382856146af565b9050600061446d83614467886103e86146af565b906146c2565b90506144798183614de6565b979650505050505050565b33600090815260086020526040812054819060ff166144a257600080fd5b6144ac8484611a4d565b6144f85760405162461bcd60e51b815260206004820152601960248201527f4572726f7220696e20766572696679696e67206d6574686f6400000000000000604482015260640161090d565b6000848152601b6020526040908190205490517f31b2cc1b000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03909116906331b2cc1b9060240161383d565b3360009081526008602052604090205460ff1661456b57600080fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006103e8600154836145a29190614ef6565b610d979190614de6565b600080805b6000858152600e60205260409020600401548110156146a7576000858152600e60205260409020600401805460649190839081106145f1576145f1614f5d565b9060005260206000200154856146079190614ef6565b6146119190614de6565b6000868152600e602090815260408083208584526005019091528120805490919061463d908490614dce565b90915550506000858152600e602052604090206004018054606491908390811061466957614669614f5d565b90600052602060002001548561467f9190614ef6565b6146899190614de6565b6146939083614dce565b91508061469f81614f2c565b9150506145b1565b509392505050565b60006146bb8284614ef6565b9392505050565b60006146bb8284614dce565b828054828255906000526020600020908101928215614709579160200282015b828111156147095782358255916020019190600101906146ee565b50614715929150614719565b5090565b5b80821115614715576000815560010161471a565b600082601f83011261473f57600080fd5b8151602061475461474f83614daa565b614d79565b80838252828201915082860187848660051b890101111561477457600080fd5b60005b8581101561479357815184529284019290840190600101614777565b5090979650505050505050565b80516dffffffffffffffffffffffffffff811681146126f557600080fd5b6000602082840312156147d057600080fd5b81356146bb81614f89565b6000602082840312156147ed57600080fd5b81516146bb81614f89565b6000806040838503121561480b57600080fd5b823561481681614f89565b9150602083013561482681614f89565b809150509250929050565b6000806000806080858703121561484757600080fd5b843561485281614f89565b9350602085013561486281614f89565b93969395505050506040820135916060013590565b6000806040838503121561488a57600080fd5b823561489581614f89565b946020939093013593505050565b6000602082840312156148b557600080fd5b81356146bb81614fa1565b6000602082840312156148d257600080fd5b81516146bb81614fa1565b600080604083850312156148f057600080fd5b823561481681614fa1565b60008060006060848603121561491057600080fd5b835161491b81614fa1565b8093505060208085015167ffffffffffffffff8082111561493b57600080fd5b818701915087601f83011261494f57600080fd5b815161495d61474f82614daa565b8082825285820191508585018b878560051b880101111561497d57600080fd5b600095505b838610156149a0578051835260019590950194918601918601614982565b5060408a015190975094505050808311156149ba57600080fd5b50506149c88682870161472e565b9150509250925092565b600080604083850312156149e557600080fd5b82516149f081614fa1565b6020939093015192949293505050565b600060208284031215614a1257600080fd5b5051919050565b600080600080600060808688031215614a3157600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff80821115614a5e57600080fd5b818801915088601f830112614a7257600080fd5b813581811115614a8157600080fd5b8960208260051b8501011115614a9657600080fd5b9699959850939650602001949392505050565b600080600060608486031215614abe57600080fd5b614ac7846147a0565b9250614ad5602085016147a0565b9150604084015163ffffffff81168114614aee57600080fd5b809150509250925092565b600060208284031215614b0b57600080fd5b5035919050565b60008060408385031215614b2557600080fd5b82359150602083013561482681614f89565b60008060008060808587031215614b4d57600080fd5b843593506020850135614b5f81614f89565b92506040850135614b6f81614f89565b9396929550929360600135925050565b60008060008060808587031215614b9557600080fd5b843593506020850135614ba781614f89565b9250604085013591506060850135614bbe81614fa1565b939692955090935050565b60008060408385031215614bdc57600080fd5b82359150602083013561482681614fa1565b60008060408385031215614c0157600080fd5b50508035926020909101359150565b60008060008060808587031215614c2657600080fd5b84359350602085013592506040850135614c3f81614f89565b91506060850135614bbe81614fa1565b600080600060608486031215614c6457600080fd5b505081359360208301359350604090920135919050565b600060208284031215614c8d57600080fd5b815160ff811681146146bb57600080fd5b600081518084526020808501945080840160005b83811015614cce57815187529582019590820190600101614cb2565b509495945050505050565b6001600160a01b038716815285602082015284604082015260c060608201526000614d0760c0830186614c9e565b60808301949094525060a00152949350505050565b831515815260006020606081840152614d386060840186614c9e565b838103604085015284518082528286019183019060005b81811015614d6b57835183529284019291840191600101614d4f565b509098975050505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614da257614da2614f73565b604052919050565b600067ffffffffffffffff821115614dc457614dc4614f73565b5060051b60200190565b60008219821115614de157614de1614f47565b500190565b600082614e0357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115614e43578160001904821115614e2957614e29614f47565b80851615614e3657918102915b93841c9390800290614e0d565b509250929050565b60006146bb60ff841683600082614e6457506001610d97565b81614e7157506000610d97565b8160018114614e875760028114614e9157614ead565b6001915050610d97565b60ff841115614ea257614ea2614f47565b50506001821b610d97565b5060208310610133831016604e8410600b8410161715614ed0575081810a610d97565b614eda8383614e08565b8060001904821115614eee57614eee614f47565b029392505050565b6000816000190483118215151615614f1057614f10614f47565b500290565b600082821015614f2757614f27614f47565b500390565b6000600019821415614f4057614f40614f47565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614f9e57600080fd5b50565b8015158114614f9e57600080fdfea2646970667358221220ae113f033d572c1704e39776cb58813cb9bc37064417aa6da721efdaed84bde964736f6c63430008070033

Deployed Bytecode Sourcemap

7884:30630:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24293:181;;;;;;;;;;-1:-1:-1;24293:181:0;;;;;:::i;:::-;;:::i;:::-;;16543:149;;;;;;;;;;-1:-1:-1;16543:149:0;;;;;:::i;:::-;16612:4;38299:17;;;:11;:17;;;;;:27;;;;;;;38469:32;;;;-1:-1:-1;;;;;38469:32:0;;16543:149;;;;;12692:14:1;;12685:22;12667:41;;-1:-1:-1;;;;;12744:55:1;;;12739:2;12724:18;;12717:83;12640:18;16543:149:0;;;;;;;;13695:1011;;;;;;;;;;-1:-1:-1;13695:1011:0;;;;;:::i;:::-;;:::i;:::-;;;;14107:14:1;;14100:22;14082:41;;14166:14;;14159:22;14154:2;14139:18;;14132:50;-1:-1:-1;;;;;14279:15:1;;;14259:18;;;14252:43;;;;14331:15;;;14326:2;14311:18;;14304:43;14378:3;14363:19;;14356:35;;;;14422:3;14407:19;;14400:35;;;;14466:3;14451:19;;14444:35;14516:15;;14510:3;14495:19;;14488:44;14569:15;14563:3;14548:19;;14541:44;14629:14;14622:22;14616:3;14601:19;;14594:51;14069:3;14054:19;13695:1011:0;13701:950:1;37899:255:0;;;;;;;;;;-1:-1:-1;37899:255:0;;;;;:::i;:::-;;:::i;14758:473::-;;;;;;;;;;-1:-1:-1;14758:473:0;;;;;:::i;:::-;;:::i;:::-;;;15328:25:1;;;15316:2;15301:18;14758:473:0;15182:177:1;15699:108:0;;;;;;;;;;-1:-1:-1;15774:24:0;;15699:108;;26063:470;;;;;;;;;;-1:-1:-1;26063:470:0;;;;;:::i;:::-;;:::i;:::-;;;12472:14:1;;12465:22;12447:41;;12435:2;12420:18;26063:470:0;12307:187:1;21387:940:0;;;;;;;;;;-1:-1:-1;21387:940:0;;;;;:::i;:::-;;:::i;18638:1662::-;;;;;;;;;;-1:-1:-1;18638:1662:0;;;;;:::i;:::-;;:::i;:::-;;;;28574:25:1;;;28630:2;28615:18;;28608:34;;;;28658:18;;;28651:34;28716:2;28701:18;;28694:34;28561:3;28546:19;18638:1662:0;28343:391:1;10685:95:0;;;;;;;;;;-1:-1:-1;10685:95:0;;;;;:::i;:::-;;:::i;13417:218::-;;;;;;;;;;-1:-1:-1;13417:218:0;;;;;:::i;:::-;;:::i;:::-;;;;14849:14:1;;14842:22;14824:41;;14896:2;14881:18;;14874:34;;;;14797:18;13417:218:0;14656:258:1;16971:1655:0;;;;;;;;;;-1:-1:-1;16971:1655:0;;;;;:::i;:::-;;:::i;15286:230::-;;;;;;;;;;-1:-1:-1;15286:230:0;;;;;:::i;:::-;;:::i;28515:158::-;;;;;;;;;;-1:-1:-1;28515:158:0;;;;;:::i;:::-;;:::i;25596:459::-;;;;;;;;;;-1:-1:-1;25596:459:0;;;;;:::i;:::-;;:::i;16751:129::-;;;;;;;;;;-1:-1:-1;16751:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;16847:24:0;16820:7;16847:24;;;:18;:24;;;;;;;16751:129;34381:2818;;;;;;:::i;:::-;;:::i;13289:94::-;;;;;;;;;;-1:-1:-1;13364:11:0;;13289:94;;25124:286;;;;;;;;;;-1:-1:-1;25124:286:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;10788:113::-;;;;;;;;;;-1:-1:-1;10788:113:0;;;;;:::i;:::-;;:::i;30606:469::-;;;;;;;;;;-1:-1:-1;30606:469:0;;;;;:::i;:::-;;:::i;23286:715::-;;;;;;;;;;-1:-1:-1;23286:715:0;;;;;:::i;:::-;;:::i;24482:225::-;;;;;;;;;;-1:-1:-1;24482:225:0;;;;;:::i;:::-;;:::i;37499:392::-;;;;;;;;;;-1:-1:-1;37499:392:0;;;;;:::i;:::-;;:::i;37207:284::-;;;;;;;;;;;;;:::i;15862:625::-;;;;;;;;;;-1:-1:-1;15862:625:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;29709:889::-;;;;;;:::i;:::-;;:::i;20677:702::-;;;:::i;22394:804::-;;;;;;;;;;-1:-1:-1;22394:804:0;;;;;:::i;:::-;;:::i;28746:955::-;;;;;;;;;;-1:-1:-1;28746:955:0;;;;;:::i;:::-;;:::i;11008:92::-;;;;;;;;;;-1:-1:-1;11008:92:0;;;;;:::i;:::-;;:::i;26925:275::-;;;;;;;;;;-1:-1:-1;26925:275:0;;;;;:::i;:::-;;:::i;11112:114::-;;;;;;;;;;-1:-1:-1;11112:114:0;;;;;:::i;:::-;;:::i;31219:3154::-;;;;;;;;;;-1:-1:-1;31219:3154:0;;;;;:::i;:::-;;:::i;10909:91::-;;;;;;;;;;-1:-1:-1;10909:91:0;;;;;:::i;:::-;;:::i;27843:596::-;;;;;;;;;;-1:-1:-1;27843:596:0;;;;;:::i;:::-;;:::i;26653:264::-;;;;;;;;;;-1:-1:-1;26653:264:0;;;;;:::i;:::-;;:::i;10586:91::-;;;;;;;;;;-1:-1:-1;10586:91:0;;;;;:::i;:::-;;:::i;24293:181::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;24381:10:::1;:34:::0;;24426:40;::::1;;-1:-1:-1::0;;;24426:40:0::1;-1:-1:-1::0;;24426:40:0;;;-1:-1:-1;;;;;24381:34:0;;::::1;24426:40:::0;;;;;;;::::1;::::0;;24293:181::o;13695:1011::-;13762:4;13862:19;;;:11;:19;;;;;:28;13762:4;;;;;;;;;;;;;;;;;;13862:28;;13854:65;;;;-1:-1:-1;;;13854:65:0;;22322:2:1;13854:65:0;;;22304:21:1;22361:2;22341:18;;;22334:30;22400:26;22380:18;;;22373:54;22444:18;;13854:65:0;;;;;;;;;13930:17;13950:19;;;:11;:19;;;;;;;;:41;;;14010:30;;;:19;:30;;;;;;:39;;;;;;14002:78;;;;-1:-1:-1;;;14002:78:0;;19829:2:1;14002:78:0;;;19811:21:1;19868:2;19848:18;;;19841:30;19907:28;19887:18;;;19880:56;19953:18;;14002:78:0;19627:350:1;14002:78:0;14099:19;:30;14119:9;14099:30;;;;;;;;;;;:37;;;;;;;;;;;;14155:19;:30;14175:9;14155:30;;;;;;;;;;;:39;;;;;;;;;;;;14221:19;:30;14241:9;14221:30;;;;;;;;;;;:38;;;;;;;;;;-1:-1:-1;;;;;14221:38:0;14287:19;:30;14307:9;14287:30;;;;;;;;;;;:38;;;;;;;;;;-1:-1:-1;;;;;14287:38:0;14345:19;:30;14365:9;14345:30;;;;;;;;;;;:42;;;14406:19;:30;14426:9;14406:30;;;;;;;;;;;:42;;;14467:19;:30;14487:9;14467:30;;;;;;;;;;;:39;;;14533:19;:30;14553:9;14533:30;;;;;;;;;;;:38;;;;;;;;;;-1:-1:-1;;;;;14533:38:0;14599:19;:30;14619:9;14599:30;;;;;;;;;;;:35;;;;;;;;;;-1:-1:-1;;;;;14599:35:0;14654:19;:30;14674:9;14654:30;;;;;;;;;;;:42;;;;;;;;;;;;14091:606;;;;;;;;;;;;;;;;;;;;;13695:1011;;;;;;;;;;;:::o;37899:255::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;37980:19:::1;::::0;;;:11:::1;:19;::::0;;;;:28;::::1;;37972:58;;;::::0;-1:-1:-1;;;37972:58:0;;26538:2:1;37972:58:0::1;::::0;::::1;26520:21:1::0;26577:2;26557:18;;;26550:30;26616:19;26596:18;;;26589:47;26653:18;;37972:58:0::1;26336:341:1::0;37972:58:0::1;38079:26;::::0;;;:18:::1;:26;::::0;;;;;;;;38041:11:::1;:19:::0;;;;;38069:5:::1;::::0;-1:-1:-1;;;;;38069:5:0::1;38041:34:::0;;:27:::1;;:34:::0;;;;;:64;;38079:26;;38041:34;;:64:::1;::::0;38079:26;;38041:64:::1;:::i;:::-;::::0;;;-1:-1:-1;;38145:1:0::1;38116:26:::0;;;:18:::1;:26;::::0;;;;:30;37899:255::o;14758:473::-;14840:4;14862:19;14899:11;14862:49;;14922:23;14948:4;-1:-1:-1;;;;;14948:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14922:39;;14972:12;14993:15;14972:37;;15021:9;15032;15046:4;-1:-1:-1;;;;;15046:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15020:44;;;;;;;;;15098:9;15120:6;-1:-1:-1;;;;;15120:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15116:21;;:2;:21;:::i;:::-;15110:28;;:4;:28;:::i;:::-;15098:40;-1:-1:-1;15170:4:0;15157:11;15098:40;15157:6;:11;:::i;:::-;15156:18;;;;:::i;:::-;15149:26;;;;;;;;14758:473;;;;;:::o;26063:470::-;10462:10;26161:4;10454:19;;;:7;:19;;;;;;;;10446:28;;;;;;26186:21:::1;::::0;;;:13:::1;:21;::::0;;;;;;;;;:30;;-1:-1:-1;;;26186:30:0;;;;-1:-1:-1;;;;;26186:21:0;;::::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;:21;;:30;;;;;:21;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26178:76;;;::::0;-1:-1:-1;;;26178:76:0;;21920:2:1;26178:76:0::1;::::0;::::1;21902:21:1::0;21959:2;21939:18;;;21932:30;21998:34;21978:18;;;21971:62;-1:-1:-1;;;22049:18:1;;;22042:31;22090:19;;26178:76:0::1;21718:397:1::0;26178:76:0::1;26265:10;26299:9:::0;26294:184:::1;26318:26;::::0;;;:18:::1;:26;::::0;;;;:33;26314:37;::::1;26294:184;;;26377:31;::::0;;;:23:::1;:31;::::0;;;;:34;;26415:4;;26377:31;26409:1;;26377:34;::::1;;;;;:::i;:::-;;;;;;;;;:42;26373:94;;;26447:4;26440:11;;;;;;26373:94;26353:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26294:184;;;;26496:5;26488:14;;;::::0;::::1;;-1:-1:-1::0;26520:5:0::1;::::0;26063:470;-1:-1:-1;;;26063:470:0:o;21387:940::-;10034:6;;21456:7;;10034:6;;10033:7;10025:34;;;;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0;;;23701:21:1;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0;23517:338:1;10025:34:0;10070:6;:13;;-1:-1:-1;;10070:13:0;10079:4;10070:13;;;21484:21:::1;:27:::0;-1:-1:-1;21476:58:0::1;;;::::0;-1:-1:-1;;;21476:58:0;;18086:2:1;21476:58:0::1;::::0;::::1;18068:21:1::0;18125:2;18105:18;;;18098:30;18164:20;18144:18;;;18137:48;18202:18;;21476:58:0::1;17884:342:1::0;21476:58:0::1;21572:10;21553:30;::::0;;;:18:::1;:30;::::0;;;;;:37;-1:-1:-1;21553:37:0::1;21545:58;;;::::0;-1:-1:-1;;;21545:58:0;;25502:2:1;21545:58:0::1;::::0;::::1;25484:21:1::0;25541:1;25521:18;;;25514:29;25579:10;25559:18;;;25552:38;25607:18;;21545:58:0::1;25300:331:1::0;21545:58:0::1;21645:10;21622:14;:34:::0;;;:22;:14:::1;:34:::0;:14;:34;;;:41;-1:-1:-1;21622:41:0::1;21614:62;;;::::0;-1:-1:-1;;;21614:62:0;;25502:2:1;21614:62:0::1;::::0;::::1;25484:21:1::0;25541:1;25521:18;;;25514:29;25579:10;25559:18;;;25552:38;25607:18;;21614:62:0::1;25300:331:1::0;21614:62:0::1;21711:10;21696:26;::::0;;;:14:::1;:26;::::0;;;;;::::1;;21695:27;21687:49;;;::::0;-1:-1:-1;;;21687:49:0;;23382:2:1;21687:49:0::1;::::0;::::1;23364:21:1::0;23421:1;23401:18;;;23394:29;-1:-1:-1;;;23439:18:1;;;23432:39;23488:18;;21687:49:0::1;23180:332:1::0;21687:49:0::1;-1:-1:-1::0;;;;;21756:20:0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;::::1;;21755:21;21747:43;;;::::0;-1:-1:-1;;;21747:43:0;;23382:2:1;21747:43:0::1;::::0;::::1;23364:21:1::0;23421:1;23401:18;;;23394:29;-1:-1:-1;;;23439:18:1;;;23432:39;23488:18;;21747:43:0::1;23180:332:1::0;21747:43:0::1;21833:14;::::0;21819:10:::1;21809:21;::::0;;;:9:::1;:21;::::0;;;;;21850:15:::1;::::0;21809:38:::1;::::0;::::1;:::i;:::-;:56;21801:80;;;::::0;-1:-1:-1;;;21801:80:0;;21225:2:1;21801:80:0::1;::::0;::::1;21207:21:1::0;21264:2;21244:18;;;21237:30;-1:-1:-1;;;21283:18:1;;;21276:41;21334:18;;21801:80:0::1;21023:335:1::0;21801:80:0::1;21918:14;::::0;-1:-1:-1;;;;;21900:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;21935::::1;::::0;21900:32:::1;::::0;::::1;:::i;:::-;:50;21892:74;;;::::0;-1:-1:-1;;;21892:74:0;;21225:2:1;21892:74:0::1;::::0;::::1;21207:21:1::0;21264:2;21244:18;;;21237:30;-1:-1:-1;;;21283:18:1;;;21276:41;21334:18;;21892:74:0::1;21023:335:1::0;21892:74:0::1;21987:10;21977:21;::::0;;;:9:::1;:21;::::0;;;;;;;22001:15:::1;21977:39:::0;;22027:18:::1;:30:::0;;;;;:37;;22061:3;;21977:21;22027:37:::1;::::0;22061:3;;22027:37:::1;:::i;:::-;::::0;;;-1:-1:-1;22103:22:0::1;::::0;-1:-1:-1;22121:3:0;22103:17:::1;:22::i;:::-;22075:24;;:50;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22159:10:0::1;22136:14;:34:::0;;;:22;:14:::1;:34:::0;:14;:34;;:41;;22174:3;;22136:14;:41:::1;::::0;22174:3;;22136:41:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;22188:22:0;::::1;:46;22211:22;22229:3:::0;22211:17:::1;:22::i;:::-;22188:46;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22276:22;22294:3;22276:17;:22::i;:::-;22270:28;::::0;:3;:28:::1;:::i;:::-;22245:21;::::0;;;:18:::1;:21;::::0;;:53;;:21;;;:53:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;10106:6:0;:14;;-1:-1:-1;;10106:14:0;;;-1:-1:-1;22316:3:0;;21387:940;-1:-1:-1;21387:940:0:o;18638:1662::-;18755:7;18844:19;;;:11;:19;;;;;:28;18755:7;;;;;;18844:28;;18836:65;;;;-1:-1:-1;;;18836:65:0;;22675:2:1;18836:65:0;;;22657:21:1;22714:2;22694:18;;;22687:30;22753:26;22733:18;;;22726:54;22797:18;;18836:65:0;22473:348:1;18836:65:0;18912:17;18932:19;;;:11;:19;;;;;;;;:41;;;18992:30;;;:19;:30;;;;;;:37;;;18984:78;;;;-1:-1:-1;;;18984:78:0;;25838:2:1;18984:78:0;;;25820:21:1;25877:2;25857:18;;;25850:30;25916;25896:18;;;25889:58;25964:18;;18984:78:0;25636:352:1;18984:78:0;19100:10;19081:30;;;;:18;:30;;;;;;:37;-1:-1:-1;19081:37:0;19073:68;;;;-1:-1:-1;;;19073:68:0;;20521:2:1;19073:68:0;;;20503:21:1;20560:2;20540:18;;;20533:30;20599:20;20579:18;;;20572:48;20637:18;;19073:68:0;20319:342:1;19073:68:0;19191:22;19216:30;;;:19;:30;;;;;:42;;;;19295;;;;;19216;;19412:64;19439:3;19216:42;19295;19412:26;:64::i;:::-;19391:85;;19522:23;19548:35;19564:6;19572:10;19548:15;:35::i;:::-;19522:61;;19618:10;19602:15;:26;19594:53;;;;-1:-1:-1;;;19594:53:0;;19131:2:1;19594:53:0;;;19113:21:1;19170:2;19150:18;;;19143:30;19209:16;19189:18;;;19182:44;19243:18;;19594:53:0;18929:338:1;19594:53:0;19658:29;19672:15;19658:29;;:::i;:::-;;;19782:10;19777:335;;19809:30;;;;:19;:30;;;;;:42;;:56;;19855:10;;19809:30;:56;;19855:10;;19809:56;:::i;:::-;;;;;;;;19921:10;19880:11;:19;19892:6;19880:19;;;;;;;;;;;:27;;:37;19908:8;-1:-1:-1;;;;;19880:37:0;-1:-1:-1;;;;;19880:37:0;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;19946:30:0;;;;:19;:30;;;;;:42;;:56;;19992:10;;19946:30;:56;;19992:10;;19946:56;:::i;:::-;;;;-1:-1:-1;;20036:10:0;20017:30;;;;:18;:30;;;;;:37;;20051:3;;20017:30;:37;;20051:3;;20017:37;:::i;:::-;;;;;;;;20097:3;20069:24;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;19777:335:0;-1:-1:-1;20198:19:0;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;20198:37:0;;;;:27;;:37;;;;;;20273:10;20254:30;;:18;:30;;;;;;;20169:10;;-1:-1:-1;20198:37:0;-1:-1:-1;20254:30:0;-1:-1:-1;20210:6:0;;-1:-1:-1;;;;18638:1662:0;;;;;;;;;:::o;10685:95::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;-1:-1:-1;;;;;10751:13:0::1;10767:5;10751:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;10751:21:0::1;::::0;;10685:95::o;13417:218::-;-1:-1:-1;;;;;13503:14:0;;13474:4;13503:14;;;:8;:14;;;;;;13474:4;;13503:14;;13500:128;;;-1:-1:-1;;;;;;;13548:17:0;;;;;:11;:17;;;;;;13542:4;;13417:218::o;13500:128::-;-1:-1:-1;13607:5:0;;;;-1:-1:-1;13417:218:0;-1:-1:-1;13417:218:0:o;16971:1655::-;17092:7;17182:19;;;:11;:19;;;;;:28;17092:7;;;;;;17182:28;;17174:65;;;;-1:-1:-1;;;17174:65:0;;22675:2:1;17174:65:0;;;22657:21:1;22714:2;22694:18;;;22687:30;22753:26;22733:18;;;22726:54;22797:18;;17174:65:0;22473:348:1;17174:65:0;17250:17;17270:19;;;:11;:19;;;;;;;;:41;;;17330:30;;;:19;:30;;;;;;:37;;;17322:78;;;;-1:-1:-1;;;17322:78:0;;25838:2:1;17322:78:0;;;25820:21:1;25877:2;25857:18;;;25850:30;25916;25896:18;;;25889:58;25964:18;;17322:78:0;25636:352:1;17322:78:0;17466:3;17419:43;17443:10;17455:6;17419:23;:43::i;:::-;:50;;17411:81;;;;-1:-1:-1;;;17411:81:0;;20521:2:1;17411:81:0;;;20503:21:1;20560:2;20540:18;;;20533:30;20599:20;20579:18;;;20572:48;20637:18;;17411:81:0;20319:342:1;17411:81:0;17538:23;17564:28;17580:6;17588:3;17564:15;:28::i;:::-;17538:54;;17627:3;17611:15;:19;17603:46;;;;-1:-1:-1;;;17603:46:0;;19131:2:1;17603:46:0;;;19113:21:1;19170:2;19150:18;;;19143:30;19209:16;19189:18;;;19182:44;19243:18;;17603:46:0;18929:338:1;17603:46:0;17660:22;17667:15;17660:22;;:::i;:::-;17732:23;17758:30;;;:19;:30;;;;;:42;;;;17836;;;;;17660:22;;-1:-1:-1;17758:42:0;17836;17953:64;17660:22;17836:42;17758;17953:26;:64::i;:::-;17932:85;;18112:10;18107:328;;18139:30;;;;:19;:30;;;;;:42;;:56;;18185:10;;18139:30;:56;;18185:10;;18139:56;:::i;:::-;;;;-1:-1:-1;;18210:19:0;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;18210:37:0;;;;:27;;:37;;;;;:51;;18251:10;;18210:19;:51;;18251:10;;18210:51;:::i;:::-;;;;-1:-1:-1;;18276:30:0;;;;:19;:30;;;;;:42;;:49;;18322:3;;18276:30;:49;;18322:3;;18276:49;:::i;:::-;;;;-1:-1:-1;;18359:10:0;18340:30;;;;:18;:30;;;;;:37;;18374:3;;18340:30;:37;;18374:3;;18340:37;:::i;:::-;;;;;;;;18420:3;18392:24;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;18107:328:0;18521:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;18521:37:0;;;;;;:27;;;;:37;;;;;;18596:10;18577:30;;:18;:30;;;;;;;18492:10;;18521:37;;18577:30;;-1:-1:-1;18521:19:0;16971:1655;-1:-1:-1;;;;;;;;;16971:1655:0:o;15286:230::-;15370:7;15398:19;;;:11;:19;;;;;:28;;;15390:67;;;;-1:-1:-1;;;15390:67:0;;15901:2:1;15390:67:0;;;15883:21:1;15940:2;15920:18;;;15913:30;15979:28;15959:18;;;15952:56;16025:18;;15390:67:0;15699:350:1;15390:67:0;-1:-1:-1;15475:19:0;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;15475:33:0;;;;;;:27;;;;:33;;;;;15286:230::o;28515:158::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;-1:-1:-1;;;;;28611:28:0;;::::1;;::::0;;;:14:::1;:28;::::0;;;;;;;:47;;;::::1;::::0;;;;;;;:54;;-1:-1:-1;;28611:54:0::1;28661:4;28611:54;::::0;;28515:158::o;25596:459::-;10462:10;25690:4;10454:19;;;:7;:19;;;;;;;;10446:28;;;;;;25715:21:::1;::::0;;;:13:::1;:21;::::0;;;;;;;;;:30;;-1:-1:-1;;;25715:30:0;;;;-1:-1:-1;;;;;25715:21:0;;::::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;:21;;:30;;;;;:21;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25707:76;;;::::0;-1:-1:-1;;;25707:76:0;;21920:2:1;25707:76:0::1;::::0;::::1;21902:21:1::0;21959:2;21939:18;;;21932:30;21998:34;21978:18;;;21971:62;-1:-1:-1;;;22049:18:1;;;22042:31;22090:19;;25707:76:0::1;21718:397:1::0;25707:76:0::1;25794:10;25828:9:::0;25823:177:::1;25847:26;::::0;;;:18:::1;:26;::::0;;;;:33;25843:37;::::1;25823:177;;;25906:26;::::0;;;:18:::1;:26;::::0;;;;:29;;25939:2;;25906:26;25933:1;;25906:29;::::1;;;;;:::i;:::-;;;;;;;;;:35;25902:87;;;25969:4;25962:11;;;;;;25902:87;25882:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25823:177;;34381:2818:::0;10034:6;;;;10033:7;10025:34;;;;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0;;;23701:21:1;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0;23517:338:1;10025:34:0;10070:6;:13;;-1:-1:-1;;10070:13:0;10079:4;10070:13;;;10303:10:::1;10070:6:::0;10288:26;;;:14:::1;:26;::::0;;;;;;;-1:-1:-1;;;;;10288:45:0;::::1;::::0;;;;;;;;34478:9;;10070:13;10288:45:::1;::::0;:67:::1;;-1:-1:-1::0;10350:5:0::1;::::0;-1:-1:-1;;;;;10350:5:0::1;10338:10;:17;10288:67;:82;;;-1:-1:-1::0;10359:11:0::1;::::0;::::1;::::0;::::1;;;10288:82;10280:109;;;::::0;-1:-1:-1;;;10280:109:0;;26195:2:1;10280:109:0::1;::::0;::::1;26177:21:1::0;26234:2;26214:18;;;26207:30;26273:16;26253:18;;;26246:44;26307:18;;10280:109:0::1;25993:338:1::0;10280:109:0::1;34594:32:::2;::::0;-1:-1:-1;;;34594:32:0;;34615:10:::2;34594:32;::::0;::::2;10843:74:1::0;34525:9:0;;8499:42:::2;::::0;34630:5;;-1:-1:-1;;;;;34594:20:0;::::2;::::0;::::2;::::0;10816:18:1;;34594:32:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;34586:86;;;::::0;-1:-1:-1;;;34586:86:0;;16612:2:1;34586:86:0::2;::::0;::::2;16594:21:1::0;;;16631:18;;;16624:30;16690:34;16670:18;;;16663:62;16742:18;;34586:86:0::2;16410:356:1::0;34586:86:0::2;34742:57;::::0;-1:-1:-1;;;34742:57:0;;34766:10:::2;34742:57;::::0;::::2;11191:34:1::0;34786:4:0::2;11241:18:1::0;;;11234:43;11293:18;;;11286:34;;;-1:-1:-1;;;;;34742:23:0;::::2;::::0;::::2;::::0;11103:18:1;;34742:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;34876:19:0;::::2;34810;34876::::0;;;:8:::2;:19;::::0;;;;;34810;;34876::::2;;34872:829;;;34920:32;::::0;-1:-1:-1;;;34920:32:0;::::2;;;34912:74;;;::::0;-1:-1:-1;;;34912:74:0;;25144:2:1;34912:74:0::2;::::0;::::2;25126:21:1::0;25183:2;25163:18;;;25156:30;25222:31;25202:18;;;25195:59;25271:18;;34912:74:0::2;24942:353:1::0;34912:74:0::2;-1:-1:-1::0;;;;;;;35042:22:0;;::::2;35001:12;35042:22:::0;;;:11:::2;:22;::::0;;;;;;;;35095:24;;;:11:::2;:24:::0;;;;;:46:::2;;::::0;35178:34;;;:19:::2;:34:::0;;;;;;:42:::2;;::::0;35042:22;;35095:46;;35001:12;35178:42:::2;8499;35164:57;35156:80;;;::::0;-1:-1:-1;;;35156:80:0;;24403:2:1;35156:80:0::2;::::0;::::2;24385:21:1::0;24442:2;24422:18;;;24415:30;24481:12;24461:18;;;24454:40;24511:18;;35156:80:0::2;24201:334:1::0;35156:80:0::2;35261:10;::::0;;35306:34;;;:19:::2;:34;::::0;;;;;;:46:::2;::::0;::::2;::::0;35354::::2;::::0;;::::2;::::0;35261:169;;;;;::::2;::::0;::::2;28085:25:1::0;;;;28126:18;;;28119:34;;;;-1:-1:-1;;;;;28189:55:1;;;28169:18;;;28162:83;28261:18;;;28254:34;;;35420:9:0::2;28304:19:1::0;;;28297:35;35261:10:0::2;::::0;:44:::2;::::0;28057:19:1;;35261:169:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35251:179;;35453:7;35445:34;;;::::0;-1:-1:-1;;;35445:34:0;;26884:2:1;35445:34:0::2;::::0;::::2;26866:21:1::0;26923:2;26903:18;;;26896:30;26962:16;26942:18;;;26935:44;26996:18;;35445:34:0::2;26682:338:1::0;35445:34:0::2;-1:-1:-1::0;34872:829:0::2;;;35555:1;35541:11;;:15;;;;;;;:::i;:::-;;;;;;;;35596:1;35571:21;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;35626:11:0::2;::::0;35668:21:::2;::::0;35626:11;;-1:-1:-1;35668:21:0;-1:-1:-1;34872:829:0::2;-1:-1:-1::0;;;;;35711:19:0;;::::2;;::::0;;;:8:::2;:19;::::0;;;;;;;:26;;35733:4:::2;-1:-1:-1::0;;35711:26:0;;::::2;::::0;::::2;::::0;;;35748:11:::2;:22:::0;;;;;:36;;;35823:34;;;:19:::2;:34:::0;;;;;;:53;;35946:50;36007:55;;;;;;;::::2;;::::0;;;;36073:42:::2;:54:::0;;-1:-1:-1;;36073:54:0::2;::::0;;::::2;::::0;;;::::2;::::0;;36188:24:::2;36206:5:::0;36188:17:::2;:24::i;:::-;36138:34;::::0;;;:19:::2;:34;::::0;;;;:46:::2;;:74:::0;;:46;;:34;:74:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;36273:28:0::2;::::0;-1:-1:-1;36291:9:0::2;36273:17;:28::i;:::-;36223:34;::::0;;;:19:::2;:34;::::0;;;;:46:::2;;:78:::0;;:46;;:34;:78:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;;36312:34:0::2;::::0;;;:19:::2;:34;::::0;;;;;;;:47:::2;::::0;::::2;:61:::0;;;36430:1:::2;36384:43;::::0;;::::2;:47:::0;;;36473:24;;;:11:::2;:24:::0;;;;;:40;;-1:-1:-1;;36473:40:0::2;::::0;;::::2;::::0;;36524:42:::2;;:51:::0;;36570:5;;36312:34;36524:51:::2;::::0;36570:5;;36524:51:::2;:::i;:::-;;;;;;;;36625:10;-1:-1:-1::0;;;;;36625:22:0::2;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36586:11;:24;36598:11;36586:24;;;;;;;;;;;:36;;:63;;;;36692:10;-1:-1:-1::0;;;;;36692:15:0::2;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36660:11;:24;36672:11;36660:24;;;;;;;;;;;:29;;:49;;;;36754:10;-1:-1:-1::0;;;;;36754:17:0::2;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36720:24;::::0;;;:11:::2;:24;::::0;;;;:31:::2;::::0;::::2;:53:::0;;;;36784:34:::2;::::0;::::2;:41:::0;;-1:-1:-1;;;;;36836:51:0;::::2;36784:41;36836:51;-1:-1:-1::0;;36836:51:0;;;;36821:4:::2;36836:51:::0;;;36974:46:::2;;:62:::0;;;37089:24:::2;37107:5:::0;37089:17:::2;:24::i;:::-;37081:32;::::0;:5;:32:::2;:::i;:::-;-1:-1:-1::0;;;;;37047:28:0;::::2;;::::0;;;:17:::2;:28;::::0;;;;:68;;:28;;;:68:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;37159:28:0::2;::::0;-1:-1:-1;37177:9:0::2;37159:17;:28::i;:::-;37147:40;::::0;:9:::2;:40;:::i;:::-;37126:15;;:63;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;10106:6:0;:14;;-1:-1:-1;;10106:14:0;;;-1:-1:-1;;;;;;;34381:2818:0:o;25124:286::-;10462:10;25204:4;10454:19;;;:7;:19;;;;;;25210:16;;;;10454:19;;10446:28;;;;;;25265:24:::1;::::0;;;:13:::1;:24;::::0;;;;;;;;;:33;;-1:-1:-1;;;25265:33:0;;;;-1:-1:-1;;;;;25265:24:0;;::::1;::::0;:31:::1;::::0;:33:::1;::::0;;::::1;::::0;:24;;:33;;;;;:24;:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25257:79;;;::::0;-1:-1:-1;;;25257:79:0;;21920:2:1;25257:79:0::1;::::0;::::1;21902:21:1::0;21959:2;21939:18;;;21932:30;21998:34;21978:18;;;21971:62;-1:-1:-1;;;22049:18:1;;;22042:31;22090:19;;25257:79:0::1;21718:397:1::0;25257:79:0::1;25354:24;::::0;;;:13:::1;:24;::::0;;;;;;:48;;;;;;;-1:-1:-1;;;;;25354:24:0;;::::1;::::0;:46:::1;::::0;:48:::1;::::0;;::::1;::::0;;;;;;;:24;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;25354:48:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;25347:55;;;;;;25124:286:::0;;;;;:::o;10788:113::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;10870:15:::1;::::0;;;:9:::1;:15;::::0;;;;;:23;;-1:-1:-1;;10870:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10788:113::o;30606:469::-;30673:7;30701:18;;;:11;:18;;;;;:27;;;30693:52;;;;-1:-1:-1;;;30693:52:0;;24062:2:1;30693:52:0;;;24044:21:1;24101:2;24081:18;;;24074:30;24140:14;24120:18;;;24113:42;24172:18;;30693:52:0;23860:336:1;30693:52:0;30760:18;;;;:11;:18;;;;;:23;;:30;30756:312;;-1:-1:-1;30819:1:0;;30606:469;-1:-1:-1;30606:469:0:o;30756:312::-;30853:19;;30887:137;30911:18;;;;:11;:18;;;;;:23;;:30;30907:34;;30887:137;;;30982:18;;;;:11;:18;;;;;:23;;:26;;31006:1;;30982:26;;;;;;:::i;:::-;;;;;;;;;30967:41;;;;;:::i;:::-;;-1:-1:-1;30943:3:0;;;;:::i;:::-;;;;30887:137;;;-1:-1:-1;31045:11:0;30606:469;-1:-1:-1;;30606:469:0:o;30756:312::-;30606:469;;;:::o;23286:715::-;23405:19;;;;:11;:19;;;;;:28;;;23397:67;;;;-1:-1:-1;;;23397:67:0;;15901:2:1;23397:67:0;;;15883:21:1;15940:2;15920:18;;;15913:30;15979:28;15959:18;;;15952:56;16025:18;;23397:67:0;15699:350:1;23397:67:0;23483:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;23483:35:0;;;;:27;;:35;;;;;;:42;-1:-1:-1;23483:42:0;23475:82;;;;-1:-1:-1;;;23475:82:0;;16256:2:1;23475:82:0;;;16238:21:1;16295:2;16275:18;;;16268:30;16334:29;16314:18;;;16307:57;16381:18;;23475:82:0;16054:351:1;23475:82:0;23568:23;23594:28;23610:6;23618:3;23594:15;:28::i;:::-;23568:54;;23657:3;23641:15;:19;23633:46;;;;-1:-1:-1;;;23633:46:0;;19131:2:1;23633:46:0;;;19113:21:1;19170:2;19150:18;;;19143:30;19209:16;19189:18;;;19182:44;19243:18;;23633:46:0;18929:338:1;23633:46:0;23690:22;23697:15;23690:22;;:::i;:::-;;;23762;23780:3;23762:17;:22::i;:::-;23723:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;23723:35:0;;;;:27;;:35;;;;;:61;;:35;;:19;:61;;;;;:::i;:::-;;;;-1:-1:-1;23796:13:0;;-1:-1:-1;23861:22:0;;-1:-1:-1;23879:3:0;23861:17;:22::i;:::-;23820:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;23820:37:0;;;;:27;;:37;;;;;:63;;:37;;:19;:63;;;;;:::i;:::-;;;;-1:-1:-1;23894:15:0;;-1:-1:-1;23894:15:0;;-1:-1:-1;23971:22:0;;-1:-1:-1;23894:15:0;23971:17;:22::i;:::-;23941:26;;;;:18;:26;;;;;:52;;:26;;;:52;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23286:715:0:o;24482:225::-;10462:10;24555:7;10454:19;;;:7;:19;;;;;;;;10446:28;;;;;;24588:14:::1;::::0;;24574:29:::1;::::0;;;:13:::1;:29;::::0;;;;:58;;-1:-1:-1;;24574:58:0::1;-1:-1:-1::0;;;;;24574:58:0;::::1;;::::0;;24643:19;;-1:-1:-1;;24588:14:0;24574:29;24643:19:::1;::::0;-1:-1:-1;;24643:19:0::1;:::i;:::-;::::0;;;-1:-1:-1;;24681:14:0::1;::::0;:17:::1;::::0;24697:1:::1;::::0;24681:17:::1;:::i;37499:392::-:0;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;-1:-1:-1;;;;;37650:23:0;::::1;37569:15;37650:23:::0;;;:17:::1;:23;::::0;;;;;;;37613:34;;-1:-1:-1;;;37613:34:0;;37641:4:::1;37613:34;::::0;::::1;10843:74:1::0;37650:23:0;;;37613:19:::1;::::0;10816:18:1;;37613:34:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;37609:237;;;37709:5;::::0;37716:34:::1;::::0;-1:-1:-1;;;37716:34:0;;37744:4:::1;37716:34;::::0;::::1;10843:74:1::0;-1:-1:-1;;;;;37690:18:0;;::::1;::::0;::::1;::::0;37709:5;::::1;::::0;37690:18;;37716:19:::1;::::0;10816:18:1;;37716:34:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37690:61;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11523:55:1;;;37690:61:0::1;::::0;::::1;11505:74:1::0;11595:18;;;11588:34;11478:18;;37690:61:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37609:237;;;37803:5;::::0;-1:-1:-1;;;;;37810:23:0;;::::1;37803:5;37810:23:::0;;;:17:::1;:23;::::0;;;;;;;37784:50;;;;;37803:5;;::::1;37784:50;::::0;::::1;11505:74:1::0;11595:18;;;11588:34;37784:18:0;::::1;::::0;::::1;::::0;11478::1;;37784:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37609:237;-1:-1:-1::0;;;;;;37856:23:0::1;37882:1;37856:23:::0;;;:17:::1;:23;::::0;;;;:27;37499:392::o;37207:284::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;37291:15:::1;;37267:21;:39;37263:191;;;37331:5;::::0;37323:46:::1;::::0;-1:-1:-1;;;;;37331:5:0;;::::1;::::0;37347:21:::1;37323:46:::0;::::1;;;::::0;37331:5:::1;37323:46:::0;37331:5;37323:46;37347:21;37331:5;37323:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37263:191;;;37410:5;::::0;37426:15:::1;::::0;37402:40:::1;::::0;-1:-1:-1;;;;;37410:5:0;;::::1;::::0;37402:40;::::1;;;::::0;37426:15;37410:5:::1;37402:40:::0;37410:5;37402:40;37426:15;37410:5;37402:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37263:191;37482:1;37464:15;:19:::0;37207:284::o;15862:625::-;15917:7;16001:17;;;:11;:17;;;;;:26;15917:7;;;;15944:16;;15917:7;;;;16001:26;;15993:57;;;;-1:-1:-1;;;15993:57:0;;17334:2:1;15993:57:0;;;17316:21:1;17373:2;17353:18;;;17346:30;17412:20;17392:18;;;17385:48;17450:18;;15993:57:0;17132:342:1;15993:57:0;16061:18;16082:17;;;:11;:17;;;;;;;;:28;;;16138:29;;;16206:35;;;;16276:22;;;;16252:46;;;;;;;;;;;;;;;;;16082:28;;;;-1:-1:-1;;;;;16082:28:0;;16138:29;;16206:35;;16061:18;;16252:46;;16276:22;;16252:46;;16276:22;16252:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16309:13:0;16325:17;;;-1:-1:-1;;16325:11:0;:17;;;;;;:22;;;;16376:24;;;;;16419:10;;16431:6;;16439:17;;-1:-1:-1;16252:46:0;;-1:-1:-1;16325:22:0;;-1:-1:-1;16376:24:0;;-1:-1:-1;15862:625:0;-1:-1:-1;;;15862:625:0:o;29709:889::-;10034:6;;;;10033:7;10025:34;;;;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0;;;23701:21:1;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0;23517:338:1;10025:34:0;10070:6;:13;;-1:-1:-1;;10070:13:0;10079:4;10070:13;;;29814:17:::1;29802:9;:29;29794:49;;;::::0;-1:-1:-1;;;29794:49:0;;15566:2:1;29794:49:0::1;::::0;::::1;15548:21:1::0;15605:1;15585:18;;;15578:29;15643:9;15623:18;;;15616:37;15670:18;;29794:49:0::1;15364:330:1::0;29794:49:0::1;29862:19;::::0;;;:11:::1;:19;::::0;;;;:28;::::1;;29854:60;;;::::0;-1:-1:-1;;;29854:60:0;;18783:2:1;29854:60:0::1;::::0;::::1;18765:21:1::0;18822:2;18802:18;;;18795:30;18861:21;18841:18;;;18834:49;18900:18;;29854:60:0::1;18581:343:1::0;29854:60:0::1;29925:21;29949:19:::0;;;:11:::1;:19;::::0;;;;;;;:41:::1;;::::0;30010:34;;;:19:::1;:34:::0;;;;;;:41;::::1;;30009:42;30001:76;;;::::0;-1:-1:-1;;;30001:76:0;;18433:2:1;30001:76:0::1;::::0;::::1;18415:21:1::0;18472:2;18452:18;;;18445:30;18511:23;18491:18;;;18484:51;18552:18;;30001:76:0::1;18231:345:1::0;30001:76:0::1;30088:34;::::0;;;:19:::1;:34;::::0;;;;:48;;30208:56;;;;;;;;30132:4:::1;30275:42:::0;::::1;:56:::0;;-1:-1:-1;;30275:56:0::1;8572:42;30275:56;::::0;;30342:46:::1;;:59:::0;;30392:9:::1;::::0;30088:34;30342:59:::1;::::0;30392:9;;30342:59:::1;:::i;:::-;::::0;;;-1:-1:-1;;30412:34:0::1;::::0;;;:19:::1;:34;::::0;;;;:46:::1;;:53:::0;;30462:3;;30412:34;:53:::1;::::0;30462:3;;30412:53:::1;:::i;:::-;::::0;;;-1:-1:-1;;30476:34:0::1;::::0;;;:19:::1;:34;::::0;;;;:47:::1;::::0;::::1;:56:::0;;;;-1:-1:-1;30589:1:0::1;30543:43;::::0;;::::1;:47:::0;10106:6;:14;;-1:-1:-1;;10106:14:0;;;29709:889::o;20677:702::-;10034:6;;20732:7;;10034:6;;10033:7;10025:34;;;;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0;;;23701:21:1;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0;23517:338:1;10025:34:0;10070:6;:13;;-1:-1:-1;;10070:13:0;10079:4;10070:13;;;20772:17:::1;20759:9;:30;;20751:52;;;::::0;-1:-1:-1;;;20751:52:0;;20184:2:1;20751:52:0::1;::::0;::::1;20166:21:1::0;20223:1;20203:18;;;20196:29;20261:11;20241:18;;;20234:39;20290:18;;20751:52:0::1;19982:332:1::0;20751:52:0::1;20839:10;20823:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;20822:28;20814:50;;;::::0;-1:-1:-1;;;20814:50:0;;23382:2:1;20814:50:0::1;::::0;::::1;23364:21:1::0;23421:1;23401:18;;;23394:29;-1:-1:-1;;;23439:18:1;;;23432:39;23488:18;;20814:50:0::1;23180:332:1::0;20814:50:0::1;20908:15;::::0;20894:10:::1;20883:22;::::0;;;:10:::1;:22;::::0;;;;;20926:15:::1;::::0;20883:40:::1;::::0;::::1;:::i;:::-;:58;20875:82;;;::::0;-1:-1:-1;;;20875:82:0;;21225:2:1;20875:82:0::1;::::0;::::1;21207:21:1::0;21264:2;21244:18;;;21237:30;-1:-1:-1;;;21283:18:1;;;21276:41;21334:18;;20875:82:0::1;21023:335:1::0;20875:82:0::1;20992:9;21050:32;20992:9:::0;21050:17:::1;:32::i;:::-;21035:10;21012:14;:34:::0;;;:22;:14:::1;:34:::0;:14;:34;;:70;;:34;;:14;:70:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;21127:32:0::1;::::0;-1:-1:-1;21145:13:0;21127:17:::1;:32::i;:::-;21112:10;21093:30;::::0;;;:18:::1;:30;::::0;;;;:66;;:30;;;:66:::1;::::0;;;::::1;:::i;:::-;;;;;;;;21198:13;21170:24;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;21257:32:0::1;::::0;-1:-1:-1;21275:13:0;21257:17:::1;:32::i;:::-;21241:48;::::0;:13;:48:::1;:::i;:::-;21222:15;;:67;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21311:10:0::1;21300:22;::::0;;;:10:::1;:22;::::0;;;;21325:15:::1;21300:40:::0;;21358:13;-1:-1:-1;10106:6:0;:14;;-1:-1:-1;;10106:14:0;;;20677:702;:::o;22394:804::-;10034:6;;;;10033:7;10025:34;;;;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0;;;23701:21:1;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0;23517:338:1;10025:34:0;10070:6;:13;;-1:-1:-1;;10070:13:0;10079:4;10070:13;;;-1:-1:-1;;;;;22561:15:0;::::1;10070:6:::0;22561:15;;;:8:::1;:15;::::0;;;;;22493:5;;10070:13;22561:15:::1;22553:54;;;::::0;-1:-1:-1;;;22553:54:0;;21565:2:1;22553:54:0::1;::::0;::::1;21547:21:1::0;21604:2;21584:18;;;21577:30;21643:28;21623:18;;;21616:56;21689:18;;22553:54:0::1;21363:350:1::0;22553:54:0::1;-1:-1:-1::0;;;;;22640:18:0;::::1;22618:19;22640:18:::0;;;:11:::1;:18;::::0;;;;;;;;22677:24;;;:11:::1;:24:::0;;;;;22710:10:::1;22677:44:::0;;:32:::1;;:44:::0;;;;;;;:51;-1:-1:-1;22677:51:0::1;22669:92;;;::::0;-1:-1:-1;;;22669:92:0;;20868:2:1;22669:92:0::1;::::0;::::1;20850:21:1::0;20907:2;20887:18;;;20880:30;20946;20926:18;;;20919:58;20994:18;;22669:92:0::1;20666:352:1::0;22669:92:0::1;22780:35;::::0;-1:-1:-1;;;22780:35:0;;22809:4:::1;22780:35;::::0;::::1;10843:74:1::0;22819:3:0;;-1:-1:-1;;;;;22780:20:0;::::1;::::0;::::1;::::0;10816:18:1;;22780:35:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;22772:81;;;::::0;-1:-1:-1;;;22772:81:0;;19474:2:1;22772:81:0::1;::::0;::::1;19456:21:1::0;19513:2;19493:18;;;19486:30;19552:28;19532:18;;;19525:56;19598:18;;22772:81:0::1;19272:350:1::0;22772:81:0::1;22864:10;-1:-1:-1::0;;;;;22864:19:0::1;;22884:10;22896:22;22914:3;22896:17;:22::i;:::-;22864:55;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11523:55:1;;;22864::0::1;::::0;::::1;11505:74:1::0;11595:18;;;11588:34;11478:18;;22864:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22979:1:0::1;22934:24:::0;;;:11:::1;:24;::::0;;;23065;;;;23098:10:::1;23065:44:::0;;:32:::1;;:44:::0;;;;;:51;;23113:3;;22979:1;23065:51:::1;::::0;23113:3;;23065:51:::1;:::i;:::-;::::0;;;-1:-1:-1;23168:22:0::1;::::0;-1:-1:-1;23186:3:0;23168:17:::1;:22::i;:::-;23162:28;::::0;:3;:28:::1;:::i;:::-;23127:31;::::0;;;:18:::1;:31;::::0;;;;:63;;:31;;;:63:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;10106:6:0;:14;;-1:-1:-1;;10106:14:0;;;-1:-1:-1;;;;22394:804:0:o;28746:955::-;28908:4;10188:15;;;;:9;:15;;;;;;10187:16;10179:25;;;;;;10034:6:::1;::::0;::::1;;10033:7;10025:34;;;::::0;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0::1;::::0;::::1;23701:21:1::0;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0::1;23517:338:1::0;10025:34:0::1;10070:6;:13:::0;;-1:-1:-1;;10070:13:0::1;10079:4;10070:13:::0;;::::1;::::0;;;28952:11:::2;::::0;10070:6:::1;::::0;28952:13:::2;::::0;:11;:13:::2;:::i;:::-;28976:24;::::0;;;:11:::2;:24;::::0;;;;:40;;-1:-1:-1;;28976:40:0::2;29012:4;28976:40:::0;;::::2;::::0;;29027:42:::2;::::0;::::2;:55:::0;;;29093:36;::::2;:49:::0;;;28930:35;;-1:-1:-1;29153:36:0::2;::::0;:29:::2;;29185:4:::0;;29153:36:::2;:::i;:::-;-1:-1:-1::0;29200:24:0::2;::::0;;;:11:::2;:24;::::0;;;;:29:::2;::::0;::::2;:36:::0;;;29247:31:::2;::::0;::::2;:40:::0;;;29298:34:::2;;:41:::0;;-1:-1:-1;;29350:46:0;;;;;29454:29:::2;29472:10:::0;29454:17:::2;:29::i;:::-;29407:24;::::0;;;:11:::2;:24;::::0;;;;;;;29440:10:::2;29407:44:::0;;:32:::2;;:44:::0;;;;;:76;29543:21:::2;::::0;:25:::2;::::0;29567:1:::2;29543:25;:::i;:::-;29494:24;::::0;;;:11:::2;:24;::::0;;;;:46:::2;;:74:::0;;;;29579:21:::2;:26:::0;;29604:1:::2;::::0;29494:24;29579:26:::2;::::0;29604:1;;29579:26:::2;:::i;:::-;::::0;;;-1:-1:-1;29664:29:0::2;::::0;-1:-1:-1;29682:10:0;29664:17:::2;:29::i;:::-;29651:42;::::0;:10;:42:::2;:::i;:::-;29616:31;::::0;;;:18:::2;:31;::::0;;;;:77;;:31;;;:77:::2;::::0;;;::::2;:::i;11008:92::-:0;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;11072:13:::1;:20:::0;;-1:-1:-1;;11072:20:0::1;-1:-1:-1::0;;;;;11072:20:0;;;::::1;::::0;;;::::1;::::0;;11008:92::o;26925:275::-;10462:10;27019:4;10454:19;;;:7;:19;;;;;;27019:4;;10454:19;;10446:28;;;;;;27054:42:::1;27083:6;27091:4;27054:28;:42::i;:::-;27046:80;;;::::0;-1:-1:-1;;;27046:80:0;;23028:2:1;27046:80:0::1;::::0;::::1;23010:21:1::0;23067:2;23047:18;;;23040:30;23106:27;23086:18;;;23079:55;23151:18;;27046:80:0::1;22826:349:1::0;27046:80:0::1;27144:21;::::0;;;:13:::1;:21;::::0;;;;;;;:48;;;;;::::1;::::0;::::1;15328:25:1::0;;;-1:-1:-1;;;;;27144:21:0;;::::1;::::0;:42:::1;::::0;15301:18:1;;27144:48:0::1;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27137:55;;;;26925:275:::0;;;;;:::o;11112:114::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;11191:14:::1;:27:::0;11112:114::o;31219:3154::-;31327:3;10188:15;;;;:9;:15;;;;;;10187:16;10179:25;;;;;;10034:6:::1;::::0;::::1;;10033:7;10025:34;;;::::0;-1:-1:-1;;;10025:34:0;;23719:2:1;10025:34:0::1;::::0;::::1;23701:21:1::0;23758:2;23738:18;;;23731:30;-1:-1:-1;;;23777:18:1;;;23770:44;23831:18;;10025:34:0::1;23517:338:1::0;10025:34:0::1;10070:6;:13:::0;;-1:-1:-1;;10070:13:0::1;10079:4;10070:13;::::0;;10303:10:::2;10070:6:::1;10288:26:::0;;;:14:::2;:26;::::0;;;;;;;-1:-1:-1;;;;;10288:45:0;::::2;::::0;;;;;;;;31346:9;;10070:13:::1;10288:45:::2;::::0;:67:::2;;-1:-1:-1::0;10350:5:0::2;::::0;-1:-1:-1;;;;;10350:5:0::2;10338:10;:17;10288:67;:82;;;-1:-1:-1::0;10359:11:0::2;::::0;::::2;::::0;::::2;;;10288:82;10280:109;;;::::0;-1:-1:-1;;;10280:109:0;;26195:2:1;10280:109:0::2;::::0;::::2;26177:21:1::0;26234:2;26214:18;;;26207:30;26273:16;26253:18;;;26246:44;26307:18;;10280:109:0::2;25993:338:1::0;10280:109:0::2;31517:32:::3;::::0;-1:-1:-1;;;31517:32:0;;31538:10:::3;31517:32;::::0;::::3;10843:74:1::0;31368:16:0::3;::::0;;;;;31553:5;;-1:-1:-1;;;;;31517:20:0;::::3;::::0;::::3;::::0;10816:18:1;;31517:32:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;31509:86;;;::::0;-1:-1:-1;;;31509:86:0;;16612:2:1;31509:86:0::3;::::0;::::3;16594:21:1::0;;;16631:18;;;16624:30;16690:34;16670:18;;;16663:62;16742:18;;31509:86:0::3;16410:356:1::0;31509:86:0::3;31614:31;::::0;-1:-1:-1;;;31614:31:0;;31634:10:::3;31614:31;::::0;::::3;10843:74:1::0;31649:5:0;;-1:-1:-1;;;;;31614:19:0;::::3;::::0;::::3;::::0;10816:18:1;;31614:31:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;31606:85;;;::::0;-1:-1:-1;;;31606:85:0;;16973:2:1;31606:85:0::3;::::0;::::3;16955:21:1::0;;;16992:18;;;16985:30;17051:34;17031:18;;;17024:62;17103:18;;31606:85:0::3;16771:356:1::0;31606:85:0::3;31761:57;::::0;-1:-1:-1;;;31761:57:0;;31785:10:::3;31761:57;::::0;::::3;11191:34:1::0;31805:4:0::3;11241:18:1::0;;;11234:43;11293:18;;;11286:34;;;-1:-1:-1;;;;;31761:23:0;::::3;::::0;::::3;::::0;11103:18:1;;31761:57:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31829:56:0::3;::::0;-1:-1:-1;;;31829:56:0;;31852:10:::3;31829:56;::::0;::::3;11191:34:1::0;31872:4:0::3;11241:18:1::0;;;11234:43;11293:18;;;11286:34;;;-1:-1:-1;;;;;31829:22:0;::::3;::::0;::::3;::::0;11103:18:1;;31829:56:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;31962:19:0;::::3;31896;31962::::0;;;:8:::3;:19;::::0;;;;;31896;;31962::::3;;31958:920;;;32006:32;::::0;-1:-1:-1;;;32006:32:0;::::3;;;31998:74;;;::::0;-1:-1:-1;;;31998:74:0;;25144:2:1;31998:74:0::3;::::0;::::3;25126:21:1::0;25183:2;25163:18;;;25156:30;25222:31;25202:18;;;25195:59;25271:18;;31998:74:0::3;24942:353:1::0;31998:74:0::3;-1:-1:-1::0;;;;;;;32128:22:0;;::::3;32087:12;32128:22:::0;;;:11:::3;:22;::::0;;;;;;;;32181:24;;;:11:::3;:24:::0;;;;;:46:::3;;::::0;32267:34;;;:19:::3;:34:::0;;;;;;:42:::3;;::::0;32128:22;;32181:46;;32087:12;32250:60;;::::3;32267:42:::0;::::3;32250:60;32242:83;;;::::0;-1:-1:-1;;;32242:83:0;;24403:2:1;32242:83:0::3;::::0;::::3;24385:21:1::0;24442:2;24422:18;;;24415:30;24481:12;24461:18;;;24454:40;24511:18;;32242:83:0::3;24201:334:1::0;32242:83:0::3;32350:10;::::0;;32386:34;;;:19:::3;:34;::::0;;;;;;:46:::3;::::0;::::3;::::0;32434::::3;::::0;;::::3;::::0;32350:165;;;;;::::3;::::0;::::3;27494:25:1::0;;;;27535:18;;;27528:34;;;;-1:-1:-1;;;;;27659:15:1;;;27639:18;;;27632:43;27711:15;;;27691:18;;;27684:43;27743:19;;;27736:35;;;27787:19;;;27780:35;;;32350:10:0::3;::::0;:35:::3;::::0;27466:19:1;;32350:165:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32340:175;;32538:7;32530:34;;;::::0;-1:-1:-1;;;32530:34:0;;26884:2:1;32530:34:0::3;::::0;::::3;26866:21:1::0;26923:2;26903:18;;;26896:30;26962:16;26942:18;;;26935:44;26996:18;;32530:34:0::3;26682:338:1::0;32530:34:0::3;-1:-1:-1::0;31958:920:0::3;;;32640:1;32626:11;;:15;;;;;;;:::i;:::-;;;;;;;;32681:1;32656:21;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32711:11:0::3;::::0;32753:21:::3;::::0;-1:-1:-1;;;;;32789:19:0;::::3;;::::0;;;:8:::3;:19;::::0;;;;;;;:26;;-1:-1:-1;;32789:26:0::3;32811:4;32789:26;::::0;;32830:11:::3;:22:::0;;;;;:36;;;32711:11;;-1:-1:-1;32753:21:0;-1:-1:-1;31958:920:0::3;-1:-1:-1::0;;;;;32920:15:0;::::3;8499:42;32920:15;32916:102;;;32953:34;::::0;;;:19:::3;:34;::::0;;;;:53;;-1:-1:-1;;32953:53:0::3;::::0;::::3;::::0;;32916:102:::3;33028:34;::::0;;;:19:::3;:34;::::0;;;;:48;;-1:-1:-1;;;;;33148:61:0;;::::3;::::0;::::3;::::0;;;;;;;;33087:50;33148:61;;;33072:4:::3;33220:42:::0;;;::::3;:59:::0;;;;;::::3;-1:-1:-1::0;;33220:59:0;;::::3;::::0;;;::::3;::::0;;;33365:24:::3;33383:5:::0;33365:17:::3;:24::i;:::-;33315:34;::::0;;;:19:::3;:34;::::0;;;;:46:::3;;:74:::0;;:46;;:34;:74:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;33450:24:0::3;::::0;-1:-1:-1;33468:5:0;33450:17:::3;:24::i;:::-;33400:34;::::0;;;:19:::3;:34;::::0;;;;:46:::3;;:74:::0;;:46;;:34;:74:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;33485:34:0::3;::::0;;;:19:::3;:34;::::0;;;;;;;:47:::3;::::0;::::3;:61:::0;;;33603:1:::3;33557:43;::::0;;::::3;:47:::0;;;33646:24;;;:11:::3;:24:::0;;;;;:40;;-1:-1:-1;;33646:40:0::3;::::0;;::::3;::::0;;33697:42:::3;;:51:::0;;33743:5;;33485:34;33697:51:::3;::::0;33743:5;;33697:51:::3;:::i;:::-;;;;;;;;33798:10;-1:-1:-1::0;;;;;33798:22:0::3;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33759:11;:24;33771:11;33759:24;;;;;;;;;;;:36;;:63;;;;33865:10;-1:-1:-1::0;;;;;33865:15:0::3;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33833:11;:24;33845:11;33833:24;;;;;;;;;;;:29;;:49;;;;33927:10;-1:-1:-1::0;;;;;33927:17:0::3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33893:24;::::0;;;:11:::3;:24;::::0;;;;:31:::3;::::0;::::3;:53:::0;;;;33957:34:::3;::::0;::::3;:41:::0;;-1:-1:-1;;;;;34009:51:0;::::3;33957:41;34009:51;-1:-1:-1::0;;34009:51:0;;;;33994:4:::3;34009:51:::0;;;34145:46:::3;;:62:::0;;;34260:24:::3;34278:5:::0;34260:17:::3;:24::i;:::-;34252:32;::::0;:5;:32:::3;:::i;:::-;-1:-1:-1::0;;;;;34218:28:0;::::3;;::::0;;;:17:::3;:28;::::0;;;;:68;;:28;;;:68:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;34337:24:0::3;::::0;-1:-1:-1;34355:5:0;34337:17:::3;:24::i;:::-;34329:32;::::0;:5;:32:::3;:::i;:::-;-1:-1:-1::0;;;;;34297:26:0;::::3;;::::0;;;:17:::3;:26;::::0;;;;:66;;:26;;;:66:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;10106:6:0::1;:14:::0;;-1:-1:-1;;10106:14:0::1;::::0;;-1:-1:-1;;;;;;;;;;31219:3154:0:o;10909:91::-;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;10973:11:::1;:19:::0;;;::::1;;;;-1:-1:-1::0;;10973:19:0;;::::1;::::0;;;::::1;::::0;;10909:91::o;27843:596::-;27969:15;28018:1;28005:10;:14;27997:63;;;;-1:-1:-1;;;27997:63:0;;17681:2:1;27997:63:0;;;17663:21:1;17720:2;17700:18;;;17693:30;17759:34;17739:18;;;17732:62;17830:6;17810:18;;;17803:34;17854:19;;27997:63:0;17479:400:1;27997:63:0;28096:1;28079:14;:18;:41;;;;;28119:1;28101:15;:19;28079:41;28071:87;;;;-1:-1:-1;;;28071:87:0;;24742:2:1;28071:87:0;;;24724:21:1;24781:2;24761:18;;;24754:30;24820:34;24800:18;;;24793:62;24891:3;24871:18;;;24864:31;24912:19;;28071:87:0;24540:397:1;28071:87:0;28169:24;28196:19;:10;28211:3;28196:14;:19::i;:::-;28169:46;-1:-1:-1;28226:14:0;28243:40;28169:46;28267:15;28243:23;:40::i;:::-;28226:57;-1:-1:-1;28294:16:0;28313:49;28342:19;28313:24;:14;28332:4;28313:18;:24::i;:::-;:28;;:49::i;:::-;28294:68;-1:-1:-1;28383:23:0;28294:68;28383:9;:23;:::i;:::-;28373:33;27843:596;-1:-1:-1;;;;;;;27843:596:0:o;26653:264::-;10462:10;26744:4;10454:19;;;:7;:19;;;;;;26744:4;;10454:19;;10446:28;;;;;;26779:38:::1;26806:6;26814:2;26779:26;:38::i;:::-;26771:76;;;::::0;-1:-1:-1;;;26771:76:0;;23028:2:1;26771:76:0::1;::::0;::::1;23010:21:1::0;23067:2;23047:18;;;23040:30;23106:27;23086:18;;;23079:55;23151:18;;26771:76:0::1;22826:349:1::0;26771:76:0::1;26865:21;::::0;;;:13:::1;:21;::::0;;;;;;;:44;;;;;::::1;::::0;::::1;15328:25:1::0;;;-1:-1:-1;;;;;26865:21:0;;::::1;::::0;:40:::1;::::0;15301:18:1;;26865:44:0::1;15182:177:1::0;10586:91:0;10462:10;10454:19;;;;:7;:19;;;;;;;;10446:28;;;;;;-1:-1:-1;;;;;10649:13:0::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;10649:20:0::1;10665:4;10649:20;::::0;;10586:91::o;27291:135::-;27357:7;27412:4;27394:14;;27386:7;:22;;;;:::i;:::-;27385:31;;;;:::i;27434:401::-;27505:7;;;27563:232;27579:19;;;;:11;:19;;;;;:24;;:31;27577:33;;27563:232;;;27678:19;;;;:11;:19;;;;;:24;;:27;;27707:3;;27678:24;27703:1;;27678:27;;;;;;:::i;:::-;;;;;;;;;27672:3;:33;;;;:::i;:::-;27671:39;;;;:::i;:::-;27632:19;;;;:11;:19;;;;;;;;:35;;;:32;;:35;;;;;:78;;:35;;:19;:78;;;;;:::i;:::-;;;;-1:-1:-1;;27751:19:0;;;;:11;:19;;;;;:24;;:27;;27780:3;;27751:24;27776:1;;27751:27;;;;;;:::i;:::-;;;;;;;;;27745:3;:33;;;;:::i;:::-;27744:39;;;;:::i;:::-;27725:58;;;;:::i;:::-;;-1:-1:-1;27612:3:0;;;;:::i;:::-;;;;27563:232;;;-1:-1:-1;27812:15:0;27434:401;-1:-1:-1;;;27434:401:0:o;1650:98::-;1708:7;1735:5;1739:1;1735;:5;:::i;:::-;1728:12;1650:98;-1:-1:-1;;;1650:98:0:o;1438:::-;1496:7;1523:5;1527:1;1523;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:670:1;79:5;132:3;125:4;117:6;113:17;109:27;99:55;;150:1;147;140:12;99:55;179:6;173:13;205:4;229:60;245:43;285:2;245:43;:::i;:::-;229:60;:::i;:::-;311:3;335:2;330:3;323:15;363:2;358:3;354:12;347:19;;398:2;390:6;386:15;450:3;445:2;439;436:1;432:10;424:6;420:23;416:32;413:41;410:61;;;467:1;464;457:12;410:61;489:1;499:156;513:2;510:1;507:9;499:156;;;570:10;;558:23;;601:12;;;;633;;;;531:1;524:9;499:156;;;-1:-1:-1;673:5:1;;14:670;-1:-1:-1;;;;;;;14:670:1:o;689:188::-;768:13;;821:30;810:42;;800:53;;790:81;;867:1;864;857:12;882:247;941:6;994:2;982:9;973:7;969:23;965:32;962:52;;;1010:1;1007;1000:12;962:52;1049:9;1036:23;1068:31;1093:5;1068:31;:::i;1134:251::-;1204:6;1257:2;1245:9;1236:7;1232:23;1228:32;1225:52;;;1273:1;1270;1263:12;1225:52;1305:9;1299:16;1324:31;1349:5;1324:31;:::i;1390:388::-;1458:6;1466;1519:2;1507:9;1498:7;1494:23;1490:32;1487:52;;;1535:1;1532;1525:12;1487:52;1574:9;1561:23;1593:31;1618:5;1593:31;:::i;:::-;1643:5;-1:-1:-1;1700:2:1;1685:18;;1672:32;1713:33;1672:32;1713:33;:::i;:::-;1765:7;1755:17;;;1390:388;;;;;:::o;1783:525::-;1869:6;1877;1885;1893;1946:3;1934:9;1925:7;1921:23;1917:33;1914:53;;;1963:1;1960;1953:12;1914:53;2002:9;1989:23;2021:31;2046:5;2021:31;:::i;:::-;2071:5;-1:-1:-1;2128:2:1;2113:18;;2100:32;2141:33;2100:32;2141:33;:::i;:::-;1783:525;;2193:7;;-1:-1:-1;;;;2247:2:1;2232:18;;2219:32;;2298:2;2283:18;2270:32;;1783:525::o;2313:315::-;2381:6;2389;2442:2;2430:9;2421:7;2417:23;2413:32;2410:52;;;2458:1;2455;2448:12;2410:52;2497:9;2484:23;2516:31;2541:5;2516:31;:::i;:::-;2566:5;2618:2;2603:18;;;;2590:32;;-1:-1:-1;;;2313:315:1:o;2633:241::-;2689:6;2742:2;2730:9;2721:7;2717:23;2713:32;2710:52;;;2758:1;2755;2748:12;2710:52;2797:9;2784:23;2816:28;2838:5;2816:28;:::i;2879:245::-;2946:6;2999:2;2987:9;2978:7;2974:23;2970:32;2967:52;;;3015:1;3012;3005:12;2967:52;3047:9;3041:16;3066:28;3088:5;3066:28;:::i;3129:382::-;3194:6;3202;3255:2;3243:9;3234:7;3230:23;3226:32;3223:52;;;3271:1;3268;3261:12;3223:52;3310:9;3297:23;3329:28;3351:5;3329:28;:::i;3516:1265::-;3651:6;3659;3667;3720:2;3708:9;3699:7;3695:23;3691:32;3688:52;;;3736:1;3733;3726:12;3688:52;3768:9;3762:16;3787:28;3809:5;3787:28;:::i;:::-;3834:5;3824:15;;;3858:2;3904;3893:9;3889:18;3883:25;3927:18;3968:2;3960:6;3957:14;3954:34;;;3984:1;3981;3974:12;3954:34;4022:6;4011:9;4007:22;3997:32;;4067:7;4060:4;4056:2;4052:13;4048:27;4038:55;;4089:1;4086;4079:12;4038:55;4118:2;4112:9;4141:60;4157:43;4197:2;4157:43;:::i;4141:60::-;4223:3;4247:2;4242:3;4235:15;4275:2;4270:3;4266:12;4259:19;;4306:2;4302;4298:11;4354:7;4349:2;4343;4340:1;4336:10;4332:2;4328:19;4324:28;4321:41;4318:61;;;4375:1;4372;4365:12;4318:61;4397:1;4388:10;;4407:156;4421:2;4418:1;4415:9;4407:156;;;4478:10;;4466:23;;4439:1;4432:9;;;;;4509:12;;;;4541;;4407:156;;;-1:-1:-1;4633:2:1;4618:18;;4612:25;4582:5;;-1:-1:-1;4612:25:1;-1:-1:-1;;;4649:16:1;;;4646:36;;;4678:1;4675;4668:12;4646:36;;;4701:74;4767:7;4756:8;4745:9;4741:24;4701:74;:::i;:::-;4691:84;;;3516:1265;;;;;:::o;4786:306::-;4862:6;4870;4923:2;4911:9;4902:7;4898:23;4894:32;4891:52;;;4939:1;4936;4929:12;4891:52;4971:9;4965:16;4990:28;5012:5;4990:28;:::i;:::-;5082:2;5067:18;;;;5061:25;5037:5;;5061:25;;-1:-1:-1;;;4786:306:1:o;5097:184::-;5167:6;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;-1:-1:-1;5259:16:1;;5097:184;-1:-1:-1;5097:184:1:o;5286:820::-;5399:6;5407;5415;5423;5431;5484:3;5472:9;5463:7;5459:23;5455:33;5452:53;;;5501:1;5498;5491:12;5452:53;5537:9;5524:23;5514:33;;5594:2;5583:9;5579:18;5566:32;5556:42;;5645:2;5634:9;5630:18;5617:32;5607:42;;5700:2;5689:9;5685:18;5672:32;5723:18;5764:2;5756:6;5753:14;5750:34;;;5780:1;5777;5770:12;5750:34;5818:6;5807:9;5803:22;5793:32;;5863:7;5856:4;5852:2;5848:13;5844:27;5834:55;;5885:1;5882;5875:12;5834:55;5925:2;5912:16;5951:2;5943:6;5940:14;5937:34;;;5967:1;5964;5957:12;5937:34;6020:7;6015:2;6005:6;6002:1;5998:14;5994:2;5990:23;5986:32;5983:45;5980:65;;;6041:1;6038;6031:12;5980:65;5286:820;;;;-1:-1:-1;5286:820:1;;-1:-1:-1;6072:2:1;6064:11;;6094:6;5286:820;-1:-1:-1;;;5286:820:1:o;6111:450::-;6198:6;6206;6214;6267:2;6255:9;6246:7;6242:23;6238:32;6235:52;;;6283:1;6280;6273:12;6235:52;6306:40;6336:9;6306:40;:::i;:::-;6296:50;;6365:49;6410:2;6399:9;6395:18;6365:49;:::i;:::-;6355:59;;6457:2;6446:9;6442:18;6436:25;6501:10;6494:5;6490:22;6483:5;6480:33;6470:61;;6527:1;6524;6517:12;6470:61;6550:5;6540:15;;;6111:450;;;;;:::o;6566:180::-;6625:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:52;;;6694:1;6691;6684:12;6646:52;-1:-1:-1;6717:23:1;;6566:180;-1:-1:-1;6566:180:1:o;6940:315::-;7008:6;7016;7069:2;7057:9;7048:7;7044:23;7040:32;7037:52;;;7085:1;7082;7075:12;7037:52;7121:9;7108:23;7098:33;;7181:2;7170:9;7166:18;7153:32;7194:31;7219:5;7194:31;:::i;7260:525::-;7346:6;7354;7362;7370;7423:3;7411:9;7402:7;7398:23;7394:33;7391:53;;;7440:1;7437;7430:12;7391:53;7476:9;7463:23;7453:33;;7536:2;7525:9;7521:18;7508:32;7549:31;7574:5;7549:31;:::i;:::-;7599:5;-1:-1:-1;7656:2:1;7641:18;;7628:32;7669:33;7628:32;7669:33;:::i;:::-;7260:525;;;;-1:-1:-1;7721:7:1;;7775:2;7760:18;7747:32;;-1:-1:-1;;7260:525:1:o;7790:519::-;7873:6;7881;7889;7897;7950:3;7938:9;7929:7;7925:23;7921:33;7918:53;;;7967:1;7964;7957:12;7918:53;8003:9;7990:23;7980:33;;8063:2;8052:9;8048:18;8035:32;8076:31;8101:5;8076:31;:::i;:::-;8126:5;-1:-1:-1;8178:2:1;8163:18;;8150:32;;-1:-1:-1;8234:2:1;8219:18;;8206:32;8247:30;8206:32;8247:30;:::i;:::-;7790:519;;;;-1:-1:-1;7790:519:1;;-1:-1:-1;;7790:519:1:o;8314:309::-;8379:6;8387;8440:2;8428:9;8419:7;8415:23;8411:32;8408:52;;;8456:1;8453;8446:12;8408:52;8492:9;8479:23;8469:33;;8552:2;8541:9;8537:18;8524:32;8565:28;8587:5;8565:28;:::i;8628:248::-;8696:6;8704;8757:2;8745:9;8736:7;8732:23;8728:32;8725:52;;;8773:1;8770;8763:12;8725:52;-1:-1:-1;;8796:23:1;;;8866:2;8851:18;;;8838:32;;-1:-1:-1;8628:248:1:o;9134:519::-;9217:6;9225;9233;9241;9294:3;9282:9;9273:7;9269:23;9265:33;9262:53;;;9311:1;9308;9301:12;9262:53;9347:9;9334:23;9324:33;;9404:2;9393:9;9389:18;9376:32;9366:42;;9458:2;9447:9;9443:18;9430:32;9471:31;9496:5;9471:31;:::i;:::-;9521:5;-1:-1:-1;9578:2:1;9563:18;;9550:32;9591:30;9550:32;9591:30;:::i;9658:316::-;9735:6;9743;9751;9804:2;9792:9;9783:7;9779:23;9775:32;9772:52;;;9820:1;9817;9810:12;9772:52;-1:-1:-1;;9843:23:1;;;9913:2;9898:18;;9885:32;;-1:-1:-1;9964:2:1;9949:18;;;9936:32;;9658:316;-1:-1:-1;9658:316:1:o;9979:273::-;10047:6;10100:2;10088:9;10079:7;10075:23;10071:32;10068:52;;;10116:1;10113;10106:12;10068:52;10148:9;10142:16;10198:4;10191:5;10187:16;10180:5;10177:27;10167:55;;10218:1;10215;10208:12;10257:435;10310:3;10348:5;10342:12;10375:6;10370:3;10363:19;10401:4;10430:2;10425:3;10421:12;10414:19;;10467:2;10460:5;10456:14;10488:1;10498:169;10512:6;10509:1;10506:13;10498:169;;;10573:13;;10561:26;;10607:12;;;;10642:15;;;;10534:1;10527:9;10498:169;;;-1:-1:-1;10683:3:1;;10257:435;-1:-1:-1;;;;;10257:435:1:o;11633:669::-;-1:-1:-1;;;;;11956:6:1;11952:55;11941:9;11934:74;12044:6;12039:2;12028:9;12024:18;12017:34;12087:6;12082:2;12071:9;12067:18;12060:34;12130:3;12125:2;12114:9;12110:18;12103:31;11915:4;12151:57;12203:3;12192:9;12188:19;12180:6;12151:57;:::i;:::-;12239:3;12224:19;;12217:35;;;;-1:-1:-1;12283:3:1;12268:19;12261:35;12143:65;11633:669;-1:-1:-1;;;;11633:669:1:o;12811:885::-;13104:6;13097:14;13090:22;13079:9;13072:41;13053:4;13132:2;13170;13165;13154:9;13150:18;13143:30;13196:56;13248:2;13237:9;13233:18;13225:6;13196:56;:::i;:::-;13288:22;;;13283:2;13268:18;;13261:50;13360:13;;13382:22;;;13458:15;;;;13420;;;13491:1;13501:169;13515:6;13512:1;13509:13;13501:169;;;13576:13;;13564:26;;13645:15;;;;13610:12;;;;13537:1;13530:9;13501:169;;;-1:-1:-1;13687:3:1;;12811:885;-1:-1:-1;;;;;;;;12811:885:1:o;28739:275::-;28810:2;28804:9;28875:2;28856:13;;-1:-1:-1;;28852:27:1;28840:40;;28910:18;28895:34;;28931:22;;;28892:62;28889:88;;;28957:18;;:::i;:::-;28993:2;28986:22;28739:275;;-1:-1:-1;28739:275:1:o;29019:183::-;29079:4;29112:18;29104:6;29101:30;29098:56;;;29134:18;;:::i;:::-;-1:-1:-1;29179:1:1;29175:14;29191:4;29171:25;;29019:183::o;29207:128::-;29247:3;29278:1;29274:6;29271:1;29268:13;29265:39;;;29284:18;;:::i;:::-;-1:-1:-1;29320:9:1;;29207:128::o;29340:274::-;29380:1;29406;29396:189;;-1:-1:-1;;;29438:1:1;29431:88;29542:4;29539:1;29532:15;29570:4;29567:1;29560:15;29396:189;-1:-1:-1;29599:9:1;;29340:274::o;29619:422::-;29708:1;29751:5;29708:1;29765:270;29786:7;29776:8;29773:21;29765:270;;;29845:4;29841:1;29837:6;29833:17;29827:4;29824:27;29821:53;;;29854:18;;:::i;:::-;29904:7;29894:8;29890:22;29887:55;;;29924:16;;;;29887:55;30003:22;;;;29963:15;;;;29765:270;;;29769:3;29619:422;;;;;:::o;30046:140::-;30104:5;30133:47;30174:4;30164:8;30160:19;30154:4;30240:5;30270:8;30260:80;;-1:-1:-1;30311:1:1;30325:5;;30260:80;30359:4;30349:76;;-1:-1:-1;30396:1:1;30410:5;;30349:76;30441:4;30459:1;30454:59;;;;30527:1;30522:130;;;;30434:218;;30454:59;30484:1;30475:10;;30498:5;;;30522:130;30559:3;30549:8;30546:17;30543:43;;;30566:18;;:::i;:::-;-1:-1:-1;;30622:1:1;30608:16;;30637:5;;30434:218;;30736:2;30726:8;30723:16;30717:3;30711:4;30708:13;30704:36;30698:2;30688:8;30685:16;30680:2;30674:4;30671:12;30667:35;30664:77;30661:159;;;-1:-1:-1;30773:19:1;;;30805:5;;30661:159;30852:34;30877:8;30871:4;30852:34;:::i;:::-;30922:6;30918:1;30914:6;30910:19;30901:7;30898:32;30895:58;;;30933:18;;:::i;:::-;30971:20;;30191:806;-1:-1:-1;;;30191:806:1:o;31002:168::-;31042:7;31108:1;31104;31100:6;31096:14;31093:1;31090:21;31085:1;31078:9;31071:17;31067:45;31064:71;;;31115:18;;:::i;:::-;-1:-1:-1;31155:9:1;;31002:168::o;31175:125::-;31215:4;31243:1;31240;31237:8;31234:34;;;31248:18;;:::i;:::-;-1:-1:-1;31285:9:1;;31175:125::o;31305:135::-;31344:3;-1:-1:-1;;31365:17:1;;31362:43;;;31385:18;;:::i;:::-;-1:-1:-1;31432:1:1;31421:13;;31305:135::o;31445:184::-;-1:-1:-1;;;31494:1:1;31487:88;31594:4;31591:1;31584:15;31618:4;31615:1;31608:15;31634:184;-1:-1:-1;;;31683:1:1;31676:88;31783:4;31780:1;31773:15;31807:4;31804:1;31797:15;31823:184;-1:-1:-1;;;31872:1:1;31865:88;31972:4;31969:1;31962:15;31996:4;31993:1;31986:15;32012:154;-1:-1:-1;;;;;32091:5:1;32087:54;32080:5;32077:65;32067:93;;32156:1;32153;32146:12;32067:93;32012:154;:::o;32171:118::-;32257:5;32250:13;32243:21;32236:5;32233:32;32223:60;;32279:1;32276;32269:12

Swarm Source

ipfs://ae113f033d572c1704e39776cb58813cb9bc37064417aa6da721efdaed84bde9

Block Transaction Difficulty 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
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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