Latest 25 from a total of 262 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 331092161 | 272 days ago | IN | 0 ETH | 0.00000313 | ||||
| Approve | 272196940 | 444 days ago | IN | 0 ETH | 0.00000108 | ||||
| Transfer | 204216061 | 642 days ago | IN | 0 ETH | 0.0000014 | ||||
| Transfer | 204183037 | 642 days ago | IN | 0 ETH | 0.00000266 | ||||
| Approve | 176948581 | 722 days ago | IN | 0 ETH | 0.00003829 | ||||
| Transfer | 176481443 | 724 days ago | IN | 0 ETH | 0.00014807 | ||||
| Approve | 172815853 | 735 days ago | IN | 0 ETH | 0.00002941 | ||||
| Transfer | 157592106 | 781 days ago | IN | 0 ETH | 0.00013254 | ||||
| Approve | 152864870 | 795 days ago | IN | 0 ETH | 0.00005436 | ||||
| Transfer | 152506218 | 796 days ago | IN | 0 ETH | 0.00006392 | ||||
| Transfer | 149347052 | 806 days ago | IN | 0 ETH | 0.00006032 | ||||
| Approve | 138503534 | 841 days ago | IN | 0 ETH | 0.00002142 | ||||
| Approve | 138501172 | 841 days ago | IN | 0 ETH | 0.00001934 | ||||
| Approve | 124804732 | 884 days ago | IN | 0 ETH | 0.00003261 | ||||
| Approve | 124804221 | 884 days ago | IN | 0 ETH | 0.00003261 | ||||
| Approve | 124803762 | 884 days ago | IN | 0 ETH | 0.00003261 | ||||
| Approve | 123079278 | 890 days ago | IN | 0 ETH | 0.00002738 | ||||
| Approve | 121964232 | 893 days ago | IN | 0 ETH | 0.00006292 | ||||
| Approve | 121872860 | 893 days ago | IN | 0 ETH | 0.00004237 | ||||
| Approve | 120693615 | 897 days ago | IN | 0 ETH | 0.00004019 | ||||
| Approve | 120693501 | 897 days ago | IN | 0 ETH | 0.00004019 | ||||
| Approve | 120693047 | 897 days ago | IN | 0 ETH | 0.00004019 | ||||
| Approve | 120692557 | 897 days ago | IN | 0 ETH | 0.00003751 | ||||
| Approve | 120576226 | 897 days ago | IN | 0 ETH | 0.00002985 | ||||
| Approve | 120575835 | 897 days ago | IN | 0 ETH | 0.00002985 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 176948714 | 722 days ago | 0.00251925 ETH | ||||
| 176948714 | 722 days ago | 0.00251925 ETH | ||||
| 124804270 | 884 days ago | 0.00609755 ETH | ||||
| 124804270 | 884 days ago | 0.00609755 ETH | ||||
| 121964821 | 893 days ago | 0.00860636 ETH | ||||
| 121964821 | 893 days ago | 0.00860636 ETH | ||||
| 120694027 | 897 days ago | 0.00926944 ETH | ||||
| 120694027 | 897 days ago | 0.00926944 ETH | ||||
| 120693178 | 897 days ago | 0.01058819 ETH | ||||
| 120693178 | 897 days ago | 0.01058819 ETH | ||||
| 120576303 | 897 days ago | 0.01162594 ETH | ||||
| 120576303 | 897 days ago | 0.01162594 ETH | ||||
| 120575333 | 897 days ago | 0.01127737 ETH | ||||
| 120575333 | 897 days ago | 0.01127737 ETH | ||||
| 120477398 | 898 days ago | 0.00765853 ETH | ||||
| 120477398 | 898 days ago | 0.00765853 ETH | ||||
| 120475010 | 898 days ago | 0.0082054 ETH | ||||
| 120475010 | 898 days ago | 0.0082054 ETH | ||||
| 120474295 | 898 days ago | 0.00881304 ETH | ||||
| 120474295 | 898 days ago | 0.00881304 ETH | ||||
| 120473596 | 898 days ago | 0.01247624 ETH | ||||
| 120473596 | 898 days ago | 0.01247624 ETH | ||||
| 120468190 | 898 days ago | 0.01154994 ETH | ||||
| 120468190 | 898 days ago | 0.01154994 ETH | ||||
| 120464039 | 898 days ago | 0.0234932 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PepeRew
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2023-05-30
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return 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 IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 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 (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
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 (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
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(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
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
);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 internal _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
function transfer(address recipient, uint256 amount)
public
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual 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 _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(
amount,
"ERC20: transfer amount exceeds balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(
amount,
"ERC20: burn amount exceeds balance"
);
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
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 _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
interface DividendPayingTokenOptionalInterface {
function withdrawableDividendOf(address _owner)
external
view
returns (uint256);
function withdrawnDividendOf(address _owner)
external
view
returns (uint256);
function accumulativeDividendOf(address _owner)
external
view
returns (uint256);
}
interface DividendPayingTokenInterface {
function dividendOf(address _owner) external view returns (uint256);
function distributeDividends() external payable;
function withdrawDividend() external;
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
}
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;
}
}
contract Ownable is Context {
address private _owner;
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;
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract DividendPayingToken is
ERC20,
DividendPayingTokenInterface,
DividendPayingTokenOptionalInterface
{
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
uint256 internal constant magnitude = 2**128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
uint256 public totalDividendsDistributed;
constructor(string memory _name, string memory _symbol)
ERC20(_name, _symbol)
{}
receive() external payable {
distributeDividends();
}
function distributeDividends() public payable override {
require(totalSupply() > 0);
if (msg.value > 0) {
magnifiedDividendPerShare = magnifiedDividendPerShare.add(
(msg.value).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, msg.value);
totalDividendsDistributed = totalDividendsDistributed.add(
msg.value
);
}
}
function withdrawDividend() public virtual override {
_withdrawDividendOfUser(payable(msg.sender));
}
function _withdrawDividendOfUser(address payable user)
internal
virtual
returns (uint256)
{
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(
_withdrawableDividend
);
emit DividendWithdrawn(user, _withdrawableDividend);
(bool success, ) = user.call{
value: _withdrawableDividend,
gas: 3000
}("");
if (!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(
_withdrawableDividend
);
return 0;
}
return _withdrawableDividend;
}
return 0;
}
function dividendOf(address _owner) public view override returns (uint256) {
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(address _owner)
public
view
override
returns (uint256)
{
return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
}
function withdrawnDividendOf(address _owner)
public
view
override
returns (uint256)
{
return withdrawnDividends[_owner];
}
function accumulativeDividendOf(address _owner)
public
view
override
returns (uint256)
{
return
magnifiedDividendPerShare
.mul(balanceOf(_owner))
.toInt256Safe()
.add(magnifiedDividendCorrections[_owner])
.toUint256Safe() / magnitude;
}
function _transfer(
address from,
address to,
uint256 value
) internal virtual override {
require(false);
int256 _magCorrection = magnifiedDividendPerShare
.mul(value)
.toInt256Safe();
magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
.add(_magCorrection);
magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
_magCorrection
);
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) {
uint256 mintAmount = newBalance.sub(currentBalance);
_mint(account, mintAmount);
} else if (newBalance < currentBalance) {
uint256 burnAmount = currentBalance.sub(newBalance);
_burn(account, burnAmount);
}
}
}
contract PepeRew is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
address public DEAD = 0x000000000000000000000000000000000000dEaD;
bool private swapping;
bool private stakingEnabled = false;
bool public tradingEnabled = false;
uint256 public sellAmount = 1;
uint256 public buyAmount = 1;
uint256 private totalSellFees;
uint256 private totalBuyFees;
PepeRewDividendTracker public dividendTracker;
address payable public marketingWallet;
address payable public devWallet;
// Max tx, dividend threshold and tax variables
uint256 public maxWallet;
uint256 public swapTokensAtAmount;
uint256 public sellRewardsFee;
uint256 public sellDeadFees;
uint256 public sellMarketingFees;
uint256 public sellLiquidityFee;
uint256 public buyDeadFees;
uint256 public buyMarketingFees;
uint256 public buyLiquidityFee;
uint256 public buyRewardsFee;
uint256 public buyDevFee;
uint256 public sellDevFee;
uint256 public transferFee;
bool public swapAndLiquifyEnabled = true;
// gas for processing auto claim dividends
uint256 public gasForProcessing = 1000000;
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public automatedMarketMakerPairs;
// staking variables
mapping(address => uint256) public stakingBonus;
mapping(address => uint256) public stakingUntilDate;
mapping(uint256 => uint256) public stakingAmounts;
//for allowing specific address to trade while trading has not been enabled yet
mapping(address => bool) private canTransferBeforeTradingIsEnabled;
// Limit variables for bot protection
bool public limitsInEffect = true; //boolean used to turn limits on and off
uint256 private gasPriceLimit = 7 * 1 gwei;
mapping(address => uint256) private _holderLastTransferBlock; // for 1 tx per block
mapping(address => uint256) private _holderLastTransferTimestamp; // for sell cooldown timer
uint256 public launchblock;
uint256 public cooldowntimer = 60; //default cooldown 60s
bool public enabledPublicTrading;
mapping(address => bool) public whitelistForPublicTrade;
event EnableAccountStaking(address indexed account, uint256 duration);
event UpdateStakingAmounts(uint256 duration, uint256 amount);
event EnableSwapAndLiquify(bool enabled);
event EnableStaking(bool enabled);
event SetPreSaleWallet(address wallet);
event UpdateDividendTracker(
address indexed newAddress,
address indexed oldAddress
);
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event TradingEnabled();
event UpdateFees(
uint256 sellDeadFees,
uint256 sellMarketingFees,
uint256 sellLiquidityFee,
uint256 sellRewardsFee,
uint256 buyDeadFees,
uint256 buyMarketingFees,
uint256 buyLiquidityFee,
uint256 buyRewardsFee,
uint256 buyDevFee,
uint256 sellDevFee
);
event UpdateTransferFee(uint256 transferFee);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event GasForProcessingUpdated(
uint256 indexed newValue,
uint256 indexed oldValue
);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event SendDividends(uint256 amount, uint256 opAmount, bool success);
event ProcessedDividendTracker(
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex,
bool indexed automatic,
uint256 gas,
address indexed processor
);
event UpdatePayoutToken(address token);
constructor() ERC20("Pepe Rew", "PEPEREW") {
marketingWallet = payable(0xb40416d8196D1a404407C7295ED506133023b7B7);
devWallet = payable(0xb40416d8196D1a404407C7295ED506133023b7B7);
address router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
buyDeadFees = 0;
sellDeadFees = 0;
buyMarketingFees = 0;
sellMarketingFees = 0;
buyLiquidityFee = 0;
sellLiquidityFee = 0;
buyRewardsFee = 5;
sellRewardsFee = 5;
buyDevFee = 0;
sellDevFee = 0;
transferFee = 0;
totalBuyFees = buyRewardsFee
.add(buyLiquidityFee)
.add(buyMarketingFees)
.add(buyDevFee);
totalSellFees = sellRewardsFee
.add(sellLiquidityFee)
.add(sellMarketingFees)
.add(sellDevFee);
dividendTracker = new PepeRewDividendTracker(
payable(this),
router,
0x912CE59144191C1204E64559FE8253a0e49E6548,
"PepeRewTracker",
"PepeRewTracker"
);
uniswapV2Router = IUniswapV2Router02(router);
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
_setAutomatedMarketMakerPair(uniswapV2Pair, true);
// exclude from receiving dividends
dividendTracker.excludeFromDividends(address(dividendTracker));
dividendTracker.excludeFromDividends(DEAD);
dividendTracker.excludedFromDividends(address(0));
dividendTracker.excludeFromDividends(router);
// exclude from paying fees or having max transaction amount
_isExcludedFromFees[address(this)] = true;
_isExcludedFromFees[address(dividendTracker)] = true;
_isExcludedFromFees[address(marketingWallet)] = true;
_isExcludedFromFees[address(devWallet)] = true;
uint256 totalTokenSupply = (420690000000) * (10**18);
_mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply
maxWallet = totalTokenSupply/50; // 2%
swapTokensAtAmount = totalTokenSupply / 1000; // 0.1%;
canTransferBeforeTradingIsEnabled[owner()] = true;
canTransferBeforeTradingIsEnabled[address(marketingWallet)] = true;
whitelistForPublicTrade[msg.sender] = true;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
receive() external payable {}
function updateStakingAmounts(uint256 duration, uint256 bonus)
public
onlyOwner
{
require(stakingAmounts[duration] != bonus);
require(bonus <= 100, "Staking bonus can't exceed 100");
stakingAmounts[duration] = bonus;
emit UpdateStakingAmounts(duration, bonus);
}
function isTrading(address _sender, address _recipient)
internal view
returns (uint)
{
if (automatedMarketMakerPairs[_sender] && _recipient != address(uniswapV2Router)) return 1; // Buy Case
if (automatedMarketMakerPairs[_recipient]) return 2; // Sell Case
return 0;
}
function setWhitelistForPublicTrade(address _addr, bool _flag) external onlyOwner {
whitelistForPublicTrade[_addr] = _flag;
}
function setPublicTrading() external onlyOwner {
require(!enabledPublicTrading);
launchblock = block.number;
tradingEnabled = true;
emit TradingEnabled();
enabledPublicTrading = true;
}
// use for pre sale wallet, adds all exclusions to it
function setPresaleWallet(address wallet) external onlyOwner {
canTransferBeforeTradingIsEnabled[wallet] = true;
_isExcludedFromFees[wallet] = true;
dividendTracker.excludeFromDividends(wallet);
emit SetPreSaleWallet(wallet);
}
// exclude a wallet from fees
function setExcludeFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
// exclude from dividends (rewards)
function setExcludeDividends(address account) public onlyOwner {
dividendTracker.excludeFromDividends(account);
}
// include in dividends
function setIncludeDividends(address account) public onlyOwner {
dividendTracker.includeFromDividends(account);
dividendTracker.setBalance(account, getStakingBalance(account));
}
//allow a wallet to trade before trading enabled
function setCanTransferBefore(address wallet, bool enable)
external
onlyOwner
{
canTransferBeforeTradingIsEnabled[wallet] = enable;
}
// turn limits on and off
function setLimitsInEffect(bool value) external onlyOwner {
limitsInEffect = value;
}
// set max GWEI
function setGasPriceLimit(uint256 GWEI) external onlyOwner {
require(GWEI >= 5, "can never be set below 5");
gasPriceLimit = GWEI * 1 gwei;
}
// set cooldown timer, can only be between 0 and 300 seconds (5 mins max)
function setcooldowntimer(uint256 value) external onlyOwner {
require(value <= 300, "cooldown timer cannot exceed 5 minutes");
cooldowntimer = value;
}
// set max wallet, can not be lower than 0.05% of supply
function setmaxWallet(uint256 value) external onlyOwner {
value = value * (10**18);
require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%");
maxWallet = value;
}
function enableStaking(bool enable) public onlyOwner {
require(stakingEnabled != enable);
stakingEnabled = enable;
emit EnableStaking(enable);
}
function stake(uint256 duration) public {
require(stakingEnabled, "Staking is not enabled");
require(stakingAmounts[duration] != 0, "Invalid staking duration");
require(
stakingUntilDate[_msgSender()] < block.timestamp.add(duration),
"already staked for a longer duration"
);
stakingBonus[_msgSender()] = stakingAmounts[duration];
stakingUntilDate[_msgSender()] = block.timestamp.add(duration);
dividendTracker.setBalance(
_msgSender(),
getStakingBalance(_msgSender())
);
emit EnableAccountStaking(_msgSender(), duration);
}
// rewards threshold
function setSwapTriggerAmount(uint256 amount) public onlyOwner {
swapTokensAtAmount = amount * (10**18);
}
function enableSwapAndLiquify(bool enabled) public onlyOwner {
require(swapAndLiquifyEnabled != enabled);
swapAndLiquifyEnabled = enabled;
emit EnableSwapAndLiquify(enabled);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
_setAutomatedMarketMakerPair(pair, value);
}
function setAllowCustomTokens(bool allow) public onlyOwner {
dividendTracker.setAllowCustomTokens(allow);
}
function setAllowAutoReinvest(bool allow) public onlyOwner {
dividendTracker.setAllowAutoReinvest(allow);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
if (value) {
dividendTracker.excludeFromDividends(pair);
}
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateGasForProcessing(uint256 newValue) public onlyOwner {
require(newValue >= 200000 && newValue <= 1000000);
emit GasForProcessingUpdated(newValue, gasForProcessing);
gasForProcessing = newValue;
}
function transferAdmin(address newOwner) public onlyOwner {
dividendTracker.excludeFromDividends(newOwner);
_isExcludedFromFees[newOwner] = true;
transferOwnership(newOwner);
}
function updateTransferFee(uint256 newTransferFee) public onlyOwner {
require (newTransferFee <= 5, "transfer fee cannot exceed 5%");
transferFee = newTransferFee;
emit UpdateTransferFee(transferFee);
}
function updateFees(
uint256 deadBuy,
uint256 deadSell,
uint256 marketingBuy,
uint256 marketingSell,
uint256 liquidityBuy,
uint256 liquiditySell,
uint256 RewardsBuy,
uint256 RewardsSell,
uint256 devBuy,
uint256 devSell
) public onlyOwner {
buyDeadFees = deadBuy;
buyMarketingFees = marketingBuy;
buyLiquidityFee = liquidityBuy;
buyRewardsFee = RewardsBuy;
sellDeadFees = deadSell;
sellMarketingFees = marketingSell;
sellLiquidityFee = liquiditySell;
sellRewardsFee = RewardsSell;
buyDevFee = devBuy;
sellDevFee = devSell;
totalSellFees = sellRewardsFee
.add(sellLiquidityFee)
.add(sellMarketingFees)
.add(sellDevFee);
totalBuyFees = buyRewardsFee
.add(buyLiquidityFee)
.add(buyMarketingFees)
.add(buyDevFee);
require(totalSellFees <= 15 && totalBuyFees <= 15, "total fees cannot exceed 15% sell or buy");
emit UpdateFees(
sellDeadFees,
sellMarketingFees,
sellLiquidityFee,
sellRewardsFee,
buyDeadFees,
buyMarketingFees,
buyLiquidityFee,
buyRewardsFee,
buyDevFee,
sellDevFee
);
}
function getStakingInfo(address account)
external
view
returns (uint256, uint256)
{
return (stakingUntilDate[account], stakingBonus[account]);
}
function getTotalDividendsDistributed() external view returns (uint256) {
return dividendTracker.totalDividendsDistributed();
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function withdrawableDividendOf(address account)
public
view
returns (uint256)
{
return dividendTracker.withdrawableDividendOf(account);
}
function dividendTokenBalanceOf(address account)
public
view
returns (uint256)
{
return dividendTracker.balanceOf(account);
}
function getAccountDividendsInfo(address account)
external
view
returns (
address,
int256,
int256,
uint256,
uint256,
uint256
)
{
return dividendTracker.getAccount(account);
}
function getAccountDividendsInfoAtIndex(uint256 index)
external
view
returns (
address,
int256,
int256,
uint256,
uint256,
uint256
)
{
return dividendTracker.getAccountAtIndex(index);
}
function processDividendTracker(uint256 gas) external {
(
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) = dividendTracker.process(gas);
emit ProcessedDividendTracker(
iterations,
claims,
lastProcessedIndex,
false,
gas,
tx.origin
);
}
function claim() external {
dividendTracker.processAccount(payable(msg.sender), false);
}
function getLastProcessedIndex() external view returns (uint256) {
return dividendTracker.getLastProcessedIndex();
}
function getNumberOfDividendTokenHolders() external view returns (uint256) {
return dividendTracker.getNumberOfTokenHolders();
}
function setAutoClaim(bool value) external {
dividendTracker.setAutoClaim(msg.sender, value);
}
function setReinvest(bool value) external {
dividendTracker.setReinvest(msg.sender, value);
}
function setDividendsPaused(bool value) external onlyOwner {
dividendTracker.setDividendsPaused(value);
}
function isExcludedFromAutoClaim(address account)
external
view
returns (bool)
{
return dividendTracker.isExcludedFromAutoClaim(account);
}
function isReinvest(address account) external view returns (bool) {
return dividendTracker.isReinvest(account);
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
uint256 RewardsFee;
uint256 deadFees;
uint256 marketingFees;
uint256 liquidityFee;
uint256 devFees;
if (!canTransferBeforeTradingIsEnabled[from]) {
require(tradingEnabled, "Trading has not yet been enabled");
}
if (amount == 0) {
super._transfer(from, to, 0);
return;
} else if (
!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
) {
bool isSelling = automatedMarketMakerPairs[to];
bool isBuying = automatedMarketMakerPairs[from];
if (!isBuying && !isSelling) {
uint256 tFees = amount.mul(transferFee).div(100);
amount = amount.sub(tFees);
super._transfer(from, address(this), tFees);
super._transfer(from, to, amount);
dividendTracker.setBalance(from, getStakingBalance(from));
dividendTracker.setBalance(to, getStakingBalance(to));
return;
}
else if (!isBuying && stakingEnabled) {
require(
stakingUntilDate[from] <= block.timestamp,
"Tokens are staked and locked!"
);
if (stakingUntilDate[from] != 0) {
stakingUntilDate[from] = 0;
stakingBonus[from] = 0;
}
}
else if (isSelling) {
RewardsFee = sellRewardsFee;
deadFees = sellDeadFees;
marketingFees = sellMarketingFees;
liquidityFee = sellLiquidityFee;
devFees = sellDevFee;
if (limitsInEffect) {
require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
"cooldown period active");
_holderLastTransferTimestamp[tx.origin] = block.timestamp;
}
} else if (isBuying) {
RewardsFee = buyRewardsFee;
deadFees = buyDeadFees;
marketingFees = buyMarketingFees;
liquidityFee = buyLiquidityFee;
devFees = buyDevFee;
if (limitsInEffect) {
require(block.number > launchblock + 2,"you shall not pass");
require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
_holderLastTransferBlock[tx.origin] = block.number;
}
uint256 contractBalanceRecipient = balanceOf(to);
require(contractBalanceRecipient + amount <= maxWallet,
"Exceeds maximum wallet token amount." );
}
uint256 totalFees = RewardsFee
.add(liquidityFee + marketingFees + devFees);
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (canSwap && !automatedMarketMakerPairs[from]) {
swapping = true;
if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) {
uint256 totalBuySell = buyAmount.add(sellAmount);
uint256 swapAmountBought = contractTokenBalance
.mul(buyAmount)
.div(totalBuySell);
uint256 swapAmountSold = contractTokenBalance
.mul(sellAmount)
.div(totalBuySell);
uint256 swapBuyTokens = swapAmountBought
.mul(liquidityFee)
.div(totalBuyFees);
uint256 swapSellTokens = swapAmountSold
.mul(liquidityFee)
.div(totalSellFees);
uint256 swapTokens = swapSellTokens.add(swapBuyTokens);
swapAndLiquify(swapTokens);
}
uint256 remainingBalance = balanceOf(address(this));
swapAndSendDividends(remainingBalance);
buyAmount = 0;
sellAmount = 0;
swapping = false;
}
uint256 fees = amount.mul(totalFees).div(100);
uint256 burntokens;
if (deadFees > 0) {
burntokens = amount.mul(deadFees) / 100;
super._transfer(from, DEAD, burntokens);
_totalSupply = _totalSupply.sub(burntokens);
}
amount = amount.sub(fees + burntokens);
if (isSelling) {
sellAmount = sellAmount.add(fees);
} else {
buyAmount = buyAmount.add(fees);
}
super._transfer(from, address(this), fees);
uint256 gas = gasForProcessing;
try dividendTracker.process(gas) returns (
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) {
emit ProcessedDividendTracker(
iterations,
claims,
lastProcessedIndex,
true,
gas,
tx.origin
);
} catch {}
}
super._transfer(from, to, amount);
dividendTracker.setBalance(from, getStakingBalance(from));
dividendTracker.setBalance(to, getStakingBalance(to));
}
function getStakingBalance(address account) private view returns (uint256) {
return
stakingEnabled
? balanceOf(account).mul(stakingBonus[account].add(100)).div(
100
)
: balanceOf(account);
}
function swapAndLiquify(uint256 tokens) private {
uint256 half = tokens.div(2);
uint256 otherHalf = tokens.sub(half);
uint256 initialBalance = address(this).balance;
swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
uint256 newBalance = address(this).balance.sub(initialBalance);
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function updatePayoutToken(address token) public onlyOwner {
dividendTracker.updatePayoutToken(token);
emit UpdatePayoutToken(token);
}
function getPayoutToken() public view returns (address) {
return dividendTracker.getPayoutToken();
}
function setMinimumTokenBalanceForAutoDividends(uint256 value)
public
onlyOwner
{
dividendTracker.setMinimumTokenBalanceForAutoDividends(value);
}
function setMinimumTokenBalanceForDividends(uint256 value)
public
onlyOwner
{
dividendTracker.setMinimumTokenBalanceForDividends(value);
}
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 forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
tokens = tokens * (10**18);
uint256 totalAmount = buyAmount.add(sellAmount);
uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);
swapAndSendDividends(tokens);
buyAmount = buyAmount.sub(fromBuy);
sellAmount = sellAmount.sub(fromSell);
}
function swapAndSendDividends(uint256 tokens) private {
if (tokens == 0) {
return;
}
swapTokensForEth(tokens);
uint256 totalAmount = buyAmount.add(sellAmount);
bool success = true;
bool successOp1 = true;
bool successOp2 = true;
uint256 dividends;
uint256 dividendsFromBuy;
uint256 dividendsFromSell;
if (buyRewardsFee > 0) {
dividendsFromBuy = address(this)
.balance
.mul(buyAmount)
.div(totalAmount)
.mul(buyRewardsFee)
.div(buyRewardsFee + buyMarketingFees + buyDevFee);
}
if (sellRewardsFee > 0) {
dividendsFromSell = address(this)
.balance
.mul(sellAmount)
.div(totalAmount)
.mul(sellRewardsFee)
.div(sellRewardsFee + sellMarketingFees + sellDevFee);
}
dividends = dividendsFromBuy.add(dividendsFromSell);
if (dividends > 0) {
(success, ) = address(dividendTracker).call{value: dividends}("");
}
uint256 _completeFees = sellMarketingFees.add(sellDevFee) +
buyMarketingFees.add(buyDevFee);
uint256 feePortions;
if (_completeFees > 0) {
feePortions = address(this).balance.div(_completeFees);
}
uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
if (marketingPayout > 0) {
(successOp1, ) = address(marketingWallet).call{value: marketingPayout}("");
}
if (devPayout > 0) {
(successOp2, ) = address(devWallet).call{value: devPayout}("");
}
emit SendDividends(
dividends,
marketingPayout + devPayout,
success && successOp1 && successOp2
);
}
function airdropToWallets(
address[] memory airdropWallets,
uint256[] memory amount
) external onlyOwner {
require(airdropWallets.length == amount.length,"Arrays must be the same length");
require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
for (uint256 i = 0; i < airdropWallets.length; i++) {
address wallet = airdropWallets[i];
uint256 airdropAmount = amount[i] * (10**18);
super._transfer(msg.sender, wallet, airdropAmount);
dividendTracker.setBalance(payable(wallet), balanceOf(wallet));
}
}
}
contract PepeRewDividendTracker is DividendPayingToken, Ownable {
using SafeMath for uint256;
using SafeMathInt for int256;
using IterableMapping for IterableMapping.Map;
IterableMapping.Map private tokenHoldersMap;
uint256 public lastProcessedIndex;
mapping(address => bool) public excludedFromDividends;
mapping(address => bool) public excludedFromAutoClaim;
mapping(address => bool) public autoReinvest;
address public defaultToken; // USDC
bool public allowCustomTokens;
bool public allowAutoReinvest;
bool public dividendsPaused = false;
string private trackerName;
string private trackerTicker;
IUniswapV2Router02 public uniswapV2Router;
PepeRew public PepeRewContract;
mapping(address => uint256) public lastClaimTimes;
uint256 private minimumTokenBalanceForAutoDividends;
uint256 private minimumTokenBalanceForDividends;
event ExcludeFromDividends(address indexed account);
event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
event DividendReinvested(
address indexed acount,
uint256 value,
bool indexed automatic
);
event Claim(
address indexed account,
uint256 amount,
bool indexed automatic
);
event DividendsPaused(bool paused);
event SetAllowCustomTokens(bool allow);
event SetAllowAutoReinvest(bool allow);
constructor(
address payable mainContract,
address router,
address token,
string memory _name,
string memory _ticker
) DividendPayingToken(_name, _ticker) {
trackerName = _name;
trackerTicker = _ticker;
defaultToken = token;
PepeRewContract = PepeRew(mainContract);
minimumTokenBalanceForAutoDividends = 1000000_000000000000000000;
minimumTokenBalanceForDividends = minimumTokenBalanceForAutoDividends;
uniswapV2Router = IUniswapV2Router02(router);
allowCustomTokens = true;
allowAutoReinvest = false;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function name() public view virtual override returns (string memory) {
return trackerName;
}
function symbol() public view virtual override returns (string memory) {
return trackerTicker;
}
function _transfer(
address,
address,
uint256
) internal pure override {
require(false, "PepeRew_Dividend_Tracker: No transfers allowed");
}
function withdrawDividend() public pure override {
require(
false,
"PepeRew_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main contract."
);
}
function isExcludedFromAutoClaim(address account)
external
view
onlyOwner
returns (bool)
{
return excludedFromAutoClaim[account];
}
function isReinvest(address account)
external
view
onlyOwner
returns (bool)
{
return autoReinvest[account];
}
function setAllowCustomTokens(bool allow) external onlyOwner {
require(allowCustomTokens != allow);
allowCustomTokens = allow;
emit SetAllowCustomTokens(allow);
}
function setAllowAutoReinvest(bool allow) external onlyOwner {
require(allowAutoReinvest != allow);
allowAutoReinvest = allow;
emit SetAllowAutoReinvest(allow);
}
function excludeFromDividends(address account) external onlyOwner {
//require(!excludedFromDividends[account]);
excludedFromDividends[account] = true;
_setBalance(account, 0);
tokenHoldersMap.remove(account);
emit ExcludeFromDividends(account);
}
function includeFromDividends(address account) external onlyOwner {
excludedFromDividends[account] = false;
}
function setAutoClaim(address account, bool value) external onlyOwner {
excludedFromAutoClaim[account] = value;
}
function setReinvest(address account, bool value) external onlyOwner {
autoReinvest[account] = value;
}
function setMinimumTokenBalanceForAutoDividends(uint256 value)
external
onlyOwner
{
minimumTokenBalanceForAutoDividends = value * (10**18);
}
function setMinimumTokenBalanceForDividends(uint256 value)
external
onlyOwner
{
minimumTokenBalanceForDividends = value * (10**18);
}
function setDividendsPaused(bool value) external onlyOwner {
require(dividendsPaused != value);
dividendsPaused = value;
emit DividendsPaused(value);
}
function getLastProcessedIndex() external view returns (uint256) {
return lastProcessedIndex;
}
function getNumberOfTokenHolders() external view returns (uint256) {
return tokenHoldersMap.keys.length;
}
function getAccount(address _account)
public
view
returns (
address account,
int256 index,
int256 iterationsUntilProcessed,
uint256 withdrawableDividends,
uint256 totalDividends,
uint256 lastClaimTime
)
{
account = _account;
index = tokenHoldersMap.getIndexOfKey(account);
iterationsUntilProcessed = -1;
if (index >= 0) {
if (uint256(index) > lastProcessedIndex) {
iterationsUntilProcessed = index.sub(
int256(lastProcessedIndex)
);
} else {
uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length >
lastProcessedIndex
? tokenHoldersMap.keys.length.sub(lastProcessedIndex)
: 0;
iterationsUntilProcessed = index.add(
int256(processesUntilEndOfArray)
);
}
}
withdrawableDividends = withdrawableDividendOf(account);
totalDividends = accumulativeDividendOf(account);
lastClaimTime = lastClaimTimes[account];
}
function getAccountAtIndex(uint256 index)
public
view
returns (
address,
int256,
int256,
uint256,
uint256,
uint256
)
{
if (index >= tokenHoldersMap.size()) {
return (
0x0000000000000000000000000000000000000000,
-1,
-1,
0,
0,
0
);
}
address account = tokenHoldersMap.getKeyAtIndex(index);
return getAccount(account);
}
function setBalance(address account, uint256 newBalance)
external
onlyOwner
{
if (excludedFromDividends[account]) {
return;
}
if (newBalance < minimumTokenBalanceForDividends) {
tokenHoldersMap.remove(account);
_setBalance(account, 0);
return;
}
_setBalance(account, newBalance);
if (newBalance >= minimumTokenBalanceForAutoDividends) {
tokenHoldersMap.set(account, newBalance);
} else {
tokenHoldersMap.remove(account);
}
}
function process(uint256 gas)
public
returns (
uint256,
uint256,
uint256
)
{
uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;
if (numberOfTokenHolders == 0 || dividendsPaused) {
return (0, 0, lastProcessedIndex);
}
uint256 _lastProcessedIndex = lastProcessedIndex;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
uint256 claims = 0;
while (gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if (_lastProcessedIndex >= numberOfTokenHolders) {
_lastProcessedIndex = 0;
}
address account = tokenHoldersMap.keys[_lastProcessedIndex];
if (!excludedFromAutoClaim[account]) {
if (processAccount(payable(account), true)) {
claims++;
}
}
iterations++;
uint256 newGasLeft = gasleft();
if (gasLeft > newGasLeft) {
gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
}
gasLeft = newGasLeft;
}
lastProcessedIndex = _lastProcessedIndex;
return (iterations, claims, lastProcessedIndex);
}
function processAccount(address payable account, bool automatic)
public
onlyOwner
returns (bool)
{
if (dividendsPaused) {
return false;
}
bool reinvest = autoReinvest[account];
if (automatic && reinvest && !allowAutoReinvest) {
return false;
}
uint256 amount = reinvest
? _reinvestDividendOfUser(account)
: _withdrawDividendOfUser(account);
if (amount > 0) {
lastClaimTimes[account] = block.timestamp;
if (reinvest) {
emit DividendReinvested(account, amount, automatic);
} else {
emit Claim(account, amount, automatic);
}
return true;
}
return false;
}
function updateUniswapV2Router(address newAddress) public onlyOwner {
uniswapV2Router = IUniswapV2Router02(newAddress);
}
function updatePayoutToken(address token) public onlyOwner {
defaultToken = token;
}
function getPayoutToken() public view returns (address) {
return defaultToken;
}
function _reinvestDividendOfUser(address account)
private
returns (uint256)
{
uint256 _withdrawableDividend = withdrawableDividendOf(account);
if (_withdrawableDividend > 0) {
bool success;
withdrawnDividends[account] = withdrawnDividends[account].add(
_withdrawableDividend
);
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(PepeRewContract);
uint256 prevBalance = PepeRewContract.balanceOf(address(this));
// make the swap
try
uniswapV2Router
.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: _withdrawableDividend
}(
0, // accept any amount of Tokens
path,
address(this),
block.timestamp
)
{
uint256 received = PepeRewContract
.balanceOf(address(this))
.sub(prevBalance);
if (received > 0) {
success = true;
PepeRewContract.transfer(account, received);
} else {
success = false;
}
} catch {
success = false;
}
if (!success) {
withdrawnDividends[account] = withdrawnDividends[account].sub(
_withdrawableDividend
);
return 0;
}
return _withdrawableDividend;
}
return 0;
}
function _withdrawDividendOfUser(address payable user)
internal
override
returns (uint256)
{
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(
_withdrawableDividend
);
address tokenAddress = defaultToken;
bool success;
if (tokenAddress == address(0)) {
(success, ) = user.call{
value: _withdrawableDividend,
gas: 3000
}("");
} else {
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = tokenAddress;
try
uniswapV2Router
.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: _withdrawableDividend
}(
0, // accept any amount of Tokens
path,
user,
block.timestamp
)
{
success = true;
} catch {
success = false;
}
}
if (!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(
_withdrawableDividend
);
return 0;
} else {
emit DividendWithdrawn(user, _withdrawableDividend);
}
return _withdrawableDividend;
}
return 0;
}
}
library IterableMapping {
// Iterable mapping from address to uint;
struct Map {
address[] keys;
mapping(address => uint256) values;
mapping(address => uint256) indexOf;
mapping(address => bool) inserted;
}
function get(Map storage map, address key) internal view returns (uint256) {
return map.values[key];
}
function getIndexOfKey(Map storage map, address key)
internal
view
returns (int256)
{
if (!map.inserted[key]) {
return -1;
}
return int256(map.indexOf[key]);
}
function getKeyAtIndex(Map storage map, uint256 index)
internal
view
returns (address)
{
return map.keys[index];
}
function size(Map storage map) internal view returns (uint256) {
return map.keys.length;
}
function set(
Map storage map,
address key,
uint256 val
) internal {
if (map.inserted[key]) {
map.values[key] = val;
} else {
map.inserted[key] = true;
map.values[key] = val;
map.indexOf[key] = map.keys.length;
map.keys.push(key);
}
}
function remove(Map storage map, address key) internal {
if (!map.inserted[key]) {
return;
}
delete map.inserted[key];
delete map.values[key];
uint256 index = map.indexOf[key];
uint256 lastIndex = map.keys.length - 1;
address lastKey = map.keys[lastIndex];
map.indexOf[lastKey] = index;
delete map.indexOf[key];
map.keys[index] = lastKey;
map.keys.pop();
}
}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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"EnableAccountStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"UpdatePayoutToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateStakingAmounts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract PepeRewDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabledPublicTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isExcludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIncludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setWhitelistForPublicTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingUntilDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"deadBuy","type":"uint256"},{"internalType":"uint256","name":"deadSell","type":"uint256"},{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"RewardsBuy","type":"uint256"},{"internalType":"uint256","name":"RewardsSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"updateStakingAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistForPublicTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405260088054600162ffff0160a01b03191661dead17905560016009819055600a819055601d805460ff199081168317909155620f4240601e556025805490911690911790556401a13b8600602655603c602a553480156200006357600080fd5b5060405180604001604052806008815260200167506570652052657760c01b815250604051806040016040528060078152602001665045504552455760c81b8152508160039081620000b6919062000a29565b506004620000c5828262000a29565b5050506000620000da6200073760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e805473b40416d8196d1a404407c7295ed506133023b7b76001600160a01b03199182168117909255600f805490911690911790556000601681905560138190556017819055601481905560188190556015819055600560198190556012819055601a829055601b829055601c829055731b02da8cb0d097eb8d57a175b88c7d8b4799750691620001e491620001d09082908290826200073b602090811b62002c7817901c565b6200073b60201b62002c781790919060201c565b600c8190555062000216601b54620001d0601454620001d06015546012546200073b60201b62002c781790919060201c565b600b81905550308173912ce59144191c1204e64559fe8253a0e49e6548604051620002419062000977565b6001600160a01b0393841681529183166020830152909116604082015260a060608201819052600e9082018190526d2832b832a932bbaa3930b1b5b2b960911b60c0830181905260e06080840181905283019190915261010082015261012001604051809103906000f080158015620002be573d6000803e3d6000fd5b50600d80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000af5565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d8919062000af5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000426573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044c919062000af5565b600780546001600160a01b0319166001600160a01b0392909216918217905562000478906001620007ab565b600d5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620004bf57600080fd5b505af1158015620004d4573d6000803e3d6000fd5b5050600d5460085460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200052257600080fd5b505af115801562000537573d6000803e3d6000fd5b5050600d54604051634e7b827f60e01b8152600060048201526001600160a01b039091169250634e7b827f9150602401602060405180830381865afa15801562000585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ab919062000b20565b50600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b5050306000908152601f60205260408082208054600160ff199182168117909255600d546001600160a01b0390811685528385208054831684179055600e54811685528385208054831684179055600f541684529190922080549091169091179055506c054f529ca52576bc689200000090506200069a620006936005546001600160a01b031690565b8262000876565b620006a760328262000b44565b601055620006b86103e88262000b44565b601155600160246000620006d46005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54909116815260248352818120805485166001908117909155338252602c9093522080549092161790555062000b899050565b3390565b6000806200074a838562000b67565b905083811015620007a25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b6001600160a01b03821660009081526020805260409020805460ff191682158015919091179091556200083a57600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200082057600080fd5b505af115801562000835573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216620008ce5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000799565b620008ea816002546200073b60201b62002c781790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200091d91839062002c786200073b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b613092806200540c83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009b057607f821691505b602082108103620009d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200097257600081815260208120601f850160051c8101602086101562000a005750805b601f850160051c820191505b8181101562000a215782815560010162000a0c565b505050505050565b81516001600160401b0381111562000a455762000a4562000985565b62000a5d8162000a5684546200099b565b84620009d7565b602080601f83116001811462000a95576000841562000a7c5750858301515b600019600386901b1c1916600185901b17855562000a21565b600085815260208120601f198616915b8281101562000ac65788860151825594840194600190910190840162000aa5565b508582101562000ae55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b0857600080fd5b81516001600160a01b0381168114620007a257600080fd5b60006020828403121562000b3357600080fd5b81518015158114620007a257600080fd5b60008262000b6257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620007a557634e487b7160e01b600052601160045260246000fd5b6148738062000b996000396000f3fe6080604052600436106104fb5760003560e01c80637d32f3421161028c578063aa4704f31161015a578063d8032ed3116100cc578063f27fd25411610085578063f27fd25414610fdc578063f2fde38b14610ffc578063f5d3c79a1461101c578063f63743421461103c578063f8b45b0514611052578063fc6b151c1461106857600080fd5b8063d8032ed314610f08578063dd62ed3e14610f28578063e2f4560514610f6e578063e7841ec014610f84578063f11a24d314610f99578063f1c0ddff14610faf57600080fd5b8063b74e3b111161011e578063b74e3b1114610e5d578063ba079d4914610e7d578063bb8d513114610e9d578063d07a091c14610eb3578063d5e3725114610ed3578063d7b837dd14610ef357600080fd5b8063aa4704f314610d53578063acb2ad6f14610dab578063ad56c13c14610dc1578063b494298814610e18578063b62496f514610e2e57600080fd5b80639a7a23d6116101fe578063a0d82dc5116101b7578063a0d82dc514610c9d578063a457c2d714610cb3578063a694fc3a14610cd3578063a8b9d24014610cf3578063a9059cbb14610d13578063a9885de514610d3357600080fd5b80639a7a23d614610bf15780639c1b8af514610c115780639c3372ea14610c275780639c3b4fdc14610c475780639cefc1da14610c5d5780639ec1037e14610c7d57600080fd5b8063871c128d11610250578063871c128d14610b525780638ca2923a14610b725780638da5cb5b14610b885780638ea5220f14610ba657806395451c2914610bc657806395d89b4114610bdc57600080fd5b80637d32f34214610aa55780637fdde05c14610ad2578063837ae2d014610af25780638577a6d514610b12578063868730c714610b3257600080fd5b806349bd5a5e116103c957806364b0f6531161033b578063715018a6116102f4578063715018a614610a0057806372d8edf414610a1557806375829def14610a3557806375f0a87414610a5557806377a3b60914610a755780637928dd1d14610a8b57600080fd5b806364b0f6531461094b578063679ca6e9146109605780636843cd84146109805780636d48467b146109a0578063700bb191146109c057806370a08231146109e057600080fd5b80634fbee1931161038d5780634fbee193146108865780635124f874146108bf5780635a84c5eb146108d55780635c234bb6146108f55780635ebf4db91461090b5780635eee4bae1461092b57600080fd5b806349bd5a5e146107fc5780634a62bb651461081c5780634a74bb02146108365780634ada218b146108505780634e71d92d1461087157600080fd5b806321cbb0241161046d578063313ce56711610426578063313ce5671461073d5780633599bb171461075957806339509351146107795780633f407b841461079957806340ffdd80146107af578063435c89e4146107cf57600080fd5b806321cbb024146106835780632307b441146106b357806323b872dd146106d357806325cd3598146106f35780632c1f52161461070857806330bb4cff1461072857600080fd5b8063095ea7b3116104bf578063095ea7b3146105c85780630ef35b7e146105f85780631694505e1461061857806318160ddd146106385780631d7b1fb4146106575780631fa705311461066d57600080fd5b806303fd2a451461050757806305ca5f081461054457806306fdde031461056657806308dfe8a51461058857806309231602146105a857600080fd5b3661050257005b600080fd5b34801561051357600080fd5b50600854610527906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561055057600080fd5b5061056461055f366004614130565b611088565b005b34801561057257600080fd5b5061057b611159565b60405161053b9190614149565b34801561059457600080fd5b506105646105a33660046141ba565b6111eb565b3480156105b457600080fd5b506105646105c3366004614130565b611274565b3480156105d457600080fd5b506105e86105e33660046141f3565b611303565b604051901515815260200161053b565b34801561060457600080fd5b5061056461061336600461421f565b61131a565b34801561062457600080fd5b50600654610527906001600160a01b031681565b34801561064457600080fd5b506002545b60405190815260200161053b565b34801561066357600080fd5b50610649602a5481565b34801561067957600080fd5b50610649600a5481565b34801561068f57600080fd5b506105e861069e366004614241565b602c6020526000908152604090205460ff1681565b3480156106bf57600080fd5b506105646106ce366004614334565b6113ff565b3480156106df57600080fd5b506105e86106ee3660046143f6565b6115d0565b3480156106ff57600080fd5b50610527611639565b34801561071457600080fd5b50600d54610527906001600160a01b031681565b34801561073457600080fd5b506106496116ac565b34801561074957600080fd5b506040516012815260200161053b565b34801561076557600080fd5b50610564610774366004614437565b61171a565b34801561078557600080fd5b506105e86107943660046141f3565b6117a7565b3480156107a557600080fd5b5061064960095481565b3480156107bb57600080fd5b506105646107ca366004614437565b6117dd565b3480156107db57600080fd5b506106496107ea366004614130565b60236020526000908152604090205481565b34801561080857600080fd5b50600754610527906001600160a01b031681565b34801561082857600080fd5b506025546105e89060ff1681565b34801561084257600080fd5b50601d546105e89060ff1681565b34801561085c57600080fd5b506008546105e890600160b01b900460ff1681565b34801561087d57600080fd5b50610564611838565b34801561089257600080fd5b506105e86108a1366004614241565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156108cb57600080fd5b5061064960175481565b3480156108e157600080fd5b506105646108f0366004614130565b6118b0565b34801561090157600080fd5b5061064960165481565b34801561091757600080fd5b50610564610926366004614130565b61190b565b34801561093757600080fd5b50610564610946366004614130565b611966565b34801561095757600080fd5b506106496119a8565b34801561096c57600080fd5b5061056461097b366004614437565b6119f2565b34801561098c57600080fd5b5061064961099b366004614241565b611a2f565b3480156109ac57600080fd5b506105e86109bb366004614241565b611a9f565b3480156109cc57600080fd5b506105646109db366004614130565b611b0f565b3480156109ec57600080fd5b506106496109fb366004614241565b611be1565b348015610a0c57600080fd5b50610564611bfc565b348015610a2157600080fd5b50610564610a30366004614241565b611c70565b348015610a4157600080fd5b50610564610a50366004614241565b611ccc565b348015610a6157600080fd5b50600e54610527906001600160a01b031681565b348015610a8157600080fd5b5061064960195481565b348015610a9757600080fd5b50602b546105e89060ff1681565b348015610ab157600080fd5b50610649610ac0366004614241565b60226020526000908152604090205481565b348015610ade57600080fd5b50610564610aed3660046141ba565b611d81565b348015610afe57600080fd5b50610564610b0d366004614454565b611dd6565b348015610b1e57600080fd5b50610564610b2d366004614130565b611f80565b348015610b3e57600080fd5b50610564610b4d366004614437565b612037565b348015610b5e57600080fd5b50610564610b6d366004614130565b61206f565b348015610b7e57600080fd5b5061064960135481565b348015610b9457600080fd5b506005546001600160a01b0316610527565b348015610bb257600080fd5b50600f54610527906001600160a01b031681565b348015610bd257600080fd5b5061064960145481565b348015610be857600080fd5b5061057b6120eb565b348015610bfd57600080fd5b50610564610c0c3660046141ba565b6120fa565b348015610c1d57600080fd5b50610649601e5481565b348015610c3357600080fd5b50610564610c42366004614437565b612132565b348015610c5357600080fd5b50610649601a5481565b348015610c6957600080fd5b50610564610c78366004614437565b61218e565b348015610c8957600080fd5b50610564610c98366004614241565b612224565b348015610ca957600080fd5b50610649601b5481565b348015610cbf57600080fd5b506105e8610cce3660046141f3565b6122fb565b348015610cdf57600080fd5b50610564610cee366004614130565b61234a565b348015610cff57600080fd5b50610649610d0e366004614241565b61256d565b348015610d1f57600080fd5b506105e8610d2e3660046141f3565b6125a0565b348015610d3f57600080fd5b50610564610d4e3660046141ba565b6125ad565b348015610d5f57600080fd5b50610d96610d6e366004614241565b6001600160a01b03166000908152602260209081526040808320546021909252909120549091565b6040805192835260208301919091520161053b565b348015610db757600080fd5b50610649601c5481565b348015610dcd57600080fd5b50610de1610ddc366004614241565b612602565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161053b565b348015610e2457600080fd5b5061064960295481565b348015610e3a57600080fd5b506105e8610e49366004614241565b602080526000908152604090205460ff1681565b348015610e6957600080fd5b50610564610e78366004614130565b612692565b348015610e8957600080fd5b506105e8610e98366004614241565b612722565b348015610ea957600080fd5b5061064960125481565b348015610ebf57600080fd5b50610564610ece366004614241565b612755565b348015610edf57600080fd5b50610564610eee366004614437565b61284a565b348015610eff57600080fd5b506105646128cc565b348015610f1457600080fd5b50610564610f23366004614241565b612955565b348015610f3457600080fd5b50610649610f433660046144bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610f7a57600080fd5b5061064960115481565b348015610f9057600080fd5b50610649612a18565b348015610fa557600080fd5b5061064960185481565b348015610fbb57600080fd5b50610649610fca366004614241565b60216020526000908152604090205481565b348015610fe857600080fd5b50610de1610ff7366004614130565b612a62565b34801561100857600080fd5b50610564611017366004614241565b612aa0565b34801561102857600080fd5b50610564611037366004614437565b612b8b565b34801561104857600080fd5b5061064960155481565b34801561105e57600080fd5b5061064960105481565b34801561107457600080fd5b50610564611083366004614130565b612bc3565b6005546001600160a01b031633146110bb5760405162461bcd60e51b81526004016110b2906144ea565b60405180910390fd5b6110cd81670de0b6b3a7640000614535565b905060006110e8600954600a54612c7890919063ffffffff16565b9050600061110b82611105600a5486612cde90919063ffffffff16565b90612d60565b905060006111288361110560095487612cde90919063ffffffff16565b905061113384612da2565b600a5461114090836130a2565b600a5560095461115090826130a2565b60095550505050565b6060600380546111689061454c565b80601f01602080910402602001604051908101604052809291908181526020018280546111949061454c565b80156111e15780601f106111b6576101008083540402835291602001916111e1565b820191906000526020600020905b8154815290600101906020018083116111c457829003601f168201915b5050505050905090565b6005546001600160a01b031633146112155760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016110b2906144ea565b60058110156112ef5760405162461bcd60e51b815260206004820152601860248201527f63616e206e65766572206265207365742062656c6f772035000000000000000060448201526064016110b2565b6112fd81633b9aca00614535565b60265550565b60006113103384846130e4565b5060015b92915050565b6005546001600160a01b031633146113445760405162461bcd60e51b81526004016110b2906144ea565b60008281526023602052604090205481900361135f57600080fd5b60648111156113b05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e6720626f6e75732063616e27742065786365656420313030000060448201526064016110b2565b60008281526023602090815260409182902083905581518481529081018390527f065c0eec5c5d031ee25323575d53db5536226ab058b74d8bdb03c517dd4f605d910160405180910390a15050565b6005546001600160a01b031633146114295760405162461bcd60e51b81526004016110b2906144ea565b805182511461147a5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016110b2565b60c8825111156114d75760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016110b2565b60005b82518110156115cb5760008382815181106114f7576114f7614586565b60200260200101519050600083838151811061151557611515614586565b6020026020010151670de0b6b3a76400006115309190614535565b905061153d338383613209565b600d546001600160a01b031663e30443bc8361155881611be1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b50505050505080806115c39061459c565b9150506114da565b505050565b60006115dd848484613312565b61162f843361162a856040518060600160405280602881526020016147f1602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613cf8565b6130e4565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa158015611683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906145b5565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906145d2565b6005546001600160a01b031633146117445760405162461bcd60e51b81526004016110b2906144ea565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161131091859061162a9086612c78565b6005546001600160a01b031633146118075760405162461bcd60e51b81526004016110b2906144ea565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd8090602401611772565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ad91906145eb565b50565b6005546001600160a01b031633146118da5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb90602401611772565b6005546001600160a01b031633146119355760405162461bcd60e51b81526004016110b2906144ea565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db990602401611772565b6005546001600160a01b031633146119905760405162461bcd60e51b81526004016110b2906144ea565b6119a281670de0b6b3a7640000614535565b60115550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b03163314611a1c5760405162461bcd60e51b81526004016110b2906144ea565b6025805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131491906145d2565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611aeb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131491906145eb565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614608565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611c265760405162461bcd60e51b81526004016110b2906144ea565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611c9a5760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401611772565b6005546001600160a01b03163314611cf65760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601f60205260409020805460ff19166001179055506118ad81612aa0565b6005546001600160a01b03163314611dab5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e005760405162461bcd60e51b81526004016110b2906144ea565b60168a90556017889055601886905560198490556013899055601487905560158590556012839055601a829055601b819055611e4881611e428981878a612c78565b90612c78565b600b81905550611e71601a54611e42601754611e42601854601954612c7890919063ffffffff16565b600c55600b54600f10801590611e8a5750600f600c5411155b611ee75760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b60648201526084016110b2565b601354601454601554601254601654601754601854601954601a54601b54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611faa5760405162461bcd60e51b81526004016110b2906144ea565b6005811115611ffb5760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016110b2565b601c8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d63990604401611772565b6005546001600160a01b031633146120995760405162461bcd60e51b81526004016110b2906144ea565b62030d4081101580156120af5750620f42408111155b6120b857600080fd5b601e5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601e55565b6060600480546111689061454c565b6005546001600160a01b031633146121245760405162461bcd60e51b81526004016110b2906144ea565b61212e8282613d32565b5050565b6005546001600160a01b0316331461215c5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea90602401611772565b6005546001600160a01b031633146121b85760405162461bcd60e51b81526004016110b2906144ea565b801515600860159054906101000a900460ff161515036121d757600080fd5b60088054821515600160a81b0260ff60a81b199091161790556040517f0d240c24014ec8c204fc1bdcc286f7d01fd2ab6a07c558a9b2d3f12904323a879061202c90831515815260200190565b6005546001600160a01b0316331461224e5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b15801561229557600080fd5b505af11580156122a9573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050826122ca81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611772565b6000611310338461162a85604051806060016040528060258152602001614819602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613cf8565b600854600160a81b900460ff1661239c5760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016110b2565b60008181526023602052604081205490036123f95760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207374616b696e67206475726174696f6e000000000000000060448201526064016110b2565b6124034282612c78565b336000908152602260205260409020541061246c5760405162461bcd60e51b8152602060048201526024808201527f616c7265616479207374616b656420666f722061206c6f6e67657220647572616044820152633a34b7b760e11b60648201526084016110b2565b6000818152602360209081526040808320543384526021909252909120556124944282612c78565b33600081815260226020526040902091909155600d546001600160a01b03169063e30443bc906124c381613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506125283390565b6001600160a01b03167f13dd201d7da4f9b31a9064a09abc1a6ce420dacd837a77abafaec5bd9d28d2c88260405161256291815260200190565b60405180910390a250565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611a5e565b6000611310338484613312565b6005546001600160a01b031633146125d75760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b03919091166000908152602c60205260409020805460ff1916911515919091179055565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e9190614636565b949c939b5091995097509550909350915050565b6005546001600160a01b031633146126bc5760405162461bcd60e51b81526004016110b2906144ea565b61012c81111561271d5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016110b2565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d4990602401611ace565b6005546001600160a01b0316331461277f5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b0381811660008181526024602081815260408084208054600160ff199182168117909255601f9093529381902080549092169093179055600d54915163031e79db60e41b815260048101939093529216916331e79db09101600060405180830381600087803b1580156127f857600080fd5b505af115801561280c573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c59250602001905061202c565b6005546001600160a01b031633146128745760405162461bcd60e51b81526004016110b2906144ea565b601d5481151560ff90911615150361288b57600080fd5b601d805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef9060200161202c565b6005546001600160a01b031633146128f65760405162461bcd60e51b81526004016110b2906144ea565b602b5460ff161561290657600080fd5b436029556008805460ff60b01b1916600160b01b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1602b805460ff19166001179055565b6005546001600160a01b0316331461297f5760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d9250602001905061202c565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161263d565b6005546001600160a01b03163314612aca5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b038116612b2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016110b2565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a0490604401611772565b6005546001600160a01b03163314612bed5760405162461bcd60e51b81526004016110b2906144ea565b612bff81670de0b6b3a7640000614535565b90506103e8600254612c119190614689565b811015612c735760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016110b2565b601055565b600080612c8583856146ab565b905083811015612cd75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016110b2565b9392505050565b600082600003612cf057506000611314565b6000612cfc8385614535565b905082612d098583614689565b14612cd75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016110b2565b6000612cd783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e53565b80600003612dad5750565b612db681613e81565b6000612dcf600954600a54612c7890919063ffffffff16565b601954909150600190819081906000908190819015612e3057612e2d601a54601754601954612dfe91906146ab565b612e0891906146ab565b611105601954612e278b611105600a5447612cde90919063ffffffff16565b90612cde565b91505b60125415612e7a57612e77601b54601454601254612e4e91906146ab565b612e5891906146ab565b611105601254612e278b61110560095447612cde90919063ffffffff16565b90505b612e848282612c78565b92508215612ee457600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612ed9576040519150601f19603f3d011682016040523d82523d6000602084013e612ede565b606091505b50909650505b6000612efd601a54601754612c7890919063ffffffff16565b601b54601454612f0c91612c78565b612f1691906146ab565b905060008115612f2d57612f2a4783612d60565b90505b600081612f47601454601754612c7890919063ffffffff16565b612f519190614535565b9050600082612f6d601b54601a54612c7890919063ffffffff16565b612f779190614535565b90508115612fd757600e546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612fcc576040519150601f19603f3d011682016040523d82523d6000602084013e612fd1565b606091505b50909950505b801561303557600f546040516001600160a01b03909116908290600081818185875af1925050503d806000811461302a576040519150601f19603f3d011682016040523d82523d6000602084013e61302f565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd08761306183856146ab565b8c801561306b57508b5b801561307457508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b6000612cd783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf8565b6001600160a01b0383166131465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016110b2565b6001600160a01b0382166131a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016110b2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661322f5760405162461bcd60e51b81526004016110b2906146be565b6001600160a01b0382166132555760405162461bcd60e51b81526004016110b290614703565b613292816040518060600160405280602681526020016147cb602691396001600160a01b0386166000908152602081905260409020549190613cf8565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546132c19082612c78565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016131fc565b6001600160a01b0383166133385760405162461bcd60e51b81526004016110b2906146be565b6001600160a01b03821661335e5760405162461bcd60e51b81526004016110b290614703565b6001600160a01b038316600090815260246020526040812054819081908190819060ff166133df57600854600160b01b900460ff166133df5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016110b2565b856000036133fd576133f388886000613209565b5050505050505050565b600854600160a01b900460ff1615801561343057506001600160a01b0388166000908152601f602052604090205460ff16155b801561345557506001600160a01b0387166000908152601f602052604090205460ff16155b15613bef576001600160a01b03808816600090815260208052604080822054928b16825290205460ff91821691168015801561348f575081155b156135d55760006134b06064611105601c548c612cde90919063ffffffff16565b90506134bc89826130a2565b98506134c98b3083613209565b6134d48b8b8b613209565b600d546001600160a01b031663e30443bc8c6134ef81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b61356a81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b505050505050505050505050505050565b801580156135ec5750600854600160a81b900460ff165b156136a3576001600160a01b038a166000908152602260205260409020544210156136595760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320617265207374616b656420616e64206c6f636b65642100000060448201526064016110b2565b6001600160a01b038a166000908152602260205260409020541561369e576001600160a01b038a16600090815260226020908152604080832083905560219091528120555b6138fc565b811561374c57601254601354601454601554601b54602554949b509299509097509550935060ff161561369e57602a54326000908152602860205260409020546136ed91906146ab565b4210156137355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016110b2565b3260009081526028602052604090204290556138fc565b80156138fc57601954601654601754601854601a54602554949b509299509097509550935060ff1615613885576029546137879060026146ab565b43116137ca5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016110b2565b6026543a111561381c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016110b2565b326000908152602760205260409020544390036138725760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016110b2565b3260009081526027602052604090204390555b60006138908a611be1565b6010549091506138a08a836146ab565b11156138fa5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016110b2565b505b600061391d8461390c88886146ab565b61391691906146ab565b8990612c78565b9050600061392a30611be1565b6011549091508110801590819061395957506001600160a01b038d16600090815260208052604090205460ff16155b15613a72576008805460ff60a01b1916600160a01b179055601d5460ff1680156139835750600087115b801561399157506000600c54115b15613a435760006139af600954600a54612c7890919063ffffffff16565b905060006139cc82611105600a5487612cde90919063ffffffff16565b905060006139e98361110560095488612cde90919063ffffffff16565b90506000613a06600c546111058d86612cde90919063ffffffff16565b90506000613a23600b546111058e86612cde90919063ffffffff16565b90506000613a318284612c78565b9050613a3c81613fdb565b5050505050505b6000613a4e30611be1565b9050613a5981612da2565b506000600a8190556009556008805460ff60a01b191690555b6000613a8360646111058e87612cde565b905060008a15613ad6576064613a998e8d612cde565b613aa39190614689565b9050613ac58f600860009054906101000a90046001600160a01b031683613209565b600254613ad290826130a2565b6002555b613aea613ae382846146ab565b8e906130a2565b9c508615613b0757600954613aff9083612c78565b600955613b18565b600a54613b149083612c78565b600a555b613b238f3084613209565b601e54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015613b90575060408051601f3d908101601f19168201909252613b8d91810190614608565b60015b15613be65760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b613bfa888888613209565b600d546001600160a01b031663e30443bc89613c1581613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905088613c9081613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b505050505050505050505050565b60008184841115613d1c5760405162461bcd60e51b81526004016110b29190614149565b506000613d298486614746565b95945050505050565b6001600160a01b03821660009081526020805260409020805460ff19168215801591909117909155613dbe57600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015613da557600080fd5b505af1158015613db9573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600854600090600160a81b900460ff16613e1c57613e1782611be1565b611314565b6001600160a01b0382166000908152602160205260409020546113149060649061110590613e4a9083612c78565b612e2786611be1565b60008183613e745760405162461bcd60e51b81526004016110b29190614149565b506000613d298486614689565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613eb657613eb6614586565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3391906145b5565b81600181518110613f4657613f46614586565b6001600160a01b039283166020918202929092010152600654613f6c91309116846130e4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613fa5908590600090869030904290600401614759565b600060405180830381600087803b158015613fbf57600080fd5b505af1158015613fd3573d6000803e3d6000fd5b505050505050565b6000613fe8826002612d60565b90506000613ff683836130a2565b90504761400283613e81565b600061400e47836130a2565b905061401a8382614062565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60065461407a9030906001600160a01b0316846130e4565b6006546001600160a01b031663f305d7198230856000806140a36005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561410b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117a09190614608565b60006020828403121561414257600080fd5b5035919050565b600060208083528351808285015260005b818110156141765785810183015185820160400152820161415a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118ad57600080fd5b80151581146118ad57600080fd5b600080604083850312156141cd57600080fd5b82356141d881614197565b915060208301356141e8816141ac565b809150509250929050565b6000806040838503121561420657600080fd5b823561421181614197565b946020939093013593505050565b6000806040838503121561423257600080fd5b50508035926020909101359150565b60006020828403121561425357600080fd5b8135612cd781614197565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561429d5761429d61425e565b604052919050565b600067ffffffffffffffff8211156142bf576142bf61425e565b5060051b60200190565b600082601f8301126142da57600080fd5b813560206142ef6142ea836142a5565b614274565b82815260059290921b8401810191818101908684111561430e57600080fd5b8286015b848110156143295780358352918301918301614312565b509695505050505050565b6000806040838503121561434757600080fd5b823567ffffffffffffffff8082111561435f57600080fd5b818501915085601f83011261437357600080fd5b813560206143836142ea836142a5565b82815260059290921b840181019181810190898411156143a257600080fd5b948201945b838610156143c95785356143ba81614197565b825294820194908201906143a7565b965050860135925050808211156143df57600080fd5b506143ec858286016142c9565b9150509250929050565b60008060006060848603121561440b57600080fd5b833561441681614197565b9250602084013561442681614197565b929592945050506040919091013590565b60006020828403121561444957600080fd5b8135612cd7816141ac565b6000806000806000806000806000806101408b8d03121561447457600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080604083850312156144cf57600080fd5b82356144da81614197565b915060208301356141e881614197565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176113145761131461451f565b600181811c9082168061456057607f821691505b60208210810361458057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016145ae576145ae61451f565b5060010190565b6000602082840312156145c757600080fd5b8151612cd781614197565b6000602082840312156145e457600080fd5b5051919050565b6000602082840312156145fd57600080fd5b8151612cd7816141ac565b60008060006060848603121561461d57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561464f57600080fd5b865161465a81614197565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b6000826146a657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156113145761131461451f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156113145761131461451f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156147a95784516001600160a01b031683529383019391830191600101614784565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122011e3ee85ab34f1a10630ff2261ca3b7d5fb9390daa916e57ce665d331833833d64736f6c6343000811003360806040526012805460ff60b01b191690553480156200001e57600080fd5b50604051620030923803806200309283398101604081905262000041916200023a565b81818181600362000053838262000374565b50600462000062828262000374565b50505050506000620000796200015860201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d5838262000374565b506014620000e4828262000374565b505060128054601680546001600160a01b03199081166001600160a01b039889161790915569d3c21bcecceda100000060188190556019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b19169091555062000440565b3390565b6001600160a01b03811681146200017257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019d57600080fd5b81516001600160401b0380821115620001ba57620001ba62000175565b604051601f8301601f19908116603f01168101908282118183101715620001e557620001e562000175565b816040528381526020925086838588010111156200020257600080fd5b600091505b8382101562000226578582018301518183018401529082019062000207565b600093810190920192909252949350505050565b600080600080600060a086880312156200025357600080fd5b855162000260816200015c565b602087015190955062000273816200015c565b604087015190945062000286816200015c565b60608701519093506001600160401b0380821115620002a457600080fd5b620002b289838a016200018b565b93506080880151915080821115620002c957600080fd5b50620002d8888289016200018b565b9150509295509295909350565b600181811c90821680620002fa57607f821691505b6020821081036200031b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036f57600081815260208120601f850160051c810160208610156200034a5750805b601f850160051c820191505b818110156200036b5782815560010162000356565b5050505b505050565b81516001600160401b0381111562000390576200039062000175565b620003a881620003a18454620002e5565b8462000321565b602080601f831160018114620003e05760008415620003c75750858301515b600019600386901b1c1916600185901b1785556200036b565b600085815260208120601f198616915b828110156200041157888601518255948401946001909101908401620003f0565b5085821015620004305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c4280620004506000396000f3fe60806040526004361061031e5760003560e01c80636d48467b116101ab578063a8b9d240116100f7578063da9a64d711610095578063e7841ec01161006f578063e7841ec0146109ed578063f2fde38b14610a02578063fbcbc0f114610a22578063ffb2c47914610a4257600080fd5b8063da9a64d714610967578063dd62ed3e14610987578063e30443bc146109cd57600080fd5b8063b22f8a04116100d1578063b22f8a04146108e7578063ba079d4914610907578063bc4c4b3714610927578063d8032ed31461094757600080fd5b8063a8b9d24014610871578063a9059cbb14610891578063aafd847a146108b157600080fd5b80638da5cb5b116101645780639c3372ea1161013e5780639c3372ea146107ef5780639eec101e1461080f578063a423406914610830578063a457c2d71461085157600080fd5b80638da5cb5b1461079c57806391b89fba146107ba57806395d89b41146107da57600080fd5b80636d48467b146106db57806370a08231146106fb578063715018a61461073157806374c13fda1461074657806385a6b3ae146107665780638bc1d6391461077c57600080fd5b8063313ce5671161026a5780634e7b827f116102235780635ebf4db9116101fd5780635ebf4db91461065657806365b8dbc0146106765780636a474002146106965780636b69163b146106ab57600080fd5b80634e7b827f146105af5780635183d6fd146105df5780635a84c5eb1461063657600080fd5b8063313ce567146104f257806331e79db01461050e5780633599bb171461052e578063395093511461054e57806340ffdd801461056e578063418089041461058e57600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461047e57806325cd35981461049e57806327ce0147146104bc5780633009a609146104dc57600080fd5b806318160ddd1461040c5780631d4ff89a14610421578063226cfa3d1461045157600080fd5b806303c833021461033257806306fdde031461033a5780630928847114610365578063095ea7b31461038557806309bbedde146103b55780631694505e146103d457600080fd5b3661032d5761032b610a7d565b005b600080fd5b61032b610a7d565b34801561034657600080fd5b5061034f610b10565b60405161035c91906127be565b60405180910390f35b34801561037157600080fd5b5061032b610380366004612824565b610ba2565b34801561039157600080fd5b506103a56103a0366004612841565b610bf6565b604051901515815260200161035c565b3480156103c157600080fd5b50600a545b60405190815260200161035c565b3480156103e057600080fd5b506015546103f4906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561041857600080fd5b506002546103c6565b34801561042d57600080fd5b506103a561043c366004612824565b60116020526000908152604090205460ff1681565b34801561045d57600080fd5b506103c661046c366004612824565b60176020526000908152604090205481565b34801561048a57600080fd5b506103a561049936600461286d565b610c0d565b3480156104aa57600080fd5b506012546001600160a01b03166103f4565b3480156104c857600080fd5b506103c66104d7366004612824565b610c76565b3480156104e857600080fd5b506103c6600e5481565b3480156104fe57600080fd5b506040516012815260200161035c565b34801561051a57600080fd5b5061032b610529366004612824565b610cd2565b34801561053a57600080fd5b5061032b6105493660046128bc565b610d6c565b34801561055a57600080fd5b506103a5610569366004612841565b610e0d565b34801561057a57600080fd5b5061032b6105893660046128bc565b610e43565b34801561059a57600080fd5b506012546103a590600160a81b900460ff1681565b3480156105bb57600080fd5b506103a56105ca366004612824565b600f6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506105ff6105fa3660046128d9565b610ed9565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161035c565b34801561064257600080fd5b5061032b6106513660046128d9565b610f39565b34801561066257600080fd5b5061032b6106713660046128d9565b610f7b565b34801561068257600080fd5b5061032b610691366004612824565b610fbd565b3480156106a257600080fd5b5061032b611009565b3480156106b757600080fd5b506103a56106c6366004612824565b60106020526000908152604090205460ff1681565b3480156106e757600080fd5b506103a56106f6366004612824565b6110a9565b34801561070757600080fd5b506103c6610716366004612824565b6001600160a01b031660009081526020819052604090205490565b34801561073d57600080fd5b5061032b6110f5565b34801561075257600080fd5b506012546103f4906001600160a01b031681565b34801561077257600080fd5b506103c660085481565b34801561078857600080fd5b5061032b6107973660046128f2565b611169565b3480156107a857600080fd5b506009546001600160a01b03166103f4565b3480156107c657600080fd5b506103c66107d5366004612824565b6111be565b3480156107e657600080fd5b5061034f6111c9565b3480156107fb57600080fd5b5061032b61080a3660046128bc565b6111d8565b34801561081b57600080fd5b506012546103a590600160a01b900460ff1681565b34801561083c57600080fd5b506012546103a590600160b01b900460ff1681565b34801561085d57600080fd5b506103a561086c366004612841565b61126e565b34801561087d57600080fd5b506103c661088c366004612824565b6112bd565b34801561089d57600080fd5b506103a56108ac366004612841565b6112e9565b3480156108bd57600080fd5b506103c66108cc366004612824565b6001600160a01b031660009081526007602052604090205490565b3480156108f357600080fd5b5061032b6109023660046128f2565b6112f6565b34801561091357600080fd5b506103a5610922366004612824565b61134b565b34801561093357600080fd5b506103a56109423660046128f2565b611397565b34801561095357600080fd5b5061032b610962366004612824565b611518565b34801561097357600080fd5b506016546103f4906001600160a01b031681565b34801561099357600080fd5b506103c66109a236600461292b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d957600080fd5b5061032b6109e8366004612841565b611564565b3480156109f957600080fd5b50600e546103c6565b348015610a0e57600080fd5b5061032b610a1d366004612824565b6115fc565b348015610a2e57600080fd5b506105ff610a3d366004612824565b6116e7565b348015610a4e57600080fd5b50610a62610a5d3660046128d9565b611796565b6040805193845260208401929092529082015260600161035c565b6000610a8860025490565b11610a9257600080fd5b3415610b0e57610ac5610aa460025490565b610ab234600160801b6118bc565b610abc919061296f565b60055490611945565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b0a9034611945565b6008555b565b606060138054610b1f90612991565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90612991565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610bcc906129cb565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c033384846119a4565b5060015b92915050565b6000610c1a848484611ac8565b610c6c8433610c6785604051806060016040528060288152602001612bc0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b2c565b6119a4565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610cc892610cc392610cbd91610cb891906118bc565b611b66565b90611b76565b611bb4565b610c07919061296f565b6009546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610bcc906129cb565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d2a908290611bc7565b610d35600a82611c26565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610d965760405162461bcd60e51b8152600401610bcc906129cb565b801515601260169054906101000a900460ff16151503610db557600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e0290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c03918590610c679086611945565b6009546001600160a01b03163314610e6d5760405162461bcd60e51b8152600401610bcc906129cb565b801515601260159054906101000a900460ff16151503610e8c57600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e0290831515815260200190565b600080600080600080610eeb600a5490565b8710610f0a575060009450600019935083925084915081905080610f30565b6000610f17600a89611d61565b9050610f22816116e7565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f635760405162461bcd60e51b8152600401610bcc906129cb565b610f7581670de0b6b3a7640000612a00565b60185550565b6009546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610bcc906129cb565b610fb781670de0b6b3a7640000612a00565b60195550565b6009546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610bcc906129cb565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152606360248201527f506570655265775f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e20636f6e74726160848201526231ba1760e91b60a482015260c401610bcc565b6009546000906001600160a01b031633146110d65760405162461bcd60e51b8152600401610bcc906129cb565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b0316331461111f5760405162461bcd60e51b8152600401610bcc906129cb565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b031633146111935760405162461bcd60e51b8152600401610bcc906129cb565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c07826112bd565b606060148054610b1f90612991565b6009546001600160a01b031633146112025760405162461bcd60e51b8152600401610bcc906129cb565b801515601260149054906101000a900460ff1615150361122157600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e0290831515815260200190565b6000610c033384610c6785604051806060016040528060258152602001612be8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b2c565b6001600160a01b038116600090815260076020526040812054610c07906112e384610c76565b90611d94565b6000610c03338484611ac8565b6009546001600160a01b031633146113205760405162461bcd60e51b8152600401610bcc906129cb565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113785760405162461bcd60e51b8152600401610bcc906129cb565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113c45760405162461bcd60e51b8152600401610bcc906129cb565b601254600160b01b900460ff16156113de57506000610c07565b6001600160a01b03831660009081526011602052604090205460ff168280156114045750805b801561141a5750601254600160a81b900460ff16155b15611429576000915050610c07565b60008161143e5761143985611dd6565b611447565b6114478561208f565b9050801561150d576001600160a01b038516600090815260176020526040902042905581156114bb57831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c836040516114ae91815260200190565b60405180910390a3611502565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114f991815260200190565b60405180910390a35b600192505050610c07565b506000949350505050565b6009546001600160a01b031633146115425760405162461bcd60e51b8152600401610bcc906129cb565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610bcc906129cb565b6001600160a01b0382166000908152600f602052604090205460ff166115ce576019548110156115d2576115c3600a83611c26565b6115ce826000611bc7565b5050565b6115dc8282611bc7565b60185481106115f1576115ce600a8383612402565b6115ce600a83611c26565b6009546001600160a01b031633146116265760405162461bcd60e51b8152600401610bcc906129cb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116f9600a876124ab565b945060001993506000851261175b57600e5485111561172757600e546117209086906124f6565b935061175b565b600e54600a546000911061173c57600061174b565b600e54600a5461174b91611d94565b90506117578682611b76565b9450505b611764866112bd565b925061176f86610c76565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117b65750601254600160b01b900460ff165b156117cc575050600e54600092508291506118b5565b600e546000805a90506000805b89841080156117e757508582105b156118a457846117f681612a17565b95505085851061180557600094505b6000600a600001868154811061181d5761181d612a30565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661186a57611857816001611397565b1561186a578161186681612a17565b9250505b8261187481612a17565b93505060005a90508085111561189b576118986118918683611d94565b8790611945565b95505b93506117d99050565b600e85905590975095509193505050505b9193909250565b6000826000036118ce57506000610c07565b60006118da8385612a00565b9050826118e7858361296f565b1461193e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcc565b9392505050565b6000806119528385612a46565b90508381101561193e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcc565b6001600160a01b038316611a065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bcc565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bcc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602e60248201527f506570655265775f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610bcc565b505050565b60008184841115611b505760405162461bcd60e51b8152600401610bcc91906127be565b506000611b5d8486612a59565b95945050505050565b60008181811215610c0757600080fd5b600080611b838385612a6c565b905060008312158015611b965750838112155b80611bab5750600083128015611bab57508381125b61193e57600080fd5b600080821215611bc357600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611c06576000611bf48383611d94565b9050611c008482612533565b50505050565b80821015611b27576000611c1a8284611d94565b9050611c008482612597565b6001600160a01b038116600090815260038301602052604090205460ff16611c4c575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c9691612a59565b90506000846000018281548110611caf57611caf612a30565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cfe57611cfe612a30565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d3857611d38612a94565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d7857611d78612a30565b6000918252602090912001546001600160a01b03169392505050565b600061193e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2c565b600080611de2836112bd565b90508015612086576001600160a01b038316600090815260076020526040902054611e0d9082611945565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e92576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e82576040519150601f19603f3d011682016040523d82523d6000602084013e611e87565b606091505b505080915050611fec565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611efc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f209190612aaa565b81600081518110611f3357611f33612a30565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f6757611f67612a30565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611fad9060009086908c904290600401612b0b565b6000604051808303818588803b158015611fc657600080fd5b505af193505050508015611fd8575060015b611fe55760009150611fea565b600191505b505b8061203a576001600160a01b0385166000908152600760205260409020546120149084611d94565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161207591815260200190565b60405180910390a250909392505050565b50600092915050565b60008061209b836112bd565b90508015612086576001600160a01b0383166000908152600760205260408120546120c69083611945565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561214e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121729190612aaa565b8160008151811061218557612185612a30565b6001600160a01b0392831660209182029290920101526016548251911690829060019081106121b6576121b6612a30565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190612b40565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061226e90600090879030904290600401612b0b565b6000604051808303818588803b15801561228757600080fd5b505af193505050508015612299575060015b6122a657600092506123a9565b6016546040516370a0823160e01b81523060048201526000916123199184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e39190612b40565b905080156123a25760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239c9190612b59565b506123a7565b600093505b505b826123f8576001600160a01b0386166000908152600760205260409020546123d19085611d94565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612447576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124d65750600019610c07565b506001600160a01b03166000908152600291909101602052604090205490565b6000806125038385612b76565b9050600083121580156125165750838113155b80611bab5750600083128015611bab575083811361193e57600080fd5b61253d82826125db565b612577612558610cb8836005546118bc90919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124f6565b6001600160a01b0390921660009081526006602052604090209190915550565b6125a182826126ba565b6125776125bc610cb8836005546118bc90919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b76565b6001600160a01b0382166126315760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bcc565b60025461263e9082611945565b6002556001600160a01b0382166000908152602081905260409020546126649082611945565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b03821661271a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bcc565b61275781604051806060016040528060228152602001612b9e602291396001600160a01b0385166000908152602081905260409020549190611b2c565b6001600160a01b03831660009081526020819052604090205560025461277d9082611d94565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016126ae565b600060208083528351808285015260005b818110156127eb578581018301518582016040015282016127cf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461282157600080fd5b50565b60006020828403121561283657600080fd5b813561193e8161280c565b6000806040838503121561285457600080fd5b823561285f8161280c565b946020939093013593505050565b60008060006060848603121561288257600080fd5b833561288d8161280c565b9250602084013561289d8161280c565b929592945050506040919091013590565b801515811461282157600080fd5b6000602082840312156128ce57600080fd5b813561193e816128ae565b6000602082840312156128eb57600080fd5b5035919050565b6000806040838503121561290557600080fd5b82356129108161280c565b91506020830135612920816128ae565b809150509250929050565b6000806040838503121561293e57600080fd5b82356129498161280c565b915060208301356129208161280c565b634e487b7160e01b600052601160045260246000fd5b60008261298c57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129a557607f821691505b6020821081036129c557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610c0757610c07612959565b600060018201612a2957612a29612959565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c0757610c07612959565b81810381811115610c0757610c07612959565b8082018281126000831280158216821582161715612a8c57612a8c612959565b505092915050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612abc57600080fd5b815161193e8161280c565b600081518084526020808501945080840160005b83811015612b005781516001600160a01b031687529582019590820190600101612adb565b509495945050505050565b848152608060208201526000612b246080830186612ac7565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b5257600080fd5b5051919050565b600060208284031215612b6b57600080fd5b815161193e816128ae565b8181036000831280158383131683831282161715612b9657612b96612959565b509291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fbfe4c026278551bfd03e90eafdf2de5d85c44ebda80781656c7bedc9c19b0364736f6c63430008110033
Deployed Bytecode
0x6080604052600436106104fb5760003560e01c80637d32f3421161028c578063aa4704f31161015a578063d8032ed3116100cc578063f27fd25411610085578063f27fd25414610fdc578063f2fde38b14610ffc578063f5d3c79a1461101c578063f63743421461103c578063f8b45b0514611052578063fc6b151c1461106857600080fd5b8063d8032ed314610f08578063dd62ed3e14610f28578063e2f4560514610f6e578063e7841ec014610f84578063f11a24d314610f99578063f1c0ddff14610faf57600080fd5b8063b74e3b111161011e578063b74e3b1114610e5d578063ba079d4914610e7d578063bb8d513114610e9d578063d07a091c14610eb3578063d5e3725114610ed3578063d7b837dd14610ef357600080fd5b8063aa4704f314610d53578063acb2ad6f14610dab578063ad56c13c14610dc1578063b494298814610e18578063b62496f514610e2e57600080fd5b80639a7a23d6116101fe578063a0d82dc5116101b7578063a0d82dc514610c9d578063a457c2d714610cb3578063a694fc3a14610cd3578063a8b9d24014610cf3578063a9059cbb14610d13578063a9885de514610d3357600080fd5b80639a7a23d614610bf15780639c1b8af514610c115780639c3372ea14610c275780639c3b4fdc14610c475780639cefc1da14610c5d5780639ec1037e14610c7d57600080fd5b8063871c128d11610250578063871c128d14610b525780638ca2923a14610b725780638da5cb5b14610b885780638ea5220f14610ba657806395451c2914610bc657806395d89b4114610bdc57600080fd5b80637d32f34214610aa55780637fdde05c14610ad2578063837ae2d014610af25780638577a6d514610b12578063868730c714610b3257600080fd5b806349bd5a5e116103c957806364b0f6531161033b578063715018a6116102f4578063715018a614610a0057806372d8edf414610a1557806375829def14610a3557806375f0a87414610a5557806377a3b60914610a755780637928dd1d14610a8b57600080fd5b806364b0f6531461094b578063679ca6e9146109605780636843cd84146109805780636d48467b146109a0578063700bb191146109c057806370a08231146109e057600080fd5b80634fbee1931161038d5780634fbee193146108865780635124f874146108bf5780635a84c5eb146108d55780635c234bb6146108f55780635ebf4db91461090b5780635eee4bae1461092b57600080fd5b806349bd5a5e146107fc5780634a62bb651461081c5780634a74bb02146108365780634ada218b146108505780634e71d92d1461087157600080fd5b806321cbb0241161046d578063313ce56711610426578063313ce5671461073d5780633599bb171461075957806339509351146107795780633f407b841461079957806340ffdd80146107af578063435c89e4146107cf57600080fd5b806321cbb024146106835780632307b441146106b357806323b872dd146106d357806325cd3598146106f35780632c1f52161461070857806330bb4cff1461072857600080fd5b8063095ea7b3116104bf578063095ea7b3146105c85780630ef35b7e146105f85780631694505e1461061857806318160ddd146106385780631d7b1fb4146106575780631fa705311461066d57600080fd5b806303fd2a451461050757806305ca5f081461054457806306fdde031461056657806308dfe8a51461058857806309231602146105a857600080fd5b3661050257005b600080fd5b34801561051357600080fd5b50600854610527906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561055057600080fd5b5061056461055f366004614130565b611088565b005b34801561057257600080fd5b5061057b611159565b60405161053b9190614149565b34801561059457600080fd5b506105646105a33660046141ba565b6111eb565b3480156105b457600080fd5b506105646105c3366004614130565b611274565b3480156105d457600080fd5b506105e86105e33660046141f3565b611303565b604051901515815260200161053b565b34801561060457600080fd5b5061056461061336600461421f565b61131a565b34801561062457600080fd5b50600654610527906001600160a01b031681565b34801561064457600080fd5b506002545b60405190815260200161053b565b34801561066357600080fd5b50610649602a5481565b34801561067957600080fd5b50610649600a5481565b34801561068f57600080fd5b506105e861069e366004614241565b602c6020526000908152604090205460ff1681565b3480156106bf57600080fd5b506105646106ce366004614334565b6113ff565b3480156106df57600080fd5b506105e86106ee3660046143f6565b6115d0565b3480156106ff57600080fd5b50610527611639565b34801561071457600080fd5b50600d54610527906001600160a01b031681565b34801561073457600080fd5b506106496116ac565b34801561074957600080fd5b506040516012815260200161053b565b34801561076557600080fd5b50610564610774366004614437565b61171a565b34801561078557600080fd5b506105e86107943660046141f3565b6117a7565b3480156107a557600080fd5b5061064960095481565b3480156107bb57600080fd5b506105646107ca366004614437565b6117dd565b3480156107db57600080fd5b506106496107ea366004614130565b60236020526000908152604090205481565b34801561080857600080fd5b50600754610527906001600160a01b031681565b34801561082857600080fd5b506025546105e89060ff1681565b34801561084257600080fd5b50601d546105e89060ff1681565b34801561085c57600080fd5b506008546105e890600160b01b900460ff1681565b34801561087d57600080fd5b50610564611838565b34801561089257600080fd5b506105e86108a1366004614241565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156108cb57600080fd5b5061064960175481565b3480156108e157600080fd5b506105646108f0366004614130565b6118b0565b34801561090157600080fd5b5061064960165481565b34801561091757600080fd5b50610564610926366004614130565b61190b565b34801561093757600080fd5b50610564610946366004614130565b611966565b34801561095757600080fd5b506106496119a8565b34801561096c57600080fd5b5061056461097b366004614437565b6119f2565b34801561098c57600080fd5b5061064961099b366004614241565b611a2f565b3480156109ac57600080fd5b506105e86109bb366004614241565b611a9f565b3480156109cc57600080fd5b506105646109db366004614130565b611b0f565b3480156109ec57600080fd5b506106496109fb366004614241565b611be1565b348015610a0c57600080fd5b50610564611bfc565b348015610a2157600080fd5b50610564610a30366004614241565b611c70565b348015610a4157600080fd5b50610564610a50366004614241565b611ccc565b348015610a6157600080fd5b50600e54610527906001600160a01b031681565b348015610a8157600080fd5b5061064960195481565b348015610a9757600080fd5b50602b546105e89060ff1681565b348015610ab157600080fd5b50610649610ac0366004614241565b60226020526000908152604090205481565b348015610ade57600080fd5b50610564610aed3660046141ba565b611d81565b348015610afe57600080fd5b50610564610b0d366004614454565b611dd6565b348015610b1e57600080fd5b50610564610b2d366004614130565b611f80565b348015610b3e57600080fd5b50610564610b4d366004614437565b612037565b348015610b5e57600080fd5b50610564610b6d366004614130565b61206f565b348015610b7e57600080fd5b5061064960135481565b348015610b9457600080fd5b506005546001600160a01b0316610527565b348015610bb257600080fd5b50600f54610527906001600160a01b031681565b348015610bd257600080fd5b5061064960145481565b348015610be857600080fd5b5061057b6120eb565b348015610bfd57600080fd5b50610564610c0c3660046141ba565b6120fa565b348015610c1d57600080fd5b50610649601e5481565b348015610c3357600080fd5b50610564610c42366004614437565b612132565b348015610c5357600080fd5b50610649601a5481565b348015610c6957600080fd5b50610564610c78366004614437565b61218e565b348015610c8957600080fd5b50610564610c98366004614241565b612224565b348015610ca957600080fd5b50610649601b5481565b348015610cbf57600080fd5b506105e8610cce3660046141f3565b6122fb565b348015610cdf57600080fd5b50610564610cee366004614130565b61234a565b348015610cff57600080fd5b50610649610d0e366004614241565b61256d565b348015610d1f57600080fd5b506105e8610d2e3660046141f3565b6125a0565b348015610d3f57600080fd5b50610564610d4e3660046141ba565b6125ad565b348015610d5f57600080fd5b50610d96610d6e366004614241565b6001600160a01b03166000908152602260209081526040808320546021909252909120549091565b6040805192835260208301919091520161053b565b348015610db757600080fd5b50610649601c5481565b348015610dcd57600080fd5b50610de1610ddc366004614241565b612602565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161053b565b348015610e2457600080fd5b5061064960295481565b348015610e3a57600080fd5b506105e8610e49366004614241565b602080526000908152604090205460ff1681565b348015610e6957600080fd5b50610564610e78366004614130565b612692565b348015610e8957600080fd5b506105e8610e98366004614241565b612722565b348015610ea957600080fd5b5061064960125481565b348015610ebf57600080fd5b50610564610ece366004614241565b612755565b348015610edf57600080fd5b50610564610eee366004614437565b61284a565b348015610eff57600080fd5b506105646128cc565b348015610f1457600080fd5b50610564610f23366004614241565b612955565b348015610f3457600080fd5b50610649610f433660046144bc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610f7a57600080fd5b5061064960115481565b348015610f9057600080fd5b50610649612a18565b348015610fa557600080fd5b5061064960185481565b348015610fbb57600080fd5b50610649610fca366004614241565b60216020526000908152604090205481565b348015610fe857600080fd5b50610de1610ff7366004614130565b612a62565b34801561100857600080fd5b50610564611017366004614241565b612aa0565b34801561102857600080fd5b50610564611037366004614437565b612b8b565b34801561104857600080fd5b5061064960155481565b34801561105e57600080fd5b5061064960105481565b34801561107457600080fd5b50610564611083366004614130565b612bc3565b6005546001600160a01b031633146110bb5760405162461bcd60e51b81526004016110b2906144ea565b60405180910390fd5b6110cd81670de0b6b3a7640000614535565b905060006110e8600954600a54612c7890919063ffffffff16565b9050600061110b82611105600a5486612cde90919063ffffffff16565b90612d60565b905060006111288361110560095487612cde90919063ffffffff16565b905061113384612da2565b600a5461114090836130a2565b600a5560095461115090826130a2565b60095550505050565b6060600380546111689061454c565b80601f01602080910402602001604051908101604052809291908181526020018280546111949061454c565b80156111e15780601f106111b6576101008083540402835291602001916111e1565b820191906000526020600020905b8154815290600101906020018083116111c457829003601f168201915b5050505050905090565b6005546001600160a01b031633146112155760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016110b2906144ea565b60058110156112ef5760405162461bcd60e51b815260206004820152601860248201527f63616e206e65766572206265207365742062656c6f772035000000000000000060448201526064016110b2565b6112fd81633b9aca00614535565b60265550565b60006113103384846130e4565b5060015b92915050565b6005546001600160a01b031633146113445760405162461bcd60e51b81526004016110b2906144ea565b60008281526023602052604090205481900361135f57600080fd5b60648111156113b05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e6720626f6e75732063616e27742065786365656420313030000060448201526064016110b2565b60008281526023602090815260409182902083905581518481529081018390527f065c0eec5c5d031ee25323575d53db5536226ab058b74d8bdb03c517dd4f605d910160405180910390a15050565b6005546001600160a01b031633146114295760405162461bcd60e51b81526004016110b2906144ea565b805182511461147a5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016110b2565b60c8825111156114d75760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016110b2565b60005b82518110156115cb5760008382815181106114f7576114f7614586565b60200260200101519050600083838151811061151557611515614586565b6020026020010151670de0b6b3a76400006115309190614535565b905061153d338383613209565b600d546001600160a01b031663e30443bc8361155881611be1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561159e57600080fd5b505af11580156115b2573d6000803e3d6000fd5b50505050505080806115c39061459c565b9150506114da565b505050565b60006115dd848484613312565b61162f843361162a856040518060600160405280602881526020016147f1602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613cf8565b6130e4565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa158015611683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906145b5565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906145d2565b6005546001600160a01b031633146117445760405162461bcd60e51b81526004016110b2906144ea565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b15801561178c57600080fd5b505af11580156117a0573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161131091859061162a9086612c78565b6005546001600160a01b031633146118075760405162461bcd60e51b81526004016110b2906144ea565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd8090602401611772565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ad91906145eb565b50565b6005546001600160a01b031633146118da5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb90602401611772565b6005546001600160a01b031633146119355760405162461bcd60e51b81526004016110b2906144ea565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db990602401611772565b6005546001600160a01b031633146119905760405162461bcd60e51b81526004016110b2906144ea565b6119a281670de0b6b3a7640000614535565b60115550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b6005546001600160a01b03163314611a1c5760405162461bcd60e51b81526004016110b2906144ea565b6025805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131491906145d2565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611aeb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131491906145eb565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b869190614608565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611c265760405162461bcd60e51b81526004016110b2906144ea565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611c9a5760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401611772565b6005546001600160a01b03163314611cf65760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601f60205260409020805460ff19166001179055506118ad81612aa0565b6005546001600160a01b03163314611dab5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e005760405162461bcd60e51b81526004016110b2906144ea565b60168a90556017889055601886905560198490556013899055601487905560158590556012839055601a829055601b819055611e4881611e428981878a612c78565b90612c78565b600b81905550611e71601a54611e42601754611e42601854601954612c7890919063ffffffff16565b600c55600b54600f10801590611e8a5750600f600c5411155b611ee75760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b60648201526084016110b2565b601354601454601554601254601654601754601854601954601a54601b54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611faa5760405162461bcd60e51b81526004016110b2906144ea565b6005811115611ffb5760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016110b2565b601c8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d63990604401611772565b6005546001600160a01b031633146120995760405162461bcd60e51b81526004016110b2906144ea565b62030d4081101580156120af5750620f42408111155b6120b857600080fd5b601e5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601e55565b6060600480546111689061454c565b6005546001600160a01b031633146121245760405162461bcd60e51b81526004016110b2906144ea565b61212e8282613d32565b5050565b6005546001600160a01b0316331461215c5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea90602401611772565b6005546001600160a01b031633146121b85760405162461bcd60e51b81526004016110b2906144ea565b801515600860159054906101000a900460ff161515036121d757600080fd5b60088054821515600160a81b0260ff60a81b199091161790556040517f0d240c24014ec8c204fc1bdcc286f7d01fd2ab6a07c558a9b2d3f12904323a879061202c90831515815260200190565b6005546001600160a01b0316331461224e5760405162461bcd60e51b81526004016110b2906144ea565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b15801561229557600080fd5b505af11580156122a9573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050826122ca81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611772565b6000611310338461162a85604051806060016040528060258152602001614819602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613cf8565b600854600160a81b900460ff1661239c5760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016110b2565b60008181526023602052604081205490036123f95760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207374616b696e67206475726174696f6e000000000000000060448201526064016110b2565b6124034282612c78565b336000908152602260205260409020541061246c5760405162461bcd60e51b8152602060048201526024808201527f616c7265616479207374616b656420666f722061206c6f6e67657220647572616044820152633a34b7b760e11b60648201526084016110b2565b6000818152602360209081526040808320543384526021909252909120556124944282612c78565b33600081815260226020526040902091909155600d546001600160a01b03169063e30443bc906124c381613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506125283390565b6001600160a01b03167f13dd201d7da4f9b31a9064a09abc1a6ce420dacd837a77abafaec5bd9d28d2c88260405161256291815260200190565b60405180910390a250565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611a5e565b6000611310338484613312565b6005546001600160a01b031633146125d75760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b03919091166000908152602c60205260409020805460ff1916911515919091179055565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa15801561265a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267e9190614636565b949c939b5091995097509550909350915050565b6005546001600160a01b031633146126bc5760405162461bcd60e51b81526004016110b2906144ea565b61012c81111561271d5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016110b2565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d4990602401611ace565b6005546001600160a01b0316331461277f5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b0381811660008181526024602081815260408084208054600160ff199182168117909255601f9093529381902080549092169093179055600d54915163031e79db60e41b815260048101939093529216916331e79db09101600060405180830381600087803b1580156127f857600080fd5b505af115801561280c573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c59250602001905061202c565b6005546001600160a01b031633146128745760405162461bcd60e51b81526004016110b2906144ea565b601d5481151560ff90911615150361288b57600080fd5b601d805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef9060200161202c565b6005546001600160a01b031633146128f65760405162461bcd60e51b81526004016110b2906144ea565b602b5460ff161561290657600080fd5b436029556008805460ff60b01b1916600160b01b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1602b805460ff19166001179055565b6005546001600160a01b0316331461297f5760405162461bcd60e51b81526004016110b2906144ea565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b1580156129c657600080fd5b505af11580156129da573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d9250602001905061202c565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa1580156116f6573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd9060240161263d565b6005546001600160a01b03163314612aca5760405162461bcd60e51b81526004016110b2906144ea565b6001600160a01b038116612b2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016110b2565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a0490604401611772565b6005546001600160a01b03163314612bed5760405162461bcd60e51b81526004016110b2906144ea565b612bff81670de0b6b3a7640000614535565b90506103e8600254612c119190614689565b811015612c735760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016110b2565b601055565b600080612c8583856146ab565b905083811015612cd75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016110b2565b9392505050565b600082600003612cf057506000611314565b6000612cfc8385614535565b905082612d098583614689565b14612cd75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016110b2565b6000612cd783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e53565b80600003612dad5750565b612db681613e81565b6000612dcf600954600a54612c7890919063ffffffff16565b601954909150600190819081906000908190819015612e3057612e2d601a54601754601954612dfe91906146ab565b612e0891906146ab565b611105601954612e278b611105600a5447612cde90919063ffffffff16565b90612cde565b91505b60125415612e7a57612e77601b54601454601254612e4e91906146ab565b612e5891906146ab565b611105601254612e278b61110560095447612cde90919063ffffffff16565b90505b612e848282612c78565b92508215612ee457600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612ed9576040519150601f19603f3d011682016040523d82523d6000602084013e612ede565b606091505b50909650505b6000612efd601a54601754612c7890919063ffffffff16565b601b54601454612f0c91612c78565b612f1691906146ab565b905060008115612f2d57612f2a4783612d60565b90505b600081612f47601454601754612c7890919063ffffffff16565b612f519190614535565b9050600082612f6d601b54601a54612c7890919063ffffffff16565b612f779190614535565b90508115612fd757600e546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612fcc576040519150601f19603f3d011682016040523d82523d6000602084013e612fd1565b606091505b50909950505b801561303557600f546040516001600160a01b03909116908290600081818185875af1925050503d806000811461302a576040519150601f19603f3d011682016040523d82523d6000602084013e61302f565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd08761306183856146ab565b8c801561306b57508b5b801561307457508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b6000612cd783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf8565b6001600160a01b0383166131465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016110b2565b6001600160a01b0382166131a75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016110b2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661322f5760405162461bcd60e51b81526004016110b2906146be565b6001600160a01b0382166132555760405162461bcd60e51b81526004016110b290614703565b613292816040518060600160405280602681526020016147cb602691396001600160a01b0386166000908152602081905260409020549190613cf8565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546132c19082612c78565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016131fc565b6001600160a01b0383166133385760405162461bcd60e51b81526004016110b2906146be565b6001600160a01b03821661335e5760405162461bcd60e51b81526004016110b290614703565b6001600160a01b038316600090815260246020526040812054819081908190819060ff166133df57600854600160b01b900460ff166133df5760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016110b2565b856000036133fd576133f388886000613209565b5050505050505050565b600854600160a01b900460ff1615801561343057506001600160a01b0388166000908152601f602052604090205460ff16155b801561345557506001600160a01b0387166000908152601f602052604090205460ff16155b15613bef576001600160a01b03808816600090815260208052604080822054928b16825290205460ff91821691168015801561348f575081155b156135d55760006134b06064611105601c548c612cde90919063ffffffff16565b90506134bc89826130a2565b98506134c98b3083613209565b6134d48b8b8b613209565b600d546001600160a01b031663e30443bc8c6134ef81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b61356a81613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b505050505050505050505050505050565b801580156135ec5750600854600160a81b900460ff165b156136a3576001600160a01b038a166000908152602260205260409020544210156136595760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320617265207374616b656420616e64206c6f636b65642100000060448201526064016110b2565b6001600160a01b038a166000908152602260205260409020541561369e576001600160a01b038a16600090815260226020908152604080832083905560219091528120555b6138fc565b811561374c57601254601354601454601554601b54602554949b509299509097509550935060ff161561369e57602a54326000908152602860205260409020546136ed91906146ab565b4210156137355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016110b2565b3260009081526028602052604090204290556138fc565b80156138fc57601954601654601754601854601a54602554949b509299509097509550935060ff1615613885576029546137879060026146ab565b43116137ca5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016110b2565b6026543a111561381c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016110b2565b326000908152602760205260409020544390036138725760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016110b2565b3260009081526027602052604090204390555b60006138908a611be1565b6010549091506138a08a836146ab565b11156138fa5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016110b2565b505b600061391d8461390c88886146ab565b61391691906146ab565b8990612c78565b9050600061392a30611be1565b6011549091508110801590819061395957506001600160a01b038d16600090815260208052604090205460ff16155b15613a72576008805460ff60a01b1916600160a01b179055601d5460ff1680156139835750600087115b801561399157506000600c54115b15613a435760006139af600954600a54612c7890919063ffffffff16565b905060006139cc82611105600a5487612cde90919063ffffffff16565b905060006139e98361110560095488612cde90919063ffffffff16565b90506000613a06600c546111058d86612cde90919063ffffffff16565b90506000613a23600b546111058e86612cde90919063ffffffff16565b90506000613a318284612c78565b9050613a3c81613fdb565b5050505050505b6000613a4e30611be1565b9050613a5981612da2565b506000600a8190556009556008805460ff60a01b191690555b6000613a8360646111058e87612cde565b905060008a15613ad6576064613a998e8d612cde565b613aa39190614689565b9050613ac58f600860009054906101000a90046001600160a01b031683613209565b600254613ad290826130a2565b6002555b613aea613ae382846146ab565b8e906130a2565b9c508615613b0757600954613aff9083612c78565b600955613b18565b600a54613b149083612c78565b600a555b613b238f3084613209565b601e54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015613b90575060408051601f3d908101601f19168201909252613b8d91810190614608565b60015b15613be65760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b613bfa888888613209565b600d546001600160a01b031663e30443bc89613c1581613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905088613c9081613dfa565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613cd657600080fd5b505af1158015613cea573d6000803e3d6000fd5b505050505050505050505050565b60008184841115613d1c5760405162461bcd60e51b81526004016110b29190614149565b506000613d298486614746565b95945050505050565b6001600160a01b03821660009081526020805260409020805460ff19168215801591909117909155613dbe57600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015613da557600080fd5b505af1158015613db9573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600854600090600160a81b900460ff16613e1c57613e1782611be1565b611314565b6001600160a01b0382166000908152602160205260409020546113149060649061110590613e4a9083612c78565b612e2786611be1565b60008183613e745760405162461bcd60e51b81526004016110b29190614149565b506000613d298486614689565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613eb657613eb6614586565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3391906145b5565b81600181518110613f4657613f46614586565b6001600160a01b039283166020918202929092010152600654613f6c91309116846130e4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613fa5908590600090869030904290600401614759565b600060405180830381600087803b158015613fbf57600080fd5b505af1158015613fd3573d6000803e3d6000fd5b505050505050565b6000613fe8826002612d60565b90506000613ff683836130a2565b90504761400283613e81565b600061400e47836130a2565b905061401a8382614062565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b60065461407a9030906001600160a01b0316846130e4565b6006546001600160a01b031663f305d7198230856000806140a36005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561410b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117a09190614608565b60006020828403121561414257600080fd5b5035919050565b600060208083528351808285015260005b818110156141765785810183015185820160400152820161415a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118ad57600080fd5b80151581146118ad57600080fd5b600080604083850312156141cd57600080fd5b82356141d881614197565b915060208301356141e8816141ac565b809150509250929050565b6000806040838503121561420657600080fd5b823561421181614197565b946020939093013593505050565b6000806040838503121561423257600080fd5b50508035926020909101359150565b60006020828403121561425357600080fd5b8135612cd781614197565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561429d5761429d61425e565b604052919050565b600067ffffffffffffffff8211156142bf576142bf61425e565b5060051b60200190565b600082601f8301126142da57600080fd5b813560206142ef6142ea836142a5565b614274565b82815260059290921b8401810191818101908684111561430e57600080fd5b8286015b848110156143295780358352918301918301614312565b509695505050505050565b6000806040838503121561434757600080fd5b823567ffffffffffffffff8082111561435f57600080fd5b818501915085601f83011261437357600080fd5b813560206143836142ea836142a5565b82815260059290921b840181019181810190898411156143a257600080fd5b948201945b838610156143c95785356143ba81614197565b825294820194908201906143a7565b965050860135925050808211156143df57600080fd5b506143ec858286016142c9565b9150509250929050565b60008060006060848603121561440b57600080fd5b833561441681614197565b9250602084013561442681614197565b929592945050506040919091013590565b60006020828403121561444957600080fd5b8135612cd7816141ac565b6000806000806000806000806000806101408b8d03121561447457600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080604083850312156144cf57600080fd5b82356144da81614197565b915060208301356141e881614197565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176113145761131461451f565b600181811c9082168061456057607f821691505b60208210810361458057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016145ae576145ae61451f565b5060010190565b6000602082840312156145c757600080fd5b8151612cd781614197565b6000602082840312156145e457600080fd5b5051919050565b6000602082840312156145fd57600080fd5b8151612cd7816141ac565b60008060006060848603121561461d57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561464f57600080fd5b865161465a81614197565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b6000826146a657634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156113145761131461451f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156113145761131461451f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156147a95784516001600160a01b031683529383019391830191600101614784565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122011e3ee85ab34f1a10630ff2261ca3b7d5fb9390daa916e57ce665d331833833d64736f6c63430008110033
Deployed Bytecode Sourcemap
25318:28671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25480:64;;;;;;;;;;-1:-1:-1;25480:64:0;;;;-1:-1:-1;;;;;25480:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;25480:64:0;;;;;;;;50895:443;;;;;;;;;;-1:-1:-1;50895:443:0;;;;;:::i;:::-;;:::i;:::-;;5588:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33573:181::-;;;;;;;;;;-1:-1:-1;33573:181:0;;;;;:::i;:::-;;:::i;34568:164::-;;;;;;;;;;-1:-1:-1;34568:164:0;;;;;:::i;:::-;;:::i;6643:210::-;;;;;;;;;;-1:-1:-1;6643:210:0;;;;;:::i;:::-;;:::i;:::-;;;2091:14:1;;2084:22;2066:41;;2054:2;2039:18;6643:210:0;1926:187:1;32100:326:0;;;;;;;;;;-1:-1:-1;32100:326:0;;;;;:::i;:::-;;:::i;25395:41::-;;;;;;;;;;-1:-1:-1;25395:41:0;;;;-1:-1:-1;;;;;25395:41:0;;;5909:108;;;;;;;;;;-1:-1:-1;5997:12:0;;5909:108;;;2752:25:1;;;2740:2;2725:18;5909:108:0;2606:177:1;27541:33:0;;;;;;;;;;;;;;;;25700:28;;;;;;;;;;;;;;;;27645:55;;;;;;;;;;-1:-1:-1;27645:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53349:637;;;;;;;;;;-1:-1:-1;53349:637:0;;;;;:::i;:::-;;:::i;6861:454::-;;;;;;;;;;-1:-1:-1;6861:454:0;;;;;:::i;:::-;;:::i;49878:114::-;;;;;;;;;;;;;:::i;25810:45::-;;;;;;;;;;-1:-1:-1;25810:45:0;;;;-1:-1:-1;;;;;25810:45:0;;;39581:141;;;;;;;;;;;;;:::i;31962:93::-;;;;;;;;;;-1:-1:-1;31962:93:0;;32045:2;6377:36:1;;6365:2;6350:18;31962:93:0;6235:184:1;41924:119:0;;;;;;;;;;-1:-1:-1;41924:119:0;;;;;:::i;:::-;;:::i;7323:300::-;;;;;;;;;;-1:-1:-1;7323:300:0;;;;;:::i;:::-;;:::i;25664:29::-;;;;;;;;;;;;;;;;36822:121;;;;;;;;;;-1:-1:-1;36822:121:0;;;;;:::i;:::-;;:::i;26928:49::-;;;;;;;;;;-1:-1:-1;26928:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;25445:28;;;;;;;;;;-1:-1:-1;25445:28:0;;;;-1:-1:-1;;;;;25445:28:0;;;27190:33;;;;;;;;;;-1:-1:-1;27190:33:0;;;;;;;;26462:40;;;;;;;;;;-1:-1:-1;26462:40:0;;;;;;;;25621:34;;;;;;;;;;-1:-1:-1;25621:34:0;;;;-1:-1:-1;;;25621:34:0;;;;;;41293:103;;;;;;;;;;;;;:::i;39730:126::-;;;;;;;;;;-1:-1:-1;39730:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39820:28:0;39796:4;39820:28;;;:19;:28;;;;;;;;;39730:126;26254:31;;;;;;;;;;;;;;;;50000:183;;;;;;;;;;-1:-1:-1;50000:183:0;;;;;:::i;:::-;;:::i;26221:26::-;;;;;;;;;;;;;;;;50191:175;;;;;;;;;;-1:-1:-1;50191:175:0;;;;;:::i;:::-;;:::i;36178:120::-;;;;;;;;;;-1:-1:-1;36178:120:0;;;;;:::i;:::-;;:::i;41542:142::-;;;;;;;;;;;;;:::i;34440:99::-;;;;;;;;;;-1:-1:-1;34440:99:0;;;;;:::i;:::-;;:::i;40056:171::-;;;;;;;;;;-1:-1:-1;40056:171:0;;;;;:::i;:::-;;:::i;42051:185::-;;;;;;;;;;-1:-1:-1;42051:185:0;;;;;:::i;:::-;;:::i;40875:410::-;;;;;;;;;;-1:-1:-1;40875:410:0;;;;;:::i;:::-;;:::i;6025:177::-;;;;;;;;;;-1:-1:-1;6025:177:0;;;;;:::i;:::-;;:::i;13002:148::-;;;;;;;;;;;;;:::i;33803:127::-;;;;;;;;;;-1:-1:-1;33803:127:0;;;;;:::i;:::-;;:::i;37488:208::-;;;;;;;;;;-1:-1:-1;37488:208:0;;;;;:::i;:::-;;:::i;25864:38::-;;;;;;;;;;-1:-1:-1;25864:38:0;;;;-1:-1:-1;;;;;25864:38:0;;;26329:28;;;;;;;;;;;;;;;;27606:32;;;;;;;;;;-1:-1:-1;27606:32:0;;;;;;;;26870:51;;;;;;;;;;-1:-1:-1;26870:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;34231:170;;;;;;;;;;-1:-1:-1;34231:170:0;;;;;:::i;:::-;;:::i;37946:1429::-;;;;;;;;;;-1:-1:-1;37946:1429:0;;;;;:::i;:::-;;:::i;37704:234::-;;;;;;;;;;-1:-1:-1;37704:234:0;;;;;:::i;:::-;;:::i;41692:109::-;;;;;;;;;;-1:-1:-1;41692:109:0;;;;;:::i;:::-;;:::i;37239:241::-;;;;;;;;;;-1:-1:-1;37239:241:0;;;;;:::i;:::-;;:::i;26110:27::-;;;;;;;;;;;;;;;;12788:79;;;;;;;;;;-1:-1:-1;12853:6:0;;-1:-1:-1;;;;;12853:6:0;12788:79;;25909:32;;;;;;;;;;-1:-1:-1;25909:32:0;;;;-1:-1:-1;;;;;25909:32:0;;;26144;;;;;;;;;;;;;;;;5696:104;;;;;;;;;;;;;:::i;36522:163::-;;;;;;;;;;-1:-1:-1;36522:163:0;;;;;:::i;:::-;;:::i;26560:41::-;;;;;;;;;;;;;;;;36693:121;;;;;;;;;;-1:-1:-1;36693:121:0;;;;;:::i;:::-;;:::i;26364:24::-;;;;;;;;;;;;;;;;35298:176;;;;;;;;;;-1:-1:-1;35298:176:0;;;;;:::i;:::-;;:::i;33968:201::-;;;;;;;;;;-1:-1:-1;33968:201:0;;;;;:::i;:::-;;:::i;26395:25::-;;;;;;;;;;;;;;;;7631:400;;;;;;;;;;-1:-1:-1;7631:400:0;;;;;:::i;:::-;;:::i;35482:662::-;;;;;;;;;;-1:-1:-1;35482:662:0;;;;;:::i;:::-;;:::i;39864:184::-;;;;;;;;;;-1:-1:-1;39864:184:0;;;;;:::i;:::-;;:::i;6210:216::-;;;;;;;;;;-1:-1:-1;6210:216:0;;;;;:::i;:::-;;:::i;32777:143::-;;;;;;;;;;-1:-1:-1;32777:143:0;;;;;:::i;:::-;;:::i;39383:190::-;;;;;;;;;;-1:-1:-1;39383:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;39516:25:0;39474:7;39516:25;;;:16;:25;;;;;;;;;39543:12;:21;;;;;;;39516:25;;39383:190;;;;;7872:25:1;;;7928:2;7913:18;;7906:34;;;;7845:18;39383:190:0;7698:248:1;26427:26:0;;;;;;;;;;;;;;;;40235:307;;;;;;;;;;-1:-1:-1;40235:307:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8252:32:1;;;8234:51;;8316:2;8301:18;;8294:34;;;;8344:18;;;8337:34;;;;8402:2;8387:18;;8380:34;8445:3;8430:19;;8423:35;8272:3;8474:19;;8467:35;8221:3;8206:19;40235:307:0;7951:557:1;27508:26:0;;;;;;;;;;;;;;;;26724:57;;;;;;;;;;-1:-1:-1;26724:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34819:174;;;;;;;;;;-1:-1:-1;34819:174:0;;;;;:::i;:::-;;:::i;42244:127::-;;;;;;;;;;-1:-1:-1;42244:127:0;;;;;:::i;:::-;;:::i;26074:29::-;;;;;;;;;;;;;;;;33257:268;;;;;;;;;;-1:-1:-1;33257:268:0;;;;;:::i;:::-;;:::i;36306:208::-;;;;;;;;;;-1:-1:-1;36306:208:0;;;;;:::i;:::-;;:::i;32936:250::-;;;;;;;;;;;;;:::i;49712:158::-;;;;;;;;;;-1:-1:-1;49712:158:0;;;;;:::i;:::-;;:::i;6434:201::-;;;;;;;;;;-1:-1:-1;6434:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;6600:18:0;;;6568:7;6600:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6434:201;26034:33;;;;;;;;;;;;;;;;41404:130;;;;;;;;;;;;;:::i;26292:30::-;;;;;;;;;;;;;;;;26816:47;;;;;;;;;;-1:-1:-1;26816:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;40550:317;;;;;;;;;;-1:-1:-1;40550:317:0;;;;;:::i;:::-;;:::i;13158:281::-;;;;;;;;;;-1:-1:-1;13158:281:0;;;;;:::i;:::-;;:::i;41809:107::-;;;;;;;;;;-1:-1:-1;41809:107:0;;;;;:::i;:::-;;:::i;26183:31::-;;;;;;;;;;;;;;;;26003:24;;;;;;;;;;;;;;;;35063:221;;;;;;;;;;-1:-1:-1;35063:221:0;;;;;:::i;:::-;;:::i;50895:443::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;;;;;;;;;50983:17:::1;:6:::0;50993::::1;50983:17;:::i;:::-;50974:26;;51011:19;51033:25;51047:10;;51033:9;;:13;;:25;;;;:::i;:::-;51011:47;;51069:15;51087:38;51113:11;51087:21;51098:9;;51087:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;51069:56;;51136:16;51155:39;51182:11;51155:22;51166:10;;51155:6;:10;;:22;;;;:::i;:39::-;51136:58;;51207:28;51228:6;51207:20;:28::i;:::-;51260:9;::::0;:22:::1;::::0;51274:7;51260:13:::1;:22::i;:::-;51248:9;:34:::0;51306:10:::1;::::0;:24:::1;::::0;51321:8;51306:14:::1;:24::i;:::-;51293:10;:37:::0;-1:-1:-1;;;;50895:443:0:o;5588:100::-;5642:13;5675:5;5668:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5588:100;:::o;33573:181::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33657:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;33657:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33712:34;;2066:41:1;;;33712:34:0::1;::::0;2039:18:1;33712:34:0::1;;;;;;;33573:181:::0;;:::o;34568:164::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;34654:1:::1;34646:4;:9;;34638:46;;;::::0;-1:-1:-1;;;34638:46:0;;10159:2:1;34638:46:0::1;::::0;::::1;10141:21:1::0;10198:2;10178:18;;;10171:30;10237:26;10217:18;;;10210:54;10281:18;;34638:46:0::1;9957:348:1::0;34638:46:0::1;34711:13;:4:::0;34718:6:::1;34711:13;:::i;:::-;34695;:29:::0;-1:-1:-1;34568:164:0:o;6643:210::-;6762:4;6784:39;174:10;6807:7;6816:6;6784:8;:39::i;:::-;-1:-1:-1;6841:4:0;6643:210;;;;;:::o;32100:326::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;32222:24:::1;::::0;;;:14:::1;:24;::::0;;;;;:33;;;32214:42:::1;;;::::0;::::1;;32284:3;32275:5;:12;;32267:55;;;::::0;-1:-1:-1;;;32267:55:0;;10512:2:1;32267:55:0::1;::::0;::::1;10494:21:1::0;10551:2;10531:18;;;10524:30;10590:32;10570:18;;;10563:60;10640:18;;32267:55:0::1;10310:354:1::0;32267:55:0::1;32333:24;::::0;;;:14:::1;:24;::::0;;;;;;;;:32;;;32381:37;;7872:25:1;;;7913:18;;;7906:34;;;32381:37:0::1;::::0;7845:18:1;32381:37:0::1;;;;;;;32100:326:::0;;:::o;53349:637::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;53521:6:::1;:13;53496:14;:21;:38;53488:80;;;::::0;-1:-1:-1;;;53488:80:0;;10871:2:1;53488:80:0::1;::::0;::::1;10853:21:1::0;10910:2;10890:18;;;10883:30;10949:32;10929:18;;;10922:60;10999:18;;53488:80:0::1;10669:354:1::0;53488:80:0::1;53612:3;53587:14;:21;:28;;53579:75;;;::::0;-1:-1:-1;;;53579:75:0;;11230:2:1;53579:75:0::1;::::0;::::1;11212:21:1::0;11269:2;11249:18;;;11242:30;11308:34;11288:18;;;11281:62;-1:-1:-1;;;11359:18:1;;;11352:32;11401:19;;53579:75:0::1;11028:398:1::0;53579:75:0::1;53670:9;53665:314;53689:14;:21;53685:1;:25;53665:314;;;53732:14;53749;53764:1;53749:17;;;;;;;;:::i;:::-;;;;;;;53732:34;;53781:21;53805:6;53812:1;53805:9;;;;;;;;:::i;:::-;;;;;;;53818:6;53805:20;;;;:::i;:::-;53781:44;;53840:50;53856:10;53868:6;53876:13;53840:15;:50::i;:::-;53905:15;::::0;-1:-1:-1;;;;;53905:15:0::1;:26;53940:6:::0;53949:17:::1;53940:6:::0;53949:9:::1;:17::i;:::-;53905:62;::::0;-1:-1:-1;;;;;;53905:62:0::1;::::0;;;;;;-1:-1:-1;;;;;11763:32:1;;;53905:62:0::1;::::0;::::1;11745:51:1::0;11812:18;;;11805:34;11718:18;;53905:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53717:262;;53712:3;;;;;:::i;:::-;;;;53665:314;;;;53349:637:::0;;:::o;6861:454::-;7001:4;7018:36;7028:6;7036:9;7047:6;7018:9;:36::i;:::-;7065:220;7088:6;174:10;7136:138;7192:6;7136:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7136:19:0;;;;;;:11;:19;;;;;;;;174:10;7136:33;;;;;;;;;;:37;:138::i;:::-;7065:8;:220::i;:::-;-1:-1:-1;7303:4:0;6861:454;;;;;:::o;49878:114::-;49952:15;;:32;;;-1:-1:-1;;;49952:32:0;;;;49925:7;;-1:-1:-1;;;;;49952:15:0;;:30;;:32;;;;;;;;;;;;;;:15;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49945:39;;49878:114;:::o;39581:141::-;39671:15;;:43;;;-1:-1:-1;;;39671:43:0;;;;39644:7;;-1:-1:-1;;;;;39671:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41924:119::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;41994:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;41994:41:0;;2091:14:1;;2084:22;41994:41:0::1;::::0;::::1;2066::1::0;-1:-1:-1;;;;;41994:15:0;;::::1;::::0;:34:::1;::::0;2039:18:1;;41994:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41924:119:::0;:::o;7323:300::-;174:10;7438:4;7532:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7532:34:0;;;;;;;;;;7438:4;;7460:133;;7510:7;;7532:50;;7571:10;7532:38;:50::i;36822:121::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;36892:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;36892:43:0;;2091:14:1;;2084:22;36892:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;36892:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;36892:43:0::1;1926:187:1::0;41293:103:0;41330:15;;:58;;-1:-1:-1;;;41330:58:0;;41369:10;41330:58;;;12619:51:1;41330:15:0;12686:18:1;;;12679:50;-1:-1:-1;;;;;41330:15:0;;;;:30;;12592:18:1;;41330:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41293:103::o;50000:183::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;50114:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;50114:61:0;;::::1;::::0;::::1;2752:25:1::0;;;-1:-1:-1;;;;;50114:15:0;;::::1;::::0;:54:::1;::::0;2725:18:1;;50114:61:0::1;2606:177:1::0;50191:175:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;50301:15:::1;::::0;:57:::1;::::0;-1:-1:-1;;;50301:57:0;;::::1;::::0;::::1;2752:25:1::0;;;-1:-1:-1;;;;;50301:15:0;;::::1;::::0;:50:::1;::::0;2725:18:1;;50301:57:0::1;2606:177:1::0;36178:120:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;36273:17:::1;:6:::0;36283::::1;36273:17;:::i;:::-;36252:18;:38:::0;-1:-1:-1;36178:120:0:o;41542:142::-;41635:15;;:41;;;-1:-1:-1;;;41635:41:0;;;;41608:7;;-1:-1:-1;;;;;41635:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;34440:99;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;34509:14:::1;:22:::0;;-1:-1:-1;;34509:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34440:99::o;40056:171::-;40185:15;;:34;;-1:-1:-1;;;40185:34:0;;-1:-1:-1;;;;;178:32:1;;;40185:34:0;;;160:51:1;40153:7:0;;40185:15;;:25;;133:18:1;;40185:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;42051:185::-;42180:15;;:48;;-1:-1:-1;;;42180:48:0;;-1:-1:-1;;;;;178:32:1;;;42180:48:0;;;160:51:1;42151:4:0;;42180:15;;:39;;133:18:1;;42180:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40875:410::-;41057:15;;:28;;-1:-1:-1;;;;;;41057:28:0;;;;;2752:25:1;;;40955:18:0;;;;;;-1:-1:-1;;;;;41057:15:0;;:23;;2725:18:1;;41057:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41101:176;;;13532:25:1;;;13588:2;13573:18;;13566:34;;;13616:18;;;13609:34;;;13674:2;13659:18;;13652:34;;;40940:145:0;;-1:-1:-1;40940:145:0;;-1:-1:-1;40940:145:0;-1:-1:-1;41257:9:0;;41219:5;;41101:176;;13519:3:1;13504:19;41101:176:0;;;;;;;40929:356;;;40875:410;:::o;6025:177::-;-1:-1:-1;;;;;6176:18:0;6144:7;6176:18;;;;;;;;;;;;6025:177::o;13002:148::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;13093:6:::1;::::0;13072:40:::1;::::0;13109:1:::1;::::0;-1:-1:-1;;;;;13093:6:0::1;::::0;13072:40:::1;::::0;13109:1;;13072:40:::1;13123:6;:19:::0;;-1:-1:-1;;;;;;13123:19:0::1;::::0;;13002:148::o;33803:127::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;33877:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;33877:45:0;;-1:-1:-1;;;;;178:32:1;;;33877:45:0::1;::::0;::::1;160:51:1::0;33877:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;33877:45:0::1;14:203:1::0;37488:208:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;37557:15:::1;::::0;:46:::1;::::0;-1:-1:-1;;;37557:46:0;;-1:-1:-1;;;;;178:32:1;;;37557:46:0::1;::::0;::::1;160:51:1::0;37557:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;37557:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;37614:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;37614:36:0::1;37646:4;37614:36;::::0;;-1:-1:-1;37661:27:0::1;37634:8:::0;37661:17:::1;:27::i;34231:170::-:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34343:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;34343:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34231:170::o;37946:1429::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;38290:11:::1;:21:::0;;;38322:16:::1;:31:::0;;;38364:15:::1;:30:::0;;;38405:13:::1;:26:::0;;;38442:12:::1;:23:::0;;;38476:17:::1;:33:::0;;;38520:16:::1;:32:::0;;;38563:14:::1;:28:::0;;;38602:9:::1;:18:::0;;;38631:10:::1;:20:::0;;;38680:117:::1;38644:7:::0;38680:87:::1;38496:13:::0;38680:87;38580:11;38539:13;38680:32:::1;:50::i;:::-;:68:::0;::::1;:87::i;:117::-;38664:13;:133;;;;38825:113;38928:9;;38825:84;38892:16;;38825:48;38857:15;;38825:13;;:31;;:48;;;;:::i;:113::-;38810:12;:128:::0;38959:13:::1;::::0;38976:2:::1;-1:-1:-1::0;38959:19:0;::::1;::::0;:41:::1;;;38998:2;38982:12;;:18;;38959:41;38951:94;;;::::0;-1:-1:-1;;;38951:94:0;;13899:2:1;38951:94:0::1;::::0;::::1;13881:21:1::0;13938:2;13918:18;;;13911:30;13977:34;13957:18;;;13950:62;-1:-1:-1;;;14028:18:1;;;14021:38;14076:19;;38951:94:0::1;13697:404:1::0;38951:94:0::1;39088:12;::::0;39115:17:::1;::::0;39147:16:::1;::::0;39178:14:::1;::::0;39207:11:::1;::::0;39233:16:::1;::::0;39264:15:::1;::::0;39294:13:::1;::::0;39322:9:::1;::::0;39346:10:::1;::::0;39063:304:::1;::::0;;14505:25:1;;;14561:2;14546:18;;14539:34;;;;14589:18;;;14582:34;;;;14647:2;14632:18;;14625:34;;;;14690:3;14675:19;;14668:35;;;;14734:3;14719:19;;14712:35;14778:3;14763:19;;14756:35;14822:3;14807:19;;14800:35;14866:3;14851:19;;14844:35;14910:3;14895:19;;14888:35;39063:304:0::1;::::0;14492:3:1;14477:19;39063:304:0::1;;;;;;;37946:1429:::0;;;;;;;;;;:::o;37704:234::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;37810:1:::1;37792:14;:19;;37783:62;;;::::0;-1:-1:-1;;;37783:62:0;;15136:2:1;37783:62:0::1;::::0;::::1;15118:21:1::0;15175:2;15155:18;;;15148:30;15214:31;15194:18;;;15187:59;15263:18;;37783:62:0::1;14934:353:1::0;37783:62:0::1;37856:11;:28:::0;;;37900:30:::1;::::0;2752:25:1;;;37900:30:0::1;::::0;2740:2:1;2725:18;37900:30:0::1;;;;;;;;37704:234:::0;:::o;41692:109::-;41746:15;;:47;;-1:-1:-1;;;41746:47:0;;41775:10;41746:47;;;12619:51:1;12713:14;;12706:22;12686:18;;;12679:50;-1:-1:-1;;;;;41746:15:0;;;;:28;;12592:18:1;;41746:47:0;12435:300:1;37239:241:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;37337:6:::1;37325:8;:18;;:41;;;;;37359:7;37347:8;:19;;37325:41;37317:50;;;::::0;::::1;;37417:16;::::0;37383:51:::1;::::0;37407:8;;37383:51:::1;::::0;;;::::1;37445:16;:27:::0;37239:241::o;5696:104::-;5752:13;5785:7;5778:14;;;;;:::i;36522:163::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;36636:41:::1;36665:4;36671:5;36636:28;:41::i;:::-;36522:163:::0;;:::o;36693:121::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;36763:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;36763:43:0;;2091:14:1;;2084:22;36763:43:0::1;::::0;::::1;2066:41:1::0;-1:-1:-1;;;;;36763:15:0;;::::1;::::0;:36:::1;::::0;2039:18:1;;36763:43:0::1;1926:187:1::0;35298:176:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;35388:6:::1;35370:24;;:14;;;;;;;;;;;:24;;::::0;35362:33:::1;;;::::0;::::1;;35406:14;:23:::0;;;::::1;;-1:-1:-1::0;;;35406:23:0::1;-1:-1:-1::0;;;;35406:23:0;;::::1;;::::0;;35445:21:::1;::::0;::::1;::::0;::::1;::::0;35423:6;2091:14:1;2084:22;2066:41;;2054:2;2039:18;;1926:187;33968:201:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;34042:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;34042:45:0;;-1:-1:-1;;;;;178:32:1;;;34042:45:0::1;::::0;::::1;160:51:1::0;34042:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;34042:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34098:15:0::1;::::0;-1:-1:-1;;;;;34098:15:0::1;::::0;-1:-1:-1;34098:26:0::1;::::0;-1:-1:-1;34125:7:0;34134:26:::1;34125:7:::0;34134:17:::1;:26::i;:::-;34098:63;::::0;-1:-1:-1;;;;;;34098:63:0::1;::::0;;;;;;-1:-1:-1;;;;;11763:32:1;;;34098:63:0::1;::::0;::::1;11745:51:1::0;11812:18;;;11805:34;11718:18;;34098:63:0::1;11563:282:1::0;7631:400:0;7751:4;7773:228;174:10;7823:7;7845:145;7902:15;7845:145;;;;;;;;;;;;;;;;;174:10;7845:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7845:34:0;;;;;;;;;;;;:38;:145::i;35482:662::-;35541:14;;-1:-1:-1;;;35541:14:0;;;;35533:49;;;;-1:-1:-1;;;35533:49:0;;16062:2:1;35533:49:0;;;16044:21:1;16101:2;16081:18;;;16074:30;-1:-1:-1;;;16120:18:1;;;16113:52;16182:18;;35533:49:0;15860:346:1;35533:49:0;35601:24;;;;:14;:24;;;;;;:29;;35593:66;;;;-1:-1:-1;;;35593:66:0;;16413:2:1;35593:66:0;;;16395:21:1;16452:2;16432:18;;;16425:30;16491:26;16471:18;;;16464:54;16535:18;;35593:66:0;16211:348:1;35593:66:0;35725:29;:15;35745:8;35725:19;:29::i;:::-;174:10;35692:30;;;;:16;:30;;;;;;:62;35670:148;;;;-1:-1:-1;;;35670:148:0;;16766:2:1;35670:148:0;;;16748:21:1;16805:2;16785:18;;;16778:30;16844:34;16824:18;;;16817:62;-1:-1:-1;;;16895:18:1;;;16888:34;16939:19;;35670:148:0;16564:400:1;35670:148:0;35858:24;;;;:14;:24;;;;;;;;;174:10;35829:26;;:12;:26;;;;;;:53;35926:29;:15;35858:24;35926:19;:29::i;:::-;174:10;35893:30;;;;:16;:30;;;;;:62;;;;35966:15;;-1:-1:-1;;;;;35966:15:0;;:26;;36034:31;174:10;36034:17;:31::i;:::-;35966:110;;-1:-1:-1;;;;;;35966:110:0;;;;;;;-1:-1:-1;;;;;11763:32:1;;;35966:110:0;;;11745:51:1;11812:18;;;11805:34;11718:18;;35966:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36113:12;174:10;;94:98;36113:12;-1:-1:-1;;;;;36092:44:0;;36127:8;36092:44;;;;2752:25:1;;2740:2;2725:18;;2606:177;36092:44:0;;;;;;;;35482:662;:::o;39864:184::-;39993:15;;:47;;-1:-1:-1;;;39993:47:0;;-1:-1:-1;;;;;178:32:1;;;39993:47:0;;;160:51:1;39961:7:0;;39993:15;;:38;;133:18:1;;39993:47:0;14:203:1;6210:216:0;6332:4;6354:42;174:10;6378:9;6389:6;6354:9;:42::i;32777:143::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32870:30:0;;;::::1;;::::0;;;:23:::1;:30;::::0;;;;:38;;-1:-1:-1;;32870:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32777:143::o;40235:307::-;40499:15;;:35;;-1:-1:-1;;;40499:35:0;;-1:-1:-1;;;;;178:32:1;;;40499:35:0;;;160:51:1;40349:7:0;;;;;;;;;;;;40499:15;;;;:26;;133:18:1;;40499:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40492:42;;;;-1:-1:-1;40492:42:0;;-1:-1:-1;40492:42:0;-1:-1:-1;40492:42:0;-1:-1:-1;40492:42:0;;-1:-1:-1;40235:307:0;-1:-1:-1;;40235:307:0:o;34819:174::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;34907:3:::1;34898:5;:12;;34890:63;;;::::0;-1:-1:-1;;;34890:63:0;;17733:2:1;34890:63:0::1;::::0;::::1;17715:21:1::0;17772:2;17752:18;;;17745:30;17811:34;17791:18;;;17784:62;-1:-1:-1;;;17862:18:1;;;17855:36;17908:19;;34890:63:0::1;17531:402:1::0;34890:63:0::1;34964:13;:21:::0;34819:174::o;42244:127::-;42328:15;;:35;;-1:-1:-1;;;42328:35:0;;-1:-1:-1;;;;;178:32:1;;;42328:35:0;;;160:51:1;42304:4:0;;42328:15;;:26;;133:18:1;;42328:35:0;14:203:1;33257:268:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33329:41:0;;::::1;;::::0;;;:33:::1;:41;::::0;;;;;;;:48;;33373:4:::1;-1:-1:-1::0;;33329:48:0;;::::1;::::0;::::1;::::0;;;33388:19:::1;:27:::0;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;33433:15:::1;::::0;:44;;-1:-1:-1;;;33433:44:0;;::::1;::::0;::::1;160:51:1::0;;;;33433:15:0;::::1;::::0;:36:::1;::::0;133:18:1;33433:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33493:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;33493:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;33493:24:0::1;14:203:1::0;36306:208:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;36386:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;36378:41:::1;;;::::0;::::1;;36430:21;:31:::0;;-1:-1:-1;;36430:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36477:29:::1;::::0;2066:41:1;;;36477:29:0::1;::::0;2054:2:1;2039:18;36477:29:0::1;1926:187:1::0;32936:250:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;33003:20:::1;::::0;::::1;;33002:21;32994:30;;;::::0;::::1;;33055:12;33041:11;:26:::0;33078:14:::1;:21:::0;;-1:-1:-1;;;;33078:21:0::1;-1:-1:-1::0;;;33078:21:0::1;::::0;;33115:16:::1;::::0;::::1;::::0;33078:21;;33115:16:::1;33147:20;:27:::0;;-1:-1:-1;;33147:27:0::1;33170:4;33147:27;::::0;;32936:250::o;49712:158::-;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;49782:15:::1;::::0;:40:::1;::::0;-1:-1:-1;;;49782:40:0;;-1:-1:-1;;;;;178:32:1;;;49782:40:0::1;::::0;::::1;160:51:1::0;49782:15:0;;::::1;::::0;:33:::1;::::0;133:18:1;;49782:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49838:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;49838:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;49838:24:0::1;14:203:1::0;41404:130:0;41487:15;;:39;;;-1:-1:-1;;;41487:39:0;;;;41460:7;;-1:-1:-1;;;;;41487:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;40550:317;40819:15;;:40;;-1:-1:-1;;;40819:40:0;;;;;2752:25:1;;;40669:7:0;;;;;;;;;;;;-1:-1:-1;;;;;40819:15:0;;;;:33;;2725:18:1;;40819:40:0;2606:177:1;13158:281:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13261:22:0;::::1;13239:110;;;::::0;-1:-1:-1;;;13239:110:0;;18140:2:1;13239:110:0::1;::::0;::::1;18122:21:1::0;18179:2;18159:18;;;18152:30;18218:34;18198:18;;;18191:62;-1:-1:-1;;;18269:18:1;;;18262:36;18315:19;;13239:110:0::1;17938:402:1::0;13239:110:0::1;13386:6;::::0;13365:38:::1;::::0;-1:-1:-1;;;;;13365:38:0;;::::1;::::0;13386:6:::1;::::0;13365:38:::1;::::0;13386:6:::1;::::0;13365:38:::1;13414:6;:17:::0;;-1:-1:-1;;;;;;13414:17:0::1;-1:-1:-1::0;;;;;13414:17:0;;;::::1;::::0;;;::::1;::::0;;13158:281::o;41809:107::-;41862:15;;:46;;-1:-1:-1;;;41862:46:0;;41890:10;41862:46;;;12619:51:1;12713:14;;12706:22;12686:18;;;12679:50;-1:-1:-1;;;;;41862:15:0;;;;:27;;12592:18:1;;41862:46:0;12435:300:1;35063:221:0;12915:6;;-1:-1:-1;;;;;12915:6:0;174:10;12915:22;12907:67;;;;-1:-1:-1;;;12907:67:0;;;;;;;:::i;:::-;35138:16:::1;:5:::0;35147:6:::1;35138:16;:::i;:::-;35130:24;;35197:4;35182:12;;:19;;;;:::i;:::-;35173:5;:28;;35165:83;;;::::0;-1:-1:-1;;;35165:83:0;;18769:2:1;35165:83:0::1;::::0;::::1;18751:21:1::0;18808:2;18788:18;;;18781:30;18847:34;18827:18;;;18820:62;-1:-1:-1;;;18898:18:1;;;18891:40;18948:19;;35165:83:0::1;18567:406:1::0;35165:83:0::1;35259:9;:17:::0;35063:221::o;10814:181::-;10872:7;;10904:5;10908:1;10904;:5;:::i;:::-;10892:17;;10933:1;10928;:6;;10920:46;;;;-1:-1:-1;;;10920:46:0;;19310:2:1;10920:46:0;;;19292:21:1;19349:2;19329:18;;;19322:30;19388:29;19368:18;;;19361:57;19435:18;;10920:46:0;19108:351:1;10920:46:0;10986:1;10814:181;-1:-1:-1;;;10814:181:0:o;11381:250::-;11439:7;11463:1;11468;11463:6;11459:47;;-1:-1:-1;11493:1:0;11486:8;;11459:47;11518:9;11530:5;11534:1;11530;:5;:::i;:::-;11518:17;-1:-1:-1;11563:1:0;11554:5;11558:1;11518:17;11554:5;:::i;:::-;:10;11546:56;;;;-1:-1:-1;;;11546:56:0;;19666:2:1;11546:56:0;;;19648:21:1;19705:2;19685:18;;;19678:30;19744:34;19724:18;;;19717:62;-1:-1:-1;;;19795:18:1;;;19788:31;19836:19;;11546:56:0;19464:397:1;11639:132:0;11697:7;11724:39;11728:1;11731;11724:39;;;;;;;;;;;;;;;;;:3;:39::i;51346:1995::-;51415:6;51425:1;51415:11;51411:50;;51346:1995;:::o;51411:50::-;51471:24;51488:6;51471:16;:24::i;:::-;51506:19;51528:25;51542:10;;51528:9;;:13;;:25;;;;:::i;:::-;51769:13;;51506:47;;-1:-1:-1;51581:4:0;;;;;;51566:12;;;;;;51769:17;51765:261;;51822:192;52004:9;;51985:16;;51969:13;;:32;;;;:::i;:::-;:44;;;;:::i;:::-;51822:128;51936:13;;51822:95;51905:11;51822:64;51876:9;;51822:35;:53;;:64;;;;:::i;:95::-;:113;;:128::i;:192::-;51803:211;;51765:261;52040:14;;:18;52036:268;;52095:197;52281:10;;52261:17;;52244:14;;:34;;;;:::i;:::-;:47;;;;:::i;:::-;52095:130;52210:14;;52095:96;52179:11;52095:65;52149:10;;52095:35;:53;;:65;;;;:::i;:197::-;52075:217;;52036:268;52326:39;:16;52347:17;52326:20;:39::i;:::-;52314:51;-1:-1:-1;52382:13:0;;52378:111;;52434:15;;52426:51;;-1:-1:-1;;;;;52434:15:0;;;;52463:9;;52426:51;;;;52463:9;52434:15;52426:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52412:65:0;;-1:-1:-1;;52378:111:0;52509:21;52582:31;52603:9;;52582:16;;:20;;:31;;;;:::i;:::-;52555:10;;52533:17;;:33;;:21;:33::i;:::-;:80;;;;:::i;:::-;52509:104;-1:-1:-1;52626:19:0;52660:17;;52656:104;;52708:40;:21;52734:13;52708:25;:40::i;:::-;52694:54;;52656:104;52770:23;52838:11;52796:39;52817:17;;52796:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;52770:79;;52860:17;52908:11;52880:25;52894:10;;52880:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;52860:59;-1:-1:-1;52936:19:0;;52932:126;;52997:15;;52989:57;;-1:-1:-1;;;;;52997:15:0;;;;53026;;52989:57;;;;53026:15;52997;52989:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52972:74:0;;-1:-1:-1;;52932:126:0;53072:13;;53068:108;;53127:9;;53119:45;;-1:-1:-1;;;;;53127:9:0;;;;53150;;53119:45;;;;53150:9;53127;53119:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53102:62:0;;-1:-1:-1;;53068:108:0;53193:140;53221:9;53245:27;53263:9;53245:15;:27;:::i;:::-;53287:7;:21;;;;;53298:10;53287:21;:35;;;;;53312:10;53287:35;53193:140;;;20272:25:1;;;20328:2;20313:18;;20306:34;;;;20383:14;20376:22;20356:18;;;20349:50;20260:2;20245:18;53193:140:0;;;;;;;51400:1941;;;;;;;;;;;51346:1995;:::o;11003:136::-;11061:7;11088:43;11092:1;11095;11088:43;;;;;;;;;;;;;;;;;:3;:43::i;9506:380::-;-1:-1:-1;;;;;9642:19:0;;9634:68;;;;-1:-1:-1;;;9634:68:0;;20612:2:1;9634:68:0;;;20594:21:1;20651:2;20631:18;;;20624:30;20690:34;20670:18;;;20663:62;-1:-1:-1;;;20741:18:1;;;20734:34;20785:19;;9634:68:0;20410:400:1;9634:68:0;-1:-1:-1;;;;;9721:21:0;;9713:68;;;;-1:-1:-1;;;9713:68:0;;21017:2:1;9713:68:0;;;20999:21:1;21056:2;21036:18;;;21029:30;21095:34;21075:18;;;21068:62;-1:-1:-1;;;21146:18:1;;;21139:32;21188:19;;9713:68:0;20815:398:1;9713:68:0;-1:-1:-1;;;;;9794:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9846:32;;2752:25:1;;;9846:32:0;;2725:18:1;9846:32:0;;;;;;;;9506:380;;;:::o;8039:610::-;-1:-1:-1;;;;;8179:20:0;;8171:70;;;;-1:-1:-1;;;8171:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8260:23:0;;8252:71;;;;-1:-1:-1;;;8252:71:0;;;;;;;:::i;:::-;8416:108;8452:6;8416:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8416:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;8396:17:0;;;:9;:17;;;;;;;;;;;:128;;;;8558:20;;;;;;;:32;;8583:6;8558:24;:32::i;:::-;-1:-1:-1;;;;;8535:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;8606:35;2752:25:1;;;8535:20:0;;8606:35;;;;;;2725:18:1;8606:35:0;2606:177:1;42379:6033:0;-1:-1:-1;;;;;42511:18:0;;42503:68;;;;-1:-1:-1;;;42503:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42590:16:0;;42582:64;;;;-1:-1:-1;;;42582:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42809:39:0;;42657:18;42809:39;;;:33;:39;;;;;;42657:18;;;;;;;;42809:39;;42804:132;;42873:14;;-1:-1:-1;;;42873:14:0;;;;42865:59;;;;-1:-1:-1;;;42865:59:0;;22230:2:1;42865:59:0;;;22212:21:1;;;22249:18;;;22242:30;22308:34;22288:18;;;22281:62;22360:18;;42865:59:0;22028:356:1;42865:59:0;42961:6;42971:1;42961:11;42957:5268;;42989:28;43005:4;43011:2;43015:1;42989:15;:28::i;:::-;43032:7;;;;;42379:6033;;;:::o;42957:5268::-;43075:8;;-1:-1:-1;;;43075:8:0;;;;43074:9;:39;;;;-1:-1:-1;;;;;;43088:25:0;;;;;;:19;:25;;;;;;;;43087:26;43074:39;:67;;;;-1:-1:-1;;;;;;43118:23:0;;;;;;:19;:23;;;;;;;;43117:24;43074:67;43056:5169;;;-1:-1:-1;;;;;43185:29:0;;;43168:14;43185:29;;;:25;:29;;;;;;;43245:31;;;;;;;;43185:29;;;;;43245:31;43297:9;;:23;;;;;43311:9;43310:10;43297:23;43293:2286;;;43341:13;43357:32;43385:3;43357:23;43368:11;;43357:6;:10;;:23;;;;:::i;:32::-;43341:48;-1:-1:-1;43417:17:0;:6;43341:48;43417:10;:17::i;:::-;43408:26;;43453:43;43469:4;43483;43490:5;43453:15;:43::i;:::-;43515:33;43531:4;43537:2;43541:6;43515:15;:33::i;:::-;43567:15;;-1:-1:-1;;;;;43567:15:0;:26;43594:4;43600:23;43594:4;43600:17;:23::i;:::-;43567:57;;-1:-1:-1;;;;;;43567:57:0;;;;;;;-1:-1:-1;;;;;11763:32:1;;;43567:57:0;;;11745:51:1;11812:18;;;11805:34;11718:18;;43567:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43643:15:0;;-1:-1:-1;;;;;43643:15:0;;-1:-1:-1;43643:26:0;;-1:-1:-1;43670:2:0;43674:21;43670:2;43674:17;:21::i;:::-;43643:53;;-1:-1:-1;;;;;;43643:53:0;;;;;;;-1:-1:-1;;;;;11763:32:1;;;43643:53:0;;;11745:51:1;11812:18;;;11805:34;11718:18;;43643:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43715:7;;;;;;;;42379:6033;;;:::o;43293:2286::-;43775:8;43774:9;:27;;;;-1:-1:-1;43787:14:0;;-1:-1:-1;;;43787:14:0;;;;43774:27;43770:1809;;;-1:-1:-1;;;;;43852:22:0;;;;;;:16;:22;;;;;;43878:15;-1:-1:-1;43852:41:0;43822:144;;;;-1:-1:-1;;;43822:144:0;;22591:2:1;43822:144:0;;;22573:21:1;22630:2;22610:18;;;22603:30;22669:31;22649:18;;;22642:59;22718:18;;43822:144:0;22389:353:1;43822:144:0;-1:-1:-1;;;;;43989:22:0;;;;;;:16;:22;;;;;;:27;43985:147;;-1:-1:-1;;;;;44041:22:0;;44066:1;44041:22;;;:16;:22;;;;;;;;:26;;;44090:12;:18;;;;;:22;43985:147;43770:1809;;;44172:9;44168:1411;;;44215:14;;44259:12;;44306:17;;44357:16;;44402:10;;44437:14;;44215;;-1:-1:-1;44259:12:0;;-1:-1:-1;44306:17:0;;-1:-1:-1;44357:16:0;-1:-1:-1;44402:10:0;-1:-1:-1;44437:14:0;;44433:271;;;44541:13;;44528:9;44499:39;;;;:28;:39;;;;;;:55;;44541:13;44499:55;:::i;:::-;44480:15;:74;;44472:134;;;;-1:-1:-1;;;44472:134:0;;22949:2:1;44472:134:0;;;22931:21:1;22988:2;22968:18;;;22961:30;-1:-1:-1;;;23007:18:1;;;23000:52;23069:18;;44472:134:0;22747:346:1;44472:134:0;44654:9;44625:39;;;;:28;:39;;;;;44667:15;44625:57;;44168:1411;;;44731:8;44727:852;;;44773:13;;44816:11;;44862:16;;44912:15;;44956:9;;44990:14;;44773:13;;-1:-1:-1;44816:11:0;;-1:-1:-1;44862:16:0;;-1:-1:-1;44912:15:0;-1:-1:-1;44956:9:0;-1:-1:-1;44990:14:0;;44986:369;;;45048:11;;:15;;45062:1;45048:15;:::i;:::-;45033:12;:30;45025:60;;;;-1:-1:-1;;;45025:60:0;;23300:2:1;45025:60:0;;;23282:21:1;23339:2;23319:18;;;23312:30;-1:-1:-1;;;23358:18:1;;;23351:48;23416:18;;45025:60:0;23098:342:1;45025:60:0;45127:13;;45112:11;:28;;45104:64;;;;-1:-1:-1;;;45104:64:0;;23647:2:1;45104:64:0;;;23629:21:1;23686:2;23666:18;;;23659:30;23725:26;23705:18;;;23698:54;23769:18;;45104:64:0;23445:348:1;45104:64:0;45220:9;45195:35;;;;:24;:35;;;;;;45234:12;45195:51;;45187:83;;;;-1:-1:-1;;;45187:83:0;;24000:2:1;45187:83:0;;;23982:21:1;24039:2;24019:18;;;24012:30;-1:-1:-1;;;24058:18:1;;;24051:50;24118:18;;45187:83:0;23798:344:1;45187:83:0;45314:9;45289:35;;;;:24;:35;;;;;45327:12;45289:50;;44986:369;45383:32;45418:13;45428:2;45418:9;:13::i;:::-;45491:9;;45383:48;;-1:-1:-1;45454:33:0;45481:6;45383:48;45454:33;:::i;:::-;:46;;45446:117;;;;-1:-1:-1;;;45446:117:0;;24349:2:1;45446:117:0;;;24331:21:1;24388:2;24368:18;;;24361:30;24427:34;24407:18;;;24400:62;-1:-1:-1;;;24478:18:1;;;24471:34;24522:19;;45446:117:0;24147:400:1;45446:117:0;44741:838;44727:852;45595:17;45615:72;45679:7;45648:28;45663:13;45648:12;:28;:::i;:::-;:38;;;;:::i;:::-;45615:10;;:32;:72::i;:::-;45595:92;;45704:28;45735:24;45753:4;45735:9;:24::i;:::-;45815:18;;45704:55;;-1:-1:-1;45791:42:0;;;;;;;45854:43;;-1:-1:-1;;;;;;45866:31:0;;;;;;:25;:31;;;;;;;;45865:32;45854:43;45850:1251;;;45918:8;:15;;-1:-1:-1;;;;45918:15:0;-1:-1:-1;;;45918:15:0;;;45958:21;;45918:15;45958:21;:41;;;;;45998:1;45983:12;:16;45958:41;:61;;;;;46018:1;46003:12;;:16;45958:61;45954:903;;;46044:20;46067:25;46081:10;;46067:9;;:13;;:25;;;;:::i;:::-;46044:48;;46115:24;46142:105;46234:12;46142:61;46193:9;;46142:20;:50;;:61;;;;:::i;:105::-;46115:132;;46270:22;46295:106;46388:12;46295:62;46346:10;;46295:20;:50;;:62;;;;:::i;:106::-;46270:131;;46426:21;46450:104;46541:12;;46450:60;46497:12;46450:16;:46;;:60;;;;:::i;:104::-;46426:128;;46579:22;46604:103;46693:13;;46604:58;46649:12;46604:14;:44;;:58;;;;:::i;:103::-;46579:128;-1:-1:-1;46732:18:0;46753:33;46579:128;46772:13;46753:18;:33::i;:::-;46732:54;;46811:26;46826:10;46811:14;:26::i;:::-;46021:836;;;;;;45954:903;46877:24;46904;46922:4;46904:9;:24::i;:::-;46877:51;;46947:38;46968:16;46947:20;:38::i;:::-;-1:-1:-1;47016:1:0;47004:9;:13;;;47036:10;:14;47069:8;:16;;-1:-1:-1;;;;47069:16:0;;;45850:1251;47117:12;47132:30;47158:3;47132:21;:6;47143:9;47132:10;:21::i;:30::-;47117:45;-1:-1:-1;47177:18:0;47216:12;;47212:202;;47281:3;47258:20;:6;47269:8;47258:10;:20::i;:::-;:26;;;;:::i;:::-;47245:39;;47299;47315:4;47321;;;;;;;;;-1:-1:-1;;;;;47321:4:0;47327:10;47299:15;:39::i;:::-;47368:12;;:28;;47385:10;47368:16;:28::i;:::-;47353:12;:43;47212:202;47439:29;47450:17;47457:10;47450:4;:17;:::i;:::-;47439:6;;:10;:29::i;:::-;47430:38;;47489:9;47485:155;;;47532:10;;:20;;47547:4;47532:14;:20::i;:::-;47519:10;:33;47485:155;;;47605:9;;:19;;47619:4;47605:13;:19::i;:::-;47593:9;:31;47485:155;47656:42;47672:4;47686;47693;47656:15;:42::i;:::-;47729:16;;47766:15;;:28;;-1:-1:-1;;;;;;47766:28:0;;;;;2752:25:1;;;-1:-1:-1;;;;;47766:15:0;;;;:23;;2725:18:1;;47766:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;47766:28:0;;;;;;;;-1:-1:-1;;47766:28:0;;;;;;;;;;;;:::i;:::-;;;47762:452;;;47958:231;;;13532:25:1;;;13588:2;13573:18;;13566:34;;;13616:18;;;13609:34;;;13674:2;13659:18;;13652:34;;;48161:9:0;;48108:4;;47958:231;;13519:3:1;13504:19;47958:231:0;;;;;;;47795:410;;;47762:452;43153:5072;;;;;;;;43056:5169;48237:33;48253:4;48259:2;48263:6;48237:15;:33::i;:::-;48281:15;;-1:-1:-1;;;;;48281:15:0;:26;48308:4;48314:23;48308:4;48314:17;:23::i;:::-;48281:57;;-1:-1:-1;;;;;;48281:57:0;;;;;;;-1:-1:-1;;;;;11763:32:1;;;48281:57:0;;;11745:51:1;11812:18;;;11805:34;11718:18;;48281:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48349:15:0;;-1:-1:-1;;;;;48349:15:0;;-1:-1:-1;48349:26:0;;-1:-1:-1;48376:2:0;48380:21;48376:2;48380:17;:21::i;:::-;48349:53;;-1:-1:-1;;;;;;48349:53:0;;;;;;;-1:-1:-1;;;;;11763:32:1;;;48349:53:0;;;11745:51:1;11812:18;;;11805:34;11718:18;;48349:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42492:5920;;;;;42379:6033;;;:::o;11147:226::-;11267:7;11303:12;11295:6;;;;11287:29;;;;-1:-1:-1;;;11287:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11327:9:0;11339:5;11343:1;11339;:5;:::i;:::-;11327:17;11147:226;-1:-1:-1;;;;;11147:226:0:o;36951:280::-;-1:-1:-1;;;;;37034:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;37034:39:0;;;;;;;;;;;;37086:80;;37112:15;;:42;;-1:-1:-1;;;37112:42:0;;-1:-1:-1;;;;;178:32:1;;;37112:42:0;;;160:51:1;37112:15:0;;;;:36;;133:18:1;;37112:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37086:80;37183:40;;;;;;-1:-1:-1;;;;;37183:40:0;;;;;;;;36951:280;;:::o;48420:289::-;48526:14;;48486:7;;-1:-1:-1;;;48526:14:0;;;;:175;;48683:18;48693:7;48683:9;:18::i;:::-;48526:175;;;-1:-1:-1;;;;;48583:21:0;;;;;;:12;:21;;;;;;48560:103;;48641:3;;48560:54;;48583:30;;48641:3;48583:25;:30::i;:::-;48560:18;48570:7;48560:9;:18::i;11779:312::-;11899:7;11934:12;11927:5;11919:28;;;;-1:-1:-1;;;11919:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11958:9:0;11970:5;11974:1;11970;:5;:::i;49205:499::-;49295:16;;;49309:1;49295:16;;;;;;;;49271:21;;49295:16;;;;;;;;;;-1:-1:-1;49295:16:0;49271:40;;49340:4;49322;49327:1;49322:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49322:23:0;;;:7;;;;;;;;;;:23;;;;49366:15;;:22;;;-1:-1:-1;;;49366:22:0;;;;:15;;;;;:20;;:22;;;;;49322:7;;49366:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49356:4;49361:1;49356:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49356:32:0;;;:7;;;;;;;;;:32;49431:15;;49399:62;;49416:4;;49431:15;49449:11;49399:8;:62::i;:::-;49472:15;;:224;;-1:-1:-1;;;49472:224:0;;-1:-1:-1;;;;;49472:15:0;;;;:66;;:224;;49553:11;;49472:15;;49623:4;;49650;;49670:15;;49472:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49260:444;49205:499;:::o;48717:480::-;48776:12;48791:13;:6;48802:1;48791:10;:13::i;:::-;48776:28;-1:-1:-1;48815:17:0;48835:16;:6;48776:28;48835:10;:16::i;:::-;48815:36;-1:-1:-1;48887:21:0;48919:22;48936:4;48919:16;:22::i;:::-;49022:18;49043:41;:21;49069:14;49043:25;:41::i;:::-;49022:62;;49095:35;49108:9;49119:10;49095:12;:35::i;:::-;49146:43;;;25872:25:1;;;25928:2;25913:18;;25906:34;;;25956:18;;;25949:34;;;49146:43:0;;25860:2:1;25845:18;49146:43:0;;;;;;;48765:432;;;;48717:480;:::o;50374:513::-;50554:15;;50522:62;;50539:4;;-1:-1:-1;;;;;50554:15:0;50572:11;50522:8;:62::i;:::-;50627:15;;-1:-1:-1;;;;;50627:15:0;:31;50666:9;50699:4;50719:11;50627:15;;50831:7;12853:6;;-1:-1:-1;;;;;12853:6:0;;12788:79;50831:7;50627:252;;;;;;-1:-1:-1;;;;;;50627:252:0;;;-1:-1:-1;;;;;26353:15:1;;;50627:252:0;;;26335:34:1;26385:18;;;26378:34;;;;26428:18;;;26421:34;;;;26471:18;;;26464:34;26535:15;;;26514:19;;;26507:44;50853:15:0;26567:19:1;;;26560:35;26269:19;;50627:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:118;1182:5;1175:13;1168:21;1161:5;1158:32;1148:60;;1204:1;1201;1194:12;1219:382;1284:6;1292;1345:2;1333:9;1324:7;1320:23;1316:32;1313:52;;;1361:1;1358;1351:12;1313:52;1400:9;1387:23;1419:31;1444:5;1419:31;:::i;:::-;1469:5;-1:-1:-1;1526:2:1;1511:18;;1498:32;1539:30;1498:32;1539:30;:::i;:::-;1588:7;1578:17;;;1219:382;;;;;:::o;1606:315::-;1674:6;1682;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1911:2;1896:18;;;;1883:32;;-1:-1:-1;;;1606:315:1:o;2118:248::-;2186:6;2194;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;-1:-1:-1;;2286:23:1;;;2356:2;2341:18;;;2328:32;;-1:-1:-1;2118:248:1:o;2788:247::-;2847:6;2900:2;2888:9;2879:7;2875:23;2871:32;2868:52;;;2916:1;2913;2906:12;2868:52;2955:9;2942:23;2974:31;2999:5;2974:31;:::i;3040:127::-;3101:10;3096:3;3092:20;3089:1;3082:31;3132:4;3129:1;3122:15;3156:4;3153:1;3146:15;3172:275;3243:2;3237:9;3308:2;3289:13;;-1:-1:-1;;3285:27:1;3273:40;;3343:18;3328:34;;3364:22;;;3325:62;3322:88;;;3390:18;;:::i;:::-;3426:2;3419:22;3172:275;;-1:-1:-1;3172:275:1:o;3452:183::-;3512:4;3545:18;3537:6;3534:30;3531:56;;;3567:18;;:::i;:::-;-1:-1:-1;3612:1:1;3608:14;3624:4;3604:25;;3452:183::o;3640:662::-;3694:5;3747:3;3740:4;3732:6;3728:17;3724:27;3714:55;;3765:1;3762;3755:12;3714:55;3801:6;3788:20;3827:4;3851:60;3867:43;3907:2;3867:43;:::i;:::-;3851:60;:::i;:::-;3945:15;;;4031:1;4027:10;;;;4015:23;;4011:32;;;3976:12;;;;4055:15;;;4052:35;;;4083:1;4080;4073:12;4052:35;4119:2;4111:6;4107:15;4131:142;4147:6;4142:3;4139:15;4131:142;;;4213:17;;4201:30;;4251:12;;;;4164;;4131:142;;;-1:-1:-1;4291:5:1;3640:662;-1:-1:-1;;;;;;3640:662:1:o;4307:1215::-;4425:6;4433;4486:2;4474:9;4465:7;4461:23;4457:32;4454:52;;;4502:1;4499;4492:12;4454:52;4542:9;4529:23;4571:18;4612:2;4604:6;4601:14;4598:34;;;4628:1;4625;4618:12;4598:34;4666:6;4655:9;4651:22;4641:32;;4711:7;4704:4;4700:2;4696:13;4692:27;4682:55;;4733:1;4730;4723:12;4682:55;4769:2;4756:16;4791:4;4815:60;4831:43;4871:2;4831:43;:::i;4815:60::-;4909:15;;;4991:1;4987:10;;;;4979:19;;4975:28;;;4940:12;;;;5015:19;;;5012:39;;;5047:1;5044;5037:12;5012:39;5071:11;;;;5091:217;5107:6;5102:3;5099:15;5091:217;;;5187:3;5174:17;5204:31;5229:5;5204:31;:::i;:::-;5248:18;;5124:12;;;;5286;;;;5091:217;;;5327:5;-1:-1:-1;;5370:18:1;;5357:32;;-1:-1:-1;;5401:16:1;;;5398:36;;;5430:1;5427;5420:12;5398:36;;5453:63;5508:7;5497:8;5486:9;5482:24;5453:63;:::i;:::-;5443:73;;;4307:1215;;;;;:::o;5527:456::-;5604:6;5612;5620;5673:2;5661:9;5652:7;5648:23;5644:32;5641:52;;;5689:1;5686;5679:12;5641:52;5728:9;5715:23;5747:31;5772:5;5747:31;:::i;:::-;5797:5;-1:-1:-1;5854:2:1;5839:18;;5826:32;5867:33;5826:32;5867:33;:::i;:::-;5527:456;;5919:7;;-1:-1:-1;;;5973:2:1;5958:18;;;;5945:32;;5527:456::o;6424:241::-;6480:6;6533:2;6521:9;6512:7;6508:23;6504:32;6501:52;;;6549:1;6546;6539:12;6501:52;6588:9;6575:23;6607:28;6629:5;6607:28;:::i;6894:799::-;7034:6;7042;7050;7058;7066;7074;7082;7090;7098;7106;7159:3;7147:9;7138:7;7134:23;7130:33;7127:53;;;7176:1;7173;7166:12;7127:53;-1:-1:-1;;7199:23:1;;;7269:2;7254:18;;7241:32;;-1:-1:-1;7320:2:1;7305:18;;7292:32;;7371:2;7356:18;;7343:32;;-1:-1:-1;7422:3:1;7407:19;;7394:33;;-1:-1:-1;7474:3:1;7459:19;;7446:33;;-1:-1:-1;7526:3:1;7511:19;;7498:33;;-1:-1:-1;7578:3:1;7563:19;;7550:33;;-1:-1:-1;7630:3:1;7615:19;;7602:33;;-1:-1:-1;7682:3:1;7667:19;7654:33;;-1:-1:-1;6894:799:1;-1:-1:-1;6894:799:1:o;8513:388::-;8581:6;8589;8642:2;8630:9;8621:7;8617:23;8613:32;8610:52;;;8658:1;8655;8648:12;8610:52;8697:9;8684:23;8716:31;8741:5;8716:31;:::i;:::-;8766:5;-1:-1:-1;8823:2:1;8808:18;;8795:32;8836:33;8795:32;8836:33;:::i;8906:356::-;9108:2;9090:21;;;9127:18;;;9120:30;9186:34;9181:2;9166:18;;9159:62;9253:2;9238:18;;8906:356::o;9267:127::-;9328:10;9323:3;9319:20;9316:1;9309:31;9359:4;9356:1;9349:15;9383:4;9380:1;9373:15;9399:168;9472:9;;;9503;;9520:15;;;9514:22;;9500:37;9490:71;;9541:18;;:::i;9572:380::-;9651:1;9647:12;;;;9694;;;9715:61;;9769:4;9761:6;9757:17;9747:27;;9715:61;9822:2;9814:6;9811:14;9791:18;9788:38;9785:161;;9868:10;9863:3;9859:20;9856:1;9849:31;9903:4;9900:1;9893:15;9931:4;9928:1;9921:15;9785:161;;9572:380;;;:::o;11431:127::-;11492:10;11487:3;11483:20;11480:1;11473:31;11523:4;11520:1;11513:15;11547:4;11544:1;11537:15;11850:135;11889:3;11910:17;;;11907:43;;11930:18;;:::i;:::-;-1:-1:-1;11977:1:1;11966:13;;11850:135::o;11990:251::-;12060:6;12113:2;12101:9;12092:7;12088:23;12084:32;12081:52;;;12129:1;12126;12119:12;12081:52;12161:9;12155:16;12180:31;12205:5;12180:31;:::i;12246:184::-;12316:6;12369:2;12357:9;12348:7;12344:23;12340:32;12337:52;;;12385:1;12382;12375:12;12337:52;-1:-1:-1;12408:16:1;;12246:184;-1:-1:-1;12246:184:1:o;12740:245::-;12807:6;12860:2;12848:9;12839:7;12835:23;12831:32;12828:52;;;12876:1;12873;12866:12;12828:52;12908:9;12902:16;12927:28;12949:5;12927:28;:::i;12990:306::-;13078:6;13086;13094;13147:2;13135:9;13126:7;13122:23;13118:32;13115:52;;;13163:1;13160;13153:12;13115:52;13192:9;13186:16;13176:26;;13242:2;13231:9;13227:18;13221:25;13211:35;;13286:2;13275:9;13271:18;13265:25;13255:35;;12990:306;;;;;:::o;16969:557::-;17082:6;17090;17098;17106;17114;17122;17175:3;17163:9;17154:7;17150:23;17146:33;17143:53;;;17192:1;17189;17182:12;17143:53;17224:9;17218:16;17243:31;17268:5;17243:31;:::i;:::-;17338:2;17323:18;;17317:25;17382:2;17367:18;;17361:25;17426:2;17411:18;;17405:25;17470:3;17455:19;;17449:26;17515:3;17500:19;;;17494:26;17293:5;;17317:25;;-1:-1:-1;17361:25:1;;17405;;-1:-1:-1;17449:26:1;-1:-1:-1;17494:26:1;;-1:-1:-1;16969:557:1;-1:-1:-1;;;16969:557:1:o;18345:217::-;18385:1;18411;18401:132;;18455:10;18450:3;18446:20;18443:1;18436:31;18490:4;18487:1;18480:15;18518:4;18515:1;18508:15;18401:132;-1:-1:-1;18547:9:1;;18345:217::o;18978:125::-;19043:9;;;19064:10;;;19061:36;;;19077:18;;:::i;21218:401::-;21420:2;21402:21;;;21459:2;21439:18;;;21432:30;21498:34;21493:2;21478:18;;21471:62;-1:-1:-1;;;21564:2:1;21549:18;;21542:35;21609:3;21594:19;;21218:401::o;21624:399::-;21826:2;21808:21;;;21865:2;21845:18;;;21838:30;21904:34;21899:2;21884:18;;21877:62;-1:-1:-1;;;21970:2:1;21955:18;;21948:33;22013:3;21998:19;;21624:399::o;24552:128::-;24619:9;;;24640:11;;;24637:37;;;24654:18;;:::i;24685:980::-;24947:4;24995:3;24984:9;24980:19;25026:6;25015:9;25008:25;25052:2;25090:6;25085:2;25074:9;25070:18;25063:34;25133:3;25128:2;25117:9;25113:18;25106:31;25157:6;25192;25186:13;25223:6;25215;25208:22;25261:3;25250:9;25246:19;25239:26;;25300:2;25292:6;25288:15;25274:29;;25321:1;25331:195;25345:6;25342:1;25339:13;25331:195;;;25410:13;;-1:-1:-1;;;;;25406:39:1;25394:52;;25501:15;;;;25466:12;;;;25442:1;25360:9;25331:195;;;-1:-1:-1;;;;;;;25582:32:1;;;;25577:2;25562:18;;25555:60;-1:-1:-1;;;25646:3:1;25631:19;25624:35;25543:3;24685:980;-1:-1:-1;;;24685:980:1:o
Swarm Source
ipfs://6fbfe4c026278551bfd03e90eafdf2de5d85c44ebda80781656c7bedc9c19b03
Loading...
Loading
Loading...
Loading
OVERVIEW
Peperew was created on May 30, 2023. Its motivation was to create a project on the Arbitum blockchain with the aim of rewarding its holders with a higher percentage of rewards than its competitors.Loading...
Loading
Net Worth in USD
$3.95
Net Worth in ETH
0.001382
Token Allocations
PEPEREW
100.00%
ETH
0.00%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.