Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 8,770 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
SELL | 20561033 | 99 days ago | IN | 0 ETH | 0.00029431 | ||||
SELL | 20561030 | 99 days ago | IN | 0 ETH | 0.00022506 | ||||
SELL | 20561026 | 99 days ago | IN | 0 ETH | 0.00023494 | ||||
SELL | 20561020 | 99 days ago | IN | 0 ETH | 0.00023055 | ||||
BUY | 20453320 | 114 days ago | IN | 0 ETH | 0.00004513 | ||||
BUY | 20453213 | 114 days ago | IN | 0 ETH | 0.00004513 | ||||
SELL | 20109805 | 162 days ago | IN | 0 ETH | 0.00051257 | ||||
SELL | 20109784 | 162 days ago | IN | 0 ETH | 0.00051257 | ||||
SELL | 20109773 | 162 days ago | IN | 0 ETH | 0.00051257 | ||||
SELL | 19944075 | 185 days ago | IN | 0 ETH | 0.00083705 | ||||
SELL | 19944071 | 185 days ago | IN | 0 ETH | 0.00083223 | ||||
SELL | 19944063 | 185 days ago | IN | 0 ETH | 0.00086039 | ||||
SELL | 19944050 | 185 days ago | IN | 0 ETH | 0.00091837 | ||||
SELL | 19944041 | 185 days ago | IN | 0 ETH | 0.00096805 | ||||
SELL | 19944020 | 185 days ago | IN | 0 ETH | 0.00075503 | ||||
SELL | 19944007 | 185 days ago | IN | 0 ETH | 0.00099764 | ||||
BUY | 19118891 | 301 days ago | IN | 0 ETH | 0.0027087 | ||||
SELL | 18385974 | 404 days ago | IN | 0 ETH | 0.00193226 | ||||
SELL | 18385942 | 404 days ago | IN | 0 ETH | 0.00168702 | ||||
SELL | 18385936 | 404 days ago | IN | 0 ETH | 0.00187103 | ||||
SELL | 18385930 | 404 days ago | IN | 0 ETH | 0.00169499 | ||||
SELL | 18385925 | 404 days ago | IN | 0 ETH | 0.00168731 | ||||
SELL | 18385919 | 404 days ago | IN | 0 ETH | 0.00172753 | ||||
SELL | 18385913 | 404 days ago | IN | 0 ETH | 0.00169084 | ||||
SELL | 18385908 | 404 days ago | IN | 0 ETH | 0.00182204 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FEGwETH
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-01 */ pragma solidity 0.7.6; // SPDX-License-Identifier: UNLICENSED /* * Must wrap your ETH for fETH to use FEGex DEX Built for fETH - FEG Wapped ETH - Built in 1% frictionless rewards of ETH! Stake ETH with fETHand earn rewards! */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } contract FSilver { function getColor() external pure returns (bytes32) { return bytes32("BRONZE"); } } contract FConst is FSilver, ReentrancyGuard { uint public constant BASE = 10**18; uint public constant MIN_BOUND_TOKENS = 2; uint public constant MAX_BOUND_TOKENS = 8; uint public constant MIN_FEE = 2000000000000000; uint public constant MAX_FEE = 2000000000000000; // FREE BUYS uint public constant EXIT_FEE = BASE / 200; uint public constant DEFAULT_RESERVES_RATIO = 0; uint public constant MIN_WEIGHT = BASE; uint public constant MAX_WEIGHT = BASE * 50; uint public constant MAX_TOTAL_WEIGHT = BASE * 50; uint public constant MIN_BALANCE = BASE / 10**12; uint public constant INIT_POOL_SUPPLY = BASE * 100; uint public SM = 10; uint public M1 = 10; address public FEGstake = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; uint public constant MIN_BPOW_BASE = 1 wei; uint public constant MAX_BPOW_BASE = (2 * BASE) - 1 wei; uint public constant BPOW_PRECISION = BASE / 10**10; uint public constant MAX_IN_RATIO = BASE / 2; uint public constant MAX_OUT_RATIO = (BASE / 3) + 1 wei; uint public MAX_SELL_RATIO = BASE / SM; uint public MAX_1_RATIO = BASE / M1; } contract FNum is ReentrancyGuard, FConst { function btoi(uint a) internal pure returns (uint) { return a / BASE; } function bfloor(uint a) internal pure returns (uint) { return btoi(a) * BASE; } function badd(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "ERR_ADD_OVERFLOW"); return c; } function bsub(uint a, uint b) internal pure returns (uint) { (uint c, bool flag) = bsubSign(a, b); require(!flag, "ERR_SUB_UNDERFLOW"); return c; } function bsubSign(uint a, uint b) internal pure returns (uint, bool) { if (a >= b) { return (a - b, false); } else { return (b - a, true); } } function bmul(uint a, uint b) internal pure returns (uint) { uint c0 = a * b; require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW"); uint c1 = c0 + (BASE / 2); require(c1 >= c0, "ERR_MUL_OVERFLOW"); uint c2 = c1 / BASE; return c2; } function bdiv(uint a, uint b) internal pure returns (uint) { require(b != 0, "ERR_DIV_ZERO"); uint c0 = a * BASE; require(a == 0 || c0 / a == BASE, "ERR_DIV_INTERNAL"); // bmul overflow uint c1 = c0 + (b / 2); require(c1 >= c0, "ERR_DIV_INTERNAL"); // badd require uint c2 = c1 / b; return c2; } // DSMath.wpow function bpowi(uint a, uint n) internal pure returns (uint) { uint z = n % 2 != 0 ? a : BASE; for (n /= 2; n != 0; n /= 2) { a = bmul(a, a); if (n % 2 != 0) { z = bmul(z, a); } } return z; } function bpow(uint base, uint exp) internal pure returns (uint) { require(base >= MIN_BPOW_BASE, "ERR_BPOW_BASE_TOO_LOW"); require(base <= MAX_BPOW_BASE, "ERR_BPOW_BASE_TOO_HIGH"); uint whole = bfloor(exp); uint remain = bsub(exp, whole); uint wholePow = bpowi(base, btoi(whole)); if (remain == 0) { return wholePow; } uint partialResult = bpowApprox(base, remain, BPOW_PRECISION); return bmul(wholePow, partialResult); } function bpowApprox(uint base, uint exp, uint precision) internal pure returns (uint) { // term 0: uint a = exp; (uint x, bool xneg) = bsubSign(base, BASE); uint term = BASE; uint sum = term; bool negative = false; for (uint i = 1; term >= precision; i++) { uint bigK = i * BASE; (uint c, bool cneg) = bsubSign(a, bsub(bigK, BASE)); term = bmul(term, bmul(c, x)); term = bdiv(term, bigK); if (term == 0) break; if (xneg) negative = !negative; if (cneg) negative = !negative; if (negative) { sum = bsub(sum, term); } else { sum = badd(sum, term); } } return sum; } } contract FMath is FSilver, FConst, FNum { function calcSpotPrice( uint tokenBalanceIn, uint tokenWeightIn, uint tokenBalanceOut, uint tokenWeightOut, uint swapFee ) public pure returns (uint spotPrice) { uint numer = bdiv(tokenBalanceIn, tokenWeightIn); uint denom = bdiv(tokenBalanceOut, tokenWeightOut); uint ratio = bdiv(numer, denom); uint scale = bdiv(BASE, bsub(BASE, swapFee)); return (spotPrice = bmul(ratio, scale)); } function calcOutGivenIn( uint tokenBalanceIn, uint tokenWeightIn, uint tokenBalanceOut, uint tokenWeightOut, uint tokenAmountIn, uint swapFee ) public pure returns (uint tokenAmountOut, uint tokenInFee) { uint weightRatio = bdiv(tokenWeightIn, tokenWeightOut); uint adjustedIn = bsub(BASE, swapFee); adjustedIn = bmul(tokenAmountIn, adjustedIn); uint y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn)); uint foo = bpow(y, weightRatio); uint bar = bsub(BASE, foo); tokenAmountOut = bmul(tokenBalanceOut, bar); tokenInFee = bsub(tokenAmountIn, adjustedIn); return (tokenAmountOut, tokenInFee); } function calcInGivenOut( uint tokenBalanceIn, uint tokenWeightIn, uint tokenBalanceOut, uint tokenWeightOut, uint tokenAmountOut, uint swapFee ) public pure returns (uint tokenAmountIn, uint tokenInFee) { uint weightRatio = bdiv(tokenWeightOut, tokenWeightIn); uint diff = bsub(tokenBalanceOut, tokenAmountOut); uint y = bdiv(tokenBalanceOut, diff); uint foo = bpow(y, weightRatio); foo = bsub(foo, BASE); foo = bmul(tokenBalanceIn, foo); tokenAmountIn = bsub(BASE, swapFee); tokenAmountIn = bdiv(foo, tokenAmountIn); tokenInFee = bdiv(foo, BASE); tokenInFee = bsub(tokenAmountIn, tokenInFee); return (tokenAmountIn, tokenInFee); } function calcPoolOutGivenSingleIn( uint tokenBalanceIn, uint tokenWeightIn, uint poolSupply, uint totalWeight, uint tokenAmountIn, uint swapFee, uint reservesRatio ) public pure returns (uint poolAmountOut, uint reserves) { uint normalizedWeight = bdiv(tokenWeightIn, totalWeight); uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee); uint tokenAmountInAfterFee = bmul(tokenAmountIn, bsub(BASE, zaz)); reserves = calcReserves(tokenAmountIn, tokenAmountInAfterFee, reservesRatio); uint newTokenBalanceIn = badd(tokenBalanceIn, tokenAmountInAfterFee); uint tokenInRatio = bdiv(newTokenBalanceIn, tokenBalanceIn); uint poolRatio = bpow(tokenInRatio, normalizedWeight); uint newPoolSupply = bmul(poolRatio, poolSupply); poolAmountOut = bsub(newPoolSupply, poolSupply); return (poolAmountOut, reserves); } function calcSingleOutGivenPoolIn( uint tokenBalanceOut, uint tokenWeightOut, uint poolSupply, uint totalWeight, uint poolAmountIn, uint swapFee ) public pure returns (uint tokenAmountOut) { uint normalizedWeight = bdiv(tokenWeightOut, totalWeight); uint poolAmountInAfterExitFee = bmul(poolAmountIn, bsub(BASE, EXIT_FEE)); uint newPoolSupply = bsub(poolSupply, poolAmountInAfterExitFee); uint poolRatio = bdiv(newPoolSupply, poolSupply); uint tokenOutRatio = bpow(poolRatio, bdiv(BASE, normalizedWeight)); uint newTokenBalanceOut = bmul(tokenOutRatio, tokenBalanceOut); uint tokenAmountOutBeforeSwapFee = bsub(tokenBalanceOut, newTokenBalanceOut); uint zaz = bmul(bsub(BASE, normalizedWeight), swapFee); tokenAmountOut = bmul(tokenAmountOutBeforeSwapFee, bsub(BASE, zaz)); return tokenAmountOut; } function calcPoolInGivenSingleOut( uint tokenBalanceOut, uint tokenWeightOut, uint poolSupply, uint totalWeight, uint tokenAmountOut, uint swapFee, uint reservesRatio ) public pure returns (uint poolAmountIn, uint reserves) { uint normalizedWeight = bdiv(tokenWeightOut, totalWeight); uint zar = bmul(bsub(BASE, normalizedWeight), swapFee); uint tokenAmountOutBeforeSwapFee = bdiv(tokenAmountOut, bsub(BASE, zar)); reserves = calcReserves(tokenAmountOutBeforeSwapFee, tokenAmountOut, reservesRatio); uint newTokenBalanceOut = bsub(tokenBalanceOut, tokenAmountOutBeforeSwapFee); uint tokenOutRatio = bdiv(newTokenBalanceOut, tokenBalanceOut); uint poolRatio = bpow(tokenOutRatio, normalizedWeight); uint newPoolSupply = bmul(poolRatio, poolSupply); uint poolAmountInAfterExitFee = bsub(poolSupply, newPoolSupply); poolAmountIn = bdiv(poolAmountInAfterExitFee, bsub(BASE, EXIT_FEE)); return (poolAmountIn, reserves); } function calcReserves(uint amountWithFee, uint amountWithoutFee, uint reservesRatio) internal pure returns (uint reserves) { require(amountWithFee >= amountWithoutFee, "ERR_MATH_APPROX"); require(reservesRatio <= BASE, "ERR_INVALID_RESERVE"); uint swapFeeAndReserves = bsub(amountWithFee, amountWithoutFee); reserves = bmul(swapFeeAndReserves, reservesRatio); require(swapFeeAndReserves >= reserves, "ERR_MATH_APPROX"); } function calcReservesFromFee(uint fee, uint reservesRatio) internal pure returns (uint reserves) { require(reservesRatio <= BASE, "ERR_INVALID_RESERVE"); reserves = bmul(fee, reservesRatio); } } // Highly opinionated token implementation interface IERC20 { function totalSupply() external view returns (uint); function balanceOf(address whom) external view returns (uint); function allowance(address src, address dst) external view returns (uint); function approve(address dst, uint amt) external returns (bool); function transfer(address dst, uint amt) external returns (bool); function transferFrom( address src, address dst, uint amt ) external returns (bool); } contract FTokenBase is ReentrancyGuard, FNum { mapping(address => uint) internal _balance; mapping(address => mapping(address=>uint)) internal _allowance; uint internal _totalSupply; event Approval(address indexed src, address indexed dst, uint amt); event Transfer(address indexed src, address indexed dst, uint amt); function _mint(uint amt) internal { _balance[address(this)] = badd(_balance[address(this)], amt); _totalSupply = badd(_totalSupply, amt); emit Transfer(address(0), address(this), amt); } function _burn(uint amt) internal { require(_balance[address(this)] >= amt); _balance[address(this)] = bsub(_balance[address(this)], amt); _totalSupply = bsub(_totalSupply, amt); emit Transfer(address(this), address(0), amt); } function _move(address src, address dst, uint amt) internal { require(_balance[src] >= amt); _balance[src] = bsub(_balance[src], amt); _balance[dst] = badd(_balance[dst], amt); emit Transfer(src, dst, amt); } function _push(address to, uint amt) internal { _move(address(this), to, amt); } function _pull(address from, uint amt) internal { _move(from, address(this), amt); } } contract FToken is ReentrancyGuard, FTokenBase { string private _name = "FEGwETHpair"; string private _symbol = "FEGwETHLP"; uint8 private _decimals = 18; function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns(uint8) { return _decimals; } function allowance(address src, address dst) external view returns (uint) { return _allowance[src][dst]; } function balanceOf(address whom) external view returns (uint) { return _balance[whom]; } function totalSupply() public view returns (uint) { return _totalSupply; } function approve(address dst, uint amt) external returns (bool) { _allowance[msg.sender][dst] = amt; emit Approval(msg.sender, dst, amt); return true; } function increaseApproval(address dst, uint amt) external returns (bool) { _allowance[msg.sender][dst] = badd(_allowance[msg.sender][dst], amt); emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } function decreaseApproval(address dst, uint amt) external returns (bool) { uint oldValue = _allowance[msg.sender][dst]; if (amt > oldValue) { _allowance[msg.sender][dst] = 0; } else { _allowance[msg.sender][dst] = bsub(oldValue, amt); } emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } function transfer(address dst, uint amt) external returns (bool) { FEGwETH ulock; bool getlock = ulock.getUserLock(msg.sender); require(getlock == true, 'Liquidity is locked, you cannot removed liquidity until after lock time.'); _move(msg.sender, dst, amt); return true; } function transferFrom(address src, address dst, uint amt) external returns (bool) { require(msg.sender == src || amt <= _allowance[src][msg.sender]); FEGwETH ulock; bool getlock = ulock.getUserLock(msg.sender); require(getlock == true, 'Transfer is Locked '); _move(src, dst, amt); if (msg.sender != src && _allowance[src][msg.sender] != uint256(-1)) { _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt); emit Approval(msg.sender, dst, _allowance[src][msg.sender]); } return true; } } contract FEGwETH is FSilver, ReentrancyGuard, FToken, FMath { struct Record { bool bound; // is token bound to pool uint index; // private uint denorm; // denormalized weight uint balance; } struct userLock { bool setLock; // true = locked, false=unlocked uint unlockTime; } function getUserLock(address usr) public view returns(bool lock){ return _userlock[usr].setLock; } event LOG_SWAP( address indexed caller, address indexed tokenIn, address indexed tokenOut, uint256 tokenAmountIn, uint256 tokenAmountOut, uint256 reservesAmount ); event LOG_JOIN( address indexed caller, address indexed tokenIn, uint256 tokenAmountIn, uint256 reservesAmount ); event LOG_EXIT( address indexed caller, address indexed tokenOut, uint256 tokenAmountOut, uint256 reservesAmount ); event LOG_CLAIM_RESERVES( address indexed caller, address indexed tokenOut, uint256 tokenAmountOut ); event LOG_ADD_RESERVES( address indexed token, uint256 reservesAmount ); event LOG_CALL( bytes4 indexed sig, address indexed caller, bytes data ) anonymous; modifier _logs_() { emit LOG_CALL(msg.sig, msg.sender, msg.data); _; } modifier _lock_() { require(!_mutex); _mutex = true; _; _mutex = false; } modifier _viewlock_() { require(!_mutex); _; } bool private _mutex; address private _factory = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; // BFactory address to push token exitFee to address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; // has CONTROL role address private _poolOwner; address public fETH = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332; address public FEG = 0x389999216860AB8E0175387A0c90E5c52522C945; address public pairRewardPool = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; bool private _publicSwap; // true if PUBLIC can call SWAP functions // `setSwapFee` and `Launch' require CONTROL // `Launch` sets `PUBLIC can SWAP`, `PUBLIC can JOIN` uint private _swapFee; uint private _reservesRatio; bool private _launched; address[] private _tokens; mapping(address=>Record) private _records; mapping(address=>userLock) public _userlock; mapping(address=>uint) public totalReserves; mapping(address=>bool) public whiteListContract; uint private _totalWeight; constructor() { _poolOwner = msg.sender; _swapFee = MIN_FEE; _reservesRatio = DEFAULT_RESERVES_RATIO; _publicSwap = false; _launched = false; } function isContract(address account) internal view returns (bool) { if(IsWhiteListContract(account)) { return false; } bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } function addWhiteListContract(address _addy, bool boolean) public { require(msg.sender == _controller); require(_addy != address(0), "setting 0 address;;"); whiteListContract[_addy] = boolean; } function IsWhiteListContract(address _addy) public view returns(bool){ require(_addy != address(0), "setting 0 address;;"); return whiteListContract[_addy]; } modifier noContract() { require(isContract(msg.sender) == false, 'Unapproved contracts are not allowed to interact with the swap'); _; } function setMaxSellRatio(uint256 _amount) public { require(msg.sender == _poolOwner, "You do not have permission"); require (_amount > 0, "cannot turn off"); require (_amount <= 100, "cannot set under 1%"); SM = _amount; } function setMax1SideLiquidityRatio(uint256 _amount) public { require(msg.sender == _poolOwner, "You do not have permission"); require (_amount > 10, "cannot set over 10%"); require (_amount <= 200, "cannot set under 0.5%"); M1 = _amount; } function setStakePool(address _addy) public { require(msg.sender == _controller); FEGstake = _addy; } function setPairRewardPool(address _addy) public { require(msg.sender == _controller); pairRewardPool = _addy; } function isPublicSwap() external view returns (bool) { return _publicSwap; } function isBound(address t) external view returns (bool) { return _records[t].bound; } function getFinalTokens() external view _viewlock_ returns (address[] memory tokens) { require(_launched); return _tokens; } function getDenormalizedWeight(address token) external view _viewlock_ returns (uint) { require(_records[token].bound); return _records[token].denorm; } function getTotalDenormalizedWeight() external view _viewlock_ returns (uint) { return _totalWeight; } function getNormalizedWeight(address token) external view _viewlock_ returns (uint) { require(_records[token].bound); uint denorm = _records[token].denorm; return bdiv(denorm, _totalWeight); } function getBalance(address token) external view _viewlock_ returns (uint) { require(_records[token].bound); return _records[token].balance; } function getSwapFee() external view _viewlock_ returns (uint) { return _swapFee; } function getController() external view _viewlock_ returns (address) { return _controller; } function setController(address manager) external _logs_ _lock_ { require(msg.sender == _controller); _controller = manager; } function Launch() external _logs_ _lock_ { require(msg.sender == _poolOwner); require(!_launched); require(_tokens.length >= MIN_BOUND_TOKENS); _launched = true; _publicSwap = true; _mintPoolShare(INIT_POOL_SUPPLY); _pushPoolShare(msg.sender, INIT_POOL_SUPPLY); } function AddTokenInitial(address token, uint balance, uint denorm) external _logs_ // _lock_ Bind does not lock because it jumps to `rebind`, which does { require(msg.sender == _poolOwner); require(!_records[token].bound); require(!_launched); require(_tokens.length < MAX_BOUND_TOKENS); _records[token] = Record({ bound: true, index: _tokens.length, denorm: 0, // balance and denorm will be validated balance: 0 // and set by `rebind` //locktime: block.timestamp }); _tokens.push(token); rebind(token, balance * 98/100, denorm); } function AddfETHInitial(address token, uint balance, uint denorm) external _logs_ // _lock_ Bind does not lock because it jumps to `rebind`, which does { require(token == fETH); require(msg.sender == _poolOwner); require(!_records[token].bound); require(!_launched); require(_tokens.length < MAX_BOUND_TOKENS); _records[token] = Record({ bound: true, index: _tokens.length, denorm: 0, // balance and denorm will be validated balance: 0 // and set by `rebind` //locktime: block.timestamp }); _tokens.push(token); rebind(token, balance * 99/100, denorm); } function rebind(address token, uint balance, uint denorm) public _logs_ _lock_ { require(msg.sender == _poolOwner); require(_records[token].bound); require(!_launched); require(denorm >= MIN_WEIGHT); require(denorm <= MAX_WEIGHT); require(balance >= MIN_BALANCE); // Adjust the denorm and totalWeight uint oldWeight = _records[token].denorm; if (denorm > oldWeight) { _totalWeight = badd(_totalWeight, bsub(denorm, oldWeight)); require(_totalWeight <= MAX_TOTAL_WEIGHT); } else if (denorm < oldWeight) { _totalWeight = bsub(_totalWeight, bsub(oldWeight, denorm)); } _records[token].denorm = denorm; // Adjust the balance record and actual token balance uint oldBalance = _records[token].balance; _records[token].balance = balance; if (balance > oldBalance) { _pullUnderlying(token, msg.sender, bsub(balance, oldBalance)); } else if (balance < oldBalance) { // In this case liquidity is being withdrawn, so charge EXIT_FEE uint tokenBalanceWithdrawn = bsub(oldBalance, balance); uint tokenExitFee = bmul(tokenBalanceWithdrawn, EXIT_FEE); _pushUnderlying(token, msg.sender, bsub(tokenBalanceWithdrawn, tokenExitFee)); _pushUnderlying(token, _factory, tokenExitFee); } } function saveLostTokens(address token, uint amount) external _logs_ _lock_ { require(msg.sender == _controller); require(!_records[token].bound); uint bal = IERC20(token).balanceOf(address(this)); require(amount <= bal); _pushUnderlying(token, msg.sender, amount); } function getSpotPrice(address tokenIn, address tokenOut) external view _viewlock_ returns (uint spotPrice) { require(_records[tokenIn].bound, "ERR_NOT_BOUND"); require(_records[tokenOut].bound, "ERR_NOT_BOUND"); Record storage inRecord = _records[tokenIn]; Record storage outRecord = _records[tokenOut]; return calcSpotPrice(inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee); } function addBothLiquidity(uint poolAmountOut, uint[] calldata maxAmountsIn) external _logs_ _lock_ { require(_launched, "ERR_NOT_LAUNCHED"); uint poolTotal = totalSupply(); uint ratio = bdiv(poolAmountOut, poolTotal); require(ratio != 0, "ERR_MATH_APPROX"); for (uint i = 0; i < _tokens.length; i++) { address t = _tokens[i]; uint bal = _records[t].balance; uint tokenAmountIn = bmul(ratio, bal); require(tokenAmountIn != 0, "ERR_MATH_APPROX"); require(tokenAmountIn <= maxAmountsIn[i], "ERR_LIMIT_IN"); emit LOG_JOIN(msg.sender, t, tokenAmountIn, 0); _pullUnderlying(t, msg.sender, tokenAmountIn); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); } _mintPoolShare(poolAmountOut); _pushPoolShare(msg.sender, poolAmountOut); } function removeBothLiquidity(uint poolAmountIn, uint[] calldata minAmountsOut) external _logs_ _lock_ { require(_launched, "ERR_NOT_LAUNCHED"); userLock storage ulock = _userlock[msg.sender]; if(ulock.setLock == true) { require(ulock.unlockTime <= block.timestamp, "Liquidity is locked, you cannot removed liquidity until after lock time."); } uint poolTotal = totalSupply(); uint exitFee = bmul(poolAmountIn, EXIT_FEE); uint pAiAfterExitFee = bsub(poolAmountIn, exitFee); uint ratio = bdiv(pAiAfterExitFee, poolTotal); require(ratio != 0, "ERR_MATH_APPROX"); _pullPoolShare(msg.sender, poolAmountIn); _pushPoolShare(_factory, exitFee); _burnPoolShare(pAiAfterExitFee); for (uint i = 0; i < _tokens.length; i++) { address t = _tokens[i]; uint bal = _records[t].balance; uint tokenAmountOut = bmul(ratio, bal); require(tokenAmountOut != 0, "ERR_MATH_APPROX"); require(tokenAmountOut >= minAmountsOut[i], "ERR_LIMIT_OUT"); emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0); _pushUnderlying(t, msg.sender, tokenAmountOut); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); } } function BUY( address tokenIn, uint tokenAmountIn, address tokenOut, uint minAmountOut, uint maxPrice ) noContract external _logs_ _lock_ returns (uint tokenAmountOut, uint spotPriceAfter) { require(tokenIn == fETH, "Can only buy with fETH"); require(_records[tokenIn].bound, "ERR_NOT_BOUND"); require(_records[tokenOut].bound, "ERR_NOT_BOUND"); require(_publicSwap, "ERR_SWAP_NOT_PUBLIC"); Record storage inRecord = _records[address(tokenIn)]; Record storage outRecord = _records[address(tokenOut)]; require(tokenAmountIn <= bmul(inRecord.balance, MAX_IN_RATIO), "ERR_MAX_IN_RATIO"); uint spotPriceBefore = calcSpotPrice( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee ); require(spotPriceBefore <= maxPrice, "ERR_BAD_LIMIT_PRICE"); uint tokenInFee; (tokenAmountOut, tokenInFee) = calcOutGivenIn( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, tokenAmountIn * 99/100, _swapFee * 0 ); require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT"); uint reserves = calcReservesFromFee(tokenInFee, _reservesRatio); spotPriceAfter = calcSpotPrice( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee ); require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX"); require(spotPriceAfter <= maxPrice, "ERR_LIMIT_PRICE"); require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), "ERR_MATH_APPROX"); emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn * 99/100, tokenAmountOut, reserves); totalReserves[address(tokenIn)] = badd(totalReserves[address(tokenIn)], reserves); emit LOG_ADD_RESERVES(address(tokenIn), reserves); _pullUnderlying(tokenIn, msg.sender, tokenAmountIn); _pushUnderlying(tokenOut, msg.sender, tokenAmountOut); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); return (tokenAmountOut, spotPriceAfter); } function SELL( address tokenIn, uint tokenAmountIn, address tokenOut, uint minAmountOut, uint maxPrice ) noContract external _logs_ _lock_ returns (uint tokenAmountOut, uint spotPriceAfter) { require(tokenIn == FEG, "Can only sell FEG"); require(_records[tokenIn].bound, "ERR_NOT_BOUND"); require(_records[tokenOut].bound, "ERR_NOT_BOUND"); require(_publicSwap, "ERR_SWAP_NOT_PUBLIC"); Record storage inRecord = _records[address(tokenIn)]; Record storage outRecord = _records[address(tokenOut)]; require(tokenAmountIn <= bmul(inRecord.balance, MAX_SELL_RATIO), "ERR_SELL_RATIO"); uint spotPriceBefore = calcSpotPrice( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee ); require(spotPriceBefore <= maxPrice, "ERR_BAD_LIMIT_PRICE"); uint tokenInFee; (tokenAmountOut, tokenInFee) = calcOutGivenIn( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, tokenAmountIn * 98/100, _swapFee ); require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT"); uint reserves = calcReservesFromFee(tokenInFee, _reservesRatio); spotPriceAfter = calcSpotPrice( inRecord.balance, inRecord.denorm, outRecord.balance, outRecord.denorm, _swapFee ); require(spotPriceAfter >= spotPriceBefore, "ERR_MATH_APPROX"); require(spotPriceAfter <= maxPrice, "ERR_LIMIT_PRICE"); require(spotPriceBefore <= bdiv(tokenAmountIn, tokenAmountOut), "ERR_MATH_APPROX"); emit LOG_SWAP(msg.sender, tokenIn, tokenOut, tokenAmountIn * 98/100, tokenAmountOut, reserves); totalReserves[address(tokenIn)] = badd(totalReserves[address(tokenIn)], reserves); emit LOG_ADD_RESERVES(address(tokenIn), reserves); _pullUnderlying(tokenIn, msg.sender, tokenAmountIn); uint256 tokAmountI = bmul(tokenAmountOut, bdiv(25, 10000)); //uint256 tokAmountI2 = bmul(tokenAmountOut, bdiv(10, 10000)); //uint256 tokAmountI1 = bsub(tokenAmountOut, badd(tokAmountI, tokAmountI2)); uint256 tokAmountI1 = bsub(tokenAmountOut, tokAmountI); _pushUnderlying(tokenOut, msg.sender, tokAmountI1); _pushUnderlying1(tokenOut, tokAmountI); //_pushUnderlying2(tokenOut, tokAmountI2); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); return (tokenAmountOut, spotPriceAfter); } function setLockLiquidity() external { address user = msg.sender; userLock storage ulock = _userlock[user]; ulock.setLock = true; ulock.unlockTime = block.timestamp + 90 days ; } function emergencyLockOverride(address user, bool _bool) external { require(msg.sender == _controller); //address user = msg.sender; userLock storage ulock = _userlock[user]; ulock.setLock = _bool; } function addLiquidityfETH(address tokenIn, uint tokenAmountIn, uint minPoolAmountOut) external _logs_ _lock_ returns (uint poolAmountOut) { require(tokenIn == fETH, "Can only add fETH"); require(_launched, "ERR_NOT_FINALIZED"); require(_records[tokenIn].bound, "ERR_NOT_BOUND"); require(tokenAmountIn <= bmul(_records[tokenIn].balance, MAX_1_RATIO), "ERR_MAX_IN_RATIO"); Record storage inRecord = _records[tokenIn]; uint reserves; (poolAmountOut, reserves) = calcPoolOutGivenSingleIn( inRecord.balance, inRecord.denorm, _totalSupply, _totalWeight, tokenAmountIn, _swapFee, _reservesRatio ); require(poolAmountOut >= minPoolAmountOut, "ERR_LIMIT_OUT"); //inRecord.balance = bsub(badd(inRecord.balance, reserves); emit LOG_JOIN(msg.sender, tokenIn, tokenAmountIn, reserves); totalReserves[address(tokenIn)] = badd(totalReserves[address(tokenIn)], reserves); emit LOG_ADD_RESERVES(address(tokenIn), reserves); _mintPoolShare(poolAmountOut); _pushPoolShare(msg.sender, poolAmountOut); _pullUnderlying(tokenIn, msg.sender, tokenAmountIn); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); return poolAmountOut; } function addLiquidityFEG(address tokenIn, uint tokenAmountIn, uint minPoolAmountOut) external _logs_ _lock_ returns (uint poolAmountOut) { require(tokenIn == FEG, "Can only add FEG"); require(_launched, "ERR_NOT_FINALIZED"); require(_records[tokenIn].bound, "ERR_NOT_BOUND"); require(tokenAmountIn <= bmul(_records[tokenIn].balance, MAX_1_RATIO), "ERR_MAX_IN_RATIO"); Record storage inRecord = _records[tokenIn]; uint reserves; (poolAmountOut, reserves) = calcPoolOutGivenSingleIn( inRecord.balance, inRecord.denorm, _totalSupply, _totalWeight, tokenAmountIn, _swapFee, _reservesRatio ); require(poolAmountOut >= minPoolAmountOut, "ERR_LIMIT_OUT"); // inRecord.balance = bsub(badd(inRecord.balance, tokenAmountIn * 98/100), reserves); emit LOG_JOIN(msg.sender, tokenIn, tokenAmountIn, reserves); totalReserves[address(tokenIn)] = badd(totalReserves[address(tokenIn)], reserves); emit LOG_ADD_RESERVES(address(tokenIn), reserves); _mintPoolShare(poolAmountOut); _pushPoolShare(msg.sender, poolAmountOut); _pullUnderlying(tokenIn, msg.sender, tokenAmountIn); return poolAmountOut; } function RemoveLiquidityPoolAmountIn(address tokenOut, uint poolAmountIn, uint minAmountOut) external _logs_ _lock_ returns (uint tokenAmountOut) { require(_launched, "ERR_NOT_LAUNCHED"); require(_records[tokenOut].bound, "ERR_NOT_BOUND"); userLock storage ulock = _userlock[msg.sender]; if(ulock.setLock == true) { require(ulock.unlockTime <= block.timestamp, "Liquidity is locked, you cannot removed liquidity until after lock time."); } Record storage outRecord = _records[tokenOut]; tokenAmountOut = calcSingleOutGivenPoolIn( outRecord.balance, outRecord.denorm, _totalSupply, _totalWeight, poolAmountIn, _swapFee ); require(tokenAmountOut >= minAmountOut, "ERR_LIMIT_OUT"); require(tokenAmountOut <= bmul(_records[tokenOut].balance, MAX_1_RATIO), "ERR_MAX_OUT_RATIO"); uint tokenAmountOutZeroFee = calcSingleOutGivenPoolIn( outRecord.balance, outRecord.denorm, _totalSupply, _totalWeight, poolAmountIn, 0 ); uint reserves = calcReserves( tokenAmountOutZeroFee, tokenAmountOut, _reservesRatio ); //outRecord.balance = bsub(bsub(outRecord.balance, tokenAmountOut), reserves); uint exitFee = bmul(poolAmountIn, EXIT_FEE); emit LOG_EXIT(msg.sender, tokenOut, tokenAmountOut, reserves); totalReserves[address(tokenOut)] = badd(totalReserves[address(tokenOut)], reserves); emit LOG_ADD_RESERVES(address(tokenOut), reserves); _pullPoolShare(msg.sender, poolAmountIn); _burnPoolShare(bsub(poolAmountIn, exitFee)); _pushPoolShare(_factory, exitFee); _pushUnderlying(tokenOut, msg.sender, tokenAmountOut); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); return tokenAmountOut; } function RemoveLiquidityExtactAmountOut(address tokenOut, uint tokenAmountOut, uint maxPoolAmountIn) external _logs_ _lock_ returns (uint poolAmountIn) { require(_launched, "ERR_NOT_LAUNCHED"); require(_records[tokenOut].bound, "ERR_NOT_BOUND"); require(tokenAmountOut <= bmul(_records[tokenOut].balance, MAX_1_RATIO), "ERR_MAX_OUT_RATIO"); userLock storage ulock = _userlock[msg.sender]; if(ulock.setLock == true) { require(ulock.unlockTime <= block.timestamp, "Liquidity is locked, you cannot removed liquidity until after lock time."); } Record storage outRecord = _records[tokenOut]; uint reserves; (poolAmountIn, reserves) = calcPoolInGivenSingleOut( outRecord.balance, outRecord.denorm, _totalSupply, _totalWeight, tokenAmountOut, _swapFee, _reservesRatio ); require(poolAmountIn != 0, "ERR_MATH_APPROX"); require(poolAmountIn <= maxPoolAmountIn, "ERR_LIMIT_IN"); outRecord.balance = bsub(bsub(outRecord.balance, tokenAmountOut), reserves); uint exitFee = bmul(poolAmountIn, EXIT_FEE); emit LOG_EXIT(msg.sender, tokenOut, tokenAmountOut, reserves); totalReserves[address(tokenOut)] = badd(totalReserves[address(tokenOut)], reserves); emit LOG_ADD_RESERVES(address(tokenOut), reserves); _pullPoolShare(msg.sender, poolAmountIn); _burnPoolShare(bsub(poolAmountIn, exitFee)); _pushPoolShare(_factory, exitFee); _pushUnderlying(tokenOut, msg.sender, tokenAmountOut); _records[FEG].balance = IERC20(FEG).balanceOf(address(this)); _records[fETH].balance = IERC20(fETH).balanceOf(address(this)); return poolAmountIn; } function claimTotalReserves(address reservesAddress) external _logs_ _lock_ { require(msg.sender == _factory); for (uint i = 0; i < _tokens.length; i++) { address t = _tokens[i]; uint tokenAmountOut = totalReserves[t]; totalReserves[t] = 0; emit LOG_CLAIM_RESERVES(reservesAddress, t, tokenAmountOut); _pushUnderlying(t, reservesAddress, tokenAmountOut); } } // == // 'Underlying' token-manipulation functions make external calls but are NOT locked // You must `_lock_` or otherwise ensure reentry-safety function _pullUnderlying(address erc20, address from, uint amount) internal { bool xfer = IERC20(erc20).transferFrom(from, address(this), amount); require(xfer, "ERR_ERC20_FALSE"); } function _pushUnderlying(address erc20, address to, uint amount) internal { bool xfer = IERC20(erc20).transfer(to, amount); require(xfer, "ERR_ERC20_FALSE"); } function _pushUnderlying1(address erc20, uint amount) internal { bool xfer = IERC20(erc20).transfer(FEGstake, amount); require(xfer, "ERR_ERC20_FALSE"); } function _pushUnderlying2(address erc20, uint amount) internal { bool xfer = IERC20(erc20).transfer(pairRewardPool, amount); require(xfer, "ERR_ERC20_FALSE"); } function _pullPoolShare(address from, uint amount) internal { _pull(from, amount); } function _pushPoolShare(address to, uint amount) internal { _push(to, amount); } function _mintPoolShare(uint amount) internal { _mint(amount); } function _burnPoolShare(uint amount) internal { _burn(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_ADD_RESERVES","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"LOG_CALL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_CLAIM_RESERVES","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_EXIT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_JOIN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"denorm","type":"uint256"}],"name":"AddTokenInitial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"denorm","type":"uint256"}],"name":"AddfETHInitial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BPOW_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"name":"BUY","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEFAULT_RESERVES_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEGstake","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_POOL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"IsWhiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"M1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_1_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IN_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OUT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BPOW_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxPoolAmountIn","type":"uint256"}],"name":"RemoveLiquidityExtactAmountOut","outputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"RemoveLiquidityPoolAmountIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"name":"SELL","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"spotPriceAfter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userlock","outputs":[{"internalType":"bool","name":"setLock","type":"bool"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"}],"name":"addBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minPoolAmountOut","type":"uint256"}],"name":"addLiquidityFEG","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minPoolAmountOut","type":"uint256"}],"name":"addLiquidityfETH","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"},{"internalType":"bool","name":"boolean","type":"bool"}],"name":"addWhiteListContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcInGivenOut","outputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcOutGivenIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"reservesRatio","type":"uint256"}],"name":"calcPoolInGivenSingleOut","outputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint256","name":"reservesRatio","type":"uint256"}],"name":"calcPoolOutGivenSingleIn","outputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"poolSupply","type":"uint256"},{"internalType":"uint256","name":"totalWeight","type":"uint256"},{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSingleOutGivenPoolIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"reservesAddress","type":"address"}],"name":"claimTotalReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"emergencyLockOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getColor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getDenormalizedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFinalTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getNormalizedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDenormalizedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"getUserLock","outputs":[{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"}],"name":"isBound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairRewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"denorm","type":"uint256"}],"name":"rebind","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"saveLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMax1SideLiquidityRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSellRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setPairRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
600a6001819055600255600380546001600160a01b031916734c9bc793716e8dc05d1f48d8ca8f84318ec3043c17905567016345785d8a0000600481905560055560c0604052600b60808190526a2322a3bba2aa243830b4b960a91b60a09081526200006f91600991906200019c565b50604080518082019091526009808252680464547774554484c560bc1b6020909201918252620000a291600a916200019c565b50600b8054601260ff199091161762010000600160b01b031916754c9bc793716e8dc05d1f48d8ca8f84318ec3043c0000179055600c8054734c9bc793716e8dc05d1f48d8ca8f84318ec3043c6001600160a01b03199182168117909255600e805473f786c34106762ab4eeb45a51b42a62470e9d5332908316179055600f805473389999216860ab8e0175387a0c90e5c52522c9459083161790556010805490911690911790553480156200015757600080fd5b5060016000908155600d80546001600160a01b0319163317905566071afd498d00006011556012556010805460ff60a01b191690556013805460ff1916905562000248565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001d457600085556200021f565b82601f10620001ef57805160ff19168380011785556200021f565b828001600101855582156200021f579182015b828111156200021f57825182559160200191906001019062000202565b506200022d92915062000231565b5090565b5b808211156200022d576000815560010162000232565b615edf80620002586000396000f3fe608060405234801561001057600080fd5b50600436106104805760003560e01c80638bbce00911610257578063ba9530a611610146578063d73dd623116100c3578063ec342ad011610087578063ec342ad014610717578063f1b8a9b714610ea5578063f8b2cb4f14610ecb578063f8d6aed414610ef1578063fde924f714610f2c57610480565b8063d73dd62314610e1d578063db4e68fa14610e49578063dd62ed3e14610e6f578063e4a28a52146105f0578063ec09302114610e9d57610480565b8063c6580d121161010a578063c6580d1214610dcf578063cc14d68814610dd7578063cc2cf6bc14610ddf578063cdfec52d14610e0d578063d4cadf6814610e1557610480565b8063ba9530a614610d0e578063bc063e1a14610ad6578063bc694ea214610d49578063be3bbd2e14610d51578063c627fbfa14610da957610480565b80639a86139b116101d4578063b0e0d13611610198578063b0e0d13614610cb3578063b44ec92114610cbb578063b7b800a414610ce1578063b7bbe0c814610ce9578063ba019dab14610d0657610480565b80639a86139b14610c3a578063a16faa1814610c42578063a221ee4914610c4a578063a5a54ea514610c7f578063a9059cbb14610c8757610480565b806393c88d141161021b57806393c88d1414610bf4578063948d8ce614610bfc57806395d89b4114610c22578063992e2a9214610c2a5780639a78458a14610c3257610480565b80638bbce00914610b615780638d811d1f14610ba157806392eefe9b14610bbe578063936c347714610be45780639381cd2b14610bec57610480565b80633018205f11610373578063626732ed116102f057806371a1e6dd116102b457806371a1e6dd14610a5f57806376c7a3c714610ad65780637c88497314610ade578063867378c514610b1e5780638929801214610b2657610480565b8063626732ed1461098357806366188463146109b55780636d0800bc146109e15780636d6dcb3a14610a0757806370a0823114610a3957610480565b80633a0e9288116103375780633a0e9288146108bf5780633fdddaa2146108e5578063514b33cf146109175780635a6599491461094957806360ea602b1461095157610480565b80633018205f14610833578063313ce5671461083b57806331705705146108595780633829cb7914610861578063390221d61461089357610480565b806318160ddd11610401578063218b5382116103c5578063218b53821461071757806321abba011461071f57806323b872dd1461076057806329dfe3b2146107965780632f37b6241461080d57610480565b806318160ddd146106a7578063189d00ca146106af5780631fd96bdb146106b757806320e5672e146106e95780632140fb40146106f157610480565b8063095ea7b311610448578063095ea7b3146105c457806309a3bbe4146105f0578063103ff68d1461060a57806312b69b5d1461063857806315e84af91461067957610480565b80630149e5c714610485578063024eb2e3146104bf57806302ac81681461051957806306fdde0314610523578063093a9fbc146105a0575b600080fd5b6104ab6004803603602081101561049b57600080fd5b50356001600160a01b0316610f34565b604080519115158252519081900360200190f35b610500600480360360e08110156104d557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135610faa565b6040805192835260208301919091528051918290030190f35b61052161107c565b005b61052b61118c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561056557818101518382015260200161054d565b50505050905090810190601f1680156105925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105a8611222565b604080516001600160a01b039092168252519081900360200190f35b6104ab600480360360408110156105da57600080fd5b506001600160a01b038135169060200135611231565b6105f8611286565b60408051918252519081900360200190f35b6105216004803603604081101561062057600080fd5b506001600160a01b0381351690602001351515611293565b61065e6004803603602081101561064e57600080fd5b50356001600160a01b0316611326565b60408051921515835260208301919091528051918290030190f35b6105f86004803603604081101561068f57600080fd5b506001600160a01b0381358116916020013516611345565b6105f8611464565b6105f861146a565b610521600480360360608110156106cd57600080fd5b506001600160a01b03813516906020810135906040013561147e565b6105f861160e565b6104ab6004803603602081101561070757600080fd5b50356001600160a01b0316611614565b6105f8611632565b610500600480360360e081101561073557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c0013561163e565b6104ab6004803603606081101561077657600080fd5b506001600160a01b038135811691602081013590911690604001356116eb565b610521600480360360408110156107ac57600080fd5b813591908101906040810160208201356401000000008111156107ce57600080fd5b8201836020820111156107e057600080fd5b8035906020019184602083028401116401000000008311171561080257600080fd5b5090925090506118c3565b6104ab6004803603602081101561082357600080fd5b50356001600160a01b0316611d2c565b6105a8611d4a565b610843611d72565b6040805160ff9092168252519081900360200190f35b6105a8611d7b565b6105f86004803603606081101561087757600080fd5b506001600160a01b038135169060208101359060400135611d8a565b610521600480360360408110156108a957600080fd5b506001600160a01b0381351690602001356120ef565b610521600480360360208110156108d557600080fd5b50356001600160a01b0316612258565b610521600480360360608110156108fb57600080fd5b506001600160a01b038135169060208101359060400135612291565b6105216004803603606081101561092d57600080fd5b506001600160a01b0381351690602081013590604001356124d6565b6105f8612644565b6105f86004803603606081101561096757600080fd5b506001600160a01b03813516906020810135906040013561264a565b6105f86004803603606081101561099957600080fd5b506001600160a01b038135169060208101359060400135612ad2565b6104ab600480360360408110156109cb57600080fd5b506001600160a01b038135169060200135613001565b6105f8600480360360208110156109f757600080fd5b50356001600160a01b03166130d9565b6105f860048036036060811015610a1d57600080fd5b506001600160a01b0381351690602081013590604001356130eb565b6105f860048036036020811015610a4f57600080fd5b50356001600160a01b03166135d4565b61052160048036036040811015610a7557600080fd5b81359190810190604081016020820135640100000000811115610a9757600080fd5b820183602082011115610aa957600080fd5b80359060200191846020830284011164010000000083111715610acb57600080fd5b5090925090506135ef565b6105f861399d565b610500600480360360a0811015610af457600080fd5b506001600160a01b03813581169160208101359160408201351690606081013590608001356139a8565b6105f861409a565b6105f8600480360360c0811015610b3c57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356140ae565b610500600480360360a0811015610b7757600080fd5b506001600160a01b0381358116916020810135916040820135169060608101359060800135614178565b61052160048036036020811015610bb757600080fd5b5035614848565b61052160048036036020811015610bd457600080fd5b50356001600160a01b031661493f565b6105f8614a0a565b6105f8614a29565b6105f8614a36565b6105f860048036036020811015610c1257600080fd5b50356001600160a01b0316614a3b565b61052b614a97565b6105f8614af8565b6105a8614b04565b6105f8614b13565b610521614b20565b6105f8600480360360a0811015610c6057600080fd5b5080359060208101359060408101359060608101359060800135614b47565b6105f8614bac565b6104ab60048036036040811015610c9d57600080fd5b506001600160a01b038135169060200135614bb2565b6105f8614c89565b6104ab60048036036020811015610cd157600080fd5b50356001600160a01b0316614c8e565b6105f8614ca3565b61052160048036036020811015610cff57600080fd5b5035614ca8565b6105f8614da5565b610500600480360360c0811015610d2457600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614daa565b6105f8614e3b565b610d59614e47565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610d95578181015183820152602001610d7d565b505050509050019250505060405180910390f35b61052160048036036020811015610dbf57600080fd5b50356001600160a01b0316614ecd565b6105f8614f06565b6105a8614f16565b61052160048036036040811015610df557600080fd5b506001600160a01b0381351690602001351515614f25565b6105f8614f67565b6105f8614f6d565b6104ab60048036036040811015610e3357600080fd5b506001600160a01b038135169060200135614f8c565b61052160048036036020811015610e5f57600080fd5b50356001600160a01b031661500d565b6105f860048036036040811015610e8557600080fd5b506001600160a01b0381358116916020013516615153565b6105f861517e565b6105f860048036036020811015610ebb57600080fd5b50356001600160a01b031661518e565b6105f860048036036020811015610ee157600080fd5b50356001600160a01b03166151fc565b610500600480360360c0811015610f0757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135615258565b6104ab615302565b60006001600160a01b038216610f87576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b506001600160a01b03811660009081526018602052604090205460ff165b919050565b6000806000610fb98988615312565b90506000610fd8610fd2670de0b6b3a764000084615425565b87615487565b90506000610ff788610ff2670de0b6b3a764000085615425565b615312565b9050611004818988615549565b935060006110128d83615425565b90506000611020828f615312565b9050600061102e8287615646565b9050600061103c828f615487565b9050600061104a8f83615425565b905061106681610ff2670de0b6b3a764000060c8815b04615425565b9950505050505050505097509795505050505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156110f257600080fd5b600b805461ff001916610100179055600d54336001600160a01b039091161461111a57600080fd5b60135460ff161561112a57600080fd5b6014546002111561113a57600080fd5b6013805460ff191660011790556010805460ff60a01b1916600160a01b17905561116c68056bc75e2d63100000615754565b61117f3368056bc75e2d63100000615760565b600b805461ff0019169055565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112185780601f106111ed57610100808354040283529160200191611218565b820191906000526020600020905b8154815290600101906020018083116111fb57829003601f168201915b5050505050905090565b600f546001600160a01b031681565b3360008181526007602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615e8a833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600c546001600160a01b031633146112aa57600080fd5b6001600160a01b0382166112fb576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6016602052600090815260409020805460019091015460ff9091169082565b600b54600090610100900460ff161561135d57600080fd5b6001600160a01b03831660009081526015602052604090205460ff166113ba576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611417576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0380841660009081526015602052604080822092851682529020600380830154600280850154928401549084015460115461145b94929190614b47565b95945050505050565b60085490565b6402540be400670de0b6b3a76400005b0481565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600e546001600160a01b038481169116146114f957600080fd5b600d546001600160a01b0316331461151057600080fd5b6001600160a01b03831660009081526015602052604090205460ff161561153657600080fd5b60135460ff161561154657600080fd5b60145460081161155557600080fd5b6040805160808101825260018082526014805460208085019182526000858701818152606087018281526001600160a01b038c1680845260159094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319169091179055611609836064606385025b0483612291565b505050565b60025481565b6001600160a01b031660009081526016602052604090205460ff1690565b670de0b6b3a764000081565b600080600061164d8988615312565b90506000611666610fd2670de0b6b3a764000084615425565b9050600061168588611680670de0b6b3a764000085615425565b615487565b9050611692888288615549565b935060006116a08d8361576e565b905060006116ae828f615312565b905060006116bc8287615646565b905060006116ca828f615487565b90506116d6818f615425565b98505050505050505097509795505050505050565b6000336001600160a01b038516148061172757506001600160a01b03841660009081526007602090815260408083203384529091529020548211155b61173057600080fd5b60408051628503ed60e61b8152336004820152905160009182918291632140fb40916024808301926020929190829003018186803b15801561177157600080fd5b505afa158015611785573d6000803e3d6000fd5b505050506040513d602081101561179b57600080fd5b505190506001811515146117ec576040805162461bcd60e51b815260206004820152601360248201527202a3930b739b332b91034b9902637b1b5b2b21606d1b604482015290519081900360640190fd5b6117f78686866157bb565b336001600160a01b0387161480159061183557506001600160a01b038616600090815260076020908152604080832033845290915290205460001914155b156118b7576001600160a01b03861660009081526007602090815260408083203384529091529020546118689085615425565b6001600160a01b0387811660009081526007602090815260408083203380855290835292819020859055805194855251928916939192600080516020615e8a8339815191529281900390910190a35b50600195945050505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561193957600080fd5b600b805461ff00191661010017905560135460ff16611992576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b336000908152601660205260409020805460ff161515600114156119f35742816001015411156119f35760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b60006119fd611464565b90506000611a178660c8670de0b6b3a76400005b04615487565b90506000611a258783615425565b90506000611a338285615312565b905080611a79576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b611a83338961588e565b600b54611a9f906201000090046001600160a01b031684615760565b611aa882615898565b60005b601454811015611d1657600060148281548110611ac457fe5b60009182526020808320909101546001600160a01b03168083526015909152604082206003015490925090611af98583615487565b905080611b3f576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8a8a85818110611b4b57fe5b90506020020135811015611b96576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3929081900390910190a3611be98333836158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611c3457600080fd5b505afa158015611c48573d6000803e3d6000fd5b505050506040513d6020811015611c5e57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015611cc157600080fd5b505afa158015611cd5573d6000803e3d6000fd5b505050506040513d6020811015611ceb57600080fd5b5051600e546001600160a01b0316600090815260156020526040902060030155505050600101611aab565b5050600b805461ff001916905550505050505050565b6001600160a01b031660009081526015602052604090205460ff1690565b600b54600090610100900460ff1615611d6257600080fd5b50600c546001600160a01b031690565b600b5460ff1690565b6010546001600160a01b031681565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615611e0257600080fd5b600b805461ff001916610100179055600f546001600160a01b03858116911614611e66576040805162461bcd60e51b815260206004820152601060248201526f43616e206f6e6c79206164642046454760801b604482015290519081900360640190fd5b60135460ff16611eb1576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16611f0e576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038416600090815260156020526040902060030154600554611f379190615487565b831115611f7e576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b600060156000866001600160a01b03166001600160a01b0316815260200190815260200160002090506000611fc8826003015483600201546008546019548960115460125461163e565b909350905083831015612012576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518681526020810183905281516001600160a01b0389169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a36001600160a01b03861660009081526017602052604090205461207d908261576e565b6001600160a01b03871660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a26120c683615754565b6120d03384615760565b6120db863387615972565b5050600b805461ff00191690559392505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561216557600080fd5b600b805461ff001916610100179055600c54336001600160a01b039091161461218d57600080fd5b6001600160a01b03821660009081526015602052604090205460ff16156121b357600080fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561220257600080fd5b505afa158015612216573d6000803e3d6000fd5b505050506040513d602081101561222c57600080fd5b505190508082111561223d57600080fd5b6122488333846158a1565b5050600b805461ff001916905550565b600c546001600160a01b0316331461226f57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561230757600080fd5b600b805461ff001916610100179055600d54336001600160a01b039091161461232f57600080fd5b6001600160a01b03831660009081526015602052604090205460ff1661235457600080fd5b60135460ff161561236457600080fd5b670de0b6b3a764000081101561237957600080fd5b6802b5e3af16b188000081111561238f57600080fd5b620f424082101561239f57600080fd5b6001600160a01b038316600090815260156020526040902060020154808211156123f7576123d86019546123d38484615425565b61576e565b60198190556802b5e3af16b188000010156123f257600080fd5b612418565b808210156124185761241460195461240f8385615425565b615425565b6019555b6001600160a01b038416600090815260156020526040902060028101839055600301805490849055808411156124615761245c85336124578785615425565b615972565b6124c4565b808410156124c45760006124758286615425565b9050600061248d8260c8670de0b6b3a7640000611a11565b90506124a3873361249e8585615425565b6158a1565b600b546124c19088906201000090046001600160a01b0316836158a1565b50505b5050600b805461ff0019169055505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600d546001600160a01b0316331461254e57600080fd5b6001600160a01b03831660009081526015602052604090205460ff161561257457600080fd5b60135460ff161561258457600080fd5b60145460081161259357600080fd5b6040805160808101825260018082526014805460208085019182526000858701818152606087018281526001600160a01b038c1680845260159094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b031916909117905561160983606460628502611602565b60055481565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156126c257600080fd5b600b805461ff001916610100179055600e546001600160a01b03858116911614612727576040805162461bcd60e51b8152602060048201526011602482015270086c2dc40dedcd8f240c2c8c840cc8aa89607b1b604482015290519081900360640190fd5b60135460ff16612772576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff166127cf576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152601560205260409020600301546005546127f89190615487565b83111561283f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b600060156000866001600160a01b03166001600160a01b0316815260200190815260200160002090506000612889826003015483600201546008546019548960115460125461163e565b9093509050838310156128d3576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518681526020810183905281516001600160a01b0389169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a36001600160a01b03861660009081526017602052604090205461293e908261576e565b6001600160a01b03871660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a261298783615754565b6129913384615760565b61299c863387615972565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d6020811015612a1157600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015612a7457600080fd5b505afa158015612a88573d6000803e3d6000fd5b505050506040513d6020811015612a9e57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050600b805461ff00191690559392505050565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615612b4a57600080fd5b600b805461ff00191661010017905560135460ff16612ba3576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16612c00576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038416600090815260156020526040902060030154600554612c299190615487565b831115612c71576040805162461bcd60e51b81526020600482015260116024820152704552525f4d41585f4f55545f524154494f60781b604482015290519081900360640190fd5b336000908152601660205260409020805460ff16151560011415612cd2574281600101541115612cd25760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b600060156000876001600160a01b03166001600160a01b0316815260200190815260200160002090506000612d1c826003015483600201546008546019548a601154601254610faa565b909450905083612d65576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b84841115612da9576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b612dc0612dba836003015488615425565b82615425565b60038301556000612ddb8560c8670de0b6b3a7640000611a11565b604080518981526020810185905281519293506001600160a01b038b169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3928290030190a36001600160a01b038816600090815260176020526040902054612e46908361576e565b6001600160a01b03891660008181526017602090815260409182902093909355805185815290519192600080516020615e2c83398151915292918290030190a2612e90338661588e565b612ea2612e9d8683615425565b615898565b600b54612ebe906201000090046001600160a01b031682615760565b612ec98833896158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f1457600080fd5b505afa158015612f28573d6000803e3d6000fd5b505050506040513d6020811015612f3e57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015612fa157600080fd5b505afa158015612fb5573d6000803e3d6000fd5b505050506040513d6020811015612fcb57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505050600b805461ff00191690559392505050565b3360009081526007602090815260408083206001600160a01b038616845290915281205480831115613056573360009081526007602090815260408083206001600160a01b0388168452909152812055613085565b6130608184615425565b3360009081526007602090815260408083206001600160a01b03891684529091529020555b3360008181526007602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615e8a833981519152929181900390910190a35060019392505050565b60176020526000908152604090205481565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561316357600080fd5b600b805461ff00191661010017905560135460ff166131bc576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16613219576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b336000908152601660205260409020805460ff1615156001141561327a57428160010154111561327a5760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b6001600160a01b0385166000908152601560205260409020600381015460028201546008546019546011546132b494939291908a906140ae565b9250838310156132fb576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0386166000908152601560205260409020600301546005546133249190615487565b83111561336c576040805162461bcd60e51b81526020600482015260116024820152704552525f4d41585f4f55545f524154494f60781b604482015290519081900360640190fd5b6000613389826003015483600201546008546019548a60006140ae565b9050600061339a8286601254615549565b905060006133b28860c8670de0b6b3a7640000611a11565b604080518881526020810185905281519293506001600160a01b038c169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3928290030190a36001600160a01b03891660009081526017602052604090205461341d908361576e565b6001600160a01b038a1660008181526017602090815260409182902093909355805185815290519192600080516020615e2c83398151915292918290030190a2613467338961588e565b613474612e9d8983615425565b600b54613490906201000090046001600160a01b031682615760565b61349b8933886158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156134e657600080fd5b505afa1580156134fa573d6000803e3d6000fd5b505050506040513d602081101561351057600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561357357600080fd5b505afa158015613587573d6000803e3d6000fd5b505050506040513d602081101561359d57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050505050600b805461ff00191690559392505050565b6001600160a01b031660009081526006602052604090205490565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561366557600080fd5b600b805461ff00191661010017905560135460ff166136be576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b60006136c8611464565b905060006136d68583615312565b90508061371c576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60005b6014548110156139895760006014828154811061373857fe5b60009182526020808320909101546001600160a01b0316808352601590915260408220600301549092509061376d8583615487565b9050806137b3576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8787858181106137bf57fe5b90506020020135811115613809576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a361385c833383615972565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156138a757600080fd5b505afa1580156138bb573d6000803e3d6000fd5b505050506040513d60208110156138d157600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561393457600080fd5b505afa158015613948573d6000803e3d6000fd5b505050506040513d602081101561395e57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505060010161371f565b5061399385615754565b6124c43386615760565b66071afd498d000081565b6000806139b4336159cb565b156139f05760405162461bcd60e51b815260040180806020018281038252603e815260200180615e4c603e913960400191505060405180910390fd5b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615613a6657600080fd5b600b805461ff001916610100179055600f546001600160a01b03888116911614613acb576040805162461bcd60e51b815260206004820152601160248201527043616e206f6e6c792073656c6c2046454760781b604482015290519081900360640190fd5b6001600160a01b03871660009081526015602052604090205460ff16613b28576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613b85576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b601054600160a01b900460ff16613bd9576040805162461bcd60e51b81526020600482015260136024820152724552525f535741505f4e4f545f5055424c494360681b604482015290519081900360640190fd5b6001600160a01b03808816600090815260156020526040808220928816825290206003820154600454613c0c9190615487565b881115613c51576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b6000613c728360030154846002015484600301548560020154601154614b47565b905085811115613cbf576040805162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b604482015290519081900360640190fd5b6000613cee846003015485600201548560030154866002015460648f60620281613ce557fe5b04601154614daa565b909650905087861015613d38576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6000613d4682601254615a1d565b9050613d678560030154866002015486600301548760020154601154614b47565b955082861015613db0576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b87861115613df7576040805162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b604482015290519081900360640190fd5b613e018b88615312565b831115613e47576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b896001600160a01b03168c6001600160a01b0316336001600160a01b03167f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe60648f60620281613e9357fe5b60408051929091048252602082018d9052818101879052519081900360600190a46001600160a01b038c16600090815260176020526040902054613ed7908261576e565b6001600160a01b038d1660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a2613f228c338d615972565b6000613f35886116806019612710615312565b90506000613f438983615425565b9050613f508c33836158a1565b613f5a8c83615a7c565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613fa557600080fd5b505afa158015613fb9573d6000803e3d6000fd5b505050506040513d6020811015613fcf57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561403257600080fd5b505afa158015614046573d6000803e3d6000fd5b505050506040513d602081101561405c57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505050505050600b805461ff001916905590969095509350505050565b64e8d4a51000670de0b6b3a764000061147a565b6000806140bb8786615312565b905060006140d785611680670de0b6b3a764000060c881611060565b905060006140e58883615425565b905060006140f3828a615312565b905060006141128261410d670de0b6b3a764000088615312565b615646565b90506000614120828e615487565b9050600061412e8e83615425565b9050600061414d614147670de0b6b3a76400008a615425565b8b615487565b905061416582611680670de0b6b3a764000084615425565b9f9e505050505050505050505050505050565b600080614184336159cb565b156141c05760405162461bcd60e51b815260040180806020018281038252603e815260200180615e4c603e913960400191505060405180910390fd5b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561423657600080fd5b600b805461ff001916610100179055600e546001600160a01b038881169116146142a0576040805162461bcd60e51b8152602060048201526016602482015275086c2dc40dedcd8f240c4eaf240eed2e8d040cc8aa8960531b604482015290519081900360640190fd5b6001600160a01b03871660009081526015602052604090205460ff166142fd576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff1661435a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b601054600160a01b900460ff166143ae576040805162461bcd60e51b81526020600482015260136024820152724552525f535741505f4e4f545f5055424c494360681b604482015290519081900360640190fd5b6001600160a01b038088166000908152601560205260408082209288168252902060038201546143e8906002670de0b6b3a7640000611a11565b88111561442f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b60006144508360030154846002015484600301548560020154601154614b47565b90508581111561449d576040805162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b604482015290519081900360640190fd5b60006144cb846003015485600201548560030154866002015460648f606302816144c357fe5b046000614daa565b909650905087861015614515576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b600061452382601254615a1d565b90506145448560030154866002015486600301548760020154601154614b47565b95508286101561458d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b878611156145d4576040805162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b604482015290519081900360640190fd5b6145de8b88615312565b831115614624576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b896001600160a01b03168c6001600160a01b0316336001600160a01b03167f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe60648f6063028161467057fe5b60408051929091048252602082018d9052818101879052519081900360600190a46001600160a01b038c166000908152601760205260409020546146b4908261576e565b6001600160a01b038d1660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a26146ff8c338d615972565b61470a8a33896158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561475557600080fd5b505afa158015614769573d6000803e3d6000fd5b505050506040513d602081101561477f57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d602081101561480c57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050505050600b805461ff001916905590969095509350505050565b600d546001600160a01b031633146148a7576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b600081116148ee576040805162461bcd60e51b815260206004820152600f60248201526e31b0b73737ba103a3ab9371037b33360891b604482015290519081900360640190fd5b606481111561493a576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f742073657420756e64657220312560681b604482015290519081900360640190fd5b600155565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156149b557600080fd5b600b805461ff001916610100179055600c54336001600160a01b03909116146149dd57600080fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055600b805461ff0019169055565b600b54600090610100900460ff1615614a2257600080fd5b5060195490565b68056bc75e2d6310000081565b600081565b600b54600090610100900460ff1615614a5357600080fd5b6001600160a01b03821660009081526015602052604090205460ff16614a7857600080fd5b506001600160a01b031660009081526015602052604090206002015490565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112185780601f106111ed57610100808354040283529160200191611218565b6704a03ce68d21555681565b6003546001600160a01b031681565b6542524f4e5a4560d01b90565b336000908152601660205260409020805460ff1916600190811782556276a7004201910155565b600080614b548787615312565b90506000614b628686615312565b90506000614b708383615312565b90506000614b92670de0b6b3a7640000610ff2670de0b6b3a764000089615425565b9050614b9e8282615487565b9a9950505050505050505050565b60015481565b6000806000816001600160a01b0316632140fb40336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614c0457600080fd5b505afa158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50519050600181151514614c735760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b614c7e3386866157bb565b506001949350505050565b600881565b60186020526000908152604090205460ff1681565b600281565b600d546001600160a01b03163314614d07576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b600a8111614d52576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f7420736574206f7665722031302560681b604482015290519081900360640190fd5b60c8811115614da0576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f742073657420756e64657220302e352560581b604482015290519081900360640190fd5b600255565b600181565b6000806000614db98887615312565b90506000614dcf670de0b6b3a764000086615425565b9050614ddb8682615487565b90506000614ded8b610ff28d8561576e565b90506000614dfb8285615646565b90506000614e11670de0b6b3a764000083615425565b9050614e1d8b82615487565b9650614e298985615425565b95505050505050965096945050505050565b671bc16d674ec7ffff81565b600b54606090610100900460ff1615614e5f57600080fd5b60135460ff16614e6e57600080fd5b601480548060200260200160405190810160405280929190818152602001828054801561121857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614ea6575050505050905090565b600c546001600160a01b03163314614ee457600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60c8670de0b6b3a764000061147a565b600e546001600160a01b031681565b600c546001600160a01b03163314614f3c57600080fd5b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b60045481565b600b54600090610100900460ff1615614f8557600080fd5b5060115490565b3360009081526007602090815260408083206001600160a01b0386168452909152812054614fba908361576e565b3360008181526007602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615e8a833981519152929081900390910190a350600192915050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561508357600080fd5b600b805461010061ff001990911617908190556201000090046001600160a01b031633146150b057600080fd5b60005b601454811015615144576000601482815481106150cc57fe5b60009182526020808320909101546001600160a01b039081168084526017835260408085208054959055805185815290519195508593928816927fb1a010070ad56d8c61053bbbaab3187ecea3e288b70f3384b105cd979228608e92918290030190a361513a8285836158a1565b50506001016150b3565b5050600b805461ff0019169055565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6002670de0b6b3a764000061147a565b600b54600090610100900460ff16156151a657600080fd5b6001600160a01b03821660009081526015602052604090205460ff166151cb57600080fd5b6001600160a01b0382166000908152601560205260409020600201546019546151f5908290615312565b9392505050565b600b54600090610100900460ff161561521457600080fd5b6001600160a01b03821660009081526015602052604090205460ff1661523957600080fd5b506001600160a01b031660009081526015602052604090206003015490565b60008060006152678689615312565b905060006152758887615425565b905060006152838983615312565b905060006152918285615646565b90506152a581670de0b6b3a7640000615425565b90506152b18c82615487565b90506152c5670de0b6b3a764000088615425565b95506152d18187615312565b95506152e581670de0b6b3a7640000615312565b94506152f18686615425565b945050505050965096945050505050565b601054600160a01b900460ff1690565b600081615355576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a7640000830283158061537d5750670de0b6b3a764000084828161537a57fe5b04145b6153c1576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561540f576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161541a57fe5b049695505050505050565b60008060006154348585615b44565b91509150801561547f576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008282028315806154a157508284828161549e57fe5b04145b6154e5576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015615538576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261541a565b600082841015615592576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b670de0b6b3a76400008211156155e5576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60006155f18585615425565b90506155fd8184615487565b91508181101561547f576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60006001831015615696576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff8311156156ec576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b60006156f783615b69565b905060006157058483615425565b9050600061571b8661571685615b84565b615b92565b90508161572c579250611280915050565b600061573d87846305f5e100615be9565b90506157498282615487565b979650505050505050565b61575d81615cc7565b50565b61576a8282615d3c565b5050565b6000828201838110156151f5576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b6001600160a01b0383166000908152600660205260409020548111156157e057600080fd5b6001600160a01b0383166000908152600660205260409020546158039082615425565b6001600160a01b038085166000908152600660205260408082209390935590841681522054615832908261576e565b6001600160a01b0380841660008181526006602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b61576a8282615d47565b61575d81615d52565b6000836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156158fa57600080fd5b505af115801561590e573d6000803e3d6000fd5b505050506040513d602081101561592457600080fd5b505190508061596c576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b50505050565b604080516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b1580156158fa57600080fd5b60006159d682610f34565b156159e357506000610fa5565b813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590615a155750808214155b949350505050565b6000670de0b6b3a7640000821115615a72576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b6151f58383615487565b6003546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101849052905160009285169163a9059cbb91604480830192602092919082900301818787803b158015615ad257600080fd5b505af1158015615ae6573d6000803e3d6000fd5b505050506040513d6020811015615afc57600080fd5b5051905080611609576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b600080828410615b5a5750508082036000615b62565b505081810360015b9250929050565b6000670de0b6b3a7640000615b7d83615b84565b0292915050565b670de0b6b3a7640000900490565b60008060028306615bab57670de0b6b3a7640000615bad565b835b90506002830492505b82156151f557615bc68485615487565b93506002830615615bde57615bdb8185615487565b90505b600283049250615bb6565b6000828180615c0087670de0b6b3a7640000615b44565b9092509050670de0b6b3a764000080600060015b888410615cb8576000670de0b6b3a764000082029050600080615c488a615c4385670de0b6b3a7640000615425565b615b44565b91509150615c5a87611680848c615487565b9650615c668784615312565b965086615c7557505050615cb8565b8715615c7f579315935b8015615c89579315935b8415615ca057615c998688615425565b9550615cad565b615caa868861576e565b95505b505050600101615c14565b50909998505050505050505050565b30600090815260066020526040902054615ce1908261576e565b30600090815260066020526040902055600854615cfe908261576e565b60085560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b61576a3083836157bb565b61576a8230836157bb565b30600090815260066020526040902054811115615d6e57600080fd5b30600090815260066020526040902054615d889082615425565b30600090815260066020526040902055600854615da59082615425565b60085560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35056fe4c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742072656d6f766564206c697175696469747920756e74696c206166746572206c6f636b2074696d652e9448856d254ce9f0a13e70882297125673303bfaa163fc49ad146aa8bb556607556e617070726f76656420636f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e74657261637420776974682074686520737761708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122023860faecfd2c1ef72621ad64b98986336c1cf930bda6351846fc22cc0612eba64736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104805760003560e01c80638bbce00911610257578063ba9530a611610146578063d73dd623116100c3578063ec342ad011610087578063ec342ad014610717578063f1b8a9b714610ea5578063f8b2cb4f14610ecb578063f8d6aed414610ef1578063fde924f714610f2c57610480565b8063d73dd62314610e1d578063db4e68fa14610e49578063dd62ed3e14610e6f578063e4a28a52146105f0578063ec09302114610e9d57610480565b8063c6580d121161010a578063c6580d1214610dcf578063cc14d68814610dd7578063cc2cf6bc14610ddf578063cdfec52d14610e0d578063d4cadf6814610e1557610480565b8063ba9530a614610d0e578063bc063e1a14610ad6578063bc694ea214610d49578063be3bbd2e14610d51578063c627fbfa14610da957610480565b80639a86139b116101d4578063b0e0d13611610198578063b0e0d13614610cb3578063b44ec92114610cbb578063b7b800a414610ce1578063b7bbe0c814610ce9578063ba019dab14610d0657610480565b80639a86139b14610c3a578063a16faa1814610c42578063a221ee4914610c4a578063a5a54ea514610c7f578063a9059cbb14610c8757610480565b806393c88d141161021b57806393c88d1414610bf4578063948d8ce614610bfc57806395d89b4114610c22578063992e2a9214610c2a5780639a78458a14610c3257610480565b80638bbce00914610b615780638d811d1f14610ba157806392eefe9b14610bbe578063936c347714610be45780639381cd2b14610bec57610480565b80633018205f11610373578063626732ed116102f057806371a1e6dd116102b457806371a1e6dd14610a5f57806376c7a3c714610ad65780637c88497314610ade578063867378c514610b1e5780638929801214610b2657610480565b8063626732ed1461098357806366188463146109b55780636d0800bc146109e15780636d6dcb3a14610a0757806370a0823114610a3957610480565b80633a0e9288116103375780633a0e9288146108bf5780633fdddaa2146108e5578063514b33cf146109175780635a6599491461094957806360ea602b1461095157610480565b80633018205f14610833578063313ce5671461083b57806331705705146108595780633829cb7914610861578063390221d61461089357610480565b806318160ddd11610401578063218b5382116103c5578063218b53821461071757806321abba011461071f57806323b872dd1461076057806329dfe3b2146107965780632f37b6241461080d57610480565b806318160ddd146106a7578063189d00ca146106af5780631fd96bdb146106b757806320e5672e146106e95780632140fb40146106f157610480565b8063095ea7b311610448578063095ea7b3146105c457806309a3bbe4146105f0578063103ff68d1461060a57806312b69b5d1461063857806315e84af91461067957610480565b80630149e5c714610485578063024eb2e3146104bf57806302ac81681461051957806306fdde0314610523578063093a9fbc146105a0575b600080fd5b6104ab6004803603602081101561049b57600080fd5b50356001600160a01b0316610f34565b604080519115158252519081900360200190f35b610500600480360360e08110156104d557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135610faa565b6040805192835260208301919091528051918290030190f35b61052161107c565b005b61052b61118c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561056557818101518382015260200161054d565b50505050905090810190601f1680156105925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105a8611222565b604080516001600160a01b039092168252519081900360200190f35b6104ab600480360360408110156105da57600080fd5b506001600160a01b038135169060200135611231565b6105f8611286565b60408051918252519081900360200190f35b6105216004803603604081101561062057600080fd5b506001600160a01b0381351690602001351515611293565b61065e6004803603602081101561064e57600080fd5b50356001600160a01b0316611326565b60408051921515835260208301919091528051918290030190f35b6105f86004803603604081101561068f57600080fd5b506001600160a01b0381358116916020013516611345565b6105f8611464565b6105f861146a565b610521600480360360608110156106cd57600080fd5b506001600160a01b03813516906020810135906040013561147e565b6105f861160e565b6104ab6004803603602081101561070757600080fd5b50356001600160a01b0316611614565b6105f8611632565b610500600480360360e081101561073557600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c0013561163e565b6104ab6004803603606081101561077657600080fd5b506001600160a01b038135811691602081013590911690604001356116eb565b610521600480360360408110156107ac57600080fd5b813591908101906040810160208201356401000000008111156107ce57600080fd5b8201836020820111156107e057600080fd5b8035906020019184602083028401116401000000008311171561080257600080fd5b5090925090506118c3565b6104ab6004803603602081101561082357600080fd5b50356001600160a01b0316611d2c565b6105a8611d4a565b610843611d72565b6040805160ff9092168252519081900360200190f35b6105a8611d7b565b6105f86004803603606081101561087757600080fd5b506001600160a01b038135169060208101359060400135611d8a565b610521600480360360408110156108a957600080fd5b506001600160a01b0381351690602001356120ef565b610521600480360360208110156108d557600080fd5b50356001600160a01b0316612258565b610521600480360360608110156108fb57600080fd5b506001600160a01b038135169060208101359060400135612291565b6105216004803603606081101561092d57600080fd5b506001600160a01b0381351690602081013590604001356124d6565b6105f8612644565b6105f86004803603606081101561096757600080fd5b506001600160a01b03813516906020810135906040013561264a565b6105f86004803603606081101561099957600080fd5b506001600160a01b038135169060208101359060400135612ad2565b6104ab600480360360408110156109cb57600080fd5b506001600160a01b038135169060200135613001565b6105f8600480360360208110156109f757600080fd5b50356001600160a01b03166130d9565b6105f860048036036060811015610a1d57600080fd5b506001600160a01b0381351690602081013590604001356130eb565b6105f860048036036020811015610a4f57600080fd5b50356001600160a01b03166135d4565b61052160048036036040811015610a7557600080fd5b81359190810190604081016020820135640100000000811115610a9757600080fd5b820183602082011115610aa957600080fd5b80359060200191846020830284011164010000000083111715610acb57600080fd5b5090925090506135ef565b6105f861399d565b610500600480360360a0811015610af457600080fd5b506001600160a01b03813581169160208101359160408201351690606081013590608001356139a8565b6105f861409a565b6105f8600480360360c0811015610b3c57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356140ae565b610500600480360360a0811015610b7757600080fd5b506001600160a01b0381358116916020810135916040820135169060608101359060800135614178565b61052160048036036020811015610bb757600080fd5b5035614848565b61052160048036036020811015610bd457600080fd5b50356001600160a01b031661493f565b6105f8614a0a565b6105f8614a29565b6105f8614a36565b6105f860048036036020811015610c1257600080fd5b50356001600160a01b0316614a3b565b61052b614a97565b6105f8614af8565b6105a8614b04565b6105f8614b13565b610521614b20565b6105f8600480360360a0811015610c6057600080fd5b5080359060208101359060408101359060608101359060800135614b47565b6105f8614bac565b6104ab60048036036040811015610c9d57600080fd5b506001600160a01b038135169060200135614bb2565b6105f8614c89565b6104ab60048036036020811015610cd157600080fd5b50356001600160a01b0316614c8e565b6105f8614ca3565b61052160048036036020811015610cff57600080fd5b5035614ca8565b6105f8614da5565b610500600480360360c0811015610d2457600080fd5b5080359060208101359060408101359060608101359060808101359060a00135614daa565b6105f8614e3b565b610d59614e47565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610d95578181015183820152602001610d7d565b505050509050019250505060405180910390f35b61052160048036036020811015610dbf57600080fd5b50356001600160a01b0316614ecd565b6105f8614f06565b6105a8614f16565b61052160048036036040811015610df557600080fd5b506001600160a01b0381351690602001351515614f25565b6105f8614f67565b6105f8614f6d565b6104ab60048036036040811015610e3357600080fd5b506001600160a01b038135169060200135614f8c565b61052160048036036020811015610e5f57600080fd5b50356001600160a01b031661500d565b6105f860048036036040811015610e8557600080fd5b506001600160a01b0381358116916020013516615153565b6105f861517e565b6105f860048036036020811015610ebb57600080fd5b50356001600160a01b031661518e565b6105f860048036036020811015610ee157600080fd5b50356001600160a01b03166151fc565b610500600480360360c0811015610f0757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135615258565b6104ab615302565b60006001600160a01b038216610f87576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b506001600160a01b03811660009081526018602052604090205460ff165b919050565b6000806000610fb98988615312565b90506000610fd8610fd2670de0b6b3a764000084615425565b87615487565b90506000610ff788610ff2670de0b6b3a764000085615425565b615312565b9050611004818988615549565b935060006110128d83615425565b90506000611020828f615312565b9050600061102e8287615646565b9050600061103c828f615487565b9050600061104a8f83615425565b905061106681610ff2670de0b6b3a764000060c8815b04615425565b9950505050505050505097509795505050505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156110f257600080fd5b600b805461ff001916610100179055600d54336001600160a01b039091161461111a57600080fd5b60135460ff161561112a57600080fd5b6014546002111561113a57600080fd5b6013805460ff191660011790556010805460ff60a01b1916600160a01b17905561116c68056bc75e2d63100000615754565b61117f3368056bc75e2d63100000615760565b600b805461ff0019169055565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112185780601f106111ed57610100808354040283529160200191611218565b820191906000526020600020905b8154815290600101906020018083116111fb57829003601f168201915b5050505050905090565b600f546001600160a01b031681565b3360008181526007602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020615e8a833981519152928290030190a35060015b92915050565b6802b5e3af16b188000081565b600c546001600160a01b031633146112aa57600080fd5b6001600160a01b0382166112fb576040805162461bcd60e51b815260206004820152601360248201527273657474696e67203020616464726573733b3b60681b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6016602052600090815260409020805460019091015460ff9091169082565b600b54600090610100900460ff161561135d57600080fd5b6001600160a01b03831660009081526015602052604090205460ff166113ba576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611417576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0380841660009081526015602052604080822092851682529020600380830154600280850154928401549084015460115461145b94929190614b47565b95945050505050565b60085490565b6402540be400670de0b6b3a76400005b0481565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600e546001600160a01b038481169116146114f957600080fd5b600d546001600160a01b0316331461151057600080fd5b6001600160a01b03831660009081526015602052604090205460ff161561153657600080fd5b60135460ff161561154657600080fd5b60145460081161155557600080fd5b6040805160808101825260018082526014805460208085019182526000858701818152606087018281526001600160a01b038c1680845260159094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319169091179055611609836064606385025b0483612291565b505050565b60025481565b6001600160a01b031660009081526016602052604090205460ff1690565b670de0b6b3a764000081565b600080600061164d8988615312565b90506000611666610fd2670de0b6b3a764000084615425565b9050600061168588611680670de0b6b3a764000085615425565b615487565b9050611692888288615549565b935060006116a08d8361576e565b905060006116ae828f615312565b905060006116bc8287615646565b905060006116ca828f615487565b90506116d6818f615425565b98505050505050505097509795505050505050565b6000336001600160a01b038516148061172757506001600160a01b03841660009081526007602090815260408083203384529091529020548211155b61173057600080fd5b60408051628503ed60e61b8152336004820152905160009182918291632140fb40916024808301926020929190829003018186803b15801561177157600080fd5b505afa158015611785573d6000803e3d6000fd5b505050506040513d602081101561179b57600080fd5b505190506001811515146117ec576040805162461bcd60e51b815260206004820152601360248201527202a3930b739b332b91034b9902637b1b5b2b21606d1b604482015290519081900360640190fd5b6117f78686866157bb565b336001600160a01b0387161480159061183557506001600160a01b038616600090815260076020908152604080832033845290915290205460001914155b156118b7576001600160a01b03861660009081526007602090815260408083203384529091529020546118689085615425565b6001600160a01b0387811660009081526007602090815260408083203380855290835292819020859055805194855251928916939192600080516020615e8a8339815191529281900390910190a35b50600195945050505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561193957600080fd5b600b805461ff00191661010017905560135460ff16611992576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b336000908152601660205260409020805460ff161515600114156119f35742816001015411156119f35760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b60006119fd611464565b90506000611a178660c8670de0b6b3a76400005b04615487565b90506000611a258783615425565b90506000611a338285615312565b905080611a79576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b611a83338961588e565b600b54611a9f906201000090046001600160a01b031684615760565b611aa882615898565b60005b601454811015611d1657600060148281548110611ac457fe5b60009182526020808320909101546001600160a01b03168083526015909152604082206003015490925090611af98583615487565b905080611b3f576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8a8a85818110611b4b57fe5b90506020020135811015611b96576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3929081900390910190a3611be98333836158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611c3457600080fd5b505afa158015611c48573d6000803e3d6000fd5b505050506040513d6020811015611c5e57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015611cc157600080fd5b505afa158015611cd5573d6000803e3d6000fd5b505050506040513d6020811015611ceb57600080fd5b5051600e546001600160a01b0316600090815260156020526040902060030155505050600101611aab565b5050600b805461ff001916905550505050505050565b6001600160a01b031660009081526015602052604090205460ff1690565b600b54600090610100900460ff1615611d6257600080fd5b50600c546001600160a01b031690565b600b5460ff1690565b6010546001600160a01b031681565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615611e0257600080fd5b600b805461ff001916610100179055600f546001600160a01b03858116911614611e66576040805162461bcd60e51b815260206004820152601060248201526f43616e206f6e6c79206164642046454760801b604482015290519081900360640190fd5b60135460ff16611eb1576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16611f0e576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038416600090815260156020526040902060030154600554611f379190615487565b831115611f7e576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b600060156000866001600160a01b03166001600160a01b0316815260200190815260200160002090506000611fc8826003015483600201546008546019548960115460125461163e565b909350905083831015612012576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518681526020810183905281516001600160a01b0389169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a36001600160a01b03861660009081526017602052604090205461207d908261576e565b6001600160a01b03871660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a26120c683615754565b6120d03384615760565b6120db863387615972565b5050600b805461ff00191690559392505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561216557600080fd5b600b805461ff001916610100179055600c54336001600160a01b039091161461218d57600080fd5b6001600160a01b03821660009081526015602052604090205460ff16156121b357600080fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561220257600080fd5b505afa158015612216573d6000803e3d6000fd5b505050506040513d602081101561222c57600080fd5b505190508082111561223d57600080fd5b6122488333846158a1565b5050600b805461ff001916905550565b600c546001600160a01b0316331461226f57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561230757600080fd5b600b805461ff001916610100179055600d54336001600160a01b039091161461232f57600080fd5b6001600160a01b03831660009081526015602052604090205460ff1661235457600080fd5b60135460ff161561236457600080fd5b670de0b6b3a764000081101561237957600080fd5b6802b5e3af16b188000081111561238f57600080fd5b620f424082101561239f57600080fd5b6001600160a01b038316600090815260156020526040902060020154808211156123f7576123d86019546123d38484615425565b61576e565b60198190556802b5e3af16b188000010156123f257600080fd5b612418565b808210156124185761241460195461240f8385615425565b615425565b6019555b6001600160a01b038416600090815260156020526040902060028101839055600301805490849055808411156124615761245c85336124578785615425565b615972565b6124c4565b808410156124c45760006124758286615425565b9050600061248d8260c8670de0b6b3a7640000611a11565b90506124a3873361249e8585615425565b6158a1565b600b546124c19088906201000090046001600160a01b0316836158a1565b50505b5050600b805461ff0019169055505050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600d546001600160a01b0316331461254e57600080fd5b6001600160a01b03831660009081526015602052604090205460ff161561257457600080fd5b60135460ff161561258457600080fd5b60145460081161259357600080fd5b6040805160808101825260018082526014805460208085019182526000858701818152606087018281526001600160a01b038c1680845260159094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b031916909117905561160983606460628502611602565b60055481565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156126c257600080fd5b600b805461ff001916610100179055600e546001600160a01b03858116911614612727576040805162461bcd60e51b8152602060048201526011602482015270086c2dc40dedcd8f240c2c8c840cc8aa89607b1b604482015290519081900360640190fd5b60135460ff16612772576040805162461bcd60e51b815260206004820152601160248201527011549497d393d517d19253905312569151607a1b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff166127cf576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152601560205260409020600301546005546127f89190615487565b83111561283f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b600060156000866001600160a01b03166001600160a01b0316815260200190815260200160002090506000612889826003015483600201546008546019548960115460125461163e565b9093509050838310156128d3576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b604080518681526020810183905281516001600160a01b0389169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a36001600160a01b03861660009081526017602052604090205461293e908261576e565b6001600160a01b03871660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a261298783615754565b6129913384615760565b61299c863387615972565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156129e757600080fd5b505afa1580156129fb573d6000803e3d6000fd5b505050506040513d6020811015612a1157600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015612a7457600080fd5b505afa158015612a88573d6000803e3d6000fd5b505050506040513d6020811015612a9e57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050600b805461ff00191690559392505050565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615612b4a57600080fd5b600b805461ff00191661010017905560135460ff16612ba3576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16612c00576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b038416600090815260156020526040902060030154600554612c299190615487565b831115612c71576040805162461bcd60e51b81526020600482015260116024820152704552525f4d41585f4f55545f524154494f60781b604482015290519081900360640190fd5b336000908152601660205260409020805460ff16151560011415612cd2574281600101541115612cd25760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b600060156000876001600160a01b03166001600160a01b0316815260200190815260200160002090506000612d1c826003015483600201546008546019548a601154601254610faa565b909450905083612d65576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b84841115612da9576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b612dc0612dba836003015488615425565b82615425565b60038301556000612ddb8560c8670de0b6b3a7640000611a11565b604080518981526020810185905281519293506001600160a01b038b169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3928290030190a36001600160a01b038816600090815260176020526040902054612e46908361576e565b6001600160a01b03891660008181526017602090815260409182902093909355805185815290519192600080516020615e2c83398151915292918290030190a2612e90338661588e565b612ea2612e9d8683615425565b615898565b600b54612ebe906201000090046001600160a01b031682615760565b612ec98833896158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f1457600080fd5b505afa158015612f28573d6000803e3d6000fd5b505050506040513d6020811015612f3e57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b158015612fa157600080fd5b505afa158015612fb5573d6000803e3d6000fd5b505050506040513d6020811015612fcb57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505050600b805461ff00191690559392505050565b3360009081526007602090815260408083206001600160a01b038616845290915281205480831115613056573360009081526007602090815260408083206001600160a01b0388168452909152812055613085565b6130608184615425565b3360009081526007602090815260408083206001600160a01b03891684529091529020555b3360008181526007602090815260408083206001600160a01b038916808552908352928190205481519081529051929392600080516020615e8a833981519152929181900390910190a35060019392505050565b60176020526000908152604090205481565b6000336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561316357600080fd5b600b805461ff00191661010017905560135460ff166131bc576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b6001600160a01b03841660009081526015602052604090205460ff16613219576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b336000908152601660205260409020805460ff1615156001141561327a57428160010154111561327a5760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b6001600160a01b0385166000908152601560205260409020600381015460028201546008546019546011546132b494939291908a906140ae565b9250838310156132fb576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6001600160a01b0386166000908152601560205260409020600301546005546133249190615487565b83111561336c576040805162461bcd60e51b81526020600482015260116024820152704552525f4d41585f4f55545f524154494f60781b604482015290519081900360640190fd5b6000613389826003015483600201546008546019548a60006140ae565b9050600061339a8286601254615549565b905060006133b28860c8670de0b6b3a7640000611a11565b604080518881526020810185905281519293506001600160a01b038c169233927f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3928290030190a36001600160a01b03891660009081526017602052604090205461341d908361576e565b6001600160a01b038a1660008181526017602090815260409182902093909355805185815290519192600080516020615e2c83398151915292918290030190a2613467338961588e565b613474612e9d8983615425565b600b54613490906201000090046001600160a01b031682615760565b61349b8933886158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156134e657600080fd5b505afa1580156134fa573d6000803e3d6000fd5b505050506040513d602081101561351057600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561357357600080fd5b505afa158015613587573d6000803e3d6000fd5b505050506040513d602081101561359d57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050505050600b805461ff00191690559392505050565b6001600160a01b031660009081526006602052604090205490565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561366557600080fd5b600b805461ff00191661010017905560135460ff166136be576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d310555390d2115160821b604482015290519081900360640190fd5b60006136c8611464565b905060006136d68583615312565b90508061371c576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60005b6014548110156139895760006014828154811061373857fe5b60009182526020808320909101546001600160a01b0316808352601590915260408220600301549092509061376d8583615487565b9050806137b3576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b8787858181106137bf57fe5b90506020020135811115613809576040805162461bcd60e51b815260206004820152600c60248201526b22a9292fa624a6a4aa2fa4a760a11b604482015290519081900360640190fd5b604080518281526000602082015281516001600160a01b0386169233927f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a929081900390910190a361385c833383615972565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156138a757600080fd5b505afa1580156138bb573d6000803e3d6000fd5b505050506040513d60208110156138d157600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561393457600080fd5b505afa158015613948573d6000803e3d6000fd5b505050506040513d602081101561395e57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505060010161371f565b5061399385615754565b6124c43386615760565b66071afd498d000081565b6000806139b4336159cb565b156139f05760405162461bcd60e51b815260040180806020018281038252603e815260200180615e4c603e913960400191505060405180910390fd5b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff1615613a6657600080fd5b600b805461ff001916610100179055600f546001600160a01b03888116911614613acb576040805162461bcd60e51b815260206004820152601160248201527043616e206f6e6c792073656c6c2046454760781b604482015290519081900360640190fd5b6001600160a01b03871660009081526015602052604090205460ff16613b28576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613b85576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b601054600160a01b900460ff16613bd9576040805162461bcd60e51b81526020600482015260136024820152724552525f535741505f4e4f545f5055424c494360681b604482015290519081900360640190fd5b6001600160a01b03808816600090815260156020526040808220928816825290206003820154600454613c0c9190615487565b881115613c51576040805162461bcd60e51b815260206004820152600e60248201526d4552525f53454c4c5f524154494f60901b604482015290519081900360640190fd5b6000613c728360030154846002015484600301548560020154601154614b47565b905085811115613cbf576040805162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b604482015290519081900360640190fd5b6000613cee846003015485600201548560030154866002015460648f60620281613ce557fe5b04601154614daa565b909650905087861015613d38576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b6000613d4682601254615a1d565b9050613d678560030154866002015486600301548760020154601154614b47565b955082861015613db0576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b87861115613df7576040805162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b604482015290519081900360640190fd5b613e018b88615312565b831115613e47576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b896001600160a01b03168c6001600160a01b0316336001600160a01b03167f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe60648f60620281613e9357fe5b60408051929091048252602082018d9052818101879052519081900360600190a46001600160a01b038c16600090815260176020526040902054613ed7908261576e565b6001600160a01b038d1660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a2613f228c338d615972565b6000613f35886116806019612710615312565b90506000613f438983615425565b9050613f508c33836158a1565b613f5a8c83615a7c565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613fa557600080fd5b505afa158015613fb9573d6000803e3d6000fd5b505050506040513d6020811015613fcf57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b15801561403257600080fd5b505afa158015614046573d6000803e3d6000fd5b505050506040513d602081101561405c57600080fd5b5051600e546001600160a01b031660009081526015602052604090206003015550505050505050600b805461ff001916905590969095509350505050565b64e8d4a51000670de0b6b3a764000061147a565b6000806140bb8786615312565b905060006140d785611680670de0b6b3a764000060c881611060565b905060006140e58883615425565b905060006140f3828a615312565b905060006141128261410d670de0b6b3a764000088615312565b615646565b90506000614120828e615487565b9050600061412e8e83615425565b9050600061414d614147670de0b6b3a76400008a615425565b8b615487565b905061416582611680670de0b6b3a764000084615425565b9f9e505050505050505050505050505050565b600080614184336159cb565b156141c05760405162461bcd60e51b815260040180806020018281038252603e815260200180615e4c603e913960400191505060405180910390fd5b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561423657600080fd5b600b805461ff001916610100179055600e546001600160a01b038881169116146142a0576040805162461bcd60e51b8152602060048201526016602482015275086c2dc40dedcd8f240c4eaf240eed2e8d040cc8aa8960531b604482015290519081900360640190fd5b6001600160a01b03871660009081526015602052604090205460ff166142fd576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff1661435a576040805162461bcd60e51b815260206004820152600d60248201526c11549497d393d517d093d55391609a1b604482015290519081900360640190fd5b601054600160a01b900460ff166143ae576040805162461bcd60e51b81526020600482015260136024820152724552525f535741505f4e4f545f5055424c494360681b604482015290519081900360640190fd5b6001600160a01b038088166000908152601560205260408082209288168252902060038201546143e8906002670de0b6b3a7640000611a11565b88111561442f576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d41585f494e5f524154494f60801b604482015290519081900360640190fd5b60006144508360030154846002015484600301548560020154601154614b47565b90508581111561449d576040805162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b604482015290519081900360640190fd5b60006144cb846003015485600201548560030154866002015460648f606302816144c357fe5b046000614daa565b909650905087861015614515576040805162461bcd60e51b815260206004820152600d60248201526c11549497d31253525517d3d555609a1b604482015290519081900360640190fd5b600061452382601254615a1d565b90506145448560030154866002015486600301548760020154601154614b47565b95508286101561458d576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b878611156145d4576040805162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b604482015290519081900360640190fd5b6145de8b88615312565b831115614624576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b896001600160a01b03168c6001600160a01b0316336001600160a01b03167f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe60648f6063028161467057fe5b60408051929091048252602082018d9052818101879052519081900360600190a46001600160a01b038c166000908152601760205260409020546146b4908261576e565b6001600160a01b038d1660008181526017602090815260409182902093909355805184815290519192600080516020615e2c83398151915292918290030190a26146ff8c338d615972565b61470a8a33896158a1565b600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561475557600080fd5b505afa158015614769573d6000803e3d6000fd5b505050506040513d602081101561477f57600080fd5b5051600f546001600160a01b0390811660009081526015602090815260409182902060030193909355600e5481516370a0823160e01b815230600482015291519216926370a0823192602480840193829003018186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d602081101561480c57600080fd5b5051600e546001600160a01b03166000908152601560205260409020600301555050505050600b805461ff001916905590969095509350505050565b600d546001600160a01b031633146148a7576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b600081116148ee576040805162461bcd60e51b815260206004820152600f60248201526e31b0b73737ba103a3ab9371037b33360891b604482015290519081900360640190fd5b606481111561493a576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f742073657420756e64657220312560681b604482015290519081900360640190fd5b600155565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff16156149b557600080fd5b600b805461ff001916610100179055600c54336001600160a01b03909116146149dd57600080fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055600b805461ff0019169055565b600b54600090610100900460ff1615614a2257600080fd5b5060195490565b68056bc75e2d6310000081565b600081565b600b54600090610100900460ff1615614a5357600080fd5b6001600160a01b03821660009081526015602052604090205460ff16614a7857600080fd5b506001600160a01b031660009081526015602052604090206002015490565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112185780601f106111ed57610100808354040283529160200191611218565b6704a03ce68d21555681565b6003546001600160a01b031681565b6542524f4e5a4560d01b90565b336000908152601660205260409020805460ff1916600190811782556276a7004201910155565b600080614b548787615312565b90506000614b628686615312565b90506000614b708383615312565b90506000614b92670de0b6b3a7640000610ff2670de0b6b3a764000089615425565b9050614b9e8282615487565b9a9950505050505050505050565b60015481565b6000806000816001600160a01b0316632140fb40336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614c0457600080fd5b505afa158015614c18573d6000803e3d6000fd5b505050506040513d6020811015614c2e57600080fd5b50519050600181151514614c735760405162461bcd60e51b8152600401808060200182810382526048815260200180615de46048913960600191505060405180910390fd5b614c7e3386866157bb565b506001949350505050565b600881565b60186020526000908152604090205460ff1681565b600281565b600d546001600160a01b03163314614d07576040805162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f742068617665207065726d697373696f6e000000000000604482015290519081900360640190fd5b600a8111614d52576040805162461bcd60e51b815260206004820152601360248201527263616e6e6f7420736574206f7665722031302560681b604482015290519081900360640190fd5b60c8811115614da0576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f742073657420756e64657220302e352560581b604482015290519081900360640190fd5b600255565b600181565b6000806000614db98887615312565b90506000614dcf670de0b6b3a764000086615425565b9050614ddb8682615487565b90506000614ded8b610ff28d8561576e565b90506000614dfb8285615646565b90506000614e11670de0b6b3a764000083615425565b9050614e1d8b82615487565b9650614e298985615425565b95505050505050965096945050505050565b671bc16d674ec7ffff81565b600b54606090610100900460ff1615614e5f57600080fd5b60135460ff16614e6e57600080fd5b601480548060200260200160405190810160405280929190818152602001828054801561121857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614ea6575050505050905090565b600c546001600160a01b03163314614ee457600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60c8670de0b6b3a764000061147a565b600e546001600160a01b031681565b600c546001600160a01b03163314614f3c57600080fd5b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b60045481565b600b54600090610100900460ff1615614f8557600080fd5b5060115490565b3360009081526007602090815260408083206001600160a01b0386168452909152812054614fba908361576e565b3360008181526007602090815260408083206001600160a01b038916808552908352928190208590558051948552519193600080516020615e8a833981519152929081900390910190a350600192915050565b336001600160a01b03166000356001600160e01b0319166001600160e01b03191660003660405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a2600b54610100900460ff161561508357600080fd5b600b805461010061ff001990911617908190556201000090046001600160a01b031633146150b057600080fd5b60005b601454811015615144576000601482815481106150cc57fe5b60009182526020808320909101546001600160a01b039081168084526017835260408085208054959055805185815290519195508593928816927fb1a010070ad56d8c61053bbbaab3187ecea3e288b70f3384b105cd979228608e92918290030190a361513a8285836158a1565b50506001016150b3565b5050600b805461ff0019169055565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6002670de0b6b3a764000061147a565b600b54600090610100900460ff16156151a657600080fd5b6001600160a01b03821660009081526015602052604090205460ff166151cb57600080fd5b6001600160a01b0382166000908152601560205260409020600201546019546151f5908290615312565b9392505050565b600b54600090610100900460ff161561521457600080fd5b6001600160a01b03821660009081526015602052604090205460ff1661523957600080fd5b506001600160a01b031660009081526015602052604090206003015490565b60008060006152678689615312565b905060006152758887615425565b905060006152838983615312565b905060006152918285615646565b90506152a581670de0b6b3a7640000615425565b90506152b18c82615487565b90506152c5670de0b6b3a764000088615425565b95506152d18187615312565b95506152e581670de0b6b3a7640000615312565b94506152f18686615425565b945050505050965096945050505050565b601054600160a01b900460ff1690565b600081615355576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a7640000830283158061537d5750670de0b6b3a764000084828161537a57fe5b04145b6153c1576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6002830481018181101561540f576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b600084828161541a57fe5b049695505050505050565b60008060006154348585615b44565b91509150801561547f576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008282028315806154a157508284828161549e57fe5b04145b6154e5576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015615538576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a76400008261541a565b600082841015615592576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b670de0b6b3a76400008211156155e5576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60006155f18585615425565b90506155fd8184615487565b91508181101561547f576040805162461bcd60e51b815260206004820152600f60248201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604482015290519081900360640190fd5b60006001831015615696576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff8311156156ec576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b60006156f783615b69565b905060006157058483615425565b9050600061571b8661571685615b84565b615b92565b90508161572c579250611280915050565b600061573d87846305f5e100615be9565b90506157498282615487565b979650505050505050565b61575d81615cc7565b50565b61576a8282615d3c565b5050565b6000828201838110156151f5576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b6001600160a01b0383166000908152600660205260409020548111156157e057600080fd5b6001600160a01b0383166000908152600660205260409020546158039082615425565b6001600160a01b038085166000908152600660205260408082209390935590841681522054615832908261576e565b6001600160a01b0380841660008181526006602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b61576a8282615d47565b61575d81615d52565b6000836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156158fa57600080fd5b505af115801561590e573d6000803e3d6000fd5b505050506040513d602081101561592457600080fd5b505190508061596c576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b50505050565b604080516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905291516000928616916323b872dd91606480830192602092919082900301818787803b1580156158fa57600080fd5b60006159d682610f34565b156159e357506000610fa5565b813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590615a155750808214155b949350505050565b6000670de0b6b3a7640000821115615a72576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b6151f58383615487565b6003546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101849052905160009285169163a9059cbb91604480830192602092919082900301818787803b158015615ad257600080fd5b505af1158015615ae6573d6000803e3d6000fd5b505050506040513d6020811015615afc57600080fd5b5051905080611609576040805162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b604482015290519081900360640190fd5b600080828410615b5a5750508082036000615b62565b505081810360015b9250929050565b6000670de0b6b3a7640000615b7d83615b84565b0292915050565b670de0b6b3a7640000900490565b60008060028306615bab57670de0b6b3a7640000615bad565b835b90506002830492505b82156151f557615bc68485615487565b93506002830615615bde57615bdb8185615487565b90505b600283049250615bb6565b6000828180615c0087670de0b6b3a7640000615b44565b9092509050670de0b6b3a764000080600060015b888410615cb8576000670de0b6b3a764000082029050600080615c488a615c4385670de0b6b3a7640000615425565b615b44565b91509150615c5a87611680848c615487565b9650615c668784615312565b965086615c7557505050615cb8565b8715615c7f579315935b8015615c89579315935b8415615ca057615c998688615425565b9550615cad565b615caa868861576e565b95505b505050600101615c14565b50909998505050505050505050565b30600090815260066020526040902054615ce1908261576e565b30600090815260066020526040902055600854615cfe908261576e565b60085560408051828152905130916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b61576a3083836157bb565b61576a8230836157bb565b30600090815260066020526040902054811115615d6e57600080fd5b30600090815260066020526040902054615d889082615425565b30600090815260066020526040902055600854615da59082615425565b60085560408051828152905160009130917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35056fe4c6971756964697479206973206c6f636b65642c20796f752063616e6e6f742072656d6f766564206c697175696469747920756e74696c206166746572206c6f636b2074696d652e9448856d254ce9f0a13e70882297125673303bfaa163fc49ad146aa8bb556607556e617070726f76656420636f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e74657261637420776974682074686520737761708c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122023860faecfd2c1ef72621ad64b98986336c1cf930bda6351846fc22cc0612eba64736f6c63430007060033
Deployed Bytecode Sourcemap
16102:29779:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19809:191;;;;;;;;;;;;;;;;-1:-1:-1;19809:191:0;-1:-1:-1;;;;;19809:191:0;;:::i;:::-;;;;;;;;;;;;;;;;;;9712:1125;;;;;;;;;;;;;;;;-1:-1:-1;9712:1125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22799:367;;;:::i;:::-;;13644:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18256:63;;;:::i;:::-;;;;-1:-1:-1;;;;;18256:63:0;;;;;;;;;;;;;;14254:184;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14254:184:0;;;;;;;;:::i;1404:50::-;;;:::i;:::-;;;;;;;;;;;;;;;;19561:236;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19561:236:0;;;;;;;;;;:::i;18765:44::-;;;;;;;;;;;;;;;;-1:-1:-1;18765:44:0;-1:-1:-1;;;;;18765:44:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;26518:491;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26518:491:0;;;;;;;;;;:::i;14158:88::-;;;:::i;1838:54::-;;;:::i;23902:746::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23902:746:0;;;;;;;;;;;;;:::i;1615:20::-;;;:::i;16475:112::-;;;;;;;;;;;;;;;;-1:-1:-1;16475:112:0;-1:-1:-1;;;;;16475:112:0;;:::i;1295:45::-;;;:::i;7712:999::-;;;;;;;;;;;;;;;;-1:-1:-1;7712:999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15462:633::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15462:633:0;;;;;;;;;;;;;;;;;:::i;28070:1476::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28070:1476:0;;-1:-1:-1;28070:1476:0;-1:-1:-1;28070:1476:0;:::i;21164:123::-;;;;;;;;;;;;;;;;-1:-1:-1;21164:123:0;-1:-1:-1;;;;;21164:123:0;;:::i;22464:137::-;;;:::i;13830:82::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18326:74;;;:::i;38054:1519::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38054:1519:0;;;;;;;;;;;;;:::i;26158:352::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26158:352:0;;;;;;;;:::i;20750:120::-;;;;;;;;;;;;;;;;-1:-1:-1;20750:120:0;-1:-1:-1;;;;;20750:120:0;;:::i;24656:1491::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24656:1491:0;;;;;;;;;;;;;:::i;23176:714::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23176:714:0;;;;;;;;;;;;;:::i;2080:47::-;;;:::i;36411:1635::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36411:1635:0;;;;;;;;;;;;;:::i;41880:2057::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41880:2057:0;;;;;;;;;;;;;:::i;14706:397::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14706:397:0;;;;;;;;:::i;18816:43::-;;;;;;;;;;;;;;;;-1:-1:-1;18816:43:0;-1:-1:-1;;;;;18816:43:0;;:::i;39581:2291::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39581:2291:0;;;;;;;;;;;;;:::i;14048:102::-;;;;;;;;;;;;;;;;-1:-1:-1;14048:102:0;-1:-1:-1;;;;;14048:102:0;;:::i;27017:1042::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27017:1042:0;;-1:-1:-1;27017:1042:0;-1:-1:-1;27017:1042:0;:::i;1039:57::-;;;:::i;32536:3365::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32536:3365:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1461:54::-;;;:::i;8719:983::-;;;;;;;;;;;;;;;;-1:-1:-1;8719:983:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29556:2972::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29556:2972:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20183:263::-;;;;;;;;;;;;;;;;-1:-1:-1;20183:263:0;;:::i;22609:180::-;;;;;;;;;;;;;;;;-1:-1:-1;22609:180:0;-1:-1:-1;;;;;22609:180:0;;:::i;21699:148::-;;;:::i;1524:51::-;;;:::i;1239:47::-;;;:::i;21482:209::-;;;;;;;;;;;;;;;;-1:-1:-1;21482:209:0;-1:-1:-1;;;;;21482:209:0;;:::i;13735:87::-;;;:::i;1957:59::-;;;:::i;1642:68::-;;;:::i;702:121::-;;;:::i;35913:230::-;;;:::i;5587:509::-;;;;;;;;;;;;;;;;-1:-1:-1;5587:509:0;;;;;;;;;;;;;;;;;;;;;;:::i;1588:20::-;;;:::i;15111:343::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15111:343:0;;;;;;;;:::i;988:42::-;;;:::i;18866:47::-;;;;;;;;;;;;;;;;-1:-1:-1;18866:47:0;-1:-1:-1;;;;;18866:47:0;;:::i;939:42::-;;;:::i;20458:280::-;;;;;;;;;;;;;;;;-1:-1:-1;20458:280:0;;:::i;1719:46::-;;;:::i;6106:769::-;;;;;;;;;;;;;;;;-1:-1:-1;6106:769:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1772:59::-;;;:::i;21295:179::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20882:131;;;;;;;;;;;;;;;;-1:-1:-1;20882:131:0;-1:-1:-1;;;;;20882:131:0;;:::i;1181:51::-;;;:::i;18185:64::-;;;:::i;36155:240::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36155:240:0;;;;;;;;;;:::i;2023:50::-;;;:::i;22328:128::-;;;:::i;14446:252::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14446:252:0;;;;;;;;:::i;43945:489::-;;;;;;;;;;;;;;;;-1:-1:-1;43945:489:0;-1:-1:-1;;;;;43945:489:0;;:::i;13920:120::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13920:120:0;;;;;;;;;;:::i;1901:49::-;;;:::i;21855:258::-;;;;;;;;;;;;;;;;-1:-1:-1;21855:258:0;-1:-1:-1;;;;;21855:258:0;;:::i;22121:199::-;;;;;;;;;;;;;;;;-1:-1:-1;22121:199:0;-1:-1:-1;;;;;22121:199:0;;:::i;6885:817::-;;;;;;;;;;;;;;;;-1:-1:-1;6885:817:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21025:123::-;;;:::i;19809:191::-;19873:4;-1:-1:-1;;;;;19897:19:0;;19889:51;;;;;-1:-1:-1;;;19889:51:0;;;;;;;;;;;;-1:-1:-1;;;19889:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19968:24:0;;;;;;:17;:24;;;;;;;;19809:191;;;;:::o;9712:1125::-;9988:17;10007:13;10042:21;10066:33;10071:14;10087:11;10066:4;:33::i;:::-;10042:57;;10110:8;10121:43;10126:28;924:6;10137:16;10126:4;:28::i;:::-;10156:7;10121:4;:43::i;:::-;10110:54;;10175:32;10210:37;10215:14;10231:15;924:6;10242:3;10231:4;:15::i;:::-;10210:4;:37::i;:::-;10175:72;;10269;10282:27;10311:14;10327:13;10269:12;:72::i;:::-;10258:83;;10354:23;10380:50;10385:15;10402:27;10380:4;:50::i;:::-;10354:76;;10441:18;10462:41;10467:18;10487:15;10462:4;:41::i;:::-;10441:62;;10518:14;10535:37;10540:13;10555:16;10535:4;:37::i;:::-;10518:54;;10583:18;10604:27;10609:9;10620:10;10604:4;:27::i;:::-;10583:48;;10642:29;10674:31;10679:10;10691:13;10674:4;:31::i;:::-;10642:63;-1:-1:-1;10735:52:0;10642:63;10766:20;924:6;1229:3;924:6;1222:10;;10766:4;:20::i;10735:52::-;10720:67;;10798:31;;;;;;;;9712:1125;;;;;;;;;;:::o;22799:367::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;22905:10:::2;::::0;22891::::2;-1:-1:-1::0;;;;;22905:10:0;;::::2;22891:24;22883:33;;;::::0;::::2;;22936:9;::::0;::::2;;22935:10;22927:19;;;::::0;::::2;;22965:7;:14:::0;980:1:::2;-1:-1:-1::0;22965:34:0::2;22957:43;;;::::0;::::2;;23013:9;:16:::0;;-1:-1:-1;;23013:16:0::2;23025:4;23013:16;::::0;;23040:11:::2;:18:::0;;-1:-1:-1;;;;23040:18:0::2;-1:-1:-1::0;;;23040:18:0::2;::::0;;23071:32:::2;1565:10:::0;23071:14:::2;:32::i;:::-;23114:44;23129:10;1565::::0;23114:14:::2;:44::i;:::-;17790:6:::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;22799:367::o;13644:83::-;13714:5;13707:12;;;;;;;;-1:-1:-1;;13707:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13681:13;;13707:12;;13714:5;;13707:12;;13714:5;13707:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13644:83;:::o;18256:63::-;;;-1:-1:-1;;;;;18256:63:0;;:::o;14254:184::-;14340:10;14312:4;14329:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14329:27:0;;;;;;;;;;;:33;;;14378:30;;;;;;;14312:4;;14329:27;;14340:10;;-1:-1:-1;;;;;;;;;;;14378:30:0;;;;;;;-1:-1:-1;14426:4:0;14254:184;;;;;:::o;1404:50::-;1445:9;1404:50;:::o;19561:236::-;19660:11;;-1:-1:-1;;;;;19660:11:0;19646:10;:25;19638:34;;;;;;-1:-1:-1;;;;;19691:19:0;;19683:51;;;;;-1:-1:-1;;;19683:51:0;;;;;;;;;;;;-1:-1:-1;;;19683:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19755:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;19755:34:0;;;;;;;;;;19561:236::o;18765:44::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;26518:491::-;17863:6;;26636:14;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;;;;;26676:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:23;::::1;;26668:49;;;::::0;;-1:-1:-1;;;26668:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26668:49:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26736:18:0;::::1;;::::0;;;:8:::1;:18;::::0;;;;:24;::::1;;26728:50;;;::::0;;-1:-1:-1;;;26728:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26728:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26815:17:0;;::::1;26789:23;26815:17:::0;;;:8:::1;:17;::::0;;;;;26870:18;;::::1;::::0;;;;26920:16:::1;::::0;;::::1;::::0;26938:15:::1;::::0;;::::1;::::0;26955:17;;::::1;::::0;26974:16;;::::1;::::0;26992:8:::1;::::0;26906:95:::1;::::0;26938:15;26955:17;26974:16;26906:13:::1;:95::i;:::-;26899:102:::0;26518:491;-1:-1:-1;;;;;26518:491:0:o;14158:88::-;14226:12;;14158:88;:::o;1838:54::-;1886:6;924;1879:13;;1838:54;:::o;23902:746::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;24115:4:::1;::::0;-1:-1:-1;;;;;24106:13:0;;::::1;24115:4:::0;::::1;24106:13;24098:22;;;::::0;::::1;;24153:10;::::0;-1:-1:-1;;;;;24153:10:0::1;24139;:24;24131:33;;;::::0;::::1;;-1:-1:-1::0;;;;;24184:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;24183:22;24175:31;;;::::0;::::1;;24226:9;::::0;::::1;;24225:10;24217:19;;;::::0;::::1;;24257:7;:14:::0;1029:1:::1;-1:-1:-1::0;24249:42:0::1;;;::::0;::::1;;24322:238;::::0;;::::1;::::0;::::1;::::0;;24351:4:::1;24322:238:::0;;;24377:7:::1;:14:::0;;24322:238:::1;::::0;;::::1;::::0;;;-1:-1:-1;24322:238:0;;;;;;;;;;;;-1:-1:-1;;;;;24304:15:0;::::1;::::0;;;:8:::1;:15:::0;;;;;;:256;;;;-1:-1:-1;;24304:256:0::1;::::0;::::1;;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;24571:19;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24571:19:0::1;::::0;;::::1;::::0;;24601:39:::1;24304:15:::0;24628:3:::1;24625:2;24615:12:::0;::::1;:16;;24633:6;24601;:39::i;:::-;23902:746:::0;;;:::o;1615:20::-;;;;:::o;16475:112::-;-1:-1:-1;;;;;16557:14:0;16529:9;16557:14;;;:9;:14;;;;;:22;;;;16475:112::o;1295:45::-;924:6;1295:45;:::o;7712:999::-;7985:18;8005:13;8038:21;8062:32;8067:13;8082:11;8062:4;:32::i;:::-;8038:56;;8106:8;8117:43;8122:28;924:6;8133:16;8122:4;:28::i;8117:43::-;8106:54;;8171:26;8200:36;8205:13;8220:15;924:6;8231:3;8220:4;:15::i;:::-;8200:4;:36::i;:::-;8171:65;;8260;8273:13;8288:21;8311:13;8260:12;:65::i;:::-;8249:76;;8336:22;8361:43;8366:14;8382:21;8361:4;:43::i;:::-;8336:68;;8415:17;8435:39;8440:17;8459:14;8435:4;:39::i;:::-;8415:59;;8490:14;8507:36;8512:12;8526:16;8507:4;:36::i;:::-;8490:53;;8554:18;8575:27;8580:9;8591:10;8575:4;:27::i;:::-;8554:48;;8629:31;8634:13;8649:10;8629:4;:31::i;:::-;8613:47;;8671:32;;;;;;;7712:999;;;;;;;;;;:::o;15462:633::-;15538:4;15563:10;-1:-1:-1;;;;;15563:17:0;;;;:55;;-1:-1:-1;;;;;;15591:15:0;;;;;;:10;:15;;;;;;;;15607:10;15591:27;;;;;;;;15584:34;;;15563:55;15555:64;;;;;;15669:29;;;-1:-1:-1;;;15669:29:0;;15687:10;15669:29;;;;;;15630:13;;;;;;15669:17;;:29;;;;;;;;;;;;;;15630:13;15669:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15669:29:0;;-1:-1:-1;15738:4:0;15727:15;;;;15719:47;;;;;-1:-1:-1;;;15719:47:0;;;;;;;;;;;;-1:-1:-1;;;15719:47:0;;;;;;;;;;;;;;;15797:20;15803:3;15808;15813;15797:5;:20::i;:::-;15832:10;-1:-1:-1;;;;;15832:17:0;;;;;;:63;;-1:-1:-1;;;;;;15853:15:0;;;;;;:10;:15;;;;;;;;15869:10;15853:27;;;;;;;;-1:-1:-1;;15853:42:0;;15832:63;15828:238;;;-1:-1:-1;;;;;15947:15:0;;;;;;:10;:15;;;;;;;;15963:10;15947:27;;;;;;;;15942:38;;15976:3;15942:4;:38::i;:::-;-1:-1:-1;;;;;15912:15:0;;;;;;;:10;:15;;;;;;;;15928:10;15912:27;;;;;;;;;;:68;;;16000:54;;;;;;;;;;15928:10;;-1:-1:-1;;;;;;;;;;;16000:54:0;;;;;;;;;15828:238;-1:-1:-1;16083:4:0;;15462:633;-1:-1:-1;;;;;15462:633:0:o;28070:1476::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;28223:9:::2;::::0;17754:13:::1;28223:9:::2;28215:38;;;::::0;;-1:-1:-1;;;28215:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;28215:38:0;;;;;;;;;;;;;::::2;;28299:10;28264:22;28289:21:::0;;;:9:::2;:21;::::0;;;;28334:13;;::::2;;:21;;:13:::0;:21:::2;28331:173;;;28400:15;28380:5;:16;;;:35;;28372:120;;;;-1:-1:-1::0;;;28372:120:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28516:14;28533:13;:11;:13::i;:::-;28516:30:::0;-1:-1:-1;28557:12:0::2;28572:28;28577:12:::0;1229:3:::2;924:6;1222:10;;28572:4;:28::i;:::-;28557:43;;28611:20;28634:27;28639:12;28653:7;28634:4;:27::i;:::-;28611:50;;28672:10;28685:32;28690:15;28707:9;28685:4;:32::i;:::-;28672:45:::0;-1:-1:-1;28736:10:0;28728:38:::2;;;::::0;;-1:-1:-1;;;28728:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;28728:38:0;;;;;;;;;;;;;::::2;;28779:40;28794:10;28806:12;28779:14;:40::i;:::-;28845:8;::::0;28830:33:::2;::::0;28845:8;;::::2;-1:-1:-1::0;;;;;28845:8:0::2;28855:7:::0;28830:14:::2;:33::i;:::-;28874:31;28889:15;28874:14;:31::i;:::-;28941:6;28936:601;28957:7;:14:::0;28953:18;::::2;28936:601;;;28993:9;29005:7;29013:1;29005:10;;;;;;;;;::::0;;;::::2;::::0;;;;;::::2;::::0;-1:-1:-1;;;;;29005:10:0::2;29041:11:::0;;;:8:::2;:11:::0;;;;;;:19:::2;;::::0;29005:10;;-1:-1:-1;29041:19:0;29097:16:::2;29102:5:::0;29041:19;29097:4:::2;:16::i;:::-;29075:38:::0;-1:-1:-1;29136:19:0;29128:47:::2;;;::::0;;-1:-1:-1;;;29128:47:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;29128:47:0;;;;;;;;;;;;;::::2;;29216:13;;29230:1;29216:16;;;;;;;;;;;;;29198:14;:34;;29190:60;;;::::0;;-1:-1:-1;;;29190:60:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;29190:60:0;;;;;;;;;;;;;::::2;;29270:42;::::0;;;;;29310:1:::2;29270:42;::::0;::::2;::::0;;;-1:-1:-1;;;;;29270:42:0;::::2;::::0;29279:10:::2;::::0;29270:42:::2;::::0;;;;;;;;;::::2;29327:46;29343:1;29346:10;29358:14;29327:15;:46::i;:::-;29419:3;::::0;29412:36:::2;::::0;;-1:-1:-1;;;29412:36:0;;29442:4:::2;29412:36;::::0;::::2;::::0;;;-1:-1:-1;;;;;29419:3:0;;::::2;::::0;29412:21:::2;::::0;:36;;;;;::::2;::::0;;;;;;;;;29419:3;29412:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;29412:36:0;29397:3:::2;::::0;-1:-1:-1;;;;;29397:3:0;;::::2;29388:13;::::0;;;:8:::2;29412:36;29388:13:::0;;;;;;;;:21:::2;;:60:::0;;;;29495:4:::2;::::0;29488:37;;-1:-1:-1;;;29488:37:0;;29519:4:::2;29488:37;::::0;::::2;::::0;;;29495:4;::::2;::::0;29488:22:::2;::::0;:37;;;;;;;;;;29495:4;29488:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;29488:37:0;29472:4:::2;::::0;-1:-1:-1;;;;;29472:4:0::2;29463:14;::::0;;;:8:::2;29488:37;29463:14:::0;;;;:22:::2;;:62:::0;-1:-1:-1;;;29472:4:0;28973:3:::2;28936:601;;;-1:-1:-1::0;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;-1:-1:-1;;;;;;;28070:1476:0:o;21164:123::-;-1:-1:-1;;;;;21262:11:0;21233:4;21262:11;;;:8;:11;;;;;:17;;;;21164:123::o;22464:137::-;17863:6;;22550:7;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;22582:11:0::1;::::0;-1:-1:-1;;;;;22582:11:0::1;22464:137:::0;:::o;13830:82::-;13895:9;;;;13830:82;:::o;18326:74::-;;;-1:-1:-1;;;;;18326:74:0;;:::o;38054:1519::-;38207:18;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;38264:3:::2;::::0;-1:-1:-1;;;;;38253:14:0;;::::2;38264:3:::0;::::2;38253:14;38245:43;;;::::0;;-1:-1:-1;;;38245:43:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38245:43:0;;;;;;;;;;;;;::::2;;38307:9;::::0;::::2;;38299:39;;;::::0;;-1:-1:-1;;;38299:39:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38299:39:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;38357:17:0;::::2;;::::0;;;:8:::2;:17;::::0;;;;:23;::::2;;38349:49;;;::::0;;-1:-1:-1;;;38349:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38349:49:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;38439:17:0;::::2;;::::0;;;:8:::2;:17;::::0;;;;:25:::2;;::::0;38466:11:::2;::::0;38434:44:::2;::::0;38439:25;38434:4:::2;:44::i;:::-;38417:13;:61;;38409:90;;;::::0;;-1:-1:-1;;;38409:90:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38409:90:0;;;;;;;;;;;;;::::2;;38512:23;38538:8;:17;38547:7;-1:-1:-1::0;;;;;38538:17:0::2;-1:-1:-1::0;;;;;38538:17:0::2;;;;;;;;;;;;38512:43;;38568:13;38620:358;38675:8;:16;;;38722:8;:15;;;38768:12;;38811;;38854:13;38898:8;;38937:14;;38620:24;:358::i;:::-;38592:386:::0;;-1:-1:-1;38592:386:0;-1:-1:-1;38999:33:0;;::::2;;38991:59;;;::::0;;-1:-1:-1;;;38991:59:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;38991:59:0;;;;;;;;;;;;;::::2;;39164:54;::::0;;;;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;39164:54:0;::::2;::::0;39173:10:::2;::::0;39164:54:::2;::::0;;;;;;;;;::::2;-1:-1:-1::0;;;;;39270:31:0;::::2;;::::0;;;:13:::2;:31;::::0;;;;;39265:47:::2;::::0;39303:8;39265:4:::2;:47::i;:::-;-1:-1:-1::0;;;;;39231:31:0;::::2;;::::0;;;:13:::2;:31;::::0;;;;;;;;:81;;;;39328:44;;;;;;;39231:31;;-1:-1:-1;;;;;;;;;;;39328:44:0;;;;;;;::::2;39385:29;39400:13;39385:14;:29::i;:::-;39425:41;39440:10;39452:13;39425:14;:41::i;:::-;39477:51;39493:7;39502:10;39514:13;39477:15;:51::i;:::-;39545:20;;17790:6:::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;38054:1519;;-1:-1:-1;;;38054:1519:0:o;26158:352::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;26298:11:::2;::::0;26284:10:::2;-1:-1:-1::0;;;;;26298:11:0;;::::2;26284:25;26276:34;;;::::0;::::2;;-1:-1:-1::0;;;;;26330:15:0;::::2;;::::0;;;:8:::2;:15;::::0;;;;:21;::::2;;26329:22;26321:31;;;::::0;::::2;;26365:8;26383:5;-1:-1:-1::0;;;;;26376:23:0::2;;26408:4;26376:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;26376:38:0::2;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;26376:38:0;;-1:-1:-1;26433:13:0;;::::2;;26425:22;;;::::0;::::2;;26460:42;26476:5;26483:10;26495:6;26460:15;:42::i;:::-;-1:-1:-1::0;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;-1:-1:-1;26158:352:0:o;20750:120::-;20827:11;;-1:-1:-1;;;;;20827:11:0;20813:10;:25;20805:34;;;;;;20846:8;:16;;-1:-1:-1;;;;;;20846:16:0;-1:-1:-1;;;;;20846:16:0;;;;;;;;;;20750:120::o;24656:1491::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;24802:10:::2;::::0;24788::::2;-1:-1:-1::0;;;;;24802:10:0;;::::2;24788:24;24780:33;;;::::0;::::2;;-1:-1:-1::0;;;;;24832:15:0;::::2;;::::0;;;:8:::2;:15;::::0;;;;:21;::::2;;24824:30;;;::::0;::::2;;24874:9;::::0;::::2;;24873:10;24865:19;;;::::0;::::2;;924:6;24905;:20;;24897:29;;;::::0;::::2;;1388:9:::0;24945:20;::::2;;24937:29;;;::::0;::::2;;1502:13:::0;24985:22;::::2;;24977:31;;;::::0;::::2;;-1:-1:-1::0;;;;;25084:15:0;::::2;25067:14;25084:15:::0;;;:8:::2;:15;::::0;;;;:22:::2;;::::0;25121:18;;::::2;25117:280;;;25171:43;25176:12;;25190:23;25195:6;25203:9;25190:4;:23::i;:::-;25171:4;:43::i;:::-;25156:12;:58:::0;;;1445:9;-1:-1:-1;25237:32:0::2;25229:41;;;::::0;::::2;;25117:280;;;25301:9;25292:6;:18;25288:109;;;25342:43;25347:12;;25361:23;25366:9;25377:6;25361:4;:23::i;:::-;25342:4;:43::i;:::-;25327:12;:58:::0;25288:109:::2;-1:-1:-1::0;;;;;25407:15:0;::::2;;::::0;;;:8:::2;:15;::::0;;;;:22:::2;::::0;::::2;:31:::0;;;25532:23:::2;;::::0;;25566:33;;;;25614:20;;::::2;25610:530;;;25651:61;25667:5;25674:10;25686:25;25691:7;25700:10;25686:4;:25::i;:::-;25651:15;:61::i;:::-;25610:530;;;25744:10;25734:7;:20;25730:410;;;25849:26;25878:25;25883:10;25895:7;25878:4;:25::i;:::-;25849:54:::0;-1:-1:-1;25918:17:0::2;25938:37;25849:54:::0;1229:3:::2;924:6;1222:10;::::0;25938:37:::2;25918:57;;25990:77;26006:5;26013:10;26025:41;26030:21;26053:12;26025:4;:41::i;:::-;25990:15;:77::i;:::-;26105:8;::::0;26082:46:::2;::::0;26098:5;;26105:8;;::::2;-1:-1:-1::0;;;;;26105:8:0::2;26115:12:::0;26082:15:::2;:46::i;:::-;25730:410;;;-1:-1:-1::0;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;-1:-1:-1;;;24656:1491:0:o;23176:714::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;23395:10:::1;::::0;-1:-1:-1;;;;;23395:10:0::1;23381;:24;23373:33;;;::::0;::::1;;-1:-1:-1::0;;;;;23426:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;23425:22;23417:31;;;::::0;::::1;;23468:9;::::0;::::1;;23467:10;23459:19;;;::::0;::::1;;23499:7;:14:::0;1029:1:::1;-1:-1:-1::0;23491:42:0::1;;;::::0;::::1;;23564:238;::::0;;::::1;::::0;::::1;::::0;;23593:4:::1;23564:238:::0;;;23619:7:::1;:14:::0;;23564:238:::1;::::0;;::::1;::::0;;;-1:-1:-1;23564:238:0;;;;;;;;;;;;-1:-1:-1;;;;;23546:15:0;::::1;::::0;;;:8:::1;:15:::0;;;;;;:256;;;;-1:-1:-1;;23546:256:0::1;::::0;::::1;;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;23813:19;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23813:19:0::1;::::0;;::::1;::::0;;23843:39:::1;23546:15:::0;23870:3:::1;23867:2;23857:12:::0;::::1;:16;::::0;2080:47;;;;:::o;36411:1635::-;36565:18;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;36622:4:::2;::::0;-1:-1:-1;;;;;36611:15:0;;::::2;36622:4:::0;::::2;36611:15;36603:45;;;::::0;;-1:-1:-1;;;36603:45:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;36603:45:0;;;;;;;;;;;;;::::2;;36667:9;::::0;::::2;;36659:39;;;::::0;;-1:-1:-1;;;36659:39:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;36659:39:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;36717:17:0;::::2;;::::0;;;:8:::2;:17;::::0;;;;:23;::::2;;36709:49;;;::::0;;-1:-1:-1;;;36709:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;36709:49:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;36799:17:0;::::2;;::::0;;;:8:::2;:17;::::0;;;;:25:::2;;::::0;36826:11:::2;::::0;36794:44:::2;::::0;36799:25;36794:4:::2;:44::i;:::-;36777:13;:61;;36769:90;;;::::0;;-1:-1:-1;;;36769:90:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;36769:90:0;;;;;;;;;;;;;::::2;;36872:23;36898:8;:17;36907:7;-1:-1:-1::0;;;;;36898:17:0::2;-1:-1:-1::0;;;;;36898:17:0::2;;;;;;;;;;;;36872:43;;36928:13;36980:358;37035:8;:16;;;37082:8;:15;;;37128:12;;37171;;37214:13;37258:8;;37297:14;;36980:24;:358::i;:::-;36952:386:::0;;-1:-1:-1;36952:386:0;-1:-1:-1;37359:33:0;;::::2;;37351:59;;;::::0;;-1:-1:-1;;;37351:59:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;37351:59:0;;;;;;;;;;;;;::::2;;37499:54;::::0;;;;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;37499:54:0;::::2;::::0;37508:10:::2;::::0;37499:54:::2;::::0;;;;;;;;;::::2;-1:-1:-1::0;;;;;37605:31:0;::::2;;::::0;;;:13:::2;:31;::::0;;;;;37600:47:::2;::::0;37638:8;37600:4:::2;:47::i;:::-;-1:-1:-1::0;;;;;37566:31:0;::::2;;::::0;;;:13:::2;:31;::::0;;;;;;;;:81;;;;37663:44;;;;;;;37566:31;;-1:-1:-1;;;;;;;;;;;37663:44:0;;;;;;;::::2;37720:29;37735:13;37720:14;:29::i;:::-;37760:41;37775:10;37787:13;37760:14;:41::i;:::-;37812:51;37828:7;37837:10;37849:13;37812:15;:51::i;:::-;37905:3;::::0;37898:36:::2;::::0;;-1:-1:-1;;;37898:36:0;;37928:4:::2;37898:36;::::0;::::2;::::0;;;-1:-1:-1;;;;;37905:3:0;;::::2;::::0;37898:21:::2;::::0;:36;;;;;::::2;::::0;;;;;;;;;37905:3;37898:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;37898:36:0;37883:3:::2;::::0;-1:-1:-1;;;;;37883:3:0;;::::2;37874:13;::::0;;;:8:::2;37898:36;37874:13:::0;;;;;;;;:21:::2;;:60:::0;;;;37977:4:::2;::::0;37970:37;;-1:-1:-1;;;37970:37:0;;38001:4:::2;37970:37;::::0;::::2;::::0;;;37977:4;::::2;::::0;37970:22:::2;::::0;:37;;;;;;;;;;37977:4;37970:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;37970:37:0;37954:4:::2;::::0;-1:-1:-1;;;;;37954:4:0::2;37945:14;::::0;;;:8:::2;37970:37;37945:14:::0;;;;:22:::2;;:62:::0;-1:-1:-1;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;36411:1635;;-1:-1:-1;;;36411:1635:0:o;41880:2057::-;42049:17;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;42092:9:::2;::::0;17754:13:::1;42092:9:::2;42084:38;;;::::0;;-1:-1:-1;;;42084:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;42084:38:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;42141:18:0;::::2;;::::0;;;:8:::2;:18;::::0;;;;:24;::::2;;42133:50;;;::::0;;-1:-1:-1;;;42133:50:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;42133:50:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;42225:18:0;::::2;;::::0;;;:8:::2;:18;::::0;;;;:26:::2;;::::0;42253:11:::2;::::0;42220:45:::2;::::0;42225:26;42220:4:::2;:45::i;:::-;42202:14;:63;;42194:93;;;::::0;;-1:-1:-1;;;42194:93:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;42194:93:0;;;;;;;;;;;;;::::2;;42335:10;42300:22;42325:21:::0;;;:9:::2;:21;::::0;;;;42370:13;;::::2;;:21;;:13:::0;:21:::2;42367:173;;;42436:15;42416:5;:16;;;:35;;42408:120;;;;-1:-1:-1::0;;;42408:120:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42570:24;42597:8;:18;42606:8;-1:-1:-1::0;;;;;42597:18:0::2;-1:-1:-1::0;;;;;42597:18:0::2;;;;;;;;;;;;42570:45;;42628:13;42679:361;42734:9;:17;;;42782:9;:16;;;42829:12;;42872;;42915:14;42960:8;;42999:14;;42679:24;:361::i;:::-;42652:388:::0;;-1:-1:-1;42652:388:0;-1:-1:-1;43061:17:0;43053:45:::2;;;::::0;;-1:-1:-1;;;43053:45:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;43053:45:0;;;;;;;;;;;;;::::2;;43133:15;43117:12;:31;;43109:56;;;::::0;;-1:-1:-1;;;43109:56:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;43109:56:0;;;;;;;;;;;;;::::2;;43198:55;43203:39;43208:9;:17;;;43227:14;43203:4;:39::i;:::-;43244:8;43198:4;:55::i;:::-;43178:17;::::0;::::2;:75:::0;43266:12:::2;43281:28;43286:12:::0;1229:3:::2;924:6;1222:10;::::0;43281:28:::2;43327:56;::::0;;;;;::::2;::::0;::::2;::::0;;;;;43266:43;;-1:-1:-1;;;;;;43327:56:0;::::2;::::0;43336:10:::2;::::0;43327:56:::2;::::0;;;;;;::::2;-1:-1:-1::0;;;;;43436:32:0;::::2;;::::0;;;:13:::2;:32;::::0;;;;;43431:48:::2;::::0;43470:8;43431:4:::2;:48::i;:::-;-1:-1:-1::0;;;;;43396:32:0;::::2;;::::0;;;:13:::2;:32;::::0;;;;;;;;:83;;;;43495:45;;;;;;;43396:32;;-1:-1:-1;;;;;;;;;;;43495:45:0;;;;;;;::::2;43553:40;43568:10;43580:12;43553:14;:40::i;:::-;43604:43;43619:27;43624:12;43638:7;43619:4;:27::i;:::-;43604:14;:43::i;:::-;43673:8;::::0;43658:33:::2;::::0;43673:8;;::::2;-1:-1:-1::0;;;;;43673:8:0::2;43683:7:::0;43658:14:::2;:33::i;:::-;43702:53;43718:8;43728:10;43740:14;43702:15;:53::i;:::-;43797:3;::::0;43790:36:::2;::::0;;-1:-1:-1;;;43790:36:0;;43820:4:::2;43790:36;::::0;::::2;::::0;;;-1:-1:-1;;;;;43797:3:0;;::::2;::::0;43790:21:::2;::::0;:36;;;;;::::2;::::0;;;;;;;;;43797:3;43790:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43790:36:0;43775:3:::2;::::0;-1:-1:-1;;;;;43775:3:0;;::::2;43766:13;::::0;;;:8:::2;43790:36;43766:13:::0;;;;;;;;:21:::2;;:60:::0;;;;43869:4:::2;::::0;43862:37;;-1:-1:-1;;;43862:37:0;;43893:4:::2;43862:37;::::0;::::2;::::0;;;43869:4;::::2;::::0;43862:22:::2;::::0;:37;;;;;;;;;;43869:4;43862:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43862:37:0;43846:4:::2;::::0;-1:-1:-1;;;;;43846:4:0::2;43837:14;::::0;;;:8:::2;43862:37;43837:14:::0;;;;:22:::2;;:62:::0;-1:-1:-1;;;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;41880:2057;;-1:-1:-1;;;41880:2057:0:o;14706:397::-;14817:10;14773:4;14806:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14806:27:0;;;;;;;;;;14848:14;;;14844:160;;;14890:10;14909:1;14879:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14879:27:0;;;;;;;;;:31;14844:160;;;14973:19;14978:8;14988:3;14973:4;:19::i;:::-;14954:10;14943:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14943:27:0;;;;;;;;;:49;14844:160;15028:10;15045:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;15019:54:0;;15045:27;;;;;;;;;;;15019:54;;;;;;;;;15028:10;-1:-1:-1;;;;;;;;;;;15019:54:0;;;;;;;;;;-1:-1:-1;15091:4:0;;14706:397;-1:-1:-1;;;14706:397:0:o;18816:43::-;;;;;;;;;;;;;:::o;39581:2291::-;39742:19;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;39787:9:::2;::::0;17754:13:::1;39787:9:::2;39779:38;;;::::0;;-1:-1:-1;;;39779:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;39779:38:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;39836:18:0;::::2;;::::0;;;:8:::2;:18;::::0;;;;:24;::::2;;39828:50;;;::::0;;-1:-1:-1;;;39828:50:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;39828:50:0;;;;;;;;;;;;;::::2;;39934:10;39899:22;39924:21:::0;;;:9:::2;:21;::::0;;;;39969:13;;::::2;;:21;;:13:::0;:21:::2;39966:173;;;40035:15;40015:5;:16;;;:35;;40007:120;;;;-1:-1:-1::0;;;40007:120:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40178:18:0;::::2;40151:24;40178:18:::0;;;:8:::2;:18;::::0;;;;40281:17:::2;::::0;::::2;::::0;40329:16:::2;::::0;::::2;::::0;40376:12:::2;::::0;40419::::2;::::0;40505:8:::2;::::0;40226:314:::2;::::0;40281:17;40329:16;40376:12;40419;40462;;40226:24:::2;:314::i;:::-;40209:331;;40579:12;40561:14;:30;;40553:56;;;::::0;;-1:-1:-1;;;40553:56:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40553:56:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;40653:18:0;::::2;;::::0;;;:8:::2;:18;::::0;;;;:26:::2;;::::0;40681:11:::2;::::0;40648:45:::2;::::0;40653:26;40648:4:::2;:45::i;:::-;40630:14;:63;;40622:93;;;::::0;;-1:-1:-1;;;40622:93:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;40622:93:0;;;;;;;;;;;;;::::2;;40728:26;40757:195;40796:9;:17;;;40828:9;:16;;;40859:12;;40886;;40913;40940:1;40757:24;:195::i;:::-;40728:224;;40963:13;40979:117;41006:21;41042:14;41071;;40979:12;:117::i;:::-;40963:133:::0;-1:-1:-1;41199:12:0::2;41214:28;41219:12:::0;1229:3:::2;924:6;1222:10;::::0;41214:28:::2;41260:56;::::0;;;;;::::2;::::0;::::2;::::0;;;;;41199:43;;-1:-1:-1;;;;;;41260:56:0;::::2;::::0;41269:10:::2;::::0;41260:56:::2;::::0;;;;;;::::2;-1:-1:-1::0;;;;;41369:32:0;::::2;;::::0;;;:13:::2;:32;::::0;;;;;41364:48:::2;::::0;41403:8;41364:4:::2;:48::i;:::-;-1:-1:-1::0;;;;;41329:32:0;::::2;;::::0;;;:13:::2;:32;::::0;;;;;;;;:83;;;;41428:45;;;;;;;41329:32;;-1:-1:-1;;;;;;;;;;;41428:45:0;;;;;;;::::2;41486:40;41501:10;41513:12;41486:14;:40::i;:::-;41537:43;41552:27;41557:12;41571:7;41552:4;:27::i;41537:43::-;41606:8;::::0;41591:33:::2;::::0;41606:8;;::::2;-1:-1:-1::0;;;;;41606:8:0::2;41616:7:::0;41591:14:::2;:33::i;:::-;41635:53;41651:8;41661:10;41673:14;41635:15;:53::i;:::-;41730:3;::::0;41723:36:::2;::::0;;-1:-1:-1;;;41723:36:0;;41753:4:::2;41723:36;::::0;::::2;::::0;;;-1:-1:-1;;;;;41730:3:0;;::::2;::::0;41723:21:::2;::::0;:36;;;;;::::2;::::0;;;;;;;;;41730:3;41723:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;41723:36:0;41708:3:::2;::::0;-1:-1:-1;;;;;41708:3:0;;::::2;41699:13;::::0;;;:8:::2;41723:36;41699:13:::0;;;;;;;;:21:::2;;:60:::0;;;;41802:4:::2;::::0;41795:37;;-1:-1:-1;;;41795:37:0;;41826:4:::2;41795:37;::::0;::::2;::::0;;;41802:4;::::2;::::0;41795:22:::2;::::0;:37;;;;;;;;;;41802:4;41795:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;41795:37:0;41779:4:::2;::::0;-1:-1:-1;;;;;41779:4:0::2;41770:14;::::0;;;:8:::2;41795:37;41770:14:::0;;;;:22:::2;;:62:::0;-1:-1:-1;;;;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;39581:2291;;-1:-1:-1;;;39581:2291:0:o;14048:102::-;-1:-1:-1;;;;;14128:14:0;14104:4;14128:14;;;:8;:14;;;;;;;14048:102::o;27017:1042::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;27167:9:::2;::::0;17754:13:::1;27167:9:::2;27159:38;;;::::0;;-1:-1:-1;;;27159:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;27159:38:0;;;;;;;;;;;;;::::2;;27210:14;27227:13;:11;:13::i;:::-;27210:30;;27251:10;27264:30;27269:13;27284:9;27264:4;:30::i;:::-;27251:43:::0;-1:-1:-1;27313:10:0;27305:38:::2;;;::::0;;-1:-1:-1;;;27305:38:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;27305:38:0;;;;;;;;;;;;;::::2;;27361:6;27356:594;27377:7;:14:::0;27373:18;::::2;27356:594;;;27413:9;27425:7;27433:1;27425:10;;;;;;;;;::::0;;;::::2;::::0;;;;;::::2;::::0;-1:-1:-1;;;;;27425:10:0::2;27461:11:::0;;;:8:::2;:11:::0;;;;;;:19:::2;;::::0;27425:10;;-1:-1:-1;27461:19:0;27516:16:::2;27521:5:::0;27461:19;27516:4:::2;:16::i;:::-;27495:37:::0;-1:-1:-1;27555:18:0;27547:46:::2;;;::::0;;-1:-1:-1;;;27547:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;27547:46:0;;;;;;;;;;;;;::::2;;27633:12;;27646:1;27633:15;;;;;;;;;;;;;27616:13;:32;;27608:57;;;::::0;;-1:-1:-1;;;27608:57:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;27608:57:0;;;;;;;;;;;;;::::2;;27685:41;::::0;;;;;27724:1:::2;27685:41;::::0;::::2;::::0;;;-1:-1:-1;;;;;27685:41:0;::::2;::::0;27694:10:::2;::::0;27685:41:::2;::::0;;;;;;;;;::::2;27741:45;27757:1;27760:10;27772:13;27741:15;:45::i;:::-;27832:3;::::0;27825:36:::2;::::0;;-1:-1:-1;;;27825:36:0;;27855:4:::2;27825:36;::::0;::::2;::::0;;;-1:-1:-1;;;;;27832:3:0;;::::2;::::0;27825:21:::2;::::0;:36;;;;;::::2;::::0;;;;;;;;;27832:3;27825:36;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;27825:36:0;27810:3:::2;::::0;-1:-1:-1;;;;;27810:3:0;;::::2;27801:13;::::0;;;:8:::2;27825:36;27801:13:::0;;;;;;;;:21:::2;;:60:::0;;;;27908:4:::2;::::0;27901:37;;-1:-1:-1;;;27901:37:0;;27932:4:::2;27901:37;::::0;::::2;::::0;;;27908:4;::::2;::::0;27901:22:::2;::::0;:37;;;;;;;;;;27908:4;27901:37;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;27901:37:0;27885:4:::2;::::0;-1:-1:-1;;;;;27885:4:0::2;27876:14;::::0;;;:8:::2;27901:37;27876:14:::0;;;;:22:::2;;:62:::0;-1:-1:-1;;;27885:4:0;27393:3:::2;27356:594;;;;27960:29;27975:13;27960:14;:29::i;:::-;28000:41;28015:10;28027:13;28000:14;:41::i;1039:57::-:0;1080:16;1039:57;:::o;32536:3365::-;32770:19;32791;20053:22;20064:10;20053;:22::i;:::-;:31;20045:106;;;;-1:-1:-1;;;20045:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17649:10:::1;-1:-1:-1::0;;;;;17631:39:0::1;17640:7;;-1:-1:-1::0;;;;;;17640:7:0::1;-1:-1:-1::0;;;;;17631:39:0::1;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;17631:39:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0::1;17736:6:::2;::::0;::::2;::::0;::::2;;;17735:7;17727:16;;;::::0;::::2;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::2;;;::::0;;32857:3:::3;::::0;-1:-1:-1;;;;;32846:14:0;;::::3;32857:3:::0;::::3;32846:14;32838:44;;;::::0;;-1:-1:-1;;;32838:44:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;32838:44:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;32901:17:0;::::3;;::::0;;;:8:::3;:17;::::0;;;;:23;::::3;;32893:49;;;::::0;;-1:-1:-1;;;32893:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;32893:49:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;32961:18:0;::::3;;::::0;;;:8:::3;:18;::::0;;;;:24;::::3;;32953:50;;;::::0;;-1:-1:-1;;;32953:50:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;32953:50:0;;;;;;;;;;;;;::::3;;33022:11;::::0;-1:-1:-1;;;33022:11:0;::::3;;;33014:43;;;::::0;;-1:-1:-1;;;33014:43:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;33014:43:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;33096:26:0;;::::3;33070:23;33096:26:::0;;;:8:::3;:26;::::0;;;;;33160:27;;::::3;::::0;;;;33230:16:::3;::::0;::::3;::::0;33248:14:::3;::::0;33225:38:::3;::::0;33230:16;33225:4:::3;:38::i;:::-;33208:13;:55;;33200:82;;;::::0;;-1:-1:-1;;;33200:82:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;33200:82:0;;;;;;;;;;;;;::::3;;33295:20;33318:315;33370:8;:16;;;33425:8;:15;;;33479:9;:17;;;33535:9;:16;;;33590:8;;33318:13;:315::i;:::-;33295:338;;33671:8;33652:15;:27;;33644:59;;;::::0;;-1:-1:-1;;;33644:59:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;33644:59:0;;;;;;;;;;;;;::::3;;33716:15;33773:433;33834:8;:16;;;33897:8;:15;;;33959:9;:17;;;34023:9;:16;;;34105:3;34086:13;34102:2;34086:18;:22;;;;;;34155:8;;33773:14;:433::i;:::-;33742:464:::0;;-1:-1:-1;33742:464:0;-1:-1:-1;34225:30:0;;::::3;;34217:56;;;::::0;;-1:-1:-1;;;34217:56:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;34217:56:0;;;;;;;;;;;;;::::3;;34286:13;34302:47;34322:10;34334:14;;34302:19;:47::i;:::-;34286:63;;34379:291;34427:8;:16;;;34478:8;:15;;;34528:9;:17;;;34580:9;:16;;;34631:8;;34379:13;:291::i;:::-;34362:308;;34707:15;34689:14;:33;;34681:61;;;::::0;;-1:-1:-1;;;34681:61:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;34681:61:0;;;;;;;;;;;;;::::3;;34779:8;34761:14;:26;;34753:54;;;::::0;;-1:-1:-1;;;34753:54:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;34753:54:0;;;;;;;;;;;;;::::3;;34845:35;34850:13;34865:14;34845:4;:35::i;:::-;34826:15;:54;;34818:82;;;::::0;;-1:-1:-1;;;34818:82:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;34818:82:0;;;;;;;;;;;;;::::3;;34948:8;-1:-1:-1::0;;;;;34918:89:0::3;34939:7;-1:-1:-1::0;;;;;34918:89:0::3;34927:10;-1:-1:-1::0;;;;;34918:89:0::3;;34977:3;34958:13;34974:2;34958:18;:22;;;;;34918:89;::::0;;34958:22;;;::::3;34918:89:::0;;::::3;::::0;::::3;::::0;;;;;;;;;;;;;;;;;::::3;-1:-1:-1::0;;;;;35059:31:0;::::3;;::::0;;;:13:::3;:31;::::0;;;;;35054:47:::3;::::0;35092:8;35054:4:::3;:47::i;:::-;-1:-1:-1::0;;;;;35020:31:0;::::3;;::::0;;;:13:::3;:31;::::0;;;;;;;;:81;;;;35117:44;;;;;;;35020:31;;-1:-1:-1;;;;;;;;;;;35117:44:0;;;;;;;::::3;35182:51;35198:7;35207:10;35219:13;35182:15;:51::i;:::-;35244:18;35266:37;35271:14;35287:15;35292:2;35296:5;35287:4;:15::i;35266:37::-;35244:59;;35473:19;35495:32;35500:14;35516:10;35495:4;:32::i;:::-;35473:54;;35538:50;35554:8;35564:10;35576:11;35538:15;:50::i;:::-;35599:38;35616:8;35626:10;35599:16;:38::i;:::-;35741:3;::::0;35734:36:::3;::::0;;-1:-1:-1;;;35734:36:0;;35764:4:::3;35734:36;::::0;::::3;::::0;;;-1:-1:-1;;;;;35741:3:0;;::::3;::::0;35734:21:::3;::::0;:36;;;;;::::3;::::0;;;;;;;;;35741:3;35734:36;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;35734:36:0;35719:3:::3;::::0;-1:-1:-1;;;;;35719:3:0;;::::3;35710:13;::::0;;;:8:::3;35734:36;35710:13:::0;;;;;;;;:21:::3;;:60:::0;;;;35813:4:::3;::::0;35806:37;;-1:-1:-1;;;35806:37:0;;35837:4:::3;35806:37;::::0;::::3;::::0;;;35813:4;::::3;::::0;35806:22:::3;::::0;:37;;;;;;;;;;35813:4;35806:37;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;35806:37:0;35790:4:::3;::::0;-1:-1:-1;;;;;35790:4:0::3;35781:14;::::0;;;:8:::3;35806:37;35781:14:::0;;;;:22:::3;;:62:::0;-1:-1:-1;;;;;;;17790:6:0::2;:14:::0;;-1:-1:-1;;17790:14:0::2;::::0;;32536:3365;;;;-1:-1:-1;32536:3365:0;-1:-1:-1;;;;32536:3365:0:o;1461:54::-;1509:6;924;1502:13;;8719:983;8964:19;9001:21;9025:33;9030:14;9046:11;9025:4;:33::i;:::-;9001:57;-1:-1:-1;9071:29:0;9103:40;9108:12;9122:20;924:6;1229:3;924:6;1222:10;;9103:40;9071:72;;9154:18;9175:42;9180:10;9192:24;9175:4;:42::i;:::-;9154:63;;9228:14;9245:31;9250:13;9265:10;9245:4;:31::i;:::-;9228:48;;9291:18;9312:45;9317:9;9328:28;924:6;9339:16;9328:4;:28::i;:::-;9312:4;:45::i;:::-;9291:66;;9368:23;9394:36;9399:13;9414:15;9394:4;:36::i;:::-;9368:62;;9443:32;9478:41;9483:15;9500:18;9478:4;:41::i;:::-;9443:76;;9530:8;9541:43;9546:28;924:6;9557:16;9546:4;:28::i;:::-;9576:7;9541:4;:43::i;:::-;9530:54;;9612:50;9617:27;9646:15;924:6;9657:3;9646:4;:15::i;9612:50::-;9595:67;8719:983;-1:-1:-1;;;;;;;;;;;;;;;8719:983:0:o;29556:2972::-;29789:19;29810;20053:22;20064:10;20053;:22::i;:::-;:31;20045:106;;;;-1:-1:-1;;;20045:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17649:10:::1;-1:-1:-1::0;;;;;17631:39:0::1;17640:7;;-1:-1:-1::0;;;;;;17640:7:0::1;-1:-1:-1::0;;;;;17631:39:0::1;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;17631:39:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0::1;17736:6:::2;::::0;::::2;::::0;::::2;;;17735:7;17727:16;;;::::0;::::2;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::2;;;::::0;;29876:4:::3;::::0;-1:-1:-1;;;;;29865:15:0;;::::3;29876:4:::0;::::3;29865:15;29857:50;;;::::0;;-1:-1:-1;;;29857:50:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;29857:50:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;29926:17:0;::::3;;::::0;;;:8:::3;:17;::::0;;;;:23;::::3;;29918:49;;;::::0;;-1:-1:-1;;;29918:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;29918:49:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;29986:18:0;::::3;;::::0;;;:8:::3;:18;::::0;;;;:24;::::3;;29978:50;;;::::0;;-1:-1:-1;;;29978:50:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;29978:50:0;;;;;;;;;;;;;::::3;;30047:11;::::0;-1:-1:-1;;;30047:11:0;::::3;;;30039:43;;;::::0;;-1:-1:-1;;;30039:43:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;30039:43:0;;;;;;;;;;;;;::::3;;-1:-1:-1::0;;;;;30129:26:0;;::::3;30103:23;30129:26:::0;;;:8:::3;:26;::::0;;;;;30193:27;;::::3;::::0;;;;30263:16:::3;::::0;::::3;::::0;30258:36:::3;::::0;1949:1:::3;924:6;1942:8;::::0;30258:36:::3;30241:13;:53;;30233:82;;;::::0;;-1:-1:-1;;;30233:82:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;30233:82:0;;;;;;;;;;;;;::::3;;30328:20;30351:315;30403:8;:16;;;30458:8;:15;;;30512:9;:17;;;30568:9;:16;;;30623:8;;30351:13;:315::i;:::-;30328:338;;30704:8;30685:15;:27;;30677:59;;;::::0;;-1:-1:-1;;;30677:59:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;30677:59:0;;;;;;;;;;;;;::::3;;30749:15;30806:437;30867:8;:16;;;30930:8;:15;;;30992:9;:17;;;31056:9;:16;;;31138:3;31119:13;31135:2;31119:18;:22;;;;;;31199:1;30806:14;:437::i;:::-;30775:468:::0;;-1:-1:-1;30775:468:0;-1:-1:-1;31262:30:0;;::::3;;31254:56;;;::::0;;-1:-1:-1;;;31254:56:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;31254:56:0;;;;;;;;;;;;;::::3;;31323:13;31339:47;31359:10;31371:14;;31339:19;:47::i;:::-;31323:63;;31416:291;31464:8;:16;;;31515:8;:15;;;31565:9;:17;;;31617:9;:16;;;31668:8;;31416:13;:291::i;:::-;31399:308;;31744:15;31726:14;:33;;31718:61;;;::::0;;-1:-1:-1;;;31718:61:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;31718:61:0;;;;;;;;;;;;;::::3;;31816:8;31798:14;:26;;31790:54;;;::::0;;-1:-1:-1;;;31790:54:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;31790:54:0;;;;;;;;;;;;;::::3;;31882:35;31887:13;31902:14;31882:4;:35::i;:::-;31863:15;:54;;31855:82;;;::::0;;-1:-1:-1;;;31855:82:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;31855:82:0;;;;;;;;;;;;;::::3;;31985:8;-1:-1:-1::0;;;;;31955:89:0::3;31976:7;-1:-1:-1::0;;;;;31955:89:0::3;31964:10;-1:-1:-1::0;;;;;31955:89:0::3;;32014:3;31995:13;32011:2;31995:18;:22;;;;;31955:89;::::0;;31995:22;;;::::3;31955:89:::0;;::::3;::::0;::::3;::::0;;;;;;;;;;;;;;;;;::::3;-1:-1:-1::0;;;;;32096:31:0;::::3;;::::0;;;:13:::3;:31;::::0;;;;;32091:47:::3;::::0;32129:8;32091:4:::3;:47::i;:::-;-1:-1:-1::0;;;;;32057:31:0;::::3;;::::0;;;:13:::3;:31;::::0;;;;;;;;:81;;;;32154:44;;;;;;;32057:31;;-1:-1:-1;;;;;;;;;;;32154:44:0;;;;;;;::::3;32211:51;32227:7;32236:10;32248:13;32211:15;:51::i;:::-;32273:53;32289:8;32299:10;32311:14;32273:15;:53::i;:::-;32368:3;::::0;32361:36:::3;::::0;;-1:-1:-1;;;32361:36:0;;32391:4:::3;32361:36;::::0;::::3;::::0;;;-1:-1:-1;;;;;32368:3:0;;::::3;::::0;32361:21:::3;::::0;:36;;;;;::::3;::::0;;;;;;;;;32368:3;32361:36;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;32361:36:0;32346:3:::3;::::0;-1:-1:-1;;;;;32346:3:0;;::::3;32337:13;::::0;;;:8:::3;32361:36;32337:13:::0;;;;;;;;:21:::3;;:60:::0;;;;32440:4:::3;::::0;32433:37;;-1:-1:-1;;;32433:37:0;;32464:4:::3;32433:37;::::0;::::3;::::0;;;32440:4;::::3;::::0;32433:22:::3;::::0;:37;;;;;;;;;;32440:4;32433:37;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;32433:37:0;32417:4:::3;::::0;-1:-1:-1;;;;;32417:4:0::3;32408:14;::::0;;;:8:::3;32433:37;32408:14:::0;;;;:22:::3;;:62:::0;-1:-1:-1;;;;;17790:6:0::2;:14:::0;;-1:-1:-1;;17790:14:0::2;::::0;;29556:2972;;;;-1:-1:-1;29556:2972:0;-1:-1:-1;;;;29556:2972:0:o;20183:263::-;20265:10;;-1:-1:-1;;;;;20265:10:0;20251;:24;20243:63;;;;;-1:-1:-1;;;20243:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20336:1;20326:7;:11;20317:40;;;;;-1:-1:-1;;;20317:40:0;;;;;;;;;;;;-1:-1:-1;;;20317:40:0;;;;;;;;;;;;;;;20388:3;20377:7;:14;;20368:47;;;;;-1:-1:-1;;;20368:47:0;;;;;;;;;;;;-1:-1:-1;;;20368:47:0;;;;;;;;;;;;;;;20426:2;:12;20183:263::o;22609:180::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;-1:-1:-1;;17754:13:0::1;;;::::0;;22737:11:::2;::::0;22723:10:::2;-1:-1:-1::0;;;;;22737:11:0;;::::2;22723:25;22715:34;;;::::0;::::2;;22760:11;:21:::0;;-1:-1:-1;;;;;;22760:21:0::2;-1:-1:-1::0;;;;;22760:21:0;;;::::2;::::0;;;::::2;::::0;;17790:6:::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;22609:180::o;21699:148::-;17863:6;;21798:4;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;21827:12:0::1;::::0;21699:148;:::o;1524:51::-;1565:10;1524:51;:::o;1239:47::-;1285:1;1239:47;:::o;21482:209::-;17863:6;;21589:4;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;;;;;21621:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;21613:30;;;::::0;::::1;;-1:-1:-1::0;;;;;;21661:15:0::1;;::::0;;;:8:::1;:15;::::0;;;;:22:::1;;::::0;;21482:209::o;13735:87::-;13807:7;13800:14;;;;;;;;-1:-1:-1;;13800:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13774:13;;13800:14;;13807:7;;13800:14;;13807:7;13800:14;;;;;;;;;;;;;;;;;;;;;;;;1957:59;1998:18;1957:59;:::o;1642:68::-;;;-1:-1:-1;;;;;1642:68:0;;:::o;702:121::-;-1:-1:-1;;;702:121:0;:::o;35913:230::-;35976:10;35961:12;36022:15;;;:9;:15;;;;;36058:20;;-1:-1:-1;;36058:20:0;36074:4;36058:20;;;;;36126:7;36108:15;:25;36089:16;;:44;35913:230::o;5587:509::-;5799:14;5831:10;5844:35;5849:14;5865:13;5844:4;:35::i;:::-;5831:48;;5890:10;5903:37;5908:15;5925:14;5903:4;:37::i;:::-;5890:50;;5951:10;5964:18;5969:5;5976;5964:4;:18::i;:::-;5951:31;;5993:10;6006:31;924:6;6017:19;924:6;6028:7;6017:4;:19::i;6006:31::-;5993:44;;6069:18;6074:5;6081;6069:4;:18::i;:::-;6057:30;5587:509;-1:-1:-1;;;;;;;;;;5587:509:0:o;1588:20::-;;;;:::o;15111:343::-;15170:4;15187:13;15211:12;15226:5;-1:-1:-1;;;;;15226:17:0;;15244:10;15226:29;;;;;;;;;;;;;-1:-1:-1;;;;;15226:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15226:29:0;;-1:-1:-1;15295:4:0;15284:15;;;;15276:100;;;;-1:-1:-1;;;15276:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15397:27;15403:10;15415:3;15420;15397:5;:27::i;:::-;-1:-1:-1;15442:4:0;;15111:343;-1:-1:-1;;;;15111:343:0:o;988:42::-;1029:1;988:42;:::o;18866:47::-;;;;;;;;;;;;;;;:::o;939:42::-;980:1;939:42;:::o;20458:280::-;20550:10;;-1:-1:-1;;;;;20550:10:0;20536;:24;20528:63;;;;;-1:-1:-1;;;20528:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20621:2;20611:7;:12;20602:45;;;;;-1:-1:-1;;;20602:45:0;;;;;;;;;;;;-1:-1:-1;;;20602:45:0;;;;;;;;;;;;;;;20678:3;20667:7;:14;;20658:49;;;;;-1:-1:-1;;;20658:49:0;;;;;;;;;;;;-1:-1:-1;;;20658:49:0;;;;;;;;;;;;;;;20718:2;:12;20458:280::o;1719:46::-;1760:5;1719:46;:::o;6106:769::-;6348:19;6369:15;6402:16;6421:35;6426:13;6441:14;6421:4;:35::i;:::-;6402:54;;6467:15;6485:19;924:6;6496:7;6485:4;:19::i;:::-;6467:37;;6528:31;6533:13;6548:10;6528:4;:31::i;:::-;6515:44;;6570:6;6579:54;6584:14;6600:32;6605:14;6621:10;6600:4;:32::i;6579:54::-;6570:63;;6644:8;6655:20;6660:1;6663:11;6655:4;:20::i;:::-;6644:31;;6686:8;6697:15;924:6;6708:3;6697:4;:15::i;:::-;6686:26;;6740;6745:15;6762:3;6740:4;:26::i;:::-;6723:43;;6790:31;6795:13;6810:10;6790:4;:31::i;:::-;6777:44;;6832:35;;;;;6106:769;;;;;;;;;:::o;1772:59::-;1813:18;1772:59;:::o;21295:179::-;17863:6;;21382:23;;17863:6;;;;;17862:7;17854:16;;;;;;21431:9:::1;::::0;::::1;;21423:18;;;::::0;::::1;;21459:7;21452:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21452:14:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;21295:179:::0;:::o;20882:131::-;20964:11;;-1:-1:-1;;;;;20964:11:0;20950:10;:25;20942:34;;;;;;20983:14;:22;;-1:-1:-1;;;;;;20983:22:0;-1:-1:-1;;;;;20983:22:0;;;;;;;;;;20882:131::o;1181:51::-;1229:3;924:6;1222:10;;18185:64;;;-1:-1:-1;;;;;18185:64:0;;:::o;36155:240::-;36254:11;;-1:-1:-1;;;;;36254:11:0;36240:10;:25;36232:34;;;;;;-1:-1:-1;;;;;36340:15:0;;;;36315:22;36340:15;;;:9;:15;;;;;36366:21;;-1:-1:-1;;36366:21:0;;;;;;;;;;36155:240::o;2023:50::-;;;;:::o;22328:128::-;17863:6;;22411:4;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;22440:8:0::1;::::0;22328:128;:::o;14446:252::-;14576:10;14513:4;14565:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14565:27:0;;;;;;;;;;14560:38;;14594:3;14560:4;:38::i;:::-;14541:10;14530:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14530:27:0;;;;;;;;;;;;:68;;;14614:54;;;;;;14530:27;;-1:-1:-1;;;;;;;;;;;14614:54:0;;;;;;;;;;-1:-1:-1;14686:4:0;14446:252;;;;:::o;43945:489::-;17649:10;-1:-1:-1;;;;;17631:39:0;17640:7;;-1:-1:-1;;;;;;17640:7:0;-1:-1:-1;;;;;17631:39:0;;17661:8;;17631:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17631:39:0;;;;;;;;-1:-1:-1;17631:39:0;;-1:-1:-1;;;;17631:39:0;17736:6:::1;::::0;::::1;::::0;::::1;;;17735:7;17727:16;;;::::0;::::1;;17754:6;:13:::0;;::::1;-1:-1:-1::0;;17754:13:0;;::::1;;::::0;;;;44086:8;;::::2;-1:-1:-1::0;;;;;44086:8:0::2;44072:10;:22;44064:31;;;::::0;::::2;;44113:6;44108:319;44129:7;:14:::0;44125:18;::::2;44108:319;;;44165:9;44177:7;44185:1;44177:10;;;;;;;;;::::0;;;::::2;::::0;;;;;::::2;::::0;-1:-1:-1;;;;;44177:10:0;;::::2;44224:16:::0;;;:13:::2;:16:::0;;;;;;;;44255:20;;;44295:54;;;;;;;44177:10;;-1:-1:-1;44177:10:0;;44295:54;;::::2;::::0;::::2;::::0;;;;;;;::::2;44364:51;44380:1;44383:15;44400:14;44364:15;:51::i;:::-;-1:-1:-1::0;;44145:3:0::2;;44108:319;;;-1:-1:-1::0;;17790:6:0::1;:14:::0;;-1:-1:-1;;17790:14:0::1;::::0;;43945:489::o;13920:120::-;-1:-1:-1;;;;;14012:15:0;;;13988:4;14012:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;13920:120::o;1901:49::-;1949:1;924:6;1942:8;;21855:258;17863:6;;21960:4;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;;;;;21992:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;21984:30;;;::::0;::::1;;-1:-1:-1::0;;;;;22039:15:0;::::1;22025:11;22039:15:::0;;;:8:::1;:15;::::0;;;;:22:::1;;::::0;22092:12:::1;::::0;22079:26:::1;::::0;22039:22;;22079:4:::1;:26::i;:::-;22072:33:::0;21855:258;-1:-1:-1;;;21855:258:0:o;22121:199::-;17863:6;;22217:4;;17863:6;;;;;17862:7;17854:16;;;;;;-1:-1:-1;;;;;22249:15:0;::::1;;::::0;;;:8:::1;:15;::::0;;;;:21;::::1;;22241:30;;;::::0;::::1;;-1:-1:-1::0;;;;;;22289:15:0::1;;::::0;;;:8:::1;:15;::::0;;;;:23:::1;;::::0;;22121:199::o;6885:817::-;7128:18;7148:15;7181:16;7200:35;7205:14;7221:13;7200:4;:35::i;:::-;7181:54;;7246:9;7258:37;7263:15;7280:14;7258:4;:37::i;:::-;7246:49;;7306:6;7315:27;7320:15;7337:4;7315;:27::i;:::-;7306:36;;7353:8;7364:20;7369:1;7372:11;7364:4;:20::i;:::-;7353:31;;7401:15;7406:3;924:6;7401:4;:15::i;:::-;7395:21;;7433:25;7438:14;7454:3;7433:4;:25::i;:::-;7427:31;;7485:19;924:6;7496:7;7485:4;:19::i;:::-;7469:35;;7531:24;7536:3;7541:13;7531:4;:24::i;:::-;7515:40;;7579:15;7584:3;924:6;7579:4;:15::i;:::-;7566:28;;7618:31;7623:13;7638:10;7618:4;:31::i;:::-;7605:44;;7660:34;;;;6885:817;;;;;;;;;:::o;21025:123::-;21119:11;;-1:-1:-1;;;21119:11:0;;;;;21025:123::o;3375:387::-;3446:4;3476:6;3468:31;;;;;-1:-1:-1;;;3468:31:0;;;;;;;;;;;;-1:-1:-1;;;3468:31:0;;;;;;;;;;;;;;;924:6;3520:8;;3547:6;;;:24;;;924:6;3562:1;3557:2;:6;;;;;;:14;3547:24;3539:53;;;;;-1:-1:-1;;;3539:53:0;;;;;;;;;;;;-1:-1:-1;;;3539:53:0;;;;;;;;;;;;;;;3640:1;3636:5;;3630:12;;3661:8;;;;3653:37;;;;;-1:-1:-1;;;3653:37:0;;;;;;;;;;;;-1:-1:-1;;;3653:37:0;;;;;;;;;;;;;;;3718:7;3733:1;3728:2;:6;;;;;;;3375:387;-1:-1:-1;;;;;;3375:387:0:o;2615:202::-;2686:4;2709:6;2717:9;2730:14;2739:1;2742;2730:8;:14::i;:::-;2708:36;;;;2764:4;2763:5;2755:35;;;;;-1:-1:-1;;;2755:35:0;;;;;;;;;;;;-1:-1:-1;;;2755:35:0;;;;;;;;;;;;;;;-1:-1:-1;2808:1:0;2615:202;-1:-1:-1;;;2615:202:0:o;3056:311::-;3127:4;3159:5;;;3183:6;;;:21;;;3203:1;3198;3193:2;:6;;;;;;:11;3183:21;3175:50;;;;;-1:-1:-1;;;3175:50:0;;;;;;;;;;;;-1:-1:-1;;;3175:50:0;;;;;;;;;;;;;;;3252:8;3246:15;;3280:8;;;;3272:37;;;;;-1:-1:-1;;;3272:37:0;;;;;;;;;;;;-1:-1:-1;;;3272:37:0;;;;;;;;;;;;;;;3320:7;924:6;3330:2;:9;;10845:494;10971:13;11027:16;11010:13;:33;;11002:61;;;;;-1:-1:-1;;;11002:61:0;;;;;;;;;;;;-1:-1:-1;;;11002:61:0;;;;;;;;;;;;;;;924:6;11082:13;:21;;11074:53;;;;;-1:-1:-1;;;11074:53:0;;;;;;;;;;;;-1:-1:-1;;;11074:53:0;;;;;;;;;;;;;;;11138:23;11164:37;11169:13;11184:16;11164:4;:37::i;:::-;11138:63;;11223:39;11228:18;11248:13;11223:4;:39::i;:::-;11212:50;;11303:8;11281:18;:30;;11273:58;;;;;-1:-1:-1;;;11273:58:0;;;;;;;;;;;;-1:-1:-1;;;11273:58:0;;;;;;;;;;;;;;4112:552;4188:4;1760:5;4218:4;:21;;4210:55;;;;;-1:-1:-1;;;4210:55:0;;;;;;;;;;;;-1:-1:-1;;;4210:55:0;;;;;;;;;;;;;;;1813:18;4284:21;;;4276:56;;;;;-1:-1:-1;;;4276:56:0;;;;;;;;;;;;-1:-1:-1;;;4276:56:0;;;;;;;;;;;;;;;4345:10;4359:11;4366:3;4359:6;:11::i;:::-;4345:25;;4381:11;4395:16;4400:3;4405:5;4395:4;:16::i;:::-;4381:30;;4424:13;4440:24;4446:4;4452:11;4457:5;4452:4;:11::i;:::-;4440:5;:24::i;:::-;4424:40;-1:-1:-1;4481:11:0;4477:59;;4516:8;-1:-1:-1;4509:15:0;;-1:-1:-1;;4509:15:0;4477:59;4548:18;4569:40;4580:4;4586:6;1879:13;4569:10;:40::i;:::-;4548:61;;4627:29;4632:8;4642:13;4627:4;:29::i;:::-;4620:36;4112:552;-1:-1:-1;;;;;;;4112:552:0:o;45684:92::-;45755:13;45761:6;45755:5;:13::i;:::-;45684:92;:::o;45568:108::-;45651:17;45657:2;45661:6;45651:5;:17::i;:::-;45568:108;;:::o;2427:180::-;2498:4;2529:5;;;2553:6;;;;2545:35;;;;;-1:-1:-1;;;2545:35:0;;;;;;;;;;;;-1:-1:-1;;;2545:35:0;;;;;;;;;;;;;;12991:249;-1:-1:-1;;;;;13070:13:0;;;;;;:8;:13;;;;;;:20;-1:-1:-1;13070:20:0;13062:29;;;;;;-1:-1:-1;;;;;13123:13:0;;;;;;:8;:13;;;;;;13118:24;;13138:3;13118:4;:24::i;:::-;-1:-1:-1;;;;;13102:13:0;;;;;;;:8;:13;;;;;;:40;;;;13174:13;;;;;;;13169:24;;13189:3;13169:4;:24::i;:::-;-1:-1:-1;;;;;13153:13:0;;;;;;;:8;:13;;;;;;;;;:40;;;;13209:23;;;;;;;13153:13;;13209:23;;;;;;;;;;;;;12991:249;;;:::o;45448:112::-;45533:19;45539:4;45545:6;45533:5;:19::i;45784:92::-;45855:13;45861:6;45855:5;:13::i;44832:196::-;44931:9;44950:5;-1:-1:-1;;;;;44943:22:0;;44966:2;44970:6;44943:34;;;;;;;;;;;;;-1:-1:-1;;;;;44943:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44943:34:0;;-1:-1:-1;44943:34:0;44988:32;;;;;-1:-1:-1;;;44988:32:0;;;;;;;;;;;;-1:-1:-1;;;44988:32:0;;;;;;;;;;;;;;;44832:196;;;;:::o;44605:219::-;44718:55;;;-1:-1:-1;;;44718:55:0;;-1:-1:-1;;;;;44718:55:0;;;;;;;44759:4;44718:55;;;;;;;;;;;;44706:9;;44718:26;;;;;:55;;;;;;;;;;;;;;44706:9;44718:26;:55;;;;;;;;;;19161:388;19221:4;19251:28;19271:7;19251:19;:28::i;:::-;19248:51;;;-1:-1:-1;19291:5:0;19284:12;;19248:51;19458:20;;19358:66;19498:15;;;;;:42;;;19529:11;19517:8;:23;;19498:42;19490:51;19161:388;-1:-1:-1;;;;19161:388:0:o;11347:238::-;11447:13;924:6;11486:13;:21;;11478:53;;;;;-1:-1:-1;;;11478:53:0;;;;;;;;;;;;-1:-1:-1;;;11478:53:0;;;;;;;;;;;;;;;11553:24;11558:3;11563:13;11553:4;:24::i;45040:191::-;45163:8;;45140:40;;;-1:-1:-1;;;45140:40:0;;-1:-1:-1;;;;;45163:8:0;;;45140:40;;;;;;;;;;;;45128:9;;45140:22;;;;;:40;;;;;;;;;;;;;;45128:9;45140:22;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45140:40:0;;-1:-1:-1;45140:40:0;45191:32;;;;;-1:-1:-1;;;45191:32:0;;;;;;;;;;;;-1:-1:-1;;;45191:32:0;;;;;;;;;;;;;;2825:223;2900:4;2906;2937:1;2932;:6;2928:113;;-1:-1:-1;;2963:5:0;;;2970;2955:21;;2928:113;-1:-1:-1;;3017:5:0;;;3024:4;2928:113;2825:223;;;;;:::o;2303:116::-;2368:4;924:6;2397:7;2402:1;2397:4;:7::i;:::-;:14;;2303:116;-1:-1:-1;;2303:116:0:o;2187:108::-;924:6;2279:8;;;2187:108::o;3790:314::-;3862:4;;3897:1;3893;:5;:21;;924:6;3893:21;;;3906:1;3893:21;3884:30;-1:-1:-1;3937:1:0;3932:6;;;;3927:151;3940:6;;3927:151;;3975:10;3980:1;3983;3975:4;:10::i;:::-;3971:14;-1:-1:-1;4010:1:0;4006;:5;:10;4002:65;;4041:10;4046:1;4049;4041:4;:10::i;:::-;4037:14;;4002:65;3953:1;3948:6;;;;3927:151;;4672:851;4770:4;4825:3;4770:4;;4862:20;4871:4;924:6;4862:8;:20::i;:::-;4839:43;;-1:-1:-1;4839:43:0;-1:-1:-1;924:6:0;;4893:9;4998:1;4984:509;5009:9;5001:4;:17;4984:509;;5040:9;924:6;5052:1;:8;5040:20;;5076:6;5084:9;5097:29;5106:1;5109:16;5114:4;924:6;5109:4;:16::i;:::-;5097:8;:29::i;:::-;5075:51;;;;5148:22;5153:4;5159:10;5164:1;5167;5159:4;:10::i;5148:22::-;5141:29;;5192:16;5197:4;5203;5192;:16::i;:::-;5185:23;-1:-1:-1;5227:9:0;5223:20;;5238:5;;;;;5223:20;5264:4;5260:30;;;5281:9;;;5260:30;5309:4;5305:30;;;5326:9;;;5305:30;5354:8;5350:132;;;5389:15;5394:3;5399:4;5389;:15::i;:::-;5383:21;;5350:132;;;5451:15;5456:3;5461:4;5451;:15::i;:::-;5445:21;;5350:132;-1:-1:-1;;;5020:3:0;;4984:509;;;-1:-1:-1;5512:3:0;;4672:851;-1:-1:-1;;;;;;;;;4672:851:0:o;12489:218::-;12582:4;12565:23;;;;:8;:23;;;;;;12560:34;;12590:3;12560:4;:34::i;:::-;12551:4;12534:23;;;;:8;:23;;;;;:60;12625:12;;12620:23;;12639:3;12620:4;:23::i;:::-;12605:12;:38;12659:40;;;;;;;;12688:4;;12676:1;;12659:40;;;;;;;;;12489:218;:::o;13248:94::-;13305:29;13319:4;13326:2;13330:3;13305:5;:29::i;13350:98::-;13409:31;13415:4;13429;13436:3;13409:5;:31::i;12715:268::-;12785:4;12768:23;;;;:8;:23;;;;;;:30;-1:-1:-1;12768:30:0;12760:39;;;;;;12858:4;12841:23;;;;:8;:23;;;;;;12836:34;;12866:3;12836:4;:34::i;:::-;12827:4;12810:23;;;;:8;:23;;;;;:60;12901:12;;12896:23;;12915:3;12896:4;:23::i;:::-;12881:12;:38;12935:40;;;;;;;;12967:1;;12952:4;;12935:40;;;;;;;;;12715:268;:::o
Swarm Source
ipfs://23860faecfd2c1ef72621ad64b98986336c1cf930bda6351846fc22cc0612eba
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.