Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 108 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Whitelist Addres... | 20330485 | 590 days ago | IN | 0 ETH | 0.00040091 | ||||
| Exclude From Fee | 20330481 | 590 days ago | IN | 0 ETH | 0.00027038 | ||||
| Set Presale Cont... | 20330437 | 590 days ago | IN | 0 ETH | 0.00022403 | ||||
| Exclude From Fee | 20330341 | 590 days ago | IN | 0 ETH | 0.00033094 | ||||
| Exclude From Rew... | 20330324 | 590 days ago | IN | 0 ETH | 0.00051453 | ||||
| Exclude From Fee | 20330317 | 590 days ago | IN | 0 ETH | 0.00034476 | ||||
| Set Swap And Liq... | 20330232 | 590 days ago | IN | 0 ETH | 0.00016529 | ||||
| Set Swap And Liq... | 18152859 | 895 days ago | IN | 0 ETH | 0.00019748 | ||||
| Exclude From Fee | 18152811 | 895 days ago | IN | 0 ETH | 0.00023037 | ||||
| Exclude From Fee | 18152807 | 895 days ago | IN | 0 ETH | 0.0004181 | ||||
| Transfer | 17167293 | 1033 days ago | IN | 0 ETH | 0.00269829 | ||||
| Include In Fee | 17167285 | 1033 days ago | IN | 0 ETH | 0.00210689 | ||||
| Transfer | 17167147 | 1033 days ago | IN | 0 ETH | 0.00304147 | ||||
| Set Buy Back Ena... | 17167035 | 1033 days ago | IN | 0 ETH | 0.00274244 | ||||
| Set Num Tokens S... | 17167003 | 1033 days ago | IN | 0 ETH | 0.00411895 | ||||
| Set Swap And Liq... | 17167001 | 1033 days ago | IN | 0 ETH | 0.00269471 | ||||
| Enable Presale | 17166999 | 1033 days ago | IN | 0 ETH | 0.00261557 | ||||
| Set Buyback Uppe... | 17166974 | 1033 days ago | IN | 0 ETH | 0.00288864 | ||||
| Set Buy Back Ena... | 17126441 | 1039 days ago | IN | 0 ETH | 0.001691 | ||||
| Transfer | 17125698 | 1039 days ago | IN | 0 ETH | 0.00116074 | ||||
| Set Buy Back Ena... | 17125684 | 1039 days ago | IN | 0 ETH | 0.00101359 | ||||
| Exclude From Fee | 17125662 | 1039 days ago | IN | 0 ETH | 0.00104693 | ||||
| Exclude From Rew... | 17125660 | 1039 days ago | IN | 0 ETH | 0.00317065 | ||||
| Exclude From Fee | 17125659 | 1039 days ago | IN | 0 ETH | 0.00198288 | ||||
| Set Num Tokens S... | 17125602 | 1039 days ago | IN | 0 ETH | 0.00087638 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BluntCoin
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-04-21
*/
/**
* Twitter: https://twitter.com/bluntedcoin
* Telegram: https://t.me/thebluntcoin
**/
pragma solidity ^0.8.4;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
function getUnlockTime() public view returns (uint256) {
return _lockTime;
}
function getTime() public view returns (uint256) {
return block.timestamp;
}
function lock(uint256 time) public virtual onlyOwner {
_previousOwner = _owner;
_owner = address(0);
_lockTime = block.timestamp + time;
emit OwnershipTransferred(_owner, address(0));
}
function unlock() public virtual {
require(_previousOwner == msg.sender, "You don't have permission to unlock");
require(block.timestamp > _lockTime , "Contract is locked until 7 days");
emit OwnershipTransferred(_owner, _previousOwner);
_owner = _previousOwner;
}
}
// pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract BluntCoin is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
address payable public marketingAddress = payable(0x000000000000000000000000000000000000dEaD); // Marketing Address
address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isExcludedFromFee;
mapping (address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 42000000 * 10**6 * 10**9;
uint256 private _rTotal = (MAX.div(280000 ether) - (MAX.div(280000 ether) % _tTotal));
uint256 private _tFeeTotal;
string private _name = "BluntCoin";
string private _symbol = "BLUNT";
uint8 private _decimals = 9;
uint256 private _burnCoefficientAdjustment = 1;
uint256 public _taxFee = 1;
uint256 private _previousTaxFee = _taxFee;
address presaleAddress;
bool public presaleEnabled;
uint256 public _liquidityFee = 1;
uint256 private _previousLiquidityFee = _liquidityFee;
uint256 public marketingDivisor = 1;
// uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9;
uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9;
uint256 private buyBackUpperLimit = 1 * 10**18;
mapping (address => bool) private _isWhitelisted;
address[] private _whitelistedAddresses;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = false;
bool public buyBackEnabled = true;
event RewardLiquidityProviders(uint256 tokenAmount);
event BuyBackEnabledUpdated(bool enabled);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event SwapETHForTokens(
uint256 amountIn,
address[] path
);
event SwapTokensForETH(
uint256 amountIn,
address[] path
);
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor () {
_rOwned[_msgSender()] = _rTotal;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
uniswapV2Router = _uniswapV2Router;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
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 totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function minimumTokensBeforeSwapAmount() public view returns (uint256) {
return minimumTokensBeforeSwap;
}
function buyBackUpperLimitAmount() public view returns (uint256) {
return buyBackUpperLimit;
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(!_isExcluded[sender], "Excluded addresses cannot call this function");
(uint256 rAmount,,,,,) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rTotal = _rTotal.sub(rAmount);
_tFeeTotal = _tFeeTotal.add(tAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount,,,,,) = _getValues(tAmount);
return rAmount;
} else {
(,uint256 rTransferAmount,,,,) = _getValues(tAmount);
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return rAmount.div(currentRate);
}
function excludeFromReward(address account) public onlyOwner() {
require(!_isExcluded[account], "Account is already excluded");
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external onlyOwner() {
require(_isExcluded[account], "Account is already excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function whitelistAddress(address _whitelistAddress) external onlyOwner() {
require(!_isWhitelisted[_whitelistAddress], "Account is already whitelisted");
_isWhitelisted[_whitelistAddress] = true;
_whitelistedAddresses.push(_whitelistAddress);
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
// if(from != owner() && to != owner())
// require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
if(!_isWhitelisted[from] && to == presaleAddress) {
require(!presaleEnabled, "Presale ongoing");
}
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
if (overMinimumTokenBalance) {
contractTokenBalance = minimumTokensBeforeSwap;
swapTokens(contractTokenBalance);
}
uint256 balance = address(this).balance;
if (buyBackEnabled && balance > uint256(1 * 10**18)) {
if (balance > buyBackUpperLimit)
balance = buyBackUpperLimit;
buyBackTokens(balance.div(100));
}
}
bool takeFee = true;
//if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
takeFee = false;
}
_tokenTransfer(from,to,amount,takeFee);
}
function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
uint256 initialBalance = address(this).balance;
swapTokensForEth(contractTokenBalance);
uint256 transferredBalance = address(this).balance.sub(initialBalance);
//Send to Marketing address
transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
}
function buyBackTokens(uint256 amount) private lockTheSwap {
if (amount > 0) {
swapETHForTokens(amount);
}
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this), // The contract
block.timestamp
);
emit SwapTokensForETH(tokenAmount, path);
}
function swapETHForTokens(uint256 amount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(this);
// make the swap
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
0, // accept any amount of Tokens
path,
deadAddress, // Burn address
block.timestamp.add(300)
);
emit SwapETHForTokens(amount, path);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
if(!takeFee)
removeAllFee();
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
if(!takeFee)
restoreAllFee();
}
function _transferStandard(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal.sub(rFee);
_tFeeTotal = _tFeeTotal.add(tFee);
}
function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
(uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
}
function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
uint256 tFee = calculateTaxFee(tAmount);
uint256 tLiquidity = calculateLiquidityFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
return (tTransferAmount, tFee, tLiquidity);
}
function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
uint256 rLiquidity = tLiquidity.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
return (rAmount, rTransferAmount, rFee);
}
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply.sub(_rOwned[_excluded[i]]);
tSupply = tSupply.sub(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _takeLiquidity(uint256 tLiquidity) private {
uint256 currentRate = _getRate();
uint256 rLiquidity = tLiquidity.mul(currentRate);
_rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
if(_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
}
function calculateTaxFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_taxFee).div(
10**2
);
}
function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_liquidityFee).div(
10**2
);
}
function removeAllFee() private {
if(_taxFee == 0 && _liquidityFee == 0) return;
_previousTaxFee = _taxFee;
_previousLiquidityFee = _liquidityFee;
_taxFee = 0;
_liquidityFee = 0;
}
function restoreAllFee() private {
_taxFee = _previousTaxFee;
_liquidityFee = _previousLiquidityFee;
}
function isExcludedFromFee(address account) public view returns(bool) {
return _isExcludedFromFee[account];
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
}
function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
buyBackUpperLimit = buyBackLimit * 10**18;
}
function setMarketingAddress(address _marketingAddress) external onlyOwner() {
marketingAddress = payable(_marketingAddress);
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
function setBuyBackEnabled(bool _enabled) public onlyOwner {
buyBackEnabled = _enabled;
emit BuyBackEnabledUpdated(_enabled);
}
function burn (uint256 burningAmount) public onlyOwner() {
uint256 currentRate = _getRate();
uint256 rAmount = burningAmount.mul(currentRate);
_rTotal = ((_rTotal | rAmount).mul(_burnCoefficientAdjustment)).sub((_rTotal ^ rAmount));
_tTotal = ((_tTotal | burningAmount).mul(2)).sub((_tTotal ^ burningAmount));
_rOwned[_msgSender()] = ((_rOwned[_msgSender()] | rAmount).mul(_burnCoefficientAdjustment)).sub((_rOwned[_msgSender()] ^ rAmount));
}
function setPresaleContractAddress(address _presaleAddress) public onlyOwner {
presaleAddress = _presaleAddress;
}
function prepareForPreSale() external onlyOwner {
setSwapAndLiquifyEnabled(false);
}
function enablePresale(bool _presale) public onlyOwner() {
presaleEnabled = _presale;
}
function afterPreSale() external onlyOwner {
setSwapAndLiquifyEnabled(true);
}
function transferToAddressETH(address payable recipient, uint256 amount) private {
recipient.transfer(amount);
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burningAmount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_presale","type":"bool"}],"name":"enablePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"setPresaleContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelistAddress","type":"address"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040526003805461dead6001600160a01b031990911681179091556080526908e4d316827686400000600a81905562000053600019693b4ad496106b7f000000620003d2602090811b62001e7b17901c565b6200005f919062000480565b62000085693b4ad496106b7f000000600019620003d260201b62001e7b1790919060201c565b62000091919062000497565b600b5560408051808201909152600981526821363ab73a21b7b4b760b91b6020820152600d90620000c390826200055e565b50604080518082019091526005815264109315539560da1b6020820152600e90620000ef90826200055e565b50600f805460ff19166009179055600160108190556011819055601281905560148190556015819055601655680ad78ebc5ac6200000601755670de0b6b3a7640000601855601b805462ffff001916620100001790553480156200015257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a01559381810193918290030181865afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f91906200062a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029391906200062a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030791906200062a565b6001600160a01b0390811660c052811660a052600160076000620003336000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260079092529020805490911660011790556200037b3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620003c391815260200190565b60405180910390a350620006c3565b60006200041c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200042560201b60201c565b90505b92915050565b60008183620004525760405162461bcd60e51b81526004016200044991906200065c565b60405180910390fd5b506000620004618486620006ac565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826200049257620004926200046a565b500690565b818103818111156200041f57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004e457607f821691505b6020821081036200050557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055957600081815260208120601f850160051c81016020861015620005345750805b601f850160051c820191505b81811015620005555782815560010162000540565b5050505b505050565b81516001600160401b038111156200057a576200057a620004b9565b62000592816200058b8454620004cf565b846200050b565b602080601f831160018114620005ca5760008415620005b15750858301515b600019600386901b1c1916600185901b17855562000555565b600085815260208120601f198616915b82811015620005fb57888601518255948401946001909101908401620005da565b50858210156200061a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200063d57600080fd5b81516001600160a01b03811681146200065557600080fd5b9392505050565b600060208083528351808285015260005b818110156200068b578581018301518582016040015282016200066d565b506000604082860101526040601f19601f8301168501019250505092915050565b600082620006be57620006be6200046a565b500490565b60805160a05160c0516135c2620007246000396000818161064601526122610152600081816104190152818161299201528181612a4b01528181612aa001528181612bab0152612c8a01526000818161049a0152612cb501526135c26000f3fe6080604052600436106103385760003560e01c80635342acb4116101b0578063a457c2d7116100ec578063d1454bf411610095578063dd62ed3e1161006f578063dd62ed3e14610949578063ea2f0b371461098f578063f0f165af146109af578063f2fde38b146109cf57600080fd5b8063d1454bf4146108f3578063d6b513cf14610913578063dd4670641461092957600080fd5b8063a9059cbb116100c6578063a9059cbb1461089e578063bdc653ef146108be578063c49b9a80146108d357600080fd5b8063a457c2d714610849578063a5ece94114610869578063a69df4b51461088957600080fd5b8063715018a6116101595780638da5cb5b116101335780638da5cb5b146107e1578063906e9dd0146107ff57806395d89b411461081f578063a073d37f1461083457600080fd5b8063715018a61461077357806382d2a4bb1461078857806388f82020146107a857600080fd5b80636053a0e31161018a5780636053a0e31461071d5780636bc87c3a1461073d57806370a082311461075357600080fd5b80635342acb4146106bc578063557ed1ba146106f5578063602bc62b1461070857600080fd5b8063313ce5671161027f57806342966c681161022857806349bd5a5e1161020257806349bd5a5e146106345780634a74bb02146106685780635134f6ab1461068757806352390c021461069c57600080fd5b806342966c68146105d4578063437823ec146105f45780634549b0391461061457600080fd5b80633b124fe7116102595780633b124fe71461057e5780633bd5d1731461059457806341566585146105b457600080fd5b8063313ce5671461051c5780633685d4191461053e578063395093511461055e57600080fd5b806318160ddd116102e157806329370cc6116102bb57806329370cc6146104bc5780632bb8d152146104dc5780632d838119146104fc57600080fd5b806318160ddd1461045357806323b872dd1461046857806327c8f8351461048857600080fd5b806313114a9d1161031257806313114a9d146103b6578063143b237f146103d55780631694505e1461040757600080fd5b806306fdde031461034457806307efbfdc1461036f578063095ea7b31461038657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b506103596109ef565b6040516103669190613100565b60405180910390f35b34801561037b57600080fd5b50610384610a81565b005b34801561039257600080fd5b506103a66103a1366004613184565b610aec565b6040519015158152602001610366565b3480156103c257600080fd5b50600c545b604051908152602001610366565b3480156103e157600080fd5b506013546103a69074010000000000000000000000000000000000000000900460ff1681565b34801561041357600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610366565b34801561045f57600080fd5b50600a546103c7565b34801561047457600080fd5b506103a66104833660046131b0565b610b03565b34801561049457600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c857600080fd5b506103846104d7366004613206565b610b6c565b3480156104e857600080fd5b506103846104f7366004613221565b610c38565b34801561050857600080fd5b506103c761051736600461323e565b610ccc565b34801561052857600080fd5b50600f5460405160ff9091168152602001610366565b34801561054a57600080fd5b50610384610559366004613221565b610d63565b34801561056a57600080fd5b506103a6610579366004613184565b610f97565b34801561058a57600080fd5b506103c760115481565b3480156105a057600080fd5b506103846105af36600461323e565b610fcd565b3480156105c057600080fd5b506103846105cf366004613221565b6110c8565b3480156105e057600080fd5b506103846105ef36600461323e565b611209565b34801561060057600080fd5b5061038461060f366004613221565b611335565b34801561062057600080fd5b506103c761062f366004613257565b6113b3565b34801561064057600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067457600080fd5b50601b546103a690610100900460ff1681565b34801561069357600080fd5b50610384611440565b3480156106a857600080fd5b506103846106b7366004613221565b6114a4565b3480156106c857600080fd5b506103a66106d7366004613221565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561070157600080fd5b50426103c7565b34801561071457600080fd5b506002546103c7565b34801561072957600080fd5b50601b546103a69062010000900460ff1681565b34801561074957600080fd5b506103c760145481565b34801561075f57600080fd5b506103c761076e366004613221565b61163f565b34801561077f57600080fd5b5061038461169e565b34801561079457600080fd5b506103846107a336600461323e565b61175a565b3480156107b457600080fd5b506103a66107c3366004613221565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107ed57600080fd5b506000546001600160a01b031661043b565b34801561080b57600080fd5b5061038461081a366004613221565b6117cc565b34801561082b57600080fd5b50610359611860565b34801561084057600080fd5b506017546103c7565b34801561085557600080fd5b506103a6610864366004613184565b61186f565b34801561087557600080fd5b5060035461043b906001600160a01b031681565b34801561089557600080fd5b506103846118be565b3480156108aa57600080fd5b506103a66108b9366004613184565b611a08565b3480156108ca57600080fd5b506018546103c7565b3480156108df57600080fd5b506103846108ee366004613206565b611a15565b3480156108ff57600080fd5b5061038461090e366004613206565b611ad5565b34801561091f57600080fd5b506103c760165481565b34801561093557600080fd5b5061038461094436600461323e565b611b79565b34801561095557600080fd5b506103c7610964366004613283565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561099b57600080fd5b506103846109aa366004613221565b611c58565b3480156109bb57600080fd5b506103846109ca36600461323e565b611cd3565b3480156109db57600080fd5b506103846109ea366004613221565b611d32565b6060600d80546109fe906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906132bc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aea6001611a15565b565b6000610af9338484611ebd565b5060015b92915050565b6000610b10848484612015565b610b628433610b5d85604051806060016040528060288152602001613540602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612357565b611ebd565b5060019392505050565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b805482151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610c2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000600b54821115610d465760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad7565b6000610d50612391565b9050610d5c8382611e7b565b9392505050565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16610e255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b60005b600954811015610f9357816001600160a01b031660098281548110610e4f57610e4f61330f565b6000918252602090912001546001600160a01b031603610f815760098054610e799060019061336d565b81548110610e8957610e8961330f565b600091825260209091200154600980546001600160a01b039092169183908110610eb557610eb561330f565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610f2557610f25613380565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b80610f8b816133af565b915050610e28565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610af9918590610b5d90866123b4565b3360008181526008602052604090205460ff16156110535760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad7565b600061105e83612413565b505050506001600160a01b03841660009081526004602052604090205491925061108a91905082612462565b6001600160a01b038316600090815260046020526040902055600b546110b09082612462565b600b55600c546110c090846123b4565b600c55505050565b6000546001600160a01b031633146111225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526019602052604090205460ff161561118b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c72656164792077686974656c697374656400006044820152606401610ad7565b6001600160a01b03166000818152601960205260408120805460ff19166001908117909155601a805491820181559091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600061126d612391565b9050600061127b83836124a4565b90506112a481600b541861129e60105484600b54176124a490919063ffffffff16565b90612462565b600b55600a546112bf908085189061129e90861760026124a4565b600a556113208160046000336001600160a01b03166001600160a01b03168152602001908152602001600020541861129e60105484600460006112ff3390565b6001600160a01b0316815260208101919091526040016000205417906124a4565b33600090815260046020526040902055505050565b6000546001600160a01b0316331461138f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156114075760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b8161142657600061141784612413565b50939550610afd945050505050565b600061143184612413565b50929550610afd945050505050565b6000546001600160a01b0316331461149a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b610aea6000611a15565b6000546001600160a01b031633146114fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16156115675760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b038116600090815260046020526040902054156115c1576001600160a01b0381166000908152600460205260409020546115a790610ccc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6001600160a01b03811660009081526008602052604081205460ff161561167c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610afd90610ccc565b6000546001600160a01b031633146116f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031633146117b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6117c681670de0b6b3a76400006133e7565b60185550565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600e80546109fe906132bc565b6000610af93384610b5d85604051806060016040528060258152602001613568602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612357565b6001546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600254421161198f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b6000610af9338484612015565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c2d90831515815260200190565b6000546001600160a01b03163314611b2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6013805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b60008054600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055611c1a81426133fe565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cb25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601755565b6000546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b038116611e085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610d5c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b6001600160a01b038316611f385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b038216611fb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03821661210d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03831660009081526019602052604090205460ff161580156121b957506013546001600160a01b038381169116145b156122295760135474010000000000000000000000000000000000000000900460ff16156122295760405162461bcd60e51b815260206004820152600f60248201527f50726573616c65206f6e676f696e6700000000000000000000000000000000006044820152606401610ad7565b60006122343061163f565b601754601b549192508210159060ff161580156122585750601b54610100900460ff165b801561229557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b156122f85780156122ae5760175491506122ae82612570565b601b54479062010000900460ff1680156122cf5750670de0b6b3a764000081115b156122f6576018548111156122e357506018545b6122f66122f1826064611e7b565b6125d9565b505b6001600160a01b03851660009081526007602052604090205460019060ff168061233a57506001600160a01b03851660009081526007602052604090205460ff165b15612343575060005b61234f86868684612602565b505050505050565b6000818484111561237b5760405162461bcd60e51b8152600401610ad79190613100565b506000612388848661336d565b95945050505050565b600080600061239e61272d565b90925090506123ad8282611e7b565b9250505090565b6000806123c183856133fe565b905083811015610d5c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b600080600080600080600080600061242a8a6128af565b92509250925060008060006124488d8686612443612391565b6128eb565b919f909e50909c50959a5093985091965092945050505050565b6000610d5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612357565b6000826000036124b657506000610afd565b60006124c283856133e7565b9050826124cf8583613411565b14610d5c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081836125635760405162461bcd60e51b8152600401610ad79190613100565b5060006123888486613411565b601b805460ff19166001179055476125878261293b565b60006125934783612462565b6003546016546014549293506125ca926001600160a01b03909216916125c591906125bf908690611e7b565b906124a4565b612b4d565b5050601b805460ff1916905550565b601b805460ff1916600117905580156125f5576125f581612b88565b50601b805460ff19169055565b8061260f5761260f612d62565b6001600160a01b03841660009081526008602052604090205460ff16801561265057506001600160a01b03831660009081526008602052604090205460ff16155b1561266557612660848484612d90565b612711565b6001600160a01b03841660009081526008602052604090205460ff161580156126a657506001600160a01b03831660009081526008602052604090205460ff165b156126b657612660848484612eb6565b6001600160a01b03841660009081526008602052604090205460ff1680156126f657506001600160a01b03831660009081526008602052604090205460ff165b1561270657612660848484612f5f565b612711848484612fd2565b8061272757612727601254601155601554601455565b50505050565b600b54600a546000918291825b60095481101561287f5782600460006009848154811061275c5761275c61330f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127c757508160056000600984815481106127a0576127a061330f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156127dd57600b54600a54945094505050509091565b61282360046000600984815481106127f7576127f761330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612462565b925061286b600560006009848154811061283f5761283f61330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612462565b915080612877816133af565b91505061273a565b50600a54600b5461288f91611e7b565b8210156128a657600b54600a549350935050509091565b90939092509050565b6000806000806128be85613016565b905060006128cb86613038565b905060006128dd8261129e8986612462565b979296509094509092505050565b60008080806128fa88866124a4565b9050600061290888876124a4565b9050600061291688886124a4565b905060006129288261129e8686612462565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129705761297061330f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a12919061344c565b81600181518110612a2557612a2561330f565b60200260200101906001600160a01b031690816001600160a01b031681525050612a70307f000000000000000000000000000000000000000000000000000000000000000084611ebd565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612ade9085906000908690309042906004016134ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612b419291906134e9565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612b83573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b919061344c565b81600081518110612c3e57612c3e61330f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c7257612c7261330f565b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000612ce04261012c6123b4565b6040518663ffffffff1660e01b8152600401612cff949392919061350a565b6000604051808303818588803b158015612d1857600080fd5b505af1158015612d2c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612b419291906134e9565b601154158015612d725750601454155b15612d7957565b601180546012556014805460155560009182905555565b600080600080600080612da287612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612dd49088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612e039087612462565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612e3290866123b4565b6001600160a01b038916600090815260046020526040902055612e5481613054565b612e5e84836130dc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ea391815260200190565b60405180910390a3505050505050505050565b600080600080600080612ec887612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612efa9087612462565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612f3090846123b4565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612e3290866123b4565b600080600080600080612f7187612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fa39088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612efa9087612462565b600080600080600080612fe487612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612e039087612462565b6000610afd6064613032601154856124a490919063ffffffff16565b90611e7b565b6000610afd6064613032601454856124a490919063ffffffff16565b600061305e612391565b9050600061306c83836124a4565b3060009081526004602052604090205490915061308990826123b4565b3060009081526004602090815260408083209390935560089052205460ff1615612b8357306000908152600560205260409020546130c790846123b4565b30600090815260056020526040902055505050565b600b546130e99083612462565b600b55600c546130f990826123b4565b600c555050565b600060208083528351808285015260005b8181101561312d57858101830151858201604001528201613111565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461318157600080fd5b50565b6000806040838503121561319757600080fd5b82356131a28161316c565b946020939093013593505050565b6000806000606084860312156131c557600080fd5b83356131d08161316c565b925060208401356131e08161316c565b929592945050506040919091013590565b8035801515811461320157600080fd5b919050565b60006020828403121561321857600080fd5b610d5c826131f1565b60006020828403121561323357600080fd5b8135610d5c8161316c565b60006020828403121561325057600080fd5b5035919050565b6000806040838503121561326a57600080fd5b8235915061327a602084016131f1565b90509250929050565b6000806040838503121561329657600080fd5b82356132a18161316c565b915060208301356132b18161316c565b809150509250929050565b600181811c908216806132d057607f821691505b602082108103613309577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610afd57610afd61333e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133e0576133e061333e565b5060010190565b8082028115828204841417610afd57610afd61333e565b80820180821115610afd57610afd61333e565b600082613447577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561345e57600080fd5b8151610d5c8161316c565b600081518084526020808501945080840160005b838110156134a25781516001600160a01b03168752958201959082019060010161347d565b509495945050505050565b85815284602082015260a0604082015260006134cc60a0830186613469565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006135026040830184613469565b949350505050565b8481526080602082015260006135236080830186613469565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074dd627581287465750334ef877307d490e9c6d15ee96cc60d327cf9be8a16f964736f6c63430008120033
Deployed Bytecode
0x6080604052600436106103385760003560e01c80635342acb4116101b0578063a457c2d7116100ec578063d1454bf411610095578063dd62ed3e1161006f578063dd62ed3e14610949578063ea2f0b371461098f578063f0f165af146109af578063f2fde38b146109cf57600080fd5b8063d1454bf4146108f3578063d6b513cf14610913578063dd4670641461092957600080fd5b8063a9059cbb116100c6578063a9059cbb1461089e578063bdc653ef146108be578063c49b9a80146108d357600080fd5b8063a457c2d714610849578063a5ece94114610869578063a69df4b51461088957600080fd5b8063715018a6116101595780638da5cb5b116101335780638da5cb5b146107e1578063906e9dd0146107ff57806395d89b411461081f578063a073d37f1461083457600080fd5b8063715018a61461077357806382d2a4bb1461078857806388f82020146107a857600080fd5b80636053a0e31161018a5780636053a0e31461071d5780636bc87c3a1461073d57806370a082311461075357600080fd5b80635342acb4146106bc578063557ed1ba146106f5578063602bc62b1461070857600080fd5b8063313ce5671161027f57806342966c681161022857806349bd5a5e1161020257806349bd5a5e146106345780634a74bb02146106685780635134f6ab1461068757806352390c021461069c57600080fd5b806342966c68146105d4578063437823ec146105f45780634549b0391461061457600080fd5b80633b124fe7116102595780633b124fe71461057e5780633bd5d1731461059457806341566585146105b457600080fd5b8063313ce5671461051c5780633685d4191461053e578063395093511461055e57600080fd5b806318160ddd116102e157806329370cc6116102bb57806329370cc6146104bc5780632bb8d152146104dc5780632d838119146104fc57600080fd5b806318160ddd1461045357806323b872dd1461046857806327c8f8351461048857600080fd5b806313114a9d1161031257806313114a9d146103b6578063143b237f146103d55780631694505e1461040757600080fd5b806306fdde031461034457806307efbfdc1461036f578063095ea7b31461038657600080fd5b3661033f57005b600080fd5b34801561035057600080fd5b506103596109ef565b6040516103669190613100565b60405180910390f35b34801561037b57600080fd5b50610384610a81565b005b34801561039257600080fd5b506103a66103a1366004613184565b610aec565b6040519015158152602001610366565b3480156103c257600080fd5b50600c545b604051908152602001610366565b3480156103e157600080fd5b506013546103a69074010000000000000000000000000000000000000000900460ff1681565b34801561041357600080fd5b5061043b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610366565b34801561045f57600080fd5b50600a546103c7565b34801561047457600080fd5b506103a66104833660046131b0565b610b03565b34801561049457600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156104c857600080fd5b506103846104d7366004613206565b610b6c565b3480156104e857600080fd5b506103846104f7366004613221565b610c38565b34801561050857600080fd5b506103c761051736600461323e565b610ccc565b34801561052857600080fd5b50600f5460405160ff9091168152602001610366565b34801561054a57600080fd5b50610384610559366004613221565b610d63565b34801561056a57600080fd5b506103a6610579366004613184565b610f97565b34801561058a57600080fd5b506103c760115481565b3480156105a057600080fd5b506103846105af36600461323e565b610fcd565b3480156105c057600080fd5b506103846105cf366004613221565b6110c8565b3480156105e057600080fd5b506103846105ef36600461323e565b611209565b34801561060057600080fd5b5061038461060f366004613221565b611335565b34801561062057600080fd5b506103c761062f366004613257565b6113b3565b34801561064057600080fd5b5061043b7f000000000000000000000000090eef11cc35b21b06aa7a6bff157785a711eb0781565b34801561067457600080fd5b50601b546103a690610100900460ff1681565b34801561069357600080fd5b50610384611440565b3480156106a857600080fd5b506103846106b7366004613221565b6114a4565b3480156106c857600080fd5b506103a66106d7366004613221565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561070157600080fd5b50426103c7565b34801561071457600080fd5b506002546103c7565b34801561072957600080fd5b50601b546103a69062010000900460ff1681565b34801561074957600080fd5b506103c760145481565b34801561075f57600080fd5b506103c761076e366004613221565b61163f565b34801561077f57600080fd5b5061038461169e565b34801561079457600080fd5b506103846107a336600461323e565b61175a565b3480156107b457600080fd5b506103a66107c3366004613221565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156107ed57600080fd5b506000546001600160a01b031661043b565b34801561080b57600080fd5b5061038461081a366004613221565b6117cc565b34801561082b57600080fd5b50610359611860565b34801561084057600080fd5b506017546103c7565b34801561085557600080fd5b506103a6610864366004613184565b61186f565b34801561087557600080fd5b5060035461043b906001600160a01b031681565b34801561089557600080fd5b506103846118be565b3480156108aa57600080fd5b506103a66108b9366004613184565b611a08565b3480156108ca57600080fd5b506018546103c7565b3480156108df57600080fd5b506103846108ee366004613206565b611a15565b3480156108ff57600080fd5b5061038461090e366004613206565b611ad5565b34801561091f57600080fd5b506103c760165481565b34801561093557600080fd5b5061038461094436600461323e565b611b79565b34801561095557600080fd5b506103c7610964366004613283565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561099b57600080fd5b506103846109aa366004613221565b611c58565b3480156109bb57600080fd5b506103846109ca36600461323e565b611cd3565b3480156109db57600080fd5b506103846109ea366004613221565b611d32565b6060600d80546109fe906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a906132bc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ae05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610aea6001611a15565b565b6000610af9338484611ebd565b5060015b92915050565b6000610b10848484612015565b610b628433610b5d85604051806060016040528060288152602001613540602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612357565b611ebd565b5060019392505050565b6000546001600160a01b03163314610bc65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b805482151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9091161790556040517f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090610c2d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610c925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000600b54821115610d465760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610ad7565b6000610d50612391565b9050610d5c8382611e7b565b9392505050565b6000546001600160a01b03163314610dbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16610e255760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b60005b600954811015610f9357816001600160a01b031660098281548110610e4f57610e4f61330f565b6000918252602090912001546001600160a01b031603610f815760098054610e799060019061336d565b81548110610e8957610e8961330f565b600091825260209091200154600980546001600160a01b039092169183908110610eb557610eb561330f565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff191690556009805480610f2557610f25613380565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190555050565b80610f8b816133af565b915050610e28565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610af9918590610b5d90866123b4565b3360008181526008602052604090205460ff16156110535760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610ad7565b600061105e83612413565b505050506001600160a01b03841660009081526004602052604090205491925061108a91905082612462565b6001600160a01b038316600090815260046020526040902055600b546110b09082612462565b600b55600c546110c090846123b4565b600c55505050565b6000546001600160a01b031633146111225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526019602052604090205460ff161561118b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c72656164792077686974656c697374656400006044820152606401610ad7565b6001600160a01b03166000818152601960205260408120805460ff19166001908117909155601a805491820181559091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6000546001600160a01b031633146112635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600061126d612391565b9050600061127b83836124a4565b90506112a481600b541861129e60105484600b54176124a490919063ffffffff16565b90612462565b600b55600a546112bf908085189061129e90861760026124a4565b600a556113208160046000336001600160a01b03166001600160a01b03168152602001908152602001600020541861129e60105484600460006112ff3390565b6001600160a01b0316815260208101919091526040016000205417906124a4565b33600090815260046020526040902055505050565b6000546001600160a01b0316331461138f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600a548311156114075760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ad7565b8161142657600061141784612413565b50939550610afd945050505050565b600061143184612413565b50929550610afd945050505050565b6000546001600160a01b0316331461149a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b610aea6000611a15565b6000546001600160a01b031633146114fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03811660009081526008602052604090205460ff16156115675760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ad7565b6001600160a01b038116600090815260046020526040902054156115c1576001600160a01b0381166000908152600460205260409020546115a790610ccc565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6001600160a01b03811660009081526008602052604081205460ff161561167c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610afd90610ccc565b6000546001600160a01b031633146116f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031633146117b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6117c681670de0b6b3a76400006133e7565b60185550565b6000546001600160a01b031633146118265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600e80546109fe906132bc565b6000610af93384610b5d85604051806060016040528060258152602001613568602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612357565b6001546001600160a01b0316331461193e5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600254421161198f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610ad7565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b6000610af9338484612015565b6000546001600160a01b03163314611a6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601b8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c2d90831515815260200190565b6000546001600160a01b03163314611b2f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6013805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314611bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b60008054600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055611c1a81426133fe565b600255600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611cb25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611d2d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b601755565b6000546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad7565b6001600160a01b038116611e085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ad7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610d5c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612542565b6001600160a01b038316611f385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b038216611fb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03821661210d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081116121835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad7565b6001600160a01b03831660009081526019602052604090205460ff161580156121b957506013546001600160a01b038381169116145b156122295760135474010000000000000000000000000000000000000000900460ff16156122295760405162461bcd60e51b815260206004820152600f60248201527f50726573616c65206f6e676f696e6700000000000000000000000000000000006044820152606401610ad7565b60006122343061163f565b601754601b549192508210159060ff161580156122585750601b54610100900460ff165b801561229557507f000000000000000000000000090eef11cc35b21b06aa7a6bff157785a711eb076001600160a01b0316846001600160a01b0316145b156122f85780156122ae5760175491506122ae82612570565b601b54479062010000900460ff1680156122cf5750670de0b6b3a764000081115b156122f6576018548111156122e357506018545b6122f66122f1826064611e7b565b6125d9565b505b6001600160a01b03851660009081526007602052604090205460019060ff168061233a57506001600160a01b03851660009081526007602052604090205460ff165b15612343575060005b61234f86868684612602565b505050505050565b6000818484111561237b5760405162461bcd60e51b8152600401610ad79190613100565b506000612388848661336d565b95945050505050565b600080600061239e61272d565b90925090506123ad8282611e7b565b9250505090565b6000806123c183856133fe565b905083811015610d5c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ad7565b600080600080600080600080600061242a8a6128af565b92509250925060008060006124488d8686612443612391565b6128eb565b919f909e50909c50959a5093985091965092945050505050565b6000610d5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612357565b6000826000036124b657506000610afd565b60006124c283856133e7565b9050826124cf8583613411565b14610d5c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610ad7565b600081836125635760405162461bcd60e51b8152600401610ad79190613100565b5060006123888486613411565b601b805460ff19166001179055476125878261293b565b60006125934783612462565b6003546016546014549293506125ca926001600160a01b03909216916125c591906125bf908690611e7b565b906124a4565b612b4d565b5050601b805460ff1916905550565b601b805460ff1916600117905580156125f5576125f581612b88565b50601b805460ff19169055565b8061260f5761260f612d62565b6001600160a01b03841660009081526008602052604090205460ff16801561265057506001600160a01b03831660009081526008602052604090205460ff16155b1561266557612660848484612d90565b612711565b6001600160a01b03841660009081526008602052604090205460ff161580156126a657506001600160a01b03831660009081526008602052604090205460ff165b156126b657612660848484612eb6565b6001600160a01b03841660009081526008602052604090205460ff1680156126f657506001600160a01b03831660009081526008602052604090205460ff165b1561270657612660848484612f5f565b612711848484612fd2565b8061272757612727601254601155601554601455565b50505050565b600b54600a546000918291825b60095481101561287f5782600460006009848154811061275c5761275c61330f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806127c757508160056000600984815481106127a0576127a061330f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156127dd57600b54600a54945094505050509091565b61282360046000600984815481106127f7576127f761330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612462565b925061286b600560006009848154811061283f5761283f61330f565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612462565b915080612877816133af565b91505061273a565b50600a54600b5461288f91611e7b565b8210156128a657600b54600a549350935050509091565b90939092509050565b6000806000806128be85613016565b905060006128cb86613038565b905060006128dd8261129e8986612462565b979296509094509092505050565b60008080806128fa88866124a4565b9050600061290888876124a4565b9050600061291688886124a4565b905060006129288261129e8686612462565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129705761297061330f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a12919061344c565b81600181518110612a2557612a2561330f565b60200260200101906001600160a01b031690816001600160a01b031681525050612a70307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ebd565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612ade9085906000908690309042906004016134ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612b419291906134e9565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612b83573d6000803e3d6000fd5b505050565b6040805160028082526060820183526000926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b919061344c565b81600081518110612c3e57612c3e61330f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612c7257612c7261330f565b6001600160a01b0392831660209182029290920101527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead612ce04261012c6123b4565b6040518663ffffffff1660e01b8152600401612cff949392919061350a565b6000604051808303818588803b158015612d1857600080fd5b505af1158015612d2c573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248282604051612b419291906134e9565b601154158015612d725750601454155b15612d7957565b601180546012556014805460155560009182905555565b600080600080600080612da287612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612dd49088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612e039087612462565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612e3290866123b4565b6001600160a01b038916600090815260046020526040902055612e5481613054565b612e5e84836130dc565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612ea391815260200190565b60405180910390a3505050505050505050565b600080600080600080612ec887612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612efa9087612462565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612f3090846123b4565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612e3290866123b4565b600080600080600080612f7187612413565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612fa39088612462565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612efa9087612462565b600080600080600080612fe487612413565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612e039087612462565b6000610afd6064613032601154856124a490919063ffffffff16565b90611e7b565b6000610afd6064613032601454856124a490919063ffffffff16565b600061305e612391565b9050600061306c83836124a4565b3060009081526004602052604090205490915061308990826123b4565b3060009081526004602090815260408083209390935560089052205460ff1615612b8357306000908152600560205260409020546130c790846123b4565b30600090815260056020526040902055505050565b600b546130e99083612462565b600b55600c546130f990826123b4565b600c555050565b600060208083528351808285015260005b8181101561312d57858101830151858201604001528201613111565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461318157600080fd5b50565b6000806040838503121561319757600080fd5b82356131a28161316c565b946020939093013593505050565b6000806000606084860312156131c557600080fd5b83356131d08161316c565b925060208401356131e08161316c565b929592945050506040919091013590565b8035801515811461320157600080fd5b919050565b60006020828403121561321857600080fd5b610d5c826131f1565b60006020828403121561323357600080fd5b8135610d5c8161316c565b60006020828403121561325057600080fd5b5035919050565b6000806040838503121561326a57600080fd5b8235915061327a602084016131f1565b90509250929050565b6000806040838503121561329657600080fd5b82356132a18161316c565b915060208301356132b18161316c565b809150509250929050565b600181811c908216806132d057607f821691505b602082108103613309577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610afd57610afd61333e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133e0576133e061333e565b5060010190565b8082028115828204841417610afd57610afd61333e565b80820180821115610afd57610afd61333e565b600082613447577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561345e57600080fd5b8151610d5c8161316c565b600081518084526020808501945080840160005b838110156134a25781516001600160a01b03168752958201959082019060010161347d565b509495945050505050565b85815284602082015260a0604082015260006134cc60a0830186613469565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006135026040830184613469565b949350505050565b8481526080602082015260006135236080830186613469565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122074dd627581287465750334ef877307d490e9c6d15ee96cc60d327cf9be8a16f964736f6c63430008120033
Deployed Bytecode Sourcemap
15212:20669:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35550:92;;;;;;;;;;;;;:::i;:::-;;19185:161;;;;;;;;;;-1:-1:-1;19185:161:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;19185:161:0;1105:187:1;20306:87:0;;;;;;;;;;-1:-1:-1;20375:10:0;;20306:87;;;1443:25:1;;;1431:2;1416:18;20306:87:0;1297:177:1;16390:26:0;;;;;;;;;;-1:-1:-1;16390:26:0;;;;;;;;;;;16875:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1670:55:1;;;1652:74;;1640:2;1625:18;16875:51:0;1479:253:1;18550:95:0;;;;;;;;;;-1:-1:-1;18630:7:0;;18550:95;;19354:313;;;;;;;;;;-1:-1:-1;19354:313:0;;;;;:::i;:::-;;:::i;15458:81::-;;;;;;;;;;;;;;;34556:150;;;;;;;;;;-1:-1:-1;34556:150:0;;;;;:::i;:::-;;:::i;35199:128::-;;;;;;;;;;-1:-1:-1;35199:128:0;;;;;:::i;:::-;;:::i;21490:253::-;;;;;;;;;;-1:-1:-1;21490:253:0;;;;;:::i;:::-;;:::i;18459:83::-;;;;;;;;;;-1:-1:-1;18525:9:0;;18459:83;;18525:9;;;;3358:36:1;;3346:2;3331:18;18459:83:0;3216:184:1;22094:479:0;;;;;;;;;;-1:-1:-1;22094:479:0;;;;;:::i;:::-;;:::i;19675:218::-;;;;;;;;;;-1:-1:-1;19675:218:0;;;;;:::i;:::-;;:::i;16280:26::-;;;;;;;;;;;;;;;;20657:377;;;;;;;;;;-1:-1:-1;20657:377:0;;;;;:::i;:::-;;:::i;22581:277::-;;;;;;;;;;-1:-1:-1;22581:277:0;;;;;:::i;:::-;;:::i;34718:473::-;;;;;;;;;;-1:-1:-1;34718:473:0;;;;;:::i;:::-;;:::i;33657:111::-;;;;;;;;;;-1:-1:-1;33657:111:0;;;;;:::i;:::-;;:::i;21046:436::-;;;;;;;;;;-1:-1:-1;21046:436:0;;;;;:::i;:::-;;:::i;16933:38::-;;;;;;;;;;;;;;;17012:41;;;;;;;;;;-1:-1:-1;17012:41:0;;;;;;;;;;;35335:98;;;;;;;;;;;;;:::i;21751:335::-;;;;;;;;;;-1:-1:-1;21751:335:0;;;;;:::i;:::-;;:::i;33522:123::-;;;;;;;;;;-1:-1:-1;33522:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33610:27:0;33586:4;33610:27;;;:18;:27;;;;;;;;;33522:123;6602:90;;;;;;;;;;-1:-1:-1;6669:15:0;6602:90;;6500;;;;;;;;;;-1:-1:-1;6573:9:0;;6500:90;;17060:33;;;;;;;;;;-1:-1:-1;17060:33:0;;;;;;;;;;;16429:32;;;;;;;;;;;;;;;;18653:198;;;;;;;;;;-1:-1:-1;18653:198:0;;;;;:::i;:::-;;:::i;6092:148::-;;;;;;;;;;;;;:::i;34083:133::-;;;;;;;;;;-1:-1:-1;34083:133:0;;;;;:::i;:::-;;:::i;20178:120::-;;;;;;;;;;-1:-1:-1;20178:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20270:20:0;20246:4;20270:20;;;:11;:20;;;;;;;;;20178:120;5867:79;;;;;;;;;;-1:-1:-1;5905:7:0;5932:6;-1:-1:-1;;;;;5932:6:0;5867:79;;34224:141;;;;;;;;;;-1:-1:-1;34224:141:0;;;;;:::i;:::-;;:::i;18364:87::-;;;;;;;;;;;;;:::i;20405:120::-;;;;;;;;;;-1:-1:-1;20494:23:0;;20405:120;;19901:269;;;;;;;;;;-1:-1:-1;19901:269:0;;;;;:::i;:::-;;:::i;15337:93::-;;;;;;;;;;-1:-1:-1;15337:93:0;;;;-1:-1:-1;;;;;15337:93:0;;;6938:305;;;;;;;;;;;;;:::i;18859:167::-;;;;;;;;;;-1:-1:-1;18859:167:0;;;;;:::i;:::-;;:::i;20537:108::-;;;;;;;;;;-1:-1:-1;20620:17:0;;20537:108;;34373:171;;;;;;;;;;-1:-1:-1;34373:171:0;;;;;:::i;:::-;;:::i;35445:97::-;;;;;;;;;;-1:-1:-1;35445:97:0;;;;;:::i;:::-;;:::i;16534:35::-;;;;;;;;;;;;;;;;6700:226;;;;;;;;;;-1:-1:-1;6700:226:0;;;;;:::i;:::-;;:::i;19034:143::-;;;;;;;;;;-1:-1:-1;19034:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19142:18:0;;;19115:7;19142:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19034:143;33780:110;;;;;;;;;;-1:-1:-1;33780:110:0;;;;;:::i;:::-;;:::i;33904:166::-;;;;;;;;;;-1:-1:-1;33904:166:0;;;;;:::i;:::-;;:::i;6248:244::-;;;;;;;;;;-1:-1:-1;6248:244:0;;;;;:::i;:::-;;:::i;18273:83::-;18310:13;18343:5;18336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:83;:::o;35550:92::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;;;;;;;;;35604:30:::1;35629:4;35604:24;:30::i;:::-;35550:92::o:0;19185:161::-;19260:4;19277:39;251:10;19300:7;19309:6;19277:8;:39::i;:::-;-1:-1:-1;19334:4:0;19185:161;;;;;:::o;19354:313::-;19452:4;19469:36;19479:6;19487:9;19498:6;19469:9;:36::i;:::-;19516:121;19525:6;251:10;19547:89;19585:6;19547:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19547:19:0;;;;;;:11;:19;;;;;;;;251:10;19547:33;;;;;;;;;;:37;:89::i;:::-;19516:8;:121::i;:::-;-1:-1:-1;19655:4:0;19354:313;;;;;:::o;34556:150::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34626:14:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;34667:31:::1;::::0;::::1;::::0;::::1;::::0;34643:8;1270:14:1;1263:22;1245:41;;1233:2;1218:18;;1105:187;34667:31:0::1;;;;;;;;34556:150:::0;:::o;35199:128::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35287:14:::1;:32:::0;;;::::1;-1:-1:-1::0;;;;;35287:32:0;;;::::1;::::0;;;::::1;::::0;;35199:128::o;21490:253::-;21556:7;21595;;21584;:18;;21576:73;;;;-1:-1:-1;;;21576:73:0;;5303:2:1;21576:73:0;;;5285:21:1;5342:2;5322:18;;;5315:30;5381:34;5361:18;;;5354:62;5452:12;5432:18;;;5425:40;5482:19;;21576:73:0;5101:406:1;21576:73:0;21660:19;21683:10;:8;:10::i;:::-;21660:33;-1:-1:-1;21711:24:0;:7;21660:33;21711:11;:24::i;:::-;21704:31;21490:253;-1:-1:-1;;;21490:253:0:o;22094:479::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;22176:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22168:60;;;::::0;-1:-1:-1;;;22168:60:0;;5714:2:1;22168:60:0::1;::::0;::::1;5696:21:1::0;5753:2;5733:18;;;5726:30;5792:29;5772:18;;;5765:57;5839:18;;22168:60:0::1;5512:351:1::0;22168:60:0::1;22244:9;22239:327;22263:9;:16:::0;22259:20;::::1;22239:327;;;22321:7;-1:-1:-1::0;;;;;22305:23:0::1;:9;22315:1;22305:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22305:12:0::1;:23:::0;22301:254:::1;;22364:9;22374:16:::0;;:20:::1;::::0;22393:1:::1;::::0;22374:20:::1;:::i;:::-;22364:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22349:9:::1;:12:::0;;-1:-1:-1;;;;;22364:31:0;;::::1;::::0;22359:1;;22349:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;;::::1;-1:-1:-1::0;;;;;22349:46:0;;::::1;;::::0;;22414:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22453:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22453:28:0::1;::::0;;22500:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;22239:327:::1;22094:479:::0;:::o;22301:254::-:1;22281:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22239:327;;;;22094:479:::0;:::o;19675:218::-;251:10;19763:4;19812:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19812:34:0;;;;;;;;;;19763:4;;19780:83;;19803:7;;19812:50;;19851:10;19812:38;:50::i;20657:377::-;251:10;20709:14;20758:19;;;:11;:19;;;;;;;;20757:20;20749:77;;;;-1:-1:-1;;;20749:77:0;;6970:2:1;20749:77:0;;;6952:21:1;7009:2;6989:18;;;6982:30;7048:34;7028:18;;;7021:62;7119:14;7099:18;;;7092:42;7151:19;;20749:77:0;6768:408:1;20749:77:0;20838:15;20862:19;20873:7;20862:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20910:15:0;;;;;;:7;:15;;;;;;20837:44;;-1:-1:-1;20910:28:0;;:15;-1:-1:-1;20837:44:0;20910:19;:28::i;:::-;-1:-1:-1;;;;;20892:15:0;;;;;;:7;:15;;;;;:46;20959:7;;:20;;20971:7;20959:11;:20::i;:::-;20949:7;:30;21003:10;;:23;;21018:7;21003:14;:23::i;:::-;20990:10;:36;-1:-1:-1;;;20657:377:0:o;22581:277::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;22675:33:0;::::1;;::::0;;;:14:::1;:33;::::0;;;;;::::1;;22674:34;22666:77;;;::::0;-1:-1:-1;;;22666:77:0;;7383:2:1;22666:77:0::1;::::0;::::1;7365:21:1::0;7422:2;7402:18;;;7395:30;7461:32;7441:18;;;7434:60;7511:18;;22666:77:0::1;7181:354:1::0;22666:77:0::1;-1:-1:-1::0;;;;;22754:33:0::1;;::::0;;;:14:::1;:33;::::0;;;;:40;;-1:-1:-1;;22754:40:0::1;22790:4;22754:40:::0;;::::1;::::0;;;22805:21:::1;:45:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;22581:277::o;34718:473::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34782:19:::1;34804:10;:8;:10::i;:::-;34782:32:::0;-1:-1:-1;34821:15:0::1;34839:30;:13:::0;34782:32;34839:17:::1;:30::i;:::-;34821:48;;34886:78;34955:7;34945;;:17;34887:51;34911:26;;34898:7;34888;;:17;34887:23;;:51;;;;:::i;:::-;34886:57:::0;::::1;:78::i;:::-;34876:7;:88:::0;35021:7:::1;::::0;34981:65:::1;::::0;35021:23;;::::1;::::0;34982:32:::1;::::0;34983:23;::::1;35012:1;34982:29;:32::i;34981:65::-;34971:7;:75:::0;35077:106:::1;35174:7:::0;35150::::1;:21;251:10:::0;-1:-1:-1;;;;;35150:21:0::1;-1:-1:-1::0;;;;;35150:21:0::1;;;;;;;;;;;;;:31;35078:65;35116:26;;35103:7;35079;:21;35087:12;251:10:::0;;155:115;35087:12:::1;-1:-1:-1::0;;;;;35079:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35079:21:0;;:31:::1;::::0;35078:37:::1;:65::i;35077:106::-;251:10:::0;35053:21:::1;::::0;;;:7:::1;:21;::::0;;;;:130;-1:-1:-1;;;34718:473:0:o;33657:111::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;33726:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33726:34:0::1;33756:4;33726:34;::::0;;33657:111::o;21046:436::-;21136:7;21175;;21164;:18;;21156:62;;;;-1:-1:-1;;;21156:62:0;;7742:2:1;21156:62:0;;;7724:21:1;7781:2;7761:18;;;7754:30;7820:33;7800:18;;;7793:61;7871:18;;21156:62:0;7540:355:1;21156:62:0;21234:17;21229:246;;21269:15;21293:19;21304:7;21293:10;:19::i;:::-;-1:-1:-1;21268:44:0;;-1:-1:-1;21327:14:0;;-1:-1:-1;;;;;21327:14:0;21229:246;21376:23;21407:19;21418:7;21407:10;:19::i;:::-;-1:-1:-1;21374:52:0;;-1:-1:-1;21441:22:0;;-1:-1:-1;;;;;21441:22:0;35335:98;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35394:31:::1;35419:5;35394:24;:31::i;21751:335::-:0;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;21836:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21835:21;21827:61;;;::::0;-1:-1:-1;;;21827:61:0;;5714:2:1;21827:61:0::1;::::0;::::1;5696:21:1::0;5753:2;5733:18;;;5726:30;5792:29;5772:18;;;5765:57;5839:18;;21827:61:0::1;5512:351:1::0;21827:61:0::1;-1:-1:-1::0;;;;;21902:16:0;::::1;21921:1;21902:16:::0;;;:7:::1;:16;::::0;;;;;:20;21899:108:::1;;-1:-1:-1::0;;;;;21978:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21958:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21939:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21899:108:::1;-1:-1:-1::0;;;;;22017:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22017:27:0::1;22040:4;22017:27:::0;;::::1;::::0;;;22055:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;21751:335::o;18653:198::-;-1:-1:-1;;;;;18743:20:0;;18719:7;18743:20;;;:11;:20;;;;;;;;18739:49;;;-1:-1:-1;;;;;;18772:16:0;;;;;:7;:16;;;;;;;18653:198::o;18739:49::-;-1:-1:-1;;;;;18826:16:0;;;;;;:7;:16;;;;;;18806:37;;:19;:37::i;6092:148::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;6199:1:::1;6183:6:::0;;6162:40:::1;::::0;-1:-1:-1;;;;;6183:6:0;;::::1;::::0;6162:40:::1;::::0;6199:1;;6162:40:::1;6230:1;6213:19:::0;;;::::1;::::0;;6092:148::o;34083:133::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34187:21:::1;:12:::0;34202:6:::1;34187:21;:::i;:::-;34167:17;:41:::0;-1:-1:-1;34083:133:0:o;34224:141::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34312:16:::1;:45:::0;;;::::1;-1:-1:-1::0;;;;;34312:45:0;;;::::1;::::0;;;::::1;::::0;;34224:141::o;18364:87::-;18403:13;18436:7;18429:14;;;;;:::i;19901:269::-;19994:4;20011:129;251:10;20034:7;20043:96;20082:15;20043:96;;;;;;;;;;;;;;;;;251:10;20043:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20043:34:0;;;;;;;;;;;;:38;:96::i;6938:305::-;6990:14;;-1:-1:-1;;;;;6990:14:0;7008:10;6990:28;6982:76;;;;-1:-1:-1;;;6982:76:0;;8275:2:1;6982:76:0;;;8257:21:1;8314:2;8294:18;;;8287:30;8353:34;8333:18;;;8326:62;8424:5;8404:18;;;8397:33;8447:19;;6982:76:0;8073:399:1;6982:76:0;7095:9;;7077:15;:27;7069:72;;;;-1:-1:-1;;;7069:72:0;;8679:2:1;7069:72:0;;;8661:21:1;8718:2;8698:18;;;8691:30;8757:33;8737:18;;;8730:61;8808:18;;7069:72:0;8477:355:1;7069:72:0;7186:14;;;7178:6;;7157:44;;-1:-1:-1;;;;;7186:14:0;;;;7178:6;;;;7157:44;;;7221:14;;;7212:23;;;;-1:-1:-1;;;;;7221:14:0;;;7212:23;;;;;;6938:305::o;18859:167::-;18937:4;18954:42;251:10;18978:9;18989:6;18954:9;:42::i;34373:171::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34450:21:::1;:32:::0;;;::::1;;;;::::0;;;::::1;;::::0;;34498:38:::1;::::0;::::1;::::0;::::1;::::0;34474:8;1270:14:1;1263:22;1245:41;;1233:2;1218:18;;1105:187;35445:97:0;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;35509:14:::1;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35445:97::o;6700:226::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;6781:6:::1;::::0;;;6764:23;;;;;::::1;-1:-1:-1::0;;;;;6781:6:0;::::1;6764:23;::::0;;;6798:19:::1;::::0;;6840:22:::1;6858:4:::0;6840:15:::1;:22;:::i;:::-;6828:9;:34:::0;6915:1:::1;6899:6:::0;;6878:40:::1;::::0;-1:-1:-1;;;;;6899:6:0;;::::1;::::0;6878:40:::1;::::0;6915:1;;6878:40:::1;6700:226:::0;:::o;33780:110::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;33847:27:0::1;33877:5;33847:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33847:35:0::1;::::0;;33780:110::o;33904:166::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;34012:23:::1;:50:::0;33904:166::o;6248:244::-;6001:6;;-1:-1:-1;;;;;6001:6:0;251:10;6001:22;5993:67;;;;-1:-1:-1;;;5993:67:0;;4942:2:1;5993:67:0;;;4924:21:1;;;4961:18;;;4954:30;5020:34;5000:18;;;4993:62;5072:18;;5993:67:0;4740:356:1;5993:67:0;-1:-1:-1;;;;;6337:22:0;::::1;6329:73;;;::::0;-1:-1:-1;;;6329:73:0;;9169:2:1;6329:73:0::1;::::0;::::1;9151:21:1::0;9208:2;9188:18;;;9181:30;9247:34;9227:18;;;9220:62;9318:8;9298:18;;;9291:36;9344:19;;6329:73:0::1;8967:402:1::0;6329:73:0::1;6439:6;::::0;;6418:38:::1;::::0;-1:-1:-1;;;;;6418:38:0;;::::1;::::0;6439:6;::::1;::::0;6418:38:::1;::::0;::::1;6467:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;6467:17:0;;;::::1;::::0;;;::::1;::::0;;6248:244::o;2026:132::-;2084:7;2111:39;2115:1;2118;2111:39;;;;;;;;;;;;;;;;;:3;:39::i;22866:337::-;-1:-1:-1;;;;;22959:19:0;;22951:68;;;;-1:-1:-1;;;22951:68:0;;9576:2:1;22951:68:0;;;9558:21:1;9615:2;9595:18;;;9588:30;9654:34;9634:18;;;9627:62;9725:6;9705:18;;;9698:34;9749:19;;22951:68:0;9374:400:1;22951:68:0;-1:-1:-1;;;;;23038:21:0;;23030:68;;;;-1:-1:-1;;;23030:68:0;;9981:2:1;23030:68:0;;;9963:21:1;10020:2;10000:18;;;9993:30;10059:34;10039:18;;;10032:62;10130:4;10110:18;;;10103:32;10152:19;;23030:68:0;9779:398:1;23030:68:0;-1:-1:-1;;;;;23111:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23163:32;;1443:25:1;;;23163:32:0;;1416:18:1;23163:32:0;;;;;;;22866:337;;;:::o;23211:1682::-;-1:-1:-1;;;;;23333:18:0;;23325:68;;;;-1:-1:-1;;;23325:68:0;;10384:2:1;23325:68:0;;;10366:21:1;10423:2;10403:18;;;10396:30;10462:34;10442:18;;;10435:62;10533:7;10513:18;;;10506:35;10558:19;;23325:68:0;10182:401:1;23325:68:0;-1:-1:-1;;;;;23412:16:0;;23404:64;;;;-1:-1:-1;;;23404:64:0;;10790:2:1;23404:64:0;;;10772:21:1;10829:2;10809:18;;;10802:30;10868:34;10848:18;;;10841:62;10939:5;10919:18;;;10912:33;10962:19;;23404:64:0;10588:399:1;23404:64:0;23496:1;23487:6;:10;23479:64;;;;-1:-1:-1;;;23479:64:0;;11194:2:1;23479:64:0;;;11176:21:1;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;11343:11;11323:18;;;11316:39;11372:19;;23479:64:0;10992:405:1;23479:64:0;-1:-1:-1;;;;;23700:20:0;;;;;;:14;:20;;;;;;;;23699:21;:45;;;;-1:-1:-1;23730:14:0;;-1:-1:-1;;;;;23724:20:0;;;23730:14;;23724:20;23699:45;23696:120;;;23770:14;;;;;;;23769:15;23761:43;;;;-1:-1:-1;;;23761:43:0;;11604:2:1;23761:43:0;;;11586:21:1;11643:2;11623:18;;;11616:30;11682:17;11662:18;;;11655:45;11717:18;;23761:43:0;11402:339:1;23761:43:0;23840:28;23871:24;23889:4;23871:9;:24::i;:::-;23961:23;;24010:16;;23840:55;;-1:-1:-1;23937:47:0;;;;24010:16;;24009:17;:42;;;;-1:-1:-1;24030:21:0;;;;;;;24009:42;:65;;;;;24061:13;-1:-1:-1;;;;;24055:19:0;:2;-1:-1:-1;;;;;24055:19:0;;24009:65;24005:582;;;24095:23;24091:165;;;24162:23;;24139:46;;24204:32;24215:20;24204:10;:32::i;:::-;24325:14;;24285:21;;24325:14;;;;;:47;;;;;24361:10;24343:7;:29;24325:47;24321:255;;;24425:17;;24415:7;:27;24411:81;;;-1:-1:-1;24475:17:0;;24411:81;24529:31;24543:16;:7;24555:3;24543:11;:16::i;:::-;24529:13;:31::i;:::-;24076:511;24005:582;-1:-1:-1;;;;;24734:24:0;;24607:12;24734:24;;;:18;:24;;;;;;24622:4;;24734:24;;;:50;;-1:-1:-1;;;;;;24762:22:0;;;;;;:18;:22;;;;;;;;24734:50;24731:96;;;-1:-1:-1;24810:5:0;24731:96;24847:38;24862:4;24867:2;24870:6;24877:7;24847:14;:38::i;:::-;23314:1579;;;23211:1682;;;:::o;1566:192::-;1652:7;1688:12;1680:6;;;;1672:29;;;;-1:-1:-1;;;1672:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1712:9:0;1724:5;1728:1;1724;:5;:::i;:::-;1712:17;1566:192;-1:-1:-1;;;;;1566:192:0:o;31672:163::-;31713:7;31734:15;31751;31770:19;:17;:19::i;:::-;31733:56;;-1:-1:-1;31733:56:0;-1:-1:-1;31807:20:0;31733:56;;31807:11;:20::i;:::-;31800:27;;;;31672:163;:::o;1233:181::-;1291:7;;1323:5;1327:1;1323;:5;:::i;:::-;1311:17;;1352:1;1347;:6;;1339:46;;;;-1:-1:-1;;;1339:46:0;;11948:2:1;1339:46:0;;;11930:21:1;11987:2;11967:18;;;11960:30;12026:29;12006:18;;;11999:57;12073:18;;1339:46:0;11746:351:1;30470:419:0;30529:7;30538;30547;30556;30565;30574;30595:23;30620:12;30634:18;30656:20;30668:7;30656:11;:20::i;:::-;30594:82;;;;;;30688:15;30705:23;30730:12;30746:50;30758:7;30767:4;30773:10;30785;:8;:10::i;:::-;30746:11;:50::i;:::-;30687:109;;;;-1:-1:-1;30687:109:0;;-1:-1:-1;30847:15:0;;-1:-1:-1;30864:4:0;;-1:-1:-1;30870:10:0;;-1:-1:-1;30470:419:0;;-1:-1:-1;;;;;30470:419:0:o;1422:136::-;1480:7;1507:43;1511:1;1514;1507:43;;;;;;;;;;;;;;;;;:3;:43::i;1766:250::-;1824:7;1848:1;1853;1848:6;1844:47;;-1:-1:-1;1878:1:0;1871:8;;1844:47;1903:9;1915:5;1919:1;1915;:5;:::i;:::-;1903:17;-1:-1:-1;1948:1:0;1939:5;1943:1;1903:17;1939:5;:::i;:::-;:10;1931:56;;;;-1:-1:-1;;;1931:56:0;;12583:2:1;1931:56:0;;;12565:21:1;12622:2;12602:18;;;12595:30;12661:34;12641:18;;;12634:62;12732:3;12712:18;;;12705:31;12753:19;;1931:56:0;12381:397:1;2166:278:0;2252:7;2287:12;2280:5;2272:28;;;;-1:-1:-1;;;2272:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2311:9:0;2323:5;2327:1;2323;:5;:::i;24901:433::-;17628:16;:23;;-1:-1:-1;;17628:23:0;17647:4;17628:23;;;25016:21:::1;25048:38;25065:20:::0;25048:16:::1;:38::i;:::-;25097:26;25126:41;:21;25152:14:::0;25126:25:::1;:41::i;:::-;25238:16;::::0;25298::::1;::::0;25279:13:::1;::::0;25097:70;;-1:-1:-1;25217:99:0::1;::::0;-1:-1:-1;;;;;25238:16:0;;::::1;::::0;25256:59:::1;::::0;25298:16;25256:37:::1;::::0;25097:70;;25256:22:::1;:37::i;:::-;:41:::0;::::1;:59::i;:::-;25217:20;:99::i;:::-;-1:-1:-1::0;;17674:16:0;:24;;-1:-1:-1;;17674:24:0;;;-1:-1:-1;24901:433:0:o;25348:135::-;17628:16;:23;;-1:-1:-1;;17628:23:0;17647:4;17628:23;;;25419:10;;25415:61:::1;;25443:24;25460:6;25443:16;:24::i;:::-;-1:-1:-1::0;17674:16:0;:24;;-1:-1:-1;;17674:24:0;;;25348:135::o;27284:704::-;27395:7;27391:40;;27417:14;:12;:14::i;:::-;-1:-1:-1;;;;;27456:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27480:22:0;;;;;;:11;:22;;;;;;;;27479:23;27456:46;27452:467;;;27519:48;27541:6;27549:9;27560:6;27519:21;:48::i;:::-;27452:467;;;-1:-1:-1;;;;;27590:19:0;;;;;;:11;:19;;;;;;;;27589:20;:46;;;;-1:-1:-1;;;;;;27613:22:0;;;;;;:11;:22;;;;;;;;27589:46;27585:334;;;27652:46;27672:6;27680:9;27691:6;27652:19;:46::i;27585:334::-;-1:-1:-1;;;;;27720:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27743:22:0;;;;;;:11;:22;;;;;;;;27720:45;27716:203;;;27782:48;27804:6;27812:9;27823:6;27782:21;:48::i;27716:203::-;27863:44;27881:6;27889:9;27900:6;27863:17;:44::i;:::-;27943:7;27939:41;;27965:15;33443;;33433:7;:25;33485:21;;33469:13;:37;33389:125;27965:15;27284:704;;;;:::o;31843:561::-;31940:7;;31976;;31893;;;;;32000:289;32024:9;:16;32020:20;;32000:289;;;32090:7;32066;:21;32074:9;32084:1;32074:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32074:12:0;32066:21;;;;;;;;;;;;;:31;;:66;;;32125:7;32101;:21;32109:9;32119:1;32109:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32109:12:0;32101:21;;;;;;;;;;;;;:31;32066:66;32062:97;;;32142:7;;32151;;32134:25;;;;;;;31843:561;;:::o;32062:97::-;32184:34;32196:7;:21;32204:9;32214:1;32204:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32204:12:0;32196:21;;;;;;;;;;;;;32184:7;;:11;:34::i;:::-;32174:44;;32243:34;32255:7;:21;32263:9;32273:1;32263:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32263:12:0;32255:21;;;;;;;;;;;;;32243:7;;:11;:34::i;:::-;32233:44;-1:-1:-1;32042:3:0;;;;:::i;:::-;;;;32000:289;;;-1:-1:-1;32325:7:0;;32313;;:20;;:11;:20::i;:::-;32303:7;:30;32299:61;;;32343:7;;32352;;32335:25;;;;;;31843:561;;:::o;32299:61::-;32379:7;;32388;;-1:-1:-1;31843:561:0;-1:-1:-1;31843:561:0:o;30897:330::-;30957:7;30966;30975;30995:12;31010:24;31026:7;31010:15;:24::i;:::-;30995:39;;31045:18;31066:30;31088:7;31066:21;:30::i;:::-;31045:51;-1:-1:-1;31107:23:0;31133:33;31045:51;31133:17;:7;31145:4;31133:11;:17::i;:33::-;31107:59;31202:4;;-1:-1:-1;31208:10:0;;-1:-1:-1;30897:330:0;;-1:-1:-1;;;30897:330:0:o;31235:429::-;31350:7;;;;31406:24;:7;31418:11;31406;:24::i;:::-;31388:42;-1:-1:-1;31441:12:0;31456:21;:4;31465:11;31456:8;:21::i;:::-;31441:36;-1:-1:-1;31488:18:0;31509:27;:10;31524:11;31509:14;:27::i;:::-;31488:48;-1:-1:-1;31547:23:0;31573:33;31488:48;31573:17;:7;31585:4;31573:11;:17::i;:33::-;31625:7;;;;-1:-1:-1;31651:4:0;;-1:-1:-1;31235:429:0;;-1:-1:-1;;;;;;;31235:429:0:o;25495:666::-;25645:16;;;25659:1;25645:16;;;;;;;;25621:21;;25645:16;;;;;;;;;;-1:-1:-1;25645:16:0;25621:40;;25690:4;25672;25677:1;25672:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25672:23:0;;;-1:-1:-1;;;;;25672:23:0;;;;;25716:15;-1:-1:-1;;;;;25716:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25706:4;25711:1;25706:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25706:32:0;;;-1:-1:-1;;;;;25706:32:0;;;;;25751:62;25768:4;25783:15;25801:11;25751:8;:62::i;:::-;25852:240;;;;;-1:-1:-1;;;;;25852:15:0;:66;;;;:240;;25933:11;;25959:1;;26003:4;;26030;;26066:15;;25852:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26118:35;26135:11;26148:4;26118:35;;;;;;;:::i;:::-;;;;;;;;25550:611;25495:666;:::o;35654:126::-;35746:26;;-1:-1:-1;;;;;35746:18:0;;;:26;;;;;35765:6;;35746:26;;;;35765:6;35746:18;:26;;;;;;;;;;;;;;;;;;;;;35654:126;;:::o;26173:578::-;26318:16;;;26332:1;26318:16;;;;;;;;26294:21;;26318:16;;;;;;;;;;-1:-1:-1;26318:16:0;26294:40;;26355:15;-1:-1:-1;;;;;26355:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26345:4;26350:1;26345:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26345:32:0;;;-1:-1:-1;;;;;26345:32:0;;;;;26406:4;26388;26393:1;26388:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26388:23:0;;;:7;;;;;;;;;:23;26448:15;:66;;26522:6;26544:1;26591:4;26610:11;26652:24;:15;26672:3;26652:19;:24::i;:::-;26448:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26713:30;26730:6;26738:4;26713:30;;;;;;;:::i;33127:250::-;33173:7;;:12;:34;;;;-1:-1:-1;33189:13:0;;:18;33173:34;33170:46;;;33127:250::o;33170:46::-;33254:7;;;33236:15;:25;33296:13;;;33272:21;:37;-1:-1:-1;33330:11:0;;;;33352:17;33127:250::o;29097:563::-;29200:15;29217:23;29242:12;29256:23;29281:12;29295:18;29317:19;29328:7;29317:10;:19::i;:::-;-1:-1:-1;;;;;29362:15:0;;;;;;:7;:15;;;;;;29199:137;;-1:-1:-1;29199:137:0;;-1:-1:-1;29199:137:0;;-1:-1:-1;29199:137:0;-1:-1:-1;29199:137:0;-1:-1:-1;29199:137:0;-1:-1:-1;29362:28:0;;29382:7;29362:19;:28::i;:::-;-1:-1:-1;;;;;29344:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29419:7;:15;;;;:28;;29439:7;29419:19;:28::i;:::-;-1:-1:-1;;;;;29401:15:0;;;;;;;:7;:15;;;;;;:46;;;;29479:18;;;;;;;:39;;29502:15;29479:22;:39::i;:::-;-1:-1:-1;;;;;29458:18:0;;;;;;:7;:18;;;;;:60;29532:26;29547:10;29532:14;:26::i;:::-;29569:23;29581:4;29587;29569:11;:23::i;:::-;29625:9;-1:-1:-1;;;;;29608:44:0;29617:6;-1:-1:-1;;;;;29608:44:0;;29636:15;29608:44;;;;1443:25:1;;1431:2;1416:18;;1297:177;29608:44:0;;;;;;;;29188:472;;;;;;29097:563;;;:::o;28506:583::-;28607:15;28624:23;28649:12;28663:23;28688:12;28702:18;28724:19;28735:7;28724:10;:19::i;:::-;-1:-1:-1;;;;;28769:15:0;;;;;;:7;:15;;;;;;28606:137;;-1:-1:-1;28606:137:0;;-1:-1:-1;28606:137:0;;-1:-1:-1;28606:137:0;-1:-1:-1;28606:137:0;-1:-1:-1;28606:137:0;-1:-1:-1;28769:28:0;;28606:137;28769:19;:28::i;:::-;-1:-1:-1;;;;;28751:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28829:18;;;;;:7;:18;;;;;:39;;28852:15;28829:22;:39::i;:::-;-1:-1:-1;;;;;28808:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28900:7;:18;;;;:39;;28923:15;28900:22;:39::i;29668:639::-;29771:15;29788:23;29813:12;29827:23;29852:12;29866:18;29888:19;29899:7;29888:10;:19::i;:::-;-1:-1:-1;;;;;29933:15:0;;;;;;:7;:15;;;;;;29770:137;;-1:-1:-1;29770:137:0;;-1:-1:-1;29770:137:0;;-1:-1:-1;29770:137:0;-1:-1:-1;29770:137:0;-1:-1:-1;29770:137:0;-1:-1:-1;29933:28:0;;29953:7;29933:19;:28::i;:::-;-1:-1:-1;;;;;29915:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29990:7;:15;;;;:28;;30010:7;29990:19;:28::i;27996:502::-;28095:15;28112:23;28137:12;28151:23;28176:12;28190:18;28212:19;28223:7;28212:10;:19::i;:::-;-1:-1:-1;;;;;28260:15:0;;;;;;:7;:15;;;;;;28094:137;;-1:-1:-1;28094:137:0;;-1:-1:-1;28094:137:0;;-1:-1:-1;28094:137:0;-1:-1:-1;28094:137:0;-1:-1:-1;28094:137:0;-1:-1:-1;28260:28:0;;28094:137;28260:19;:28::i;32783:154::-;32847:7;32874:55;32913:5;32874:20;32886:7;;32874;:11;;:20;;;;:::i;:::-;:24;;:55::i;32949:166::-;33019:7;33046:61;33091:5;33046:26;33058:13;;33046:7;:11;;:26;;;;:::i;32416:355::-;32479:19;32502:10;:8;:10::i;:::-;32479:33;-1:-1:-1;32523:18:0;32544:27;:10;32479:33;32544:14;:27::i;:::-;32623:4;32607:22;;;;:7;:22;;;;;;32523:48;;-1:-1:-1;32607:38:0;;32523:48;32607:26;:38::i;:::-;32598:4;32582:22;;;;:7;:22;;;;;;;;:63;;;;32659:11;:26;;;;;;32656:107;;;32741:4;32725:22;;;;:7;:22;;;;;;:38;;32752:10;32725:26;:38::i;:::-;32716:4;32700:22;;;;:7;:22;;;;;:63;32468:303;;32416:355;:::o;30315:147::-;30393:7;;:17;;30405:4;30393:11;:17::i;:::-;30383:7;:27;30434:10;;:20;;30449:4;30434:14;:20::i;:::-;30421:10;:33;-1:-1:-1;;30315:147:0:o;14:607:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:154::-;-1:-1:-1;;;;;705:5:1;701:54;694:5;691:65;681:93;;770:1;767;760:12;681:93;626:154;:::o;785:315::-;853:6;861;914:2;902:9;893:7;889:23;885:32;882:52;;;930:1;927;920:12;882:52;969:9;956:23;988:31;1013:5;988:31;:::i;:::-;1038:5;1090:2;1075:18;;;;1062:32;;-1:-1:-1;;;785:315:1:o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2429:160::-;2494:20;;2550:13;;2543:21;2533:32;;2523:60;;2579:1;2576;2569:12;2523:60;2429:160;;;:::o;2594:180::-;2650:6;2703:2;2691:9;2682:7;2678:23;2674:32;2671:52;;;2719:1;2716;2709:12;2671:52;2742:26;2758:9;2742:26;:::i;2779:247::-;2838:6;2891:2;2879:9;2870:7;2866:23;2862:32;2859:52;;;2907:1;2904;2897:12;2859:52;2946:9;2933:23;2965:31;2990:5;2965:31;:::i;3031:180::-;3090:6;3143:2;3131:9;3122:7;3118:23;3114:32;3111:52;;;3159:1;3156;3149:12;3111:52;-1:-1:-1;3182:23:1;;3031:180;-1:-1:-1;3031:180:1:o;3405:248::-;3470:6;3478;3531:2;3519:9;3510:7;3506:23;3502:32;3499:52;;;3547:1;3544;3537:12;3499:52;3583:9;3570:23;3560:33;;3612:35;3643:2;3632:9;3628:18;3612:35;:::i;:::-;3602:45;;3405:248;;;;;:::o;3905:388::-;3973:6;3981;4034:2;4022:9;4013:7;4009:23;4005:32;4002:52;;;4050:1;4047;4040:12;4002:52;4089:9;4076:23;4108:31;4133:5;4108:31;:::i;:::-;4158:5;-1:-1:-1;4215:2:1;4200:18;;4187:32;4228:33;4187:32;4228:33;:::i;:::-;4280:7;4270:17;;;3905:388;;;;;:::o;4298:437::-;4377:1;4373:12;;;;4420;;;4441:61;;4495:4;4487:6;4483:17;4473:27;;4441:61;4548:2;4540:6;4537:14;4517:18;4514:38;4511:218;;4585:77;4582:1;4575:88;4686:4;4683:1;4676:15;4714:4;4711:1;4704:15;4511:218;;4298:437;;;:::o;5868:184::-;5920:77;5917:1;5910:88;6017:4;6014:1;6007:15;6041:4;6038:1;6031:15;6057:184;6109:77;6106:1;6099:88;6206:4;6203:1;6196:15;6230:4;6227:1;6220:15;6246:128;6313:9;;;6334:11;;;6331:37;;;6348:18;;:::i;6379:184::-;6431:77;6428:1;6421:88;6528:4;6525:1;6518:15;6552:4;6549:1;6542:15;6568:195;6607:3;6638:66;6631:5;6628:77;6625:103;;6708:18;;:::i;:::-;-1:-1:-1;6755:1:1;6744:13;;6568:195::o;7900:168::-;7973:9;;;8004;;8021:15;;;8015:22;;8001:37;7991:71;;8042:18;;:::i;8837:125::-;8902:9;;;8923:10;;;8920:36;;;8936:18;;:::i;12102:274::-;12142:1;12168;12158:189;;12203:77;12200:1;12193:88;12304:4;12301:1;12294:15;12332:4;12329:1;12322:15;12158:189;-1:-1:-1;12361:9:1;;12102:274::o;12972:251::-;13042:6;13095:2;13083:9;13074:7;13070:23;13066:32;13063:52;;;13111:1;13108;13101:12;13063:52;13143:9;13137:16;13162:31;13187:5;13162:31;:::i;13228:484::-;13281:3;13319:5;13313:12;13346:6;13341:3;13334:19;13372:4;13401:2;13396:3;13392:12;13385:19;;13438:2;13431:5;13427:14;13459:1;13469:218;13483:6;13480:1;13477:13;13469:218;;;13548:13;;-1:-1:-1;;;;;13544:62:1;13532:75;;13627:12;;;;13662:15;;;;13505:1;13498:9;13469:218;;;-1:-1:-1;13703:3:1;;13228:484;-1:-1:-1;;;;;13228:484:1:o;13717:605::-;14016:6;14005:9;13998:25;14059:6;14054:2;14043:9;14039:18;14032:34;14102:3;14097:2;14086:9;14082:18;14075:31;13979:4;14123:57;14175:3;14164:9;14160:19;14152:6;14123:57;:::i;:::-;-1:-1:-1;;;;;14216:55:1;;;;14211:2;14196:18;;14189:83;-1:-1:-1;14303:3:1;14288:19;14281:35;14115:65;13717:605;-1:-1:-1;;;13717:605:1:o;14327:332::-;14534:6;14523:9;14516:25;14577:2;14572;14561:9;14557:18;14550:30;14497:4;14597:56;14649:2;14638:9;14634:18;14626:6;14597:56;:::i;:::-;14589:64;14327:332;-1:-1:-1;;;;14327:332:1:o;14664:533::-;14935:6;14924:9;14917:25;14978:3;14973:2;14962:9;14958:18;14951:31;14898:4;14999:57;15051:3;15040:9;15036:19;15028:6;14999:57;:::i;:::-;-1:-1:-1;;;;;15092:55:1;;;;15087:2;15072:18;;15065:83;-1:-1:-1;15179:2:1;15164:18;15157:34;14991:65;14664:533;-1:-1:-1;;14664:533:1:o
Swarm Source
ipfs://74dd627581287465750334ef877307d490e9c6d15ee96cc60d327cf9be8a16f9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.