ETH Price: $3,395.16 (+1.67%)

Contract

0xb85bDBba181E88CE7f0Bfd10c641Fc1d7C744293
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer199095872024-05-20 7:16:11223 days ago1716189371IN
0xb85bDBba...d7C744293
0 ETH0.000118922.54668599
Approve189939522024-01-12 22:59:35351 days ago1705100375IN
0xb85bDBba...d7C744293
0 ETH0.0006603727.27475438
Approve189715042024-01-09 19:31:35354 days ago1704828695IN
0xb85bDBba...d7C744293
0 ETH0.0010112721.7498202
Approve189714402024-01-09 19:18:23354 days ago1704827903IN
0xb85bDBba...d7C744293
0 ETH0.000863218.56505357
Approve188724722023-12-26 21:13:59368 days ago1703625239IN
0xb85bDBba...d7C744293
0 ETH0.0008904919.15205124
Approve188713462023-12-26 17:25:47368 days ago1703611547IN
0xb85bDBba...d7C744293
0 ETH0.0017035436.63842389
Approve186657682023-11-27 21:50:59397 days ago1701121859IN
0xb85bDBba...d7C744293
0 ETH0.0024180152.00485502
Approve186371992023-11-23 21:45:23401 days ago1700775923IN
0xb85bDBba...d7C744293
0 ETH0.0013485329.0032805
Approve186370992023-11-23 21:25:23401 days ago1700774723IN
0xb85bDBba...d7C744293
0 ETH0.0014874231.99038336
Approve186311432023-11-23 1:25:59402 days ago1700702759IN
0xb85bDBba...d7C744293
0 ETH0.0012980444.57576362
Approve186306012023-11-22 23:37:11402 days ago1700696231IN
0xb85bDBba...d7C744293
0 ETH0.0010852541.25181125
Approve186305812023-11-22 23:33:11402 days ago1700695991IN
0xb85bDBba...d7C744293
0 ETH0.0016986836.76174168
Approve186138492023-11-20 15:19:47404 days ago1700493587IN
0xb85bDBba...d7C744293
0 ETH0.0013994430.0981166
Approve186138422023-11-20 15:18:23404 days ago1700493503IN
0xb85bDBba...d7C744293
0 ETH0.0014434731.04517018
Approve185845242023-11-16 12:43:47408 days ago1700138627IN
0xb85bDBba...d7C744293
0 ETH0.0008444829.01228315
Approve185808652023-11-16 0:28:11409 days ago1700094491IN
0xb85bDBba...d7C744293
0 ETH0.0008342931.71245033
Approve185741522023-11-15 1:55:11410 days ago1700013311IN
0xb85bDBba...d7C744293
0 ETH0.0012916227.74343975
Approve185694702023-11-14 10:12:59410 days ago1699956779IN
0xb85bDBba...d7C744293
0 ETH0.0007068626.86891084
Approve185694562023-11-14 10:10:11410 days ago1699956611IN
0xb85bDBba...d7C744293
0 ETH0.0007881229.95778658
Approve185675712023-11-14 3:51:35411 days ago1699933895IN
0xb85bDBba...d7C744293
0 ETH0.0007422528.21402968
Approve185675632023-11-14 3:49:59411 days ago1699933799IN
0xb85bDBba...d7C744293
0 ETH0.0012378126.78800135
Approve185668152023-11-14 1:19:59411 days ago1699924799IN
0xb85bDBba...d7C744293
0 ETH0.0014778831.74421207
Approve185654942023-11-13 20:54:47411 days ago1699908887IN
0xb85bDBba...d7C744293
0 ETH0.0020039843.10006516
Approve185515502023-11-11 22:04:35413 days ago1699740275IN
0xb85bDBba...d7C744293
0 ETH0.0007457230.79966573
Approve185470532023-11-11 6:58:47414 days ago1699685927IN
0xb85bDBba...d7C744293
0 ETH0.001199425.7958556
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
184947282023-11-03 23:12:35421 days ago1699053155
0xb85bDBba...d7C744293
0.2 ETH
184947282023-11-03 23:12:35421 days ago1699053155
0xb85bDBba...d7C744293
 Contract Creation0 ETH
184947282023-11-03 23:12:35421 days ago1699053155
0xb85bDBba...d7C744293
0.2 ETH
184947282023-11-03 23:12:35421 days ago1699053155  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x7a435C22...2D7a380f0
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-02
*/

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

interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface Router {
	struct ExactInputSingleParams {
		address tokenIn;
		address tokenOut;
		uint24 fee;
		address recipient;
		uint256 amountIn;
		uint256 amountOutMinimum;
		uint160 sqrtPriceLimitX96;
	}
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
	function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256);
}

interface Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}

interface Pool {
	function initialize(uint160 _sqrtPriceX96) external;
}

interface PositionManager {
	struct MintParams {
		address token0;
		address token1;
		uint24 fee;
		int24 tickLower;
		int24 tickUpper;
		uint256 amount0Desired;
		uint256 amount1Desired;
		uint256 amount0Min;
		uint256 amount1Min;
		address recipient;
		uint256 deadline;
	}
	struct CollectParams {
		uint256 tokenId;
		address recipient;
		uint128 amount0Max;
		uint128 amount1Max;
	}
	function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
	function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1);
}

interface ERC20 {
	function balanceOf(address) external view returns (uint256);
	function transfer(address, uint256) external returns (bool);
}

interface WETH is ERC20 {
	function withdraw(uint256) external;
}


contract Team {

	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 public token;


	function initialize(address _creator) external {
		require(totalShares == 0);
		token = ERC20(msg.sender);
		_addShare(_creator, 3);
		_addShare(0xe6c791FBd46dB3f4EdA5f7Bb76474F4FA530733E, 2);
		_addShare(0xc28C9da0F8a500DFfC16Ff09a3DD1Cc4c530D346, 1);
	}

	receive() external payable {}

	function withdrawETH() public {
		uint256 _balance = address(this).balance;
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				!_share.user.send(_balance * _share.shares / totalShares);
			}
		}
	}

	function withdrawToken(ERC20 _token) public {
		WETH _weth = WETH(ROUTER.WETH9());
		if (address(_token) == address(_weth)) {
			_weth.withdraw(_weth.balanceOf(address(this)));
			withdrawETH();
		} else {
			uint256 _balance = _token.balanceOf(address(this));
			if (_balance > 0) {
				for (uint256 i = 0; i < shares.length; i++) {
					Share memory _share = shares[i];
					_token.transfer(_share.user, _balance * _share.shares / totalShares);
				}
			}
		}
	}

	function withdrawWETH() public {
		withdrawToken(ERC20(ROUTER.WETH9()));
	}

	function withdrawFees() external {
		withdrawWETH();
		withdrawToken(token);
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract Token {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private MAX_NAME_LENGTH = 32;
	uint256 constant private MIN_SUPPLY = 1e16; // 0.01 tokens
	uint256 constant private MAX_SUPPLY = 1e33; // 1 quadrillion tokens
	uint256 constant private PERCENT_PRECISION = 1000; // 1 = 0.1%
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	int24 constant internal MIN_TICK = -887272;
	int24 constant internal MAX_TICK = -MIN_TICK;
	uint160 constant internal MIN_SQRT_RATIO = 4295128739;
	uint160 constant internal MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

	string public name;
	string public symbol;
	uint8 constant public decimals = 18;

	string constant public source = "Created with Bossman's Bakery (bakery.mullet.capital)!";


	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
	}

	struct Info {
		bool locked;
		Team team;
		address pool;
		address creator;
		uint256 totalSupply;
		uint256 initialMarketCap;
		uint256 upperMarketCap;
		uint256 concentratedPercent;
		uint256 creatorFee;
		mapping(address => User) users;
		uint256 lowerPositionId;
		uint256 upperPositionId;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);

	
	function lock() external {
		require(!info.locked);
		require(totalSupply() == 0);
		info.locked = true;
	}
	
	function initialize(address _creator, string memory _name, string memory _symbol, uint256 _totalSupply, uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) external payable {
		require(!info.locked);
		require(totalSupply() == 0);
		require(bytes(_name).length > 0 && bytes(_name).length <= MAX_NAME_LENGTH);
		require(bytes(_symbol).length > 0 && bytes(_symbol).length <= MAX_NAME_LENGTH);
		require(_totalSupply >= MIN_SUPPLY && _totalSupply <= MAX_SUPPLY);
		require(_initialMarketCap > 0 && _upperMarketCap > _initialMarketCap);
		require(_concentratedPercent < PERCENT_PRECISION);
		require(_creatorFee < PERCENT_PRECISION);
		info.team = new Team();
		info.team.initialize(_creator);
		info.creator = _creator;
		name = _name;
		symbol = _symbol;
		info.totalSupply = _totalSupply;
		info.users[address(this)].balance = _totalSupply;
		emit Transfer(address(0x0), address(this), _totalSupply);
		info.initialMarketCap = _initialMarketCap;
		info.upperMarketCap = _upperMarketCap;
		info.concentratedPercent = _concentratedPercent;
		info.creatorFee = _creatorFee;
		_createLP(_initialMarketCap, _upperMarketCap, _concentratedPercent, _creatorFee);
	}

	function collectTradingFees() external {
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		if (info.lowerPositionId != 0) {
			_pm.collect(PositionManager.CollectParams({
				tokenId: info.lowerPositionId,
				recipient: team(),
				amount0Max: UINT128_MAX,
				amount1Max: UINT128_MAX
			}));
		}
		_pm.collect(PositionManager.CollectParams({
			tokenId: info.upperPositionId,
			recipient: team(),
			amount0Max: UINT128_MAX,
			amount1Max: UINT128_MAX
		}));
		info.team.withdrawFees();
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		return _approve(msg.sender, _spender, _tokens);
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		unchecked {
			uint256 _allowance = allowance(_from, msg.sender);
			require(_allowance >= _tokens);
			if (_allowance != UINT_MAX) {
				info.users[_from].allowance[msg.sender] -= _tokens;
			}
			return _transfer(_from, _to, _tokens);
		}
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}
	

	function creator() public view returns (address) {
		return info.creator;
	}
	
	function team() public view returns (address) {
		return address(info.team);
	}

	function pool() public view returns (address) {
		return info.pool;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function positions() external view returns (uint256 lower, uint256 upper) {
		return (info.lowerPositionId, info.upperPositionId);
	}

	function initialMarketCap() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.initialMarketCap, 18, 5), " ETH"));
	}

	function upperMarketCap() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.upperMarketCap, 18, 5), " ETH"));
	}

	function concentratedPercent() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.concentratedPercent * 100, 3, 3), "%"));
	}

	function creatorFee() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.creatorFee * 100, 3, 3), "%"));
	}


	function _createLP(uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) internal {
		unchecked {
			address _this = address(this);
			address _weth = ROUTER.WETH9();
			bool _weth0 = _weth < _this;
			(uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap);
			info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000);
			Pool(pool()).initialize(_initialSqrtPrice);
			PositionManager _pm = PositionManager(ROUTER.positionManager());
			_approve(_this, address(_pm), totalSupply());
			( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap);
			( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _upperMarketCap);
			uint256 _concentratedTokens = _concentratedPercent * totalSupply() / PERCENT_PRECISION;
			if (_concentratedTokens > 0) {
				if (_creatorFee > 0) {
					_pm.mint(PositionManager.MintParams({
						token0: _weth0 ? _weth : _this,
						token1: !_weth0 ? _weth : _this,
						fee: 10000,
						tickLower: _weth0 ? _minTick - 200 : _minTick,
						tickUpper: !_weth0 ? _minTick + 200 : _minTick,
						amount0Desired: _weth0 ? 0 :  _concentratedTokens * _creatorFee / PERCENT_PRECISION,
						amount1Desired: !_weth0 ? 0 : _concentratedTokens * _creatorFee / PERCENT_PRECISION,
						amount0Min: 0,
						amount1Min: 0,
						recipient: creator(),
						deadline: block.timestamp
					}));
				}
				(info.lowerPositionId, , , ) = _pm.mint(PositionManager.MintParams({
					token0: _weth0 ? _weth : _this,
					token1: !_weth0 ? _weth : _this,
					fee: 10000,
					tickLower: _weth0 ? _minTick - 200 : _minTick,
					tickUpper: !_weth0 ? _minTick + 200 : _minTick,
					amount0Desired: _weth0 ? 0 :  _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
					amount1Desired: !_weth0 ? 0 : _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
					amount0Min: 0,
					amount1Min: 0,
					recipient: _this,
					deadline: block.timestamp
				}));
				_minTick = _weth0 ? _minTick - 200 : _minTick + 200;
			}
			if (_creatorFee > 0) {
				_pm.mint(PositionManager.MintParams({
					token0: _weth0 ? _weth : _this,
					token1: !_weth0 ? _weth : _this,
					fee: 10000,
					tickLower: _weth0 ? _maxTick : _minTick,
					tickUpper: !_weth0 ? _maxTick : _minTick,
					amount0Desired: _weth0 ? 0 :  (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION,
					amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION,
					amount0Min: 0,
					amount1Min: 0,
					recipient: creator(),
					deadline: block.timestamp
				}));
			}
			(info.upperPositionId, , , ) = _pm.mint(PositionManager.MintParams({
				token0: _weth0 ? _weth : _this,
				token1: !_weth0 ? _weth : _this,
				fee: 10000,
				tickLower: _weth0 ? _maxTick : _minTick,
				tickUpper: !_weth0 ? _maxTick : _minTick,
				amount0Desired: _weth0 ? 0 :  (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
				amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
				amount0Min: 0,
				amount1Min: 0,
				recipient: _this,
				deadline: block.timestamp
			}));
			if (_this.balance > 0) {
				ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({
					tokenIn: _weth,
					tokenOut: _this,
					fee: 10000,
					recipient: creator(),
					amountIn: _this.balance,
					amountOutMinimum: 0,
					sqrtPriceLimitX96: 0
				}));
			}
		}
	}
	
	function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) {
		info.users[_owner].allowance[_spender] = _tokens;
		emit Approval(_owner, _spender, _tokens);
		return true;
	}
	
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		unchecked {
			require(_tokens > 0);
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_to].balance += _tokens;
			emit Transfer(_from, _to, _tokens);
			return true;
		}
	}


	function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
		unchecked {
			uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
			require(absTick <= uint256(int256(MAX_TICK)), 'T');

			uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
			if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
			if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
			if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
			if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
			if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
			if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
			if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
			if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
			if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
			if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
			if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
			if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
			if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
			if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
			if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
			if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
			if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
			if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
			if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;

			if (tick > 0) ratio = type(uint256).max / ratio;

			sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
		}
	}

	function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
		unchecked {
			require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
			uint256 ratio = uint256(sqrtPriceX96) << 32;

			uint256 r = ratio;
			uint256 msb = 0;

			assembly {
				let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(5, gt(r, 0xFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(4, gt(r, 0xFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(3, gt(r, 0xFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(2, gt(r, 0xF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(1, gt(r, 0x3))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := gt(r, 0x1)
				msb := or(msb, f)
			}

			if (msb >= 128) r = ratio >> (msb - 127);
			else r = ratio << (127 - msb);

			int256 log_2 = (int256(msb) - 128) << 64;

			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(63, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(62, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(61, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(60, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(59, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(58, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(57, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(56, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(55, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(54, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(53, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(52, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(51, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(50, f))
			}

			int256 log_sqrt10001 = log_2 * 255738958999603826347141;

			int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
			int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);

			tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
		}
	}

	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}

	function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) {
		uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth)));
		tick = _getTickAtSqrtRatio(_tmpPrice);
		tick = tick - (tick % 200);
		price = _getSqrtRatioAtTick(tick);
	}

	function _uint2str(uint256 _value, uint256 _scale, uint256 _maxDecimals) internal pure returns (string memory str) {
		uint256 _d = _scale > _maxDecimals ? _maxDecimals : _scale;
		uint256 _n = _value / 10**(_scale > _d ? _scale - _d : 0);
		if (_n == 0) {
			return "0";
		}
		uint256 _digits = 1;
		uint256 _tmp = _n;
		while (_tmp > 9) {
			_tmp /= 10;
			_digits++;
		}
		_tmp = _digits > _d ? _digits : _d + 1;
		uint256 _offset = (_tmp > _d + 1 ? _tmp - _d - 1 > _d ? _d : _tmp - _d - 1 : 0);
		for (uint256 i = 0; i < _tmp - _offset; i++) {
			uint256 _dec = i < _tmp - _digits ? 0 : (_n / (10**(_tmp - i - 1))) % 10;
			bytes memory _char = new bytes(1);
			_char[0] = bytes1(uint8(_dec) + 48);
			str = string(abi.encodePacked(str, string(_char)));
			if (i < _tmp - _d - 1) {
				if ((i + 1) % 3 == (_tmp - _d) % 3) {
					str = string(abi.encodePacked(str, ","));
				}
			} else {
				if ((_n / 10**_offset) % 10**(_tmp - _offset - i - 1) == 0) {
					break;
				} else if (i == _tmp - _d - 1) {
					str = string(abi.encodePacked(str, "."));
				}
			}
		}
	}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"concentratedPercent","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorFee","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMarketCap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_initialMarketCap","type":"uint256"},{"internalType":"uint256","name":"_upperMarketCap","type":"uint256"},{"internalType":"uint256","name":"_concentratedPercent","type":"uint256"},{"internalType":"uint256","name":"_creatorFee","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positions","outputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"source","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperMarketCap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405260043610610131575f3560e01c806367e828bf116100a8578063a9059cbb1161006d578063a9059cbb14610329578063ba5b798214610348578063bdaaa6401461036f578063dd62ed3e14610383578063e88958dc146103cb578063f83d08ba146103df575f80fd5b806367e828bf1461029857806370a08231146102ac57806385f2aef2146102e0578063947f66901461030257806395d89b4114610315575f80fd5b806318160ddd116100f957806318160ddd146101ec57806323b872dd1461020a578063313ce567146102295780633b5f19351461024f5780634000aea01461026357806353f8b30314610282575f80fd5b806302d05d3f1461013557806306fdde031461016b578063095ea7b31461018c5780630bb68bd2146101bb57806316f0115b146101cf575b5f80fd5b348015610140575f80fd5b506004546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b348015610176575f80fd5b5061017f6103f3565b6040516101629190612017565b348015610197575f80fd5b506101ab6101a6366004612060565b61047e565b6040519015158152602001610162565b3480156101c6575f80fd5b5061017f610493565b3480156101da575f80fd5b506003546001600160a01b031661014e565b3480156101f7575f80fd5b506005545b604051908152602001610162565b348015610215575f80fd5b506101ab61022436600461208a565b6104d4565b348015610234575f80fd5b5061023d601281565b60405160ff9091168152602001610162565b34801561025a575f80fd5b5061017f610551565b34801561026e575f80fd5b506101ab61027d3660046120c8565b610575565b34801561028d575f80fd5b50610296610616565b005b3480156102a3575f80fd5b5061017f610879565b3480156102b7575f80fd5b506101fc6102c636600461214a565b6001600160a01b03165f908152600a602052604090205490565b3480156102eb575f80fd5b5060025461010090046001600160a01b031661014e565b610296610310366004612202565b610895565b348015610320575f80fd5b5061017f610a86565b348015610334575f80fd5b506101ab610343366004612060565b610a93565b348015610353575f80fd5b50600b54600c5460408051928352602083019190915201610162565b34801561037a575f80fd5b5061017f610a9f565b34801561038e575f80fd5b506101fc61039d36600461229f565b6001600160a01b039182165f908152600a602090815260408083209390941682526001909201909152205490565b3480156103d6575f80fd5b5061017f610ab3565b3480156103ea575f80fd5b50610296610ac8565b5f80546103ff906122d6565b80601f016020809104026020016040519081016040528092919081815260200182805461042b906122d6565b80156104765780601f1061044d57610100808354040283529160200191610476565b820191905f5260205f20905b81548152906001019060200180831161045957829003601f168201915b505050505081565b5f61048a338484610af2565b90505b92915050565b6008546060906104b0906104a890606461231c565b600380610b5e565b6040516020016104c09190612333565b604051602081830303815290604052905090565b6001600160a01b0383165f908152600a6020908152604080832033845260010190915281205482811015610506575f80fd5b5f19811461053b576001600160a01b0385165f908152600a602090815260408083203384526001019091529020805484900390555b610546858585610e76565b9150505b9392505050565b606061056560026004015460126005610b5e565b6040516020016104c09190612357565b5f610581338686610e76565b50843b63ffffffff81161561060a57604051636be32e7360e01b81526001600160a01b03871690636be32e73906105c290339089908990899060040161237e565b6020604051808303815f875af11580156105de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060291906123c5565b61060a575f80fd5b50600195945050505050565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610667573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068b91906123e4565b600b549091501561075457806001600160a01b031663fc6f7865604051806080016040528060026009015481526020016106d36002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b16815261071291906004016123ff565b60408051808303815f875af115801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190612442565b50505b806001600160a01b031663fc6f786560405180608001604052806002600a015481526020016107916002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b1681526107d091906004016123ff565b60408051808303815f875af11580156107eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080f9190612442565b505060025f0160019054906101000a90046001600160a01b03166001600160a01b031663476343ee6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610860575f80fd5b505af1158015610872573d5f803e3d5ffd5b5050505050565b6040518060600160405280603681526020016131466036913981565b60025460ff16156108a4575f80fd5b600554156108b0575f80fd5b5f87511180156108c257506020875111155b6108ca575f80fd5b5f86511180156108dc57506020865111155b6108e4575f80fd5b662386f26fc10000851015801561090957506d314dc6448d9338c15b0a000000008511155b610911575f80fd5b5f8411801561091f57508383115b610927575f80fd5b6103e88210610934575f80fd5b6103e88110610941575f80fd5b60405161094d90611fe8565b604051809103905ff080158015610966573d5f803e3d5ffd5b5060028054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163189acdbd60e31b81528b8416600482015291049091169063c4d66de8906024015f604051808303815f87803b1580156109c9575f80fd5b505af11580156109db573d5f803e3d5ffd5b5050600480546001600160a01b0319166001600160a01b038c16179055505f9050610a0688826124b2565b506001610a1387826124b2565b506005859055305f818152600a60209081526040808320899055518881527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36006849055600783905560088290556009819055610a7c84848484610f0c565b5050505050505050565b600180546103ff906122d6565b5f61048a338484610e76565b606061056560026005015460126005610b5e565b6009546060906104b0906104a890606461231c565b60025460ff1615610ad7575f80fd5b60055415610ae3575f80fd5b6002805460ff19166001179055565b6001600160a01b038381165f818152600a602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b60605f828411610b6e5783610b70565b825b90505f818511610b80575f610b8a565b610b8a828661256e565b610b9590600a612661565b610b9f9087612680565b9050805f03610bcb57604051806040016040528060018152602001600360fc1b8152509250505061054a565b6001815b6009811115610bf757610be3600a82612680565b905081610bef81612693565b925050610bcf565b838211610c0e57610c098460016126ab565b610c10565b815b90505f610c1e8560016126ab565b8211610c2a575f610c63565b846001610c37828561256e565b610c41919061256e565b11610c61576001610c52868461256e565b610c5c919061256e565b610c63565b845b90505f5b610c71828461256e565b811015610e69575f610c83858561256e565b8210610cc557600a6001610c97848761256e565b610ca1919061256e565b610cac90600a612661565b610cb69088612680565b610cc091906126be565b610cc7565b5f5b6040805160018082528183019092529192505f9190602082018180368337019050509050610cf68260306126d1565b60f81b815f81518110610d0b57610d0b6126ea565b60200101906001600160f81b03191690815f1a9053508881604051602001610d349291906126fe565b60408051601f1981840301815291905298506001610d52898761256e565b610d5c919061256e565b831015610dbd576003610d6f898761256e565b610d7991906126be565b6003610d868560016126ab565b610d9091906126be565b03610db85788604051602001610da6919061272c565b60405160208183030381529060405298505b610e54565b600183610dca868861256e565b610dd4919061256e565b610dde919061256e565b610de990600a612661565b610df485600a612661565b610dfe9089612680565b610e0891906126be565b5f03610e15575050610e69565b6001610e21898761256e565b610e2b919061256e565b8303610e545788604051602001610e429190612750565b60405160208183030381529060405298505b50508080610e6190612693565b915050610c67565b5050505050509392505050565b5f808211610e82575f80fd5b81610ea1856001600160a01b03165f908152600a602052604090205490565b1015610eab575f80fd5b6001600160a01b038085165f818152600a6020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b4c9086815260200190565b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8591906123e4565b90506001600160a01b03808316908216105f610faa82610fa460055490565b8a6118e4565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102191906123e4565b60405163a167129560e01b81526001600160a01b03868116600483015285811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015611078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109c91906123e4565b600380546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156110fd575f80fd5b505af115801561110f573d5f803e3d5ffd5b505050505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611164573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118891906123e4565b905061119d858261119860055490565b610af2565b505f6111b2846111ac60055490565b8c6118e4565b9150505f6111c3856111ac60055490565b9150505f6103e86111d360055490565b8b02816111e2576111e261266c565b049050801561149557881561133e57836001600160a01b0316638831645660405180610160016040528089611217578b611219565b8a5b6001600160a01b031681526020018915611233578b611235565b8a5b6001600160a01b03168152612710602082015260400189611256578661125b565b60c887035b60020b8152602001891561126f5786611274565b8660c8015b60020b81526020018961128d576103e8858e020461128f565b5f5b815260200189156112a6576103e8858e02046112a8565b5f5b81526020015f81526020015f81526020016112cb6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016112f99190612774565b6080604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113399190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611364578b611366565b8a5b6001600160a01b031681526020018915611380578b611382565b8a5b6001600160a01b031681526127106020820152604001896113a357866113a8565b60c887035b60020b815260200189156113bc57866113c1565b8660c8015b60020b8152602001896113dc576103e88d81038602046113de565b5f5b815260200189156113f7576103e88d81038602046113f9565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016114399190612774565b6080604051808303815f875af1158015611455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114799190612838565b505050600b558561148d578260c801611492565b60c883035b92505b881561161057836001600160a01b03166388316456604051806101600160405280896114c1578b6114c3565b8a5b6001600160a01b0316815260200189156114dd578b6114df565b8a5b6001600160a01b031681526127106020820152604001896115005786611502565b855b60020b815260200189156115165786611518565b855b60020b815260200189611548576103e88d8661153360055490565b0302816115425761154261266c565b0461154a565b5f5b81526020018915611578576103e88d8661156360055490565b0302816115725761157261266c565b0461157a565b5f5b81526020015f81526020015f815260200161159d6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016115cb9190612774565b6080604051808303815f875af11580156115e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b9190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611636578b611638565b8a5b6001600160a01b031681526020018915611652578b611654565b8a5b6001600160a01b031681526127106020820152604001896116755786611677565b855b60020b8152602001891561168b578661168d565b855b60020b8152602001896116c1576103e88d6103e803866116ac60055490565b0302816116bb576116bb61266c565b046116c3565b5f5b815260200189156116f5576103e88d6103e803866116e060055490565b0302816116ef576116ef61266c565b046116f7565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016117379190612774565b6080604051808303815f875af1158015611753573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190612838565b505050600c556001600160a01b03881631156118d6577368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b03166304e45aaf896001600160a01b0316316040518060e001604052808b6001600160a01b031681526020018c6001600160a01b0316815260200161271062ffffff1681526020016118036004546001600160a01b031690565b6001600160a01b0390811682528d8116316020808401919091525f604080850182905260609485019190915280516001600160e01b031960e089901b168152855184166004820152918501518316602483015284015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c09092015190911660c482015260e40160206040518083038185885af11580156118af573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118d4919061287e565b505b505050505050505050505050565b5f805f611922866118f557846118f7565b855b87156119035785611905565b865b61191390600160c01b612680565b61191d919061231c565b61195a565b905061192d8161199d565b915061193a60c883612895565b61194490836128b6565b915061194f82611cba565b925050935093915050565b80600260018201045b81811015611997578091506002818285816119805761198061266c565b04018161198f5761198f61266c565b049050611963565b50919050565b5f6401000276a36001600160a01b038316108015906119d8575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b611a0d5760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611aa157607f810383901c9150611aab565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611cab57886001600160a01b0316611c9082611cba565b6001600160a01b03161115611ca55781611cad565b80611cad565b815b9998505050505050505050565b5f805f8360020b12611ccf578260020b611cd6565b8260020b5f035b9050620d89e8811115611d0f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611a04565b5f816001165f03611d2457600160801b611d36565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611d6a576ffff97272373d413259a46990580e213a0260801c5b6004821615611d89576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611da8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611dc7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611de6576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611e05576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611e24576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611e44576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611e64576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611e84576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611ea4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611ec4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611ee4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611f04576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611f24576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611f45576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611f65576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611f84576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611fa1576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611fc057805f1981611fbc57611fbc61266c565b0490505b640100000000810615611fd4576001611fd6565b5f5b60ff16602082901c0192505050919050565b61086a806128dc83390190565b5f5b8381101561200f578181015183820152602001611ff7565b50505f910152565b602081525f8251806020840152612035816040850160208701611ff5565b601f01601f19169190910160400192915050565b6001600160a01b038116811461205d575f80fd5b50565b5f8060408385031215612071575f80fd5b823561207c81612049565b946020939093013593505050565b5f805f6060848603121561209c575f80fd5b83356120a781612049565b925060208401356120b781612049565b929592945050506040919091013590565b5f805f80606085870312156120db575f80fd5b84356120e681612049565b935060208501359250604085013567ffffffffffffffff80821115612109575f80fd5b818701915087601f83011261211c575f80fd5b81358181111561212a575f80fd5b88602082850101111561213b575f80fd5b95989497505060200194505050565b5f6020828403121561215a575f80fd5b813561054a81612049565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612188575f80fd5b813567ffffffffffffffff808211156121a3576121a3612165565b604051601f8301601f19908116603f011681019082821181831017156121cb576121cb612165565b816040528381528660208588010111156121e3575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f80610100898b03121561221a575f80fd5b883561222581612049565b9750602089013567ffffffffffffffff80821115612241575f80fd5b61224d8c838d01612179565b985060408b0135915080821115612262575f80fd5b5061226f8b828c01612179565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e090910135945092505050565b5f80604083850312156122b0575f80fd5b82356122bb81612049565b915060208301356122cb81612049565b809150509250929050565b600181811c908216806122ea57607f821691505b60208210810361199757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761048d5761048d612308565b5f8251612344818460208701611ff5565b602560f81b920191825250600101919050565b5f8251612368818460208701611ff5565b630408aa8960e31b920191825250600401919050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f602082840312156123d5575f80fd5b8151801515811461054a575f80fd5b5f602082840312156123f4575f80fd5b815161054a81612049565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f8060408385031215612453575f80fd5b505080516020909101519092909150565b601f8211156124ad575f81815260208120601f850160051c8101602086101561248a5750805b601f850160051c820191505b818110156124a957828155600101612496565b5050505b505050565b815167ffffffffffffffff8111156124cc576124cc612165565b6124e0816124da84546122d6565b84612464565b602080601f831160018114612513575f84156124fc5750858301515b5f19600386901b1c1916600185901b1785556124a9565b5f85815260208120601f198616915b8281101561254157888601518255948401946001909101908401612522565b508582101561255e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561048d5761048d612308565b600181815b808511156125bb57815f19048211156125a1576125a1612308565b808516156125ae57918102915b93841c9390800290612586565b509250929050565b5f826125d15750600161048d565b816125dd57505f61048d565b81600181146125f357600281146125fd57612619565b600191505061048d565b60ff84111561260e5761260e612308565b50506001821b61048d565b5060208310610133831016604e8410600b841016171561263c575081810a61048d565b6126468383612581565b805f190482111561265957612659612308565b029392505050565b5f61048a83836125c3565b634e487b7160e01b5f52601260045260245ffd5b5f8261268e5761268e61266c565b500490565b5f600182016126a4576126a4612308565b5060010190565b8082018082111561048d5761048d612308565b5f826126cc576126cc61266c565b500690565b60ff818116838216019081111561048d5761048d612308565b634e487b7160e01b5f52603260045260245ffd5b5f835161270f818460208801611ff5565b835190830190612723818360208801611ff5565b01949350505050565b5f825161273d818460208701611ff5565b600b60fa1b920191825250600101919050565b5f8251612761818460208701611ff5565b601760f91b920191825250600101919050565b81516001600160a01b03168152610160810160208301516127a060208401826001600160a01b03169052565b5060408301516127b7604084018262ffffff169052565b5060608301516127cc606084018260020b9052565b5060808301516127e1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612827828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f806080858703121561284b575f80fd5b8451935060208501516001600160801b0381168114612868575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121561288e575f80fd5b5051919050565b5f8260020b806128a7576128a761266c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171561048d5761048d61230856fe608060405234801561000f575f80fd5b5061084d8061001d5f395ff3fe60806040526004361061007c575f3560e01c8063894760691161004c5780638947606914610117578063c4d66de814610136578063e086e5ec14610155578063fc0c546a14610169575f80fd5b80633a98ef3914610087578063476343ee146100af5780634c02f62e146100c557806357a858fc146100d9575f80fd5b3661008357005b5f80fd5b348015610092575f80fd5b5061009c60015481565b6040519081526020015b60405180910390f35b3480156100ba575f80fd5b506100c36101a0565b005b3480156100d0575f80fd5b506100c36101bf565b3480156100e4575f80fd5b506100f86100f33660046106ea565b610236565b604080516001600160a01b0390931683526020830191909152016100a6565b348015610122575f80fd5b506100c3610131366004610715565b61026b565b348015610141575f80fd5b506100c3610150366004610715565b61052f565b348015610160575f80fd5b506100c3610599565b348015610174575f80fd5b50600254610188906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6101a86101bf565b6002546101bd906001600160a01b031661026b565b565b6101bd7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101319190610737565b5f8181548110610244575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e09190610737565b9050806001600160a01b0316826001600160a01b0316036103c0576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa158015610345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103699190610752565b6040518263ffffffff1660e01b815260040161038791815260200190565b5f604051808303815f87803b15801561039e575f80fd5b505af11580156103b0573d5f803e3d5ffd5b505050506103bc610599565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610752565b9050801561052a575f5b5f54811015610528575f80828154811061044e5761044e610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb929061049d9088610791565b6104a791906107ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156104ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051391906107cd565b50508080610520906107ec565b915050610432565b505b505050565b6001541561053b575f80fd5b600280546001600160a01b0319163317905561055881600361063c565b61057773e6c791fbd46db3f4eda5f7bb76474f4fa530733e600261063c565b61059673c28c9da0f8a500dffc16ff09a3dd1cc4c530d346600161063c565b50565b478015610596575f5b5f548110156103bc575f8082815481106105be576105be610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106079087610791565b61061191906107ae565b6040518115909202915f818181858888f1935050505050508080610634906107ec565b9150506105a2565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909201919091558154839291906106e1908490610804565b90915550505050565b5f602082840312156106fa575f80fd5b5035919050565b6001600160a01b0381168114610596575f80fd5b5f60208284031215610725575f80fd5b813561073081610701565b9392505050565b5f60208284031215610747575f80fd5b815161073081610701565b5f60208284031215610762575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107a8576107a861077d565b92915050565b5f826107c857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107dd575f80fd5b81518015158114610730575f80fd5b5f600182016107fd576107fd61077d565b5060010190565b808201808211156107a8576107a861077d56fea26469706673582212205a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a64736f6c6343000815003343726561746564207769746820426f73736d616e27732042616b657279202862616b6572792e6d756c6c65742e6361706974616c2921a2646970667358221220d15a9c359bb5a5fd7a5ffce6c29d3ea55d4d85e9848f95dfc71def0599c5044e64736f6c63430008150033

Deployed Bytecode Sourcemap

3382:17300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7704:78;;;;;;;;;;-1:-1:-1;7765:12:0;;-1:-1:-1;;;;;7765:12:0;7704:78;;;-1:-1:-1;;;;;287:32:1;;;269:51;;257:2;242:18;7704:78:0;;;;;;;;4103:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6884:132::-;;;;;;;;;;-1:-1:-1;6884:132:0;;;;;:::i;:::-;;:::i;:::-;;;1608:14:1;;1601:22;1583:41;;1571:2;1556:18;6884:132:0;1443:187:1;8752:164:0;;;;;;;;;;;;;:::i;7874:72::-;;;;;;;;;;-1:-1:-1;7932:9:0;;-1:-1:-1;;;;;7932:9:0;7874:72;;7951:86;;;;;;;;;;-1:-1:-1;8016:16:0;;7951:86;;;1781:25:1;;;1769:2;1754:18;7951:86:0;1635:177:1;7021:347:0;;;;;;;;;;-1:-1:-1;7021:347:0;;;;;:::i;:::-;;:::i;4149:35::-;;;;;;;;;;;;4182:2;4149:35;;;;;2450:4:1;2438:17;;;2420:36;;2408:2;2393:18;4149:35:0;2278:184:1;8434:156:0;;;;;;;;;;;;;:::i;7373:323::-;;;;;;;;;;-1:-1:-1;7373:323:0;;;;;:::i;:::-;;:::i;6222:528::-;;;;;;;;;;;;;:::i;:::-;;4190:88;;;;;;;;;;;;;:::i;8042:106::-;;;;;;;;;;-1:-1:-1;8042:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;8118:17:0;8097:7;8118:17;;;:10;:17;;;;;:25;;8042:106;7788:81;;;;;;;;;;-1:-1:-1;7854:4:0;:9;;;;-1:-1:-1;;;;;7854:9:0;7788:81;;4988:1229;;;;;;:::i;:::-;;:::i;4125:20::-;;;;;;;;;;;;;:::i;6755:124::-;;;;;;;;;;-1:-1:-1;6755:124:0;;;;;:::i;:::-;;:::i;8294:135::-;;;;;;;;;;-1:-1:-1;8381:20:0;;8403;;8294:135;;;5576:25:1;;;5632:2;5617:18;;5610:34;;;;5549:18;8294:135:0;5402:248:1;8595:152:0;;;;;;;;;;;;;:::i;8153:136::-;;;;;;;;;;-1:-1:-1;8153:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;8247:17:0;;;8226:7;8247:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;;;:37;;;;;;8153:136;8921:146;;;;;;;;;;;;;:::i;4871:111::-;;;;;;;;;;;;;:::i;4103:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6884:132::-;6954:4;6972:39;6981:10;6993:8;7003:7;6972:8;:39::i;:::-;6965:46;;6884:132;;;;;:::o;8752:164::-;8867:24;;8806:13;;8857:47;;8867:30;;8894:3;8867:30;:::i;:::-;8899:1;8902;8857:9;:47::i;:::-;8840:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8826:85;;8752:164;:::o;7021:347::-;-1:-1:-1;;;;;8247:17:0;;7106:4;8247:17;;;:10;:17;;;;;;;;7171:10;8247:37;;:27;;:37;;;;;;7210:7;7196:10;:21;;7188:30;;;;;;-1:-1:-1;;7228:10:0;:22;7224:92;;-1:-1:-1;;;;;7259:17:0;;;;;;:10;:17;;;;;;;;7287:10;7259:39;;:27;;:39;;;;;:50;;;;;;;7224:92;7328:30;7338:5;7345:3;7350:7;7328:9;:30::i;:::-;7321:37;;;7021:347;;;;;;:::o;8434:156::-;8485:13;8536:39;8546:4;:21;;;8569:2;8573:1;8536:9;:39::i;:::-;8519:65;;;;;;;;:::i;7373:323::-;7468:4;7479:35;7489:10;7501:3;7506:7;7479:9;:35::i;:::-;-1:-1:-1;7560:16:0;;7589:9;;;;7585:91;;7614:55;;-1:-1:-1;;;7614:55:0;;-1:-1:-1;;;;;7614:27:0;;;;;:55;;7642:10;;7654:7;;7663:5;;;;7614:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7606:64;;;;;;-1:-1:-1;7687:4:0;;7373:323;-1:-1:-1;;;;;7373:323:0:o;6222:528::-;6266:19;3805:42;-1:-1:-1;;;;;6304:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6338:20;;6266:63;;-1:-1:-1;6338:25:0;6334:213;;6371:3;-1:-1:-1;;;;;6371:11:0;;6383:157;;;;;;;;6429:4;:20;;;6383:157;;;;6467:6;7854:4;:9;-1:-1:-1;;;;;7854:9:0;;;;;;7788:81;6467:6;-1:-1:-1;;;;;6383:157:0;;;-1:-1:-1;;;;;6383:157:0;;;;;;;;;;;6371:170;-1:-1:-1;;;;;;6371:170:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6334:213;6551:3;-1:-1:-1;;;;;6551:11:0;;6563:152;;;;;;;;6608:4;:20;;;6563:152;;;;6645:6;7854:4;:9;-1:-1:-1;;;;;7854:9:0;;;;;;7788:81;6645:6;-1:-1:-1;;;;;6563:152:0;;;-1:-1:-1;;;;;6563:152:0;;;;;;;;;;;6551:165;-1:-1:-1;;;;;;6551:165:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6721:4;:9;;;;;;;;;;-1:-1:-1;;;;;6721:9:0;-1:-1:-1;;;;;6721:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:489;6222:528::o;4190:88::-;;;;;;;;;;;;;;;;;;;:::o;4988:1229::-;5226:4;:11;;;5225:12;5217:21;;;;;;8016:16;;5251:18;5243:27;;;;;;5305:1;5289:5;5283:19;:23;:65;;;;;3563:2;5316:5;5310:19;:38;;5283:65;5275:74;;;;;;5386:1;5368:7;5362:21;:25;:69;;;;;3563:2;5397:7;5391:21;:40;;5362:69;5354:78;;;;;;3607:4;5445:12;:26;;:56;;;;;3668:4;5475:12;:26;;5445:56;5437:65;;;;;;5535:1;5515:17;:21;:60;;;;;5558:17;5540:15;:35;5515:60;5507:69;;;;;;3745:4;5589:20;:40;5581:49;;;;;;3745:4;5643:11;:31;5635:40;;;;;;5692:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5680:4:0;:22;;-1:-1:-1;;;;;;5680:22:0;;-1:-1:-1;;;;;5680:22:0;;;;;;;;;;;;;5707:30;;-1:-1:-1;;;5707:30:0;;287:32:1;;;5707:30:0;;;269:51:1;5707:9:0;;;;;;:20;;242:18:1;;5707:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5742:12:0;:23;;-1:-1:-1;;;;;;5742:23:0;-1:-1:-1;;;;;5742:23:0;;;;;-1:-1:-1;;;;5770:12:0;5777:5;-1:-1:-1;5770:12:0;:::i;:::-;-1:-1:-1;5787:6:0;:16;5796:7;5787:6;:16;:::i;:::-;-1:-1:-1;5808:16:0;:31;;;5863:4;5844:25;;;;:10;:25;;;;;;;;:48;;;5902:51;1781:25:1;;;5902:51:0;;1754:18:1;5902:51:0;;;;;;;5958:21;:41;;;6004:19;:37;;;6046:24;:47;;;6098:15;:29;;;6132:80;5982:17;6026:15;6073:20;6116:11;6132:9;:80::i;:::-;4988:1229;;;;;;;;:::o;4125:20::-;;;;;;;:::i;6755:124::-;6821:4;6839:35;6849:10;6861:3;6866:7;6839:9;:35::i;8595:152::-;8644:13;8695:37;8705:4;:19;;;8726:2;8730:1;8695:9;:37::i;8921:146::-;9027:15;;8966:13;;9017:38;;9027:21;;9045:3;9027:21;:::i;4871:111::-;4910:4;:11;;;4909:12;4901:21;;;;;;8016:16;;4935:18;4927:27;;;;;;4959:4;:18;;-1:-1:-1;;4959:18:0;4973:4;4959:18;;;4871:111::o;12786:212::-;-1:-1:-1;;;;;12884:18:0;;;12873:4;12884:18;;;:10;:18;;;;;;;;:38;;;;;;:28;;;;:38;;;;;:48;;;12942:35;1781:25:1;;;12873:4:0;;12884:38;:18;12942:35;;1754:18:1;12942:35:0;;;;;;;;-1:-1:-1;12989:4:0;12786:212;;;;;:::o;19576:1103::-;19672:17;19696:10;19718:12;19709:6;:21;:45;;19748:6;19709:45;;;19733:12;19709:45;19696:58;;19759:10;19795:2;19786:6;:11;:29;;19814:1;19786:29;;;19800:11;19809:2;19800:6;:11;:::i;:::-;19781:35;;:2;:35;:::i;:::-;19772:44;;:6;:44;:::i;:::-;19759:57;;19825:2;19831:1;19825:7;19821:35;;19840:10;;;;;;;;;;;;;-1:-1:-1;;;19840:10:0;;;;;;;;;19821:35;19878:1;19899:2;19906:54;19920:1;19913:4;:8;19906:54;;;19929:10;19937:2;19929:10;;:::i;:::-;;-1:-1:-1;19945:9:0;;;;:::i;:::-;;;;19906:54;;;19981:2;19971:7;:12;:31;;19996:6;:2;20001:1;19996:6;:::i;:::-;19971:31;;;19986:7;19971:31;19964:38;-1:-1:-1;20007:15:0;20033:6;:2;20038:1;20033:6;:::i;:::-;20026:4;:13;:59;;20084:1;20026:59;;;20058:2;20054:1;20042:9;20058:2;20042:4;:9;:::i;:::-;:13;;;;:::i;:::-;:18;:39;;20080:1;20068:9;20075:2;20068:4;:9;:::i;:::-;:13;;;;:::i;:::-;20042:39;;;20063:2;20042:39;20007:79;;20096:9;20091:584;20115:14;20122:7;20115:4;:14;:::i;:::-;20111:1;:18;20091:584;;;20142:12;20161:14;20168:7;20161:4;:14;:::i;:::-;20157:1;:18;:57;;20212:2;20205:1;20194:8;20201:1;20194:4;:8;:::i;:::-;:12;;;;:::i;:::-;20189:18;;:2;:18;:::i;:::-;20183:25;;:2;:25;:::i;:::-;20182:32;;;;:::i;:::-;20157:57;;;20178:1;20157:57;20241:12;;;20251:1;20241:12;;;;;;;;;20142:72;;-1:-1:-1;20220:18:0;;20241:12;;;;;;;;;;;-1:-1:-1;;20220:33:0;-1:-1:-1;20277:16:0;20283:4;20291:2;20277:16;:::i;:::-;20270:24;;20259:5;20265:1;20259:8;;;;;;;;:::i;:::-;;;;:35;-1:-1:-1;;;;;20259:35:0;;;;;;;;;20330:3;20342:5;20313:36;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20313:36:0;;;;;;;;;;-1:-1:-1;20376:1:0;20364:9;20371:2;20364:4;:9;:::i;:::-;:13;;;;:::i;:::-;20360:1;:17;20356:314;;;20419:1;20406:9;20413:2;20406:4;:9;:::i;:::-;20405:15;;;;:::i;:::-;20400:1;20391:5;:1;20395;20391:5;:::i;:::-;20390:11;;;;:::i;:::-;:30;20386:92;;20460:3;20443:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;20430:40;;20386:92;20356:314;;;20548:1;20544;20527:14;20534:7;20527:4;:14;:::i;:::-;:18;;;;:::i;:::-;:22;;;;:::i;:::-;20522:28;;:2;:28;:::i;:::-;20507:11;20511:7;20507:2;:11;:::i;:::-;20502:16;;:2;:16;:::i;:::-;20501:49;;;;:::i;:::-;20554:1;20501:54;20497:167;;20565:5;;;;20497:167;20605:1;20593:9;20600:2;20593:4;:9;:::i;:::-;:13;;;;:::i;:::-;20588:1;:18;20584:80;;20646:3;20629:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;20616:40;;20584:80;20136:539;;20131:3;;;;;:::i;:::-;;;;20091:584;;;;19691:988;;;;;19576:1103;;;;;:::o;13004:320::-;13086:4;13131:1;13121:7;:11;13113:20;;;;;;13167:7;13147:16;13157:5;-1:-1:-1;;;;;8118:17:0;8097:7;8118:17;;;:10;:17;;;;;:25;;8042:106;13147:16;:27;;13139:36;;;;;;-1:-1:-1;;;;;13181:17:0;;;;;;;:10;:17;;;;;;:36;;;;;;;13223:15;;;;;;;;;;:34;;;;;;13268:29;;;;;;13210:7;1781:25:1;;1769:2;1754:18;;1635:177;9074:3706:0;9226:13;9250:4;9226:29;;9261:13;3805:42;-1:-1:-1;;;;;9277:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9261:30;-1:-1:-1;;;;;;9311:13:0;;;;;;;9297:11;9362:68;9311:13;9397;8016:16;;;7951:86;9397:13;9412:17;9362:26;:68::i;:::-;9330:100;;;3805:42;-1:-1:-1;;;;;9456:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9448:57;;-1:-1:-1;;;9448:57:0;;-1:-1:-1;;;;;16010:15:1;;;9448:57:0;;;15992:34:1;16062:15;;;16042:18;;;16035:43;9499:5:0;16094:18:1;;;16087:49;9448:36:0;;;;;;;15927:18:1;;9448:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9436:9;:69;;-1:-1:-1;;;;;;9436:69:0;-1:-1:-1;;;;;9436:69:0;;;;;;;;;9511:42;;-1:-1:-1;;;9511:42:0;;-1:-1:-1;;;;;287:32:1;;;9511:42:0;;;269:51:1;9511:23:0;;;;;;;242:18:1;;9511:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:19;3805:42;-1:-1:-1;;;;;9597:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9559:63;;9628:44;9637:5;9652:3;9658:13;8016:16;;;7951:86;9658:13;9628:8;:44::i;:::-;;9682:14;9700:68;9727:6;9735:13;8016:16;;;7951:86;9735:13;9750:17;9700:26;:68::i;:::-;9678:90;;;9778:14;9796:66;9823:6;9831:13;8016:16;;;7951:86;9796:66;9774:88;;;9868:27;3745:4;9921:13;8016:16;;;7951:86;9921:13;9898:20;:36;:56;;;;;:::i;:::-;;;-1:-1:-1;9964:23:0;;9960:1291;;10000:15;;9996:581;;10025:3;-1:-1:-1;;;;;10025:8:0;;10034:534;;;;;;;;10078:6;:22;;10095:5;10078:22;;;10087:5;10078:22;-1:-1:-1;;;;;10034:534:0;;;;;10118:6;10117:7;:23;;10135:5;10117:23;;;10127:5;10117:23;-1:-1:-1;;;;;10034:534:0;;;10154:5;10034:534;;;;;;10179:6;:34;;10205:8;10179:34;;;10199:3;10188:8;:14;10179:34;10034:534;;;;;;10234:6;10233:7;:35;;10260:8;10233:35;;;10243:8;10254:3;10243:14;10233:35;10034:534;;;;;;10293:6;:67;;3745:4;10307:33;;;:53;10293:67;;;10302:1;10293:67;10034:534;;;;10386:6;10385:7;:67;;3745:4;10399:33;;;:53;10385:67;;;10395:1;10385:67;10034:534;;;;10473:1;10034:534;;;;10495:1;10034:534;;;;10516:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;10516:9;-1:-1:-1;;;;;10034:534:0;;;;;10544:15;10034:534;;;10025:544;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9996:581;10614:3;-1:-1:-1;;;;;10614:8:0;;10623:562;;;;;;;;10666:6;:22;;10683:5;10666:22;;;10675:5;10666:22;-1:-1:-1;;;;;10623:562:0;;;;;10705:6;10704:7;:23;;10722:5;10704:23;;;10714:5;10704:23;-1:-1:-1;;;;;10623:562:0;;;10740:5;10623:562;;;;;;10764:6;:34;;10790:8;10764:34;;;10784:3;10773:8;:14;10764:34;10623:562;;;;;;10818:6;10817:7;:35;;10844:8;10817:35;;;10827:8;10838:3;10827:14;10817:35;10623:562;;;;;;10876:6;:89;;3745:4;10913:31;;;10890:55;;:75;10876:89;;;10885:1;10876:89;10623:562;;;;10990:6;10989:7;:89;;3745:4;11026:31;;;11003:55;;:75;10989:89;;;10999:1;10989:89;10623:562;;;;11098:1;10623:562;;;;11119:1;10623:562;;;;11139:5;-1:-1:-1;;;;;10623:562:0;;;;;11162:15;10623:562;;;10614:572;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;10584:20:0;10583:603;11204:6;:40;;11230:8;11241:3;11230:14;11204:40;;;11224:3;11213:8;:14;11204:40;11193:51;;9960:1291;11260:15;;11256:591;;11284:3;-1:-1:-1;;;;;11284:8:0;;11293:546;;;;;;;;11336:6;:22;;11353:5;11336:22;;;11345:5;11336:22;-1:-1:-1;;;;;11293:546:0;;;;;11375:6;11374:7;:23;;11392:5;11374:23;;;11384:5;11374:23;-1:-1:-1;;;;;11293:546:0;;;11410:5;11293:546;;;;;;11434:6;:28;;11454:8;11434:28;;;11443:8;11434:28;11293:546;;;;;;11482:6;11481:7;:29;;11502:8;11481:29;;;11491:8;11481:29;11293:546;;;;;;11534:6;:85;;3745:4;11588:11;11565:19;11549:13;8016:16;;;7951:86;11549:13;:35;11548:51;:71;;;;;:::i;:::-;;11534:85;;;11543:1;11534:85;11293:546;;;;11644:6;11643:7;:85;;3745:4;11697:11;11674:19;11658:13;8016:16;;;7951:86;11658:13;:35;11657:51;:71;;;;;:::i;:::-;;11643:85;;;11653:1;11643:85;11293:546;;;;11748:1;11293:546;;;;11769:1;11293:546;;;;11789:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;11789:9;-1:-1:-1;;;;;11293:546:0;;;;;11816:15;11293:546;;;11284:556;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;11256:591;11883:3;-1:-1:-1;;;;;11883:8:0;;11892:574;;;;;;;;11934:6;:22;;11951:5;11934:22;;;11943:5;11934:22;-1:-1:-1;;;;;11892:574:0;;;;;11972:6;11971:7;:23;;11989:5;11971:23;;;11981:5;11971:23;-1:-1:-1;;;;;11892:574:0;;;12006:5;11892:574;;;;;;12029:6;:28;;12049:8;12029:28;;;12038:8;12029:28;11892:574;;;;;;12076:6;12075:7;:29;;12096:8;12075:29;;;12085:8;12075:29;11892:574;;;;;;12127:6;:107;;3745:4;12202:11;3745:4;12182:31;12158:19;12142:13;8016:16;;;7951:86;12142:13;:35;12141:73;:93;;;;;:::i;:::-;;12127:107;;;12136:1;12127:107;11892:574;;;;12258:6;12257:7;:107;;3745:4;12332:11;3745:4;12312:31;12288:19;12272:13;8016:16;;;7951:86;12272:13;:35;12271:73;:93;;;;;:::i;:::-;;12257:107;;;12267:1;12257:107;11892:574;;;;12383:1;11892:574;;;;12403:1;11892:574;;;;12422:5;-1:-1:-1;;;;;11892:574:0;;;;;12444:15;11892:574;;;11883:584;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;11853:20:0;11852:615;-1:-1:-1;;;;;12477:13:0;;;:17;12473:298;;3805:42;-1:-1:-1;;;;;12503:23:0;;12533:5;-1:-1:-1;;;;;12533:13:0;;12548:215;;;;;;;;12595:5;-1:-1:-1;;;;;12548:215:0;;;;;12618:5;-1:-1:-1;;;;;12548:215:0;;;;;12636:5;12548:215;;;;;;12660:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;12660:9;-1:-1:-1;;;;;12548:215:0;;;;;12687:13;;;;12548:215;;;;;;;;-1:-1:-1;12548:215:0;;;;;;;;;;;;;;;12503:261;;-1:-1:-1;;;;;;12503:261:0;;;;;;;18456:13:1;;18452:22;;12503:261:0;;;18434:41:1;18523:17;;;18517:24;18513:33;;18491:20;;;18484:63;18595:17;;18589:24;18615:8;18585:39;18563:20;;;18556:69;18673:17;;;18667:24;18663:33;;18641:20;;;18634:63;18753:4;18741:17;;18735:24;18713:20;;;18706:54;18414:3;18804:17;;18798:24;18776:20;;;18769:54;18883:4;18871:17;;;18865:24;18861:33;;;18839:20;;;18832:63;18368:19;;12503:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12473:298;9210:3566;;;;;;;;9074:3706;;;;:::o;19218:353::-;19322:13;19337:10;19354:17;19382:72;19428:6;:24;;19447:5;19428:24;;;19437:7;19428:24;19399:6;19398:7;:25;;19418:5;19398:25;;;19408:7;19398:25;19388:36;;-1:-1:-1;;;19388:36:0;:::i;:::-;:65;;;;:::i;:::-;19382:5;:72::i;:::-;19354:101;;19467:30;19487:9;19467:19;:30::i;:::-;19460:37;-1:-1:-1;19517:10:0;19524:3;19460:37;19517:10;:::i;:::-;19509:19;;:4;:19;:::i;:::-;19502:26;;19541:25;19561:4;19541:19;:25::i;:::-;19533:33;;19349:222;19218:353;;;;;;:::o;18982:231::-;19085:6;19095:1;19090;19085:6;;19084:12;19119:85;19133:6;19126:4;:13;19119:85;;;19157:4;19148:13;;19196:1;19188:4;19181;19176:2;:9;;;;;:::i;:::-;;:16;19175:22;;;;;:::i;:::-;;19168:29;;19119:85;;;19053:156;18982:231;;;:::o;15551:3426::-;15625:10;3991;-1:-1:-1;;;;;15666:30:0;;;;;;:63;;-1:-1:-1;4048:49:0;-1:-1:-1;;;;;15700:29:0;;;15666:63;15658:77;;;;-1:-1:-1;;;15658:77:0;;19666:2:1;15658:77:0;;;19648:21:1;19705:1;19685:18;;;19678:29;-1:-1:-1;;;19723:18:1;;;19716:31;19764:18;;15658:77:0;;;;;;;;;-1:-1:-1;;;;;15782:2:0;15757:27;;;;-1:-1:-1;;;;;15870:41:0;;15867:1;15863:49;15946:9;;;16004:18;15998:25;;15995:1;15991:33;16058:9;;;16116:10;16110:17;;16107:1;16103:25;16162:9;;;16220:6;16214:13;;16211:1;16207:21;16262:9;;;16320:4;16314:11;;16311:1;16307:19;;;16360:9;;;16418:3;16412:10;;16409:1;16405:18;16457:9;;;16509:10;;;16506:1;16502:18;;;16554:9;;;;16599:10;;;16037;;16141;;;16241;;;16339;16436;;;16533;16622;16656:3;16649:10;;16645:75;;16681:3;16675;:9;16665:5;:20;;16661:24;;16645:75;;;16716:3;16710;:9;16700:5;:20;;16696:24;;16645:75;16806:9;;;16801:3;16797:19;;;16831:11;;;;16889:9;;;;16939;;16930:19;;;16964:11;;;17022:9;17072;;17063:19;;;17097:11;;;17155:9;17205;;17196:19;;;17230:11;;;17288:9;17338;;17329:19;;;17363:11;;;17421:9;17471;;17462:19;;;17496:11;;;17554:9;17604;;17595:19;;;17629:11;;;17687:9;17737;;17728:19;;;17762:11;;;17820:9;17870;;17861:19;;;17895:11;;;17953:9;18003;;17994:19;;;18028:11;;;18086:9;18136;;18127:19;;;18161:11;;;18219:9;18269;;18260:19;;;18294:11;;;18352:9;18402;;18393:19;;;18427:11;;;;18485:9;;;;18535;;18526:19;;;;;16806:9;-1:-1:-1;;16744:17:0;;16766:2;16743:25;16867:10;;;;;;;16857:21;17000:10;;;;;;;16990:21;;;;17133:10;;;;;;;17123:21;;;;17266:10;;;;;;;17256:21;;;;17399:10;;;;;;;17389:21;;;;17532:10;;;;;;;17522:21;;;;17665:10;;;;;;;17655:21;17798:10;;;;;;;17788:21;17931:10;;;;;;;17921:21;18064:10;;;;;;;18054:21;18197:10;;;;;;;18187:21;18330:10;;;;;;;18320:21;18463:10;;;;;;;18453:21;18596:10;;;;;;;18586:21;18651:24;18643:32;;-1:-1:-1;;18706:53:0;;16758:3;18705:62;;;;18812:39;18796:55;;18795:64;;18875:17;;;;;;;;;:92;;18936:12;-1:-1:-1;;;;;18905:43:0;:27;18925:6;18905:19;:27::i;:::-;-1:-1:-1;;;;;18905:43:0;;;:62;;18960:7;18875:92;;18905:62;18951:6;18875:92;;;18895:7;18875:92;18868:99;15551:3426;-1:-1:-1;;;;;;;;;15551:3426:0:o;13331:2215::-;13395:20;13438:15;13463:1;13456:4;:8;;;:57;;13507:4;13500:12;;13456:57;;;13483:4;13476:12;;13475:13;;13456:57;13438:75;-1:-1:-1;3935:9:0;13527:36;;;13519:50;;;;-1:-1:-1;;;13519:50:0;;19995:2:1;13519:50:0;;;19977:21:1;20034:1;20014:18;;;20007:29;-1:-1:-1;;;20052:18:1;;;20045:31;20093:18;;13519:50:0;19793:324:1;13519:50:0;13577:13;13593:7;13603:3;13593:13;13610:1;13593:18;:93;;-1:-1:-1;;;13593:93:0;;;13614:34;13593:93;13577:109;;;-1:-1:-1;13706:3:0;13696:13;;:18;13692:83;;13733:34;13725:42;13772:3;13724:51;13692:83;13795:3;13785:13;;:18;13781:83;;13822:34;13814:42;13861:3;13813:51;13781:83;13884:3;13874:13;;:18;13870:83;;13911:34;13903:42;13950:3;13902:51;13870:83;13973:4;13963:14;;:19;13959:84;;14001:34;13993:42;14040:3;13992:51;13959:84;14063:4;14053:14;;:19;14049:84;;14091:34;14083:42;14130:3;14082:51;14049:84;14153:4;14143:14;;:19;14139:84;;14181:34;14173:42;14220:3;14172:51;14139:84;14243:4;14233:14;;:19;14229:84;;14271:34;14263:42;14310:3;14262:51;14229:84;14333:5;14323:15;;:20;14319:85;;14362:34;14354:42;14401:3;14353:51;14319:85;14424:5;14414:15;;:20;14410:85;;14453:34;14445:42;14492:3;14444:51;14410:85;14515:5;14505:15;;:20;14501:85;;14544:34;14536:42;14583:3;14535:51;14501:85;14606:5;14596:15;;:20;14592:85;;14635:34;14627:42;14674:3;14626:51;14592:85;14697:6;14687:16;;:21;14683:86;;14727:34;14719:42;14766:3;14718:51;14683:86;14789:6;14779:16;;:21;14775:86;;14819:34;14811:42;14858:3;14810:51;14775:86;14881:6;14871:16;;:21;14867:86;;14911:34;14903:42;14950:3;14902:51;14867:86;14973:6;14963:16;;:21;14959:86;;15003:34;14995:42;15042:3;14994:51;14959:86;15065:7;15055:17;;:22;15051:86;;15096:33;15088:41;15134:3;15087:50;15051:86;15157:7;15147:17;;:22;15143:85;;15188:32;15180:40;15225:3;15179:49;15143:85;15248:7;15238:17;;:22;15234:83;;15279:30;15271:38;15314:3;15270:47;15234:83;15337:7;15327:17;;:22;15323:78;;15368:25;15360:33;15398:3;15359:42;15323:78;15420:1;15413:4;:8;;;15409:47;;;15451:5;-1:-1:-1;;15431:25:0;;;;;:::i;:::-;;15423:33;;15409:47;15513:7;15504:5;:17;:22;:30;;15533:1;15504:30;;;15529:1;15504:30;15487:48;;15497:2;15488:5;:11;;15487:48;15464:72;;13422:2120;;13331:2215;;;:::o;-1:-1:-1:-;;;;;;;;:::o;331:250:1:-;416:1;426:113;440:6;437:1;434:13;426:113;;;516:11;;;510:18;497:11;;;490:39;462:2;455:10;426:113;;;-1:-1:-1;;573:1:1;555:16;;548:27;331:250::o;586:396::-;735:2;724:9;717:21;698:4;767:6;761:13;810:6;805:2;794:9;790:18;783:34;826:79;898:6;893:2;882:9;878:18;873:2;865:6;861:15;826:79;:::i;:::-;966:2;945:15;-1:-1:-1;;941:29:1;926:45;;;;973:2;922:54;;586:396;-1:-1:-1;;586:396:1:o;987:131::-;-1:-1:-1;;;;;1062:31:1;;1052:42;;1042:70;;1108:1;1105;1098:12;1042:70;987:131;:::o;1123:315::-;1191:6;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1307:9;1294:23;1326:31;1351:5;1326:31;:::i;:::-;1376:5;1428:2;1413:18;;;;1400:32;;-1:-1:-1;;;1123:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2467:794::-;2555:6;2563;2571;2579;2632:2;2620:9;2611:7;2607:23;2603:32;2600:52;;;2648:1;2645;2638:12;2600:52;2687:9;2674:23;2706:31;2731:5;2706:31;:::i;:::-;2756:5;-1:-1:-1;2808:2:1;2793:18;;2780:32;;-1:-1:-1;2863:2:1;2848:18;;2835:32;2886:18;2916:14;;;2913:34;;;2943:1;2940;2933:12;2913:34;2981:6;2970:9;2966:22;2956:32;;3026:7;3019:4;3015:2;3011:13;3007:27;2997:55;;3048:1;3045;3038:12;2997:55;3088:2;3075:16;3114:2;3106:6;3103:14;3100:34;;;3130:1;3127;3120:12;3100:34;3175:7;3170:2;3161:6;3157:2;3153:15;3149:24;3146:37;3143:57;;;3196:1;3193;3186:12;3143:57;2467:794;;;;-1:-1:-1;;3227:2:1;3219:11;;-1:-1:-1;;;2467:794:1:o;3266:247::-;3325:6;3378:2;3366:9;3357:7;3353:23;3349:32;3346:52;;;3394:1;3391;3384:12;3346:52;3433:9;3420:23;3452:31;3477:5;3452:31;:::i;3518:127::-;3579:10;3574:3;3570:20;3567:1;3560:31;3610:4;3607:1;3600:15;3634:4;3631:1;3624:15;3650:719;3693:5;3746:3;3739:4;3731:6;3727:17;3723:27;3713:55;;3764:1;3761;3754:12;3713:55;3800:6;3787:20;3826:18;3863:2;3859;3856:10;3853:36;;;3869:18;;:::i;:::-;3944:2;3938:9;3912:2;3998:13;;-1:-1:-1;;3994:22:1;;;4018:2;3990:31;3986:40;3974:53;;;4042:18;;;4062:22;;;4039:46;4036:72;;;4088:18;;:::i;:::-;4128:10;4124:2;4117:22;4163:2;4155:6;4148:18;4209:3;4202:4;4197:2;4189:6;4185:15;4181:26;4178:35;4175:55;;;4226:1;4223;4216:12;4175:55;4290:2;4283:4;4275:6;4271:17;4264:4;4256:6;4252:17;4239:54;4337:1;4330:4;4325:2;4317:6;4313:15;4309:26;4302:37;4357:6;4348:15;;;;;;3650:719;;;;:::o;4374:1023::-;4516:6;4524;4532;4540;4548;4556;4564;4572;4625:3;4613:9;4604:7;4600:23;4596:33;4593:53;;;4642:1;4639;4632:12;4593:53;4681:9;4668:23;4700:31;4725:5;4700:31;:::i;:::-;4750:5;-1:-1:-1;4806:2:1;4791:18;;4778:32;4829:18;4859:14;;;4856:34;;;4886:1;4883;4876:12;4856:34;4909:50;4951:7;4942:6;4931:9;4927:22;4909:50;:::i;:::-;4899:60;;5012:2;5001:9;4997:18;4984:32;4968:48;;5041:2;5031:8;5028:16;5025:36;;;5057:1;5054;5047:12;5025:36;;5080:52;5124:7;5113:8;5102:9;5098:24;5080:52;:::i;:::-;4374:1023;;;;-1:-1:-1;5070:62:1;;5179:2;5164:18;;5151:32;;-1:-1:-1;5230:3:1;5215:19;;5202:33;;5282:3;5267:19;;5254:33;;-1:-1:-1;5334:3:1;5319:19;;5306:33;;-1:-1:-1;5386:3:1;5371:19;;;5358:33;;-1:-1:-1;4374:1023:1;-1:-1:-1;;;4374:1023:1:o;5655:388::-;5723:6;5731;5784:2;5772:9;5763:7;5759:23;5755:32;5752:52;;;5800:1;5797;5790:12;5752:52;5839:9;5826:23;5858:31;5883:5;5858:31;:::i;:::-;5908:5;-1:-1:-1;5965:2:1;5950:18;;5937:32;5978:33;5937:32;5978:33;:::i;:::-;6030:7;6020:17;;;5655:388;;;;;:::o;6048:380::-;6127:1;6123:12;;;;6170;;;6191:61;;6245:4;6237:6;6233:17;6223:27;;6191:61;6298:2;6290:6;6287:14;6267:18;6264:38;6261:161;;6344:10;6339:3;6335:20;6332:1;6325:31;6379:4;6376:1;6369:15;6407:4;6404:1;6397:15;6433:127;6494:10;6489:3;6485:20;6482:1;6475:31;6525:4;6522:1;6515:15;6549:4;6546:1;6539:15;6565:168;6638:9;;;6669;;6686:15;;;6680:22;;6666:37;6656:71;;6707:18;;:::i;6738:452::-;6970:3;7008:6;7002:13;7024:66;7083:6;7078:3;7071:4;7063:6;7059:17;7024:66;:::i;:::-;-1:-1:-1;;;7112:16:1;;7137:18;;;-1:-1:-1;7182:1:1;7171:13;;6738:452;-1:-1:-1;6738:452:1:o;7195:455::-;7427:3;7465:6;7459:13;7481:66;7540:6;7535:3;7528:4;7520:6;7516:17;7481:66;:::i;:::-;-1:-1:-1;;;7569:16:1;;7594:21;;;-1:-1:-1;7642:1:1;7631:13;;7195:455;-1:-1:-1;7195:455:1:o;7655:559::-;-1:-1:-1;;;;;7868:32:1;;7850:51;;7932:2;7917:18;;7910:34;;;7980:2;7975;7960:18;;7953:30;;;7999:18;;7992:34;;;8019:6;8069;8063:3;8048:19;;8035:49;8134:1;8104:22;;;8128:3;8100:32;;;8093:43;;;;8197:2;8176:15;;;-1:-1:-1;;8172:29:1;8157:45;8153:55;;7655:559;-1:-1:-1;;;7655:559:1:o;8219:277::-;8286:6;8339:2;8327:9;8318:7;8314:23;8310:32;8307:52;;;8355:1;8352;8345:12;8307:52;8387:9;8381:16;8440:5;8433:13;8426:21;8419:5;8416:32;8406:60;;8462:1;8459;8452:12;8501:251;8571:6;8624:2;8612:9;8603:7;8599:23;8595:32;8592:52;;;8640:1;8637;8630:12;8592:52;8672:9;8666:16;8691:31;8716:5;8691:31;:::i;8757:572::-;8982:13;;8964:32;;9056:4;9044:17;;;9038:24;-1:-1:-1;;;;;9034:50:1;9012:20;;;9005:80;9132:4;9120:17;;;9114:24;-1:-1:-1;;;;;9229:21:1;;;9207:20;;;9200:51;;;;9311:4;9299:17;;;9293:24;9289:33;9267:20;;;9260:63;;;;8951:3;8936:19;;8757:572::o;9334:245::-;9413:6;9421;9474:2;9462:9;9453:7;9449:23;9445:32;9442:52;;;9490:1;9487;9480:12;9442:52;-1:-1:-1;;9513:16:1;;9569:2;9554:18;;;9548:25;9513:16;;9548:25;;-1:-1:-1;9334:245:1:o;9710:545::-;9812:2;9807:3;9804:11;9801:448;;;9848:1;9873:5;9869:2;9862:17;9918:4;9914:2;9904:19;9988:2;9976:10;9972:19;9969:1;9965:27;9959:4;9955:38;10024:4;10012:10;10009:20;10006:47;;;-1:-1:-1;10047:4:1;10006:47;10102:2;10097:3;10093:12;10090:1;10086:20;10080:4;10076:31;10066:41;;10157:82;10175:2;10168:5;10165:13;10157:82;;;10220:17;;;10201:1;10190:13;10157:82;;;10161:3;;;9801:448;9710:545;;;:::o;10431:1352::-;10557:3;10551:10;10584:18;10576:6;10573:30;10570:56;;;10606:18;;:::i;:::-;10635:97;10725:6;10685:38;10717:4;10711:11;10685:38;:::i;:::-;10679:4;10635:97;:::i;:::-;10787:4;;10851:2;10840:14;;10868:1;10863:663;;;;11570:1;11587:6;11584:89;;;-1:-1:-1;11639:19:1;;;11633:26;11584:89;-1:-1:-1;;10388:1:1;10384:11;;;10380:24;10376:29;10366:40;10412:1;10408:11;;;10363:57;11686:81;;10833:944;;10863:663;9657:1;9650:14;;;9694:4;9681:18;;-1:-1:-1;;10899:20:1;;;11017:236;11031:7;11028:1;11025:14;11017:236;;;11120:19;;;11114:26;11099:42;;11212:27;;;;11180:1;11168:14;;;;11047:19;;11017:236;;;11021:3;11281:6;11272:7;11269:19;11266:201;;;11342:19;;;11336:26;-1:-1:-1;;11425:1:1;11421:14;;;11437:3;11417:24;11413:37;11409:42;11394:58;11379:74;;11266:201;-1:-1:-1;;;;;11513:1:1;11497:14;;;11493:22;11480:36;;-1:-1:-1;10431:1352:1:o;11788:128::-;11855:9;;;11876:11;;;11873:37;;;11890:18;;:::i;11921:422::-;12010:1;12053:5;12010:1;12067:270;12088:7;12078:8;12075:21;12067:270;;;12147:4;12143:1;12139:6;12135:17;12129:4;12126:27;12123:53;;;12156:18;;:::i;:::-;12206:7;12196:8;12192:22;12189:55;;;12226:16;;;;12189:55;12305:22;;;;12265:15;;;;12067:270;;;12071:3;11921:422;;;;;:::o;12348:806::-;12397:5;12427:8;12417:80;;-1:-1:-1;12468:1:1;12482:5;;12417:80;12516:4;12506:76;;-1:-1:-1;12553:1:1;12567:5;;12506:76;12598:4;12616:1;12611:59;;;;12684:1;12679:130;;;;12591:218;;12611:59;12641:1;12632:10;;12655:5;;;12679:130;12716:3;12706:8;12703:17;12700:43;;;12723:18;;:::i;:::-;-1:-1:-1;;12779:1:1;12765:16;;12794:5;;12591:218;;12893:2;12883:8;12880:16;12874:3;12868:4;12865:13;12861:36;12855:2;12845:8;12842:16;12837:2;12831:4;12828:12;12824:35;12821:77;12818:159;;;-1:-1:-1;12930:19:1;;;12962:5;;12818:159;13009:34;13034:8;13028:4;13009:34;:::i;:::-;13079:6;13075:1;13071:6;13067:19;13058:7;13055:32;13052:58;;;13090:18;;:::i;:::-;13128:20;;12348:806;-1:-1:-1;;;12348:806:1:o;13159:131::-;13219:5;13248:36;13275:8;13269:4;13248:36;:::i;13295:127::-;13356:10;13351:3;13347:20;13344:1;13337:31;13387:4;13384:1;13377:15;13411:4;13408:1;13401:15;13427:120;13467:1;13493;13483:35;;13498:18;;:::i;:::-;-1:-1:-1;13532:9:1;;13427:120::o;13552:135::-;13591:3;13612:17;;;13609:43;;13632:18;;:::i;:::-;-1:-1:-1;13679:1:1;13668:13;;13552:135::o;13692:125::-;13757:9;;;13778:10;;;13775:36;;;13791:18;;:::i;13822:112::-;13854:1;13880;13870:35;;13885:18;;:::i;:::-;-1:-1:-1;13919:9:1;;13822:112::o;13939:148::-;14027:4;14006:12;;;14020;;;14002:31;;14045:13;;14042:39;;;14061:18;;:::i;14092:127::-;14153:10;14148:3;14144:20;14141:1;14134:31;14184:4;14181:1;14174:15;14208:4;14205:1;14198:15;14224:496;14403:3;14441:6;14435:13;14457:66;14516:6;14511:3;14504:4;14496:6;14492:17;14457:66;:::i;:::-;14586:13;;14545:16;;;;14608:70;14586:13;14545:16;14655:4;14643:17;;14608:70;:::i;:::-;14694:20;;14224:496;-1:-1:-1;;;;14224:496:1:o;14725:452::-;14957:3;14995:6;14989:13;15011:66;15070:6;15065:3;15058:4;15050:6;15046:17;15011:66;:::i;:::-;-1:-1:-1;;;15099:16:1;;15124:18;;;-1:-1:-1;15169:1:1;15158:13;;14725:452;-1:-1:-1;14725:452:1:o;15182:::-;15414:3;15452:6;15446:13;15468:66;15527:6;15522:3;15515:4;15507:6;15503:17;15468:66;:::i;:::-;-1:-1:-1;;;15556:16:1;;15581:18;;;-1:-1:-1;15626:1:1;15615:13;;15182:452;-1:-1:-1;15182:452:1:o;16451:1223::-;16669:13;;-1:-1:-1;;;;;80:31:1;68:44;;16637:3;16622:19;;16741:4;16733:6;16729:17;16723:24;16756:54;16804:4;16793:9;16789:20;16775:12;-1:-1:-1;;;;;80:31:1;68:44;;14:104;16756:54;;16859:4;16851:6;16847:17;16841:24;16874:60;16928:4;16917:9;16913:20;16897:14;15720:8;15709:20;15697:33;;15639:97;16874:60;;16983:4;16975:6;16971:17;16965:24;16998:54;17046:4;17035:9;17031:20;17015:14;16430:1;16419:20;16407:33;;16355:91;16998:54;;17101:4;17093:6;17089:17;17083:24;17116:54;17164:4;17153:9;17149:20;17133:14;16430:1;16419:20;16407:33;;16355:91;17116:54;;17226:4;17218:6;17214:17;17208:24;17201:4;17190:9;17186:20;17179:54;17289:4;17281:6;17277:17;17271:24;17264:4;17253:9;17249:20;17242:54;17352:4;17344:6;17340:17;17334:24;17327:4;17316:9;17312:20;17305:54;17378:6;17438:2;17430:6;17426:15;17420:22;17415:2;17404:9;17400:18;17393:50;;17462:6;17517:2;17509:6;17505:15;17499:22;17530:54;17580:2;17569:9;17565:18;17549:14;-1:-1:-1;;;;;80:31:1;68:44;;14:104;17530:54;-1:-1:-1;;17603:6:1;17651:15;;;17645:22;17625:18;;;;17618:50;16451:1223;:::o;17679:489::-;17776:6;17784;17792;17800;17853:3;17841:9;17832:7;17828:23;17824:33;17821:53;;;17870:1;17867;17860:12;17821:53;17899:9;17893:16;17883:26;;17952:2;17941:9;17937:18;17931:25;-1:-1:-1;;;;;17989:5:1;17985:46;17978:5;17975:57;17965:85;;18046:1;18043;18036:12;17965:85;18114:2;18099:18;;18093:25;18158:2;18143:18;;;18137:25;17679:489;;18069:5;;-1:-1:-1;17679:489:1;-1:-1:-1;;;17679:489:1:o;18906:184::-;18976:6;19029:2;19017:9;19008:7;19004:23;19000:32;18997:52;;;19045:1;19042;19035:12;18997:52;-1:-1:-1;19068:16:1;;18906:184;-1:-1:-1;18906:184:1:o;19095:166::-;19125:1;19166;19163;19152:16;19187:3;19177:37;;19194:18;;:::i;:::-;19251:3;19247:1;19244;19233:16;19228:27;19223:32;;;19095:166;;;;:::o;19266:193::-;19364:1;19353:16;;;19335;;;;19331:39;-1:-1:-1;;19385:23:1;;19420:8;19410:19;;19382:48;19379:74;;;19433:18;;:::i

Swarm Source

ipfs://d15a9c359bb5a5fd7a5ffce6c29d3ea55d4d85e9848f95dfc71def0599c5044e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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