Overview
Max Total Supply
690,690,000,000RATS
Holders
40,437 ( -0.002%)
Market
Price
$0.00 @ 0.000000 BNB (-0.97%)
Onchain Market Cap
$32,952.11
Circulating Supply Market Cap
$29,789.08
Other Info
Token Contract (WITH 9 Decimals)
Balance
25,100 RATSValue
$0.00 ( ~0 BNB) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RATS
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2024-10-23
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
interface IERC20Errors {
error ERC20InsufficientBalance(
address sender,
uint256 balance,
uint256 needed
);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(
address spender,
uint256 allowance,
uint256 needed
);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
interface IERC721Errors {
error ERC721InvalidOwner(address owner);
error ERC721NonexistentToken(uint256 tokenId);
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
error ERC721InvalidSender(address sender);
error ERC721InvalidReceiver(address receiver);
error ERC721InsufficientApproval(address operator, uint256 tokenId);
error ERC721InvalidApprover(address approver);
error ERC721InvalidOperator(address operator);
}
interface IERC1155Errors {
error ERC1155InsufficientBalance(
address sender,
uint256 balance,
uint256 needed,
uint256 tokenId
);
error ERC1155InvalidSender(address sender);
error ERC1155InvalidReceiver(address receiver);
error ERC1155MissingApprovalForAll(address operator, address owner);
error ERC1155InvalidApprover(address approver);
error ERC1155InvalidOperator(address operator);
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256))
private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return 18;
}
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(
address owner,
address spender
) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 value
) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
_totalSupply -= value;
}
} else {
unchecked {
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
function _approve(
address owner,
address spender,
uint256 value,
bool emitEvent
) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
function _spendAllowance(
address owner,
address spender,
uint256 value
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(
spender,
currentAllowance,
value
);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC1363 is IERC20, IERC165 {
/*
* Note: the ERC-165 identifier for this interface is 0xb0202a11.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
function transferAndCall(address to, uint256 value) external returns (bool);
function transferAndCall(
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function approveAndCall(
address spender,
uint256 value
) external returns (bool);
function approveAndCall(
address spender,
uint256 value,
bytes calldata data
) external returns (bool);
}
library Errors {
error InsufficientBalance(uint256 balance, uint256 needed);
error FailedCall();
error FailedDeployment();
error MissingPrecompile(address);
}
library Address {
error AddressEmptyCode(address target);
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert Errors.InsufficientBalance(address(this).balance, amount);
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert Errors.FailedCall();
}
}
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
if (address(this).balance < value) {
revert Errors.InsufficientBalance(address(this).balance, value);
}
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
function verifyCallResult(
bool success,
bytes memory returndata
) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
function _revert(bytes memory returndata) private pure {
if (returndata.length > 0) {
assembly ("memory-safe") {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert Errors.FailedCall();
}
}
}
library SafeERC20 {
error SafeERC20FailedOperation(address token);
error SafeERC20FailedDecreaseAllowance(
address spender,
uint256 currentAllowance,
uint256 requestedDecrease
);
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeCall(token.transferFrom, (from, to, value))
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 requestedDecrease
) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(
spender,
currentAllowance,
requestedDecrease
);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
function forceApprove(
IERC20 token,
address spender,
uint256 value
) internal {
bytes memory approvalCall = abi.encodeCall(
token.approve,
(spender, value)
);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(
token,
abi.encodeCall(token.approve, (spender, 0))
);
_callOptionalReturn(token, approvalCall);
}
}
function transferAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function approveAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
let success := call(
gas(),
token,
0,
add(data, 0x20),
mload(data),
0,
0x20
)
if iszero(success) {
let ptr := mload(0x40)
returndatacopy(ptr, 0, returndatasize())
revert(ptr, returndatasize())
}
returnSize := returndatasize()
returnValue := mload(0)
}
if (
returnSize == 0 ? address(token).code.length == 0 : returnValue != 1
) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturnBool(
IERC20 token,
bytes memory data
) private returns (bool) {
bool success;
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
success := call(
gas(),
token,
0,
add(data, 0x20),
mload(data),
0,
0x20
)
returnSize := returndatasize()
returnValue := mload(0)
}
return
success &&
(
returnSize == 0
? address(token).code.length > 0
: returnValue == 1
);
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)
external
payable
returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
function swapTokensForExactETH(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactTokensForETH(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapETHForExactTokens(
uint amountOut,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
function quote(
uint amountA,
uint reserveA,
uint reserveB
) external pure returns (uint amountB);
function getAmountOut(
uint amountIn,
uint reserveIn,
uint reserveOut
) external pure returns (uint amountOut);
function getAmountIn(
uint amountOut,
uint reserveIn,
uint reserveOut
) external pure returns (uint amountIn);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
function getAmountsIn(
uint amountOut,
address[] calldata path
) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract RATS is ERC20, Ownable {
using SafeERC20 for IERC20;
uint256 public liquidityTaxBuy;
uint256 public liquidityTaxSell;
uint256 public liquidityTaxAmount;
uint256 public marketingTaxBuy;
uint256 public marketingTaxSell;
uint256 public marketingTaxAmount;
uint256 public immutable denominator;
address public marketingWallet;
bool private swapping;
uint256 public swapTokensAtAmount;
bool public isSwapBackEnabled;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool public isLiquified;
uint256 public timeLiquify;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) private _isAutomatedMarketMakerPair;
mapping(address => bool) private _isExcludedFromMaxWallet;
modifier inSwap() {
swapping = true;
_;
swapping = false;
}
event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
event UpdateSellTax(uint256 liquidityTaxBuy, uint256 marketingTaxSell);
event UpdateMarketingWallet(address indexed marketingWallet);
event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
event UpdateSwapBackStatus(bool status);
event UpdateExcludeFromFees(address indexed account, bool isExcluded);
event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
event UpdateExcludedFromMaxWallet(address indexed account, bool isExcluded);
constructor() ERC20("GoldenRat", "RATS") Ownable(getOwnerAddress()) {
_mint(owner(), 690_690_000_000 * (10 ** 9));
liquidityTaxBuy = 100;
liquidityTaxSell = 100;
marketingTaxBuy = 400;
marketingTaxSell = 400;
denominator = 10_000;
marketingWallet = 0x786Ba6E602253dF257D6930E664eF93b793ad34B;
swapTokensAtAmount = (totalSupply() * 1) / 10_000;
isSwapBackEnabled = true;
address router = getRouterAddress();
uniswapV2Router = IUniswapV2Router02(router);
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
_approve(address(this), address(uniswapV2Router), type(uint256).max);
address DEAD = address(0xdead);
address ZERO = address(0x0);
_isExcludedFromFees[address(this)] = true;
_isExcludedFromFees[address(uniswapV2Router)] = true;
_isExcludedFromFees[address(owner())] = true;
_isExcludedFromFees[address(DEAD)] = true;
_isExcludedFromFees[address(ZERO)] = true;
_isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;
_isExcludedFromMaxWallet[address(this)] = true;
_isExcludedFromMaxWallet[address(uniswapV2Pair)] = true;
_isExcludedFromMaxWallet[address(owner())] = true;
_isExcludedFromMaxWallet[address(DEAD)] = true;
_isExcludedFromMaxWallet[address(ZERO)] = true;
}
receive() external payable {}
fallback() external payable {}
function decimals() public pure override returns (uint8) {
return 9;
}
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function getOwnerAddress() public view returns (address) {
if (block.chainid == 56 || block.chainid == 1) {
return 0xcaD8ae113d82601Ff14cC8BCbF156DF33fdC930A;
} else {
return msg.sender;
}
}
function getRouterAddress() public view returns (address) {
if (block.chainid == 56) {
return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
} else if (block.chainid == 97) {
return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
} else if (block.chainid == 1 || block.chainid == 5) {
return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
} else {
revert("Cannot found router on this network");
}
}
function claimStuckTokens(address token) external onlyOwner {
require(token != address(this), "Owner cannot claim native tokens");
if (token == address(0x0)) {
payable(msg.sender).transfer(address(this).balance);
return;
}
IERC20 ERC20token = IERC20(token);
uint256 balance = ERC20token.balanceOf(address(this));
ERC20token.safeTransfer(msg.sender, balance);
}
function setBuyTax(
uint256 _liquidityTaxBuy,
uint256 _marketingTaxBuy
) external onlyOwner {
require(
liquidityTaxBuy != _liquidityTaxBuy ||
marketingTaxBuy != _marketingTaxBuy,
"Buy Tax already on that amount"
);
require(
_liquidityTaxBuy + _marketingTaxBuy <= 2000,
"Buy Tax cannot be more than 20%"
);
liquidityTaxBuy = _liquidityTaxBuy;
marketingTaxBuy = _marketingTaxBuy;
emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
}
function setSellTax(
uint256 _liquidityTaxSell,
uint256 _marketingTaxSell
) external onlyOwner {
require(
liquidityTaxSell != _liquidityTaxSell ||
marketingTaxSell != _marketingTaxSell,
"Sell Tax already on that amount"
);
require(
_liquidityTaxSell + _marketingTaxSell <= 2000,
"Sell Tax cannot be more than 20%"
);
liquidityTaxSell = _liquidityTaxSell;
marketingTaxSell = _marketingTaxSell;
emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
}
function setMarketingWallet(address _marketingWallet) external onlyOwner {
require(
_marketingWallet != marketingWallet,
"Marketing wallet is already that address"
);
require(
_marketingWallet != address(0),
"Marketing wallet cannot be the zero address"
);
require(
!isContract(_marketingWallet),
"Marketing wallet cannot be a contract"
);
marketingWallet = _marketingWallet;
emit UpdateMarketingWallet(_marketingWallet);
}
function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
require(
swapTokensAtAmount != amount,
"SwapTokensAtAmount already on that amount"
);
require(amount >= 1, "Amount must be equal or greater than 1 Wei");
swapTokensAtAmount = amount;
emit UpdateSwapTokensAtAmount(amount);
}
function toggleSwapBack(bool status) external onlyOwner {
require(isSwapBackEnabled != status, "SwapBack already on status");
isSwapBackEnabled = status;
emit UpdateSwapBackStatus(status);
}
function setExcludedFromMaxWallet(
address account,
bool excluded
) external onlyOwner {
require(
_isExcludedFromMaxWallet[account] != excluded,
"Account is already the value of 'excluded'"
);
_isExcludedFromMaxWallet[account] = excluded;
emit UpdateExcludedFromMaxWallet(account, excluded);
}
function isExcludedFromMaxWallet(
address account
) public view returns (bool) {
return _isExcludedFromMaxWallet[account];
}
function setAutomatedMarketMakerPair(
address pair,
bool status
) public onlyOwner {
require(
_isAutomatedMarketMakerPair[pair] != status,
"Pair address is already the value of 'status'"
);
_isAutomatedMarketMakerPair[pair] = status;
emit UpdateAutomatedMarketMakerPair(pair, status);
}
function isAutomatedMarketMakerPair(
address pair
) public view returns (bool) {
return _isAutomatedMarketMakerPair[pair];
}
function setExcludeFromFees(
address account,
bool excluded
) external onlyOwner {
require(
_isExcludedFromFees[account] != excluded,
"Account is already the value of 'excluded'"
);
_isExcludedFromFees[account] = excluded;
emit UpdateExcludeFromFees(account, excluded);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _update(
address from,
address to,
uint256 value
) internal override {
if (from == address(0) || to == address(0)) {
super._update(from, to, value);
return;
}
if (value == 0) {
super._update(from, to, 0);
return;
}
if (to == uniswapV2Pair) {
timeLiquify = block.timestamp;
isLiquified = true;
}
if (
!_isExcludedFromMaxWallet[to] &&
!isAutomatedMarketMakerPair(to) &&
isLiquified &&
block.timestamp < timeLiquify + 1 hours
) {
require(
balanceOf(to) + value <= (totalSupply() * 1) / 100,
"Max wallet balance exceeded"
);
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
!swapping &&
_isAutomatedMarketMakerPair[to] &&
isSwapBackEnabled &&
from != owner() &&
to != owner() &&
liquidityTaxAmount + marketingTaxAmount > 0
) {
swapBack();
}
bool takeFee = true;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
takeFee = false;
}
if (takeFee) {
uint256 marketingTax = 0;
uint256 liquidityTax = 0;
if (_isAutomatedMarketMakerPair[from]) {
liquidityTax = (liquidityTaxBuy * value) / denominator;
marketingTax = (marketingTaxBuy * value) / denominator;
} else if (_isAutomatedMarketMakerPair[to]) {
liquidityTax = (liquidityTaxSell * value) / denominator;
marketingTax = (marketingTaxSell * value) / denominator;
}
marketingTaxAmount += marketingTax;
liquidityTaxAmount += liquidityTax;
uint256 contractTax = marketingTax + liquidityTax;
if (contractTax > 0) {
value -= contractTax;
super._update(from, address(this), contractTax);
}
}
super._update(from, to, value);
}
function swapBack() internal inSwap {
address[] memory pathWallet = new address[](2);
pathWallet[0] = address(this);
pathWallet[1] = uniswapV2Router.WETH();
uint256 contractTokenBalance = balanceOf(address(this));
uint256 totalTaxAmount = marketingTaxAmount + liquidityTaxAmount;
uint256 marketingTokenAmount = (contractTokenBalance *
(marketingTaxAmount)) / totalTaxAmount;
uint256 liquidityTokenAmount = (contractTokenBalance -
marketingTokenAmount);
if (marketingTokenAmount > 0) {
try
uniswapV2Router
.swapExactTokensForETHSupportingFeeOnTransferTokens(
marketingTokenAmount,
0,
pathWallet,
address(marketingWallet),
block.timestamp
)
{} catch {}
}
if (liquidityTokenAmount > 0) {
uint256 half = liquidityTokenAmount / 2;
uint256 otherHalf = liquidityTokenAmount - half;
try
uniswapV2Router
.swapExactTokensForETHSupportingFeeOnTransferTokens(
half,
0,
pathWallet,
address(this),
block.timestamp
)
{} catch {}
uint256 contractEthBalance = address(this).balance;
if (contractEthBalance > 0) {
try
uniswapV2Router.addLiquidityETH{value: contractEthBalance}(
address(this),
otherHalf,
0,
0,
address(0xdead),
block.timestamp
)
{} catch {}
}
}
marketingTaxAmount = 0;
liquidityTaxAmount = 0;
}
function manualSwapBack() external {
uint256 contractTokenBalance = balanceOf(address(this));
require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");
swapBack();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludedFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","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":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"timeLiquify","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e060405234801561000f575f5ffd5b5061001e6107f460201b60201c565b6040518060400160405280600981526020017f476f6c64656e52617400000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f524154530000000000000000000000000000000000000000000000000000000081525081600390816100999190611abc565b5080600490816100a99190611abc565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361011c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101139190611bca565b60405180910390fd5b61012b8161082c60201b60201c565b5061015261013d6108ef60201b60201c565b6825713fcf914a8d000061091760201b60201c565b60646006819055506064600781905550610190600981905550610190600a819055506127106080818152505073786ba6e602253df257d6930e664ef93b793ad34b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271060016101e561099c60201b60201c565b6101ef9190611c10565b6101f99190611c7e565b600d819055506001600e5f6101000a81548160ff0219169083151502179055505f6102286109a560201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cd9190611cdc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610334573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103589190611cdc565b6040518363ffffffff1660e01b8152600401610375929190611d07565b6020604051808303815f875af1158015610391573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b59190611cdc565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505061041b3060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610a5c60201b60201c565b5f61dead90505f5f9050600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f6104e46108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f6106f36108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050612145565b5f60384614806108045750600146145b156108255773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610829565b3390505b90565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610987575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161097e9190611bca565b60405180910390fd5b6109985f8383610a7460201b60201c565b5050565b5f600254905090565b5f603846036109ca577310ed43c718714eb63d5aa57b78b54704e256024e9050610a59565b606146036109ee5773d99d1c33f9fc3444f8101754abc46c52416550d19050610a59565b60014614806109fd5750600546145b15610a1e57737a250d5630b4cf539739df2c5dacb4c659f2488d9050610a59565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090611dae565b60405180910390fd5b90565b610a6f838383600161104760201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ad957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610af457610aef83838361121660201b60201c565b611042565b5f8103610b1157610b0c83835f61121660201b60201c565b611042565b60c05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b695742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610bcc5750610bca8261142f60201b60201c565b155b8015610be45750600e60019054906101000a900460ff165b8015610bfe5750610e10600f54610bfb9190611dcc565b42105b15610c855760646001610c1561099c60201b60201c565b610c1f9190611c10565b610c299190611c7e565b81610c398461148160201b60201c565b610c439190611dcc565b1115610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611e49565b60405180910390fd5b5b5f610c953061148160201b60201c565b90505f600d548210159050808015610cba5750600c60149054906101000a900460ff16155b8015610d0c575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015610d235750600e5f9054906101000a900460ff165b8015610d685750610d386108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015610dad5750610d7d6108ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015610dc757505f600b54600854610dc59190611dcc565b115b15610ddb57610dda6114c660201b60201c565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610e7b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80610e925750600c60149054906101000a900460ff165b15610e9b575f90505b801561102d575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610f375760805186600654610f099190611c10565b610f139190611c7e565b905060805186600954610f269190611c10565b610f309190611c7e565b9150610fc2565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610fc15760805186600754610f979190611c10565b610fa19190611c7e565b905060805186600a54610fb49190611c10565b610fbe9190611c7e565b91505b5b81600b5f828254610fd39190611dcc565b925050819055508060085f828254610feb9190611dcc565b925050819055505f8183610fff9190611dcc565b90505f8111156110295780876110159190611e67565b965061102889308361121660201b60201c565b5b5050505b61103e86868661121660201b60201c565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110b7575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110ae9190611bca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611127575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161111e9190611bca565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611210578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112079190611ea9565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611266578060025f82825461125a9190611dcc565b92505081905550611334565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156112ef578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016112e693929190611ec2565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137b578060025f82825403925050819055506113c5565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114229190611ea9565b60405180910390a3505050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156114fd576114fc611889565b5b60405190808252806020026020018201604052801561152b5781602001602082028036833780820191505090505b50905030815f8151811061154257611541611ef7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb9190611cdc565b816001815181106115ff576115fe611ef7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6116493061148160201b60201c565b90505f600854600b5461165c9190611dcc565b90505f81600b548461166e9190611c10565b6116789190611c7e565b90505f81846116879190611e67565b90505f82111561171f5760a05173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016116f5959493929190612014565b5f604051808303815f87803b15801561170c575f5ffd5b505af192505050801561171d575060015b505b5f811115611850575f6002826117359190611c7e565b90505f81836117449190611e67565b905060a05173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611789959493929190612014565b5f604051808303815f87803b1580156117a0575f5ffd5b505af19250505080156117b1575060015b505f4790505f81111561184c5760a05173ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b81526004016118069695949392919061206c565b60606040518083038185885af19350505050801561184257506040513d601f19601f8201168201806040525081019061183f91906120f5565b60015b1561184b575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806118fa57607f821691505b60208210810361190d5761190c6118b6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261196f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611934565b6119798683611934565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6119bd6119b86119b384611991565b61199a565b611991565b9050919050565b5f819050919050565b6119d6836119a3565b6119ea6119e2826119c4565b848454611940565b825550505050565b5f5f905090565b611a016119f2565b611a0c8184846119cd565b505050565b5b81811015611a2f57611a245f826119f9565b600181019050611a12565b5050565b601f821115611a7457611a4581611913565b611a4e84611925565b81016020851015611a5d578190505b611a71611a6985611925565b830182611a11565b50505b505050565b5f82821c905092915050565b5f611a945f1984600802611a79565b1980831691505092915050565b5f611aac8383611a85565b9150826002028217905092915050565b611ac58261187f565b67ffffffffffffffff811115611ade57611add611889565b5b611ae882546118e3565b611af3828285611a33565b5f60209050601f831160018114611b24575f8415611b12578287015190505b611b1c8582611aa1565b865550611b83565b601f198416611b3286611913565b5f5b82811015611b5957848901518255600182019150602085019450602081019050611b34565b86831015611b765784890151611b72601f891682611a85565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611bb482611b8b565b9050919050565b611bc481611baa565b82525050565b5f602082019050611bdd5f830184611bbb565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c1a82611991565b9150611c2583611991565b9250828202611c3381611991565b91508282048414831517611c4a57611c49611be3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611c8882611991565b9150611c9383611991565b925082611ca357611ca2611c51565b5b828204905092915050565b5f5ffd5b611cbb81611baa565b8114611cc5575f5ffd5b50565b5f81519050611cd681611cb2565b92915050565b5f60208284031215611cf157611cf0611cae565b5b5f611cfe84828501611cc8565b91505092915050565b5f604082019050611d1a5f830185611bbb565b611d276020830184611bbb565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f611d98602383611d2e565b9150611da382611d3e565b604082019050919050565b5f6020820190508181035f830152611dc581611d8c565b9050919050565b5f611dd682611991565b9150611de183611991565b9250828201905080821115611df957611df8611be3565b5b92915050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f611e33601b83611d2e565b9150611e3e82611dff565b602082019050919050565b5f6020820190508181035f830152611e6081611e27565b9050919050565b5f611e7182611991565b9150611e7c83611991565b9250828203905081811115611e9457611e93611be3565b5b92915050565b611ea381611991565b82525050565b5f602082019050611ebc5f830184611e9a565b92915050565b5f606082019050611ed55f830186611bbb565b611ee26020830185611e9a565b611eef6040830184611e9a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f611f47611f42611f3d84611f24565b61199a565b611991565b9050919050565b611f5781611f2d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f8f81611baa565b82525050565b5f611fa08383611f86565b60208301905092915050565b5f602082019050919050565b5f611fc282611f5d565b611fcc8185611f67565b9350611fd783611f77565b805f5b83811015612007578151611fee8882611f95565b9750611ff983611fac565b925050600181019050611fda565b5085935050505092915050565b5f60a0820190506120275f830188611e9a565b6120346020830187611f4e565b81810360408301526120468186611fb8565b90506120556060830185611bbb565b6120626080830184611e9a565b9695505050505050565b5f60c08201905061207f5f830189611bbb565b61208c6020830188611e9a565b6120996040830187611f4e565b6120a66060830186611f4e565b6120b36080830185611bbb565b6120c060a0830184611e9a565b979650505050505050565b6120d481611991565b81146120de575f5ffd5b50565b5f815190506120ef816120cb565b92915050565b5f5f5f6060848603121561210c5761210b611cae565b5b5f612119868287016120e1565b935050602061212a868287016120e1565b925050604061213b868287016120e1565b9150509250925092565b60805160a05160c051613d9e6121ae5f395f8181610eaa015261245101525f8181610b4101528181611d3a01528181611e6701528181611f3a0152611fd001525f81816113440152818161282c01528181612867015281816128f601526129310152613d9e5ff3fe608060405260043610610249575f3560e01c806366eb37851161013857806396ce0795116100b5578063d54f7d5e11610079578063d54f7d5e14610852578063d63cad221461087c578063dd62ed3e146108a4578063e2f45605146108e0578063f2fde38b1461090a578063f9d0831a146109325761024a565b806396ce0795146107725780639a7a23d61461079c578063a9059cbb146107c4578063afa4f3b214610800578063b7235ad0146108285761024a565b806372398aa8116100fc57806372398aa81461068e57806375f0a874146106b85780637949a403146106e25780638da5cb5b1461071e57806395d89b41146107485761024a565b806366eb3785146105c05780636dd3d39f146105d657806370a0823114610612578063715018a61461064e578063721e6233146106645761024a565b8063248ba7ed116101c65780634685c6571161018a5780634685c657146104de57806349bd5a5e146105085780634fbee1931461053257806352dfc8d01461056e5780635d098b38146105985761024a565b8063248ba7ed1461040e5780632b549ad114610438578063313ce56714610462578063412201041461048c57806342d0b0bc146104b45761024a565b80631694505e1161020d5780631694505e1461032e57806318160ddd146103585780631f88a23e1461038257806323b872dd146103aa578063247b912d146103e65761024a565b806305a1f36d1461024c57806306fdde0314610274578063095ea7b31461029e5780630abc8e7b146102da5780630c4f65bd146103045761024a565b5b005b348015610257575f5ffd5b50610272600480360381019061026d9190612cd0565b61095a565b005b34801561027f575f5ffd5b50610288610a4f565b6040516102959190612d7e565b60405180910390f35b3480156102a9575f5ffd5b506102c460048036038101906102bf9190612df8565b610adf565b6040516102d19190612e50565b60405180910390f35b3480156102e5575f5ffd5b506102ee610b01565b6040516102fb9190612e78565b60405180910390f35b34801561030f575f5ffd5b50610318610b07565b6040516103259190612ea0565b60405180910390f35b348015610339575f5ffd5b50610342610b3f565b60405161034f9190612f14565b60405180910390f35b348015610363575f5ffd5b5061036c610b63565b6040516103799190612e78565b60405180910390f35b34801561038d575f5ffd5b506103a860048036038101906103a39190612f57565b610b6c565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190612f82565b610c1b565b6040516103dd9190612e50565b60405180910390f35b3480156103f1575f5ffd5b5061040c60048036038101906104079190612cd0565b610c49565b005b348015610419575f5ffd5b50610422610d3e565b60405161042f9190612e78565b60405180910390f35b348015610443575f5ffd5b5061044c610d44565b6040516104599190612e78565b60405180910390f35b34801561046d575f5ffd5b50610476610d4a565b6040516104839190612fed565b60405180910390f35b348015610497575f5ffd5b506104b260048036038101906104ad9190613006565b610d52565b005b3480156104bf575f5ffd5b506104c8610e8f565b6040516104d59190612e78565b60405180910390f35b3480156104e9575f5ffd5b506104f2610e95565b6040516104ff9190612e50565b60405180910390f35b348015610513575f5ffd5b5061051c610ea8565b6040516105299190612ea0565b60405180910390f35b34801561053d575f5ffd5b5061055860048036038101906105539190613044565b610ecc565b6040516105659190612e50565b60405180910390f35b348015610579575f5ffd5b50610582610f1e565b60405161058f9190612e50565b60405180910390f35b3480156105a3575f5ffd5b506105be60048036038101906105b99190613044565b610f30565b005b3480156105cb575f5ffd5b506105d4611104565b005b3480156105e1575f5ffd5b506105fc60048036038101906105f79190613044565b61115d565b6040516106099190612e50565b60405180910390f35b34801561061d575f5ffd5b5061063860048036038101906106339190613044565b6111af565b6040516106459190612e78565b60405180910390f35b348015610659575f5ffd5b506106626111f4565b005b34801561066f575f5ffd5b50610678611207565b6040516106859190612e78565b60405180910390f35b348015610699575f5ffd5b506106a261120d565b6040516106af9190612e78565b60405180910390f35b3480156106c3575f5ffd5b506106cc611213565b6040516106d99190612ea0565b60405180910390f35b3480156106ed575f5ffd5b5061070860048036038101906107039190613044565b611238565b6040516107159190612e50565b60405180910390f35b348015610729575f5ffd5b5061073261128a565b60405161073f9190612ea0565b60405180910390f35b348015610753575f5ffd5b5061075c6112b2565b6040516107699190612d7e565b60405180910390f35b34801561077d575f5ffd5b50610786611342565b6040516107939190612e78565b60405180910390f35b3480156107a7575f5ffd5b506107c260048036038101906107bd9190613006565b611366565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190612df8565b6114a3565b6040516107f79190612e50565b60405180910390f35b34801561080b575f5ffd5b506108266004803603810190610821919061306f565b6114c5565b005b348015610833575f5ffd5b5061083c611596565b6040516108499190612e78565b60405180910390f35b34801561085d575f5ffd5b5061086661159c565b6040516108739190612ea0565b60405180910390f35b348015610887575f5ffd5b506108a2600480360381019061089d9190613006565b611653565b005b3480156108af575f5ffd5b506108ca60048036038101906108c5919061309a565b611790565b6040516108d79190612e78565b60405180910390f35b3480156108eb575f5ffd5b506108f4611812565b6040516109019190612e78565b60405180910390f35b348015610915575f5ffd5b50610930600480360381019061092b9190613044565b611818565b005b34801561093d575f5ffd5b5061095860048036038101906109539190613044565b61189c565b005b610962611a3e565b8160065414158061097557508060095414155b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90613122565b60405180910390fd5b6107d081836109c3919061316d565b1115610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906131ea565b60405180910390fd5b81600681905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610a43929190613208565b60405180910390a15050565b606060038054610a5e9061325c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061325c565b8015610ad55780601f10610aac57610100808354040283529160200191610ad5565b820191905f5260205f20905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b5f5f610ae9611ac5565b9050610af6818585611acc565b600191505092915050565b60065481565b5f6038461480610b175750600146145b15610b385773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610b3c565b3390505b90565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b74611a3e565b801515600e5f9054906101000a900460ff16151503610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906132d6565b60405180910390fd5b80600e5f6101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c109190612e50565b60405180910390a150565b5f5f610c25611ac5565b9050610c32858285611ade565b610c3d858585611b70565b60019150509392505050565b610c51611a3e565b81600754141580610c64575080600a5414155b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061333e565b60405180910390fd5b6107d08183610cb2919061316d565b1115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea906133a6565b60405180910390fd5b8160078190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d32929190613208565b60405180910390a15050565b60075481565b60085481565b5f6009905090565b610d5a611a3e565b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613434565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb47708782604051610e839190612e50565b60405180910390a25050565b600a5481565b600e60019054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600e5f9054906101000a900460ff1681565b610f38611a3e565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906134c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613550565b60405180910390fd5b61103e81611c60565b1561107e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611075906135de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b5f61110e306111af565b90505f8111611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613646565b60405180910390fd5b61115a611c82565b50565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111fc611a3e565b6112055f6120ad565b565b60095481565b600f5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c19061325c565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed9061325c565b80156113385780601f1061130f57610100808354040283529160200191611338565b820191905f5260205f20905b81548152906001019060200180831161131b57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61136e611a3e565b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906136d4565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516114979190612e50565b60405180910390a25050565b5f5f6114ad611ac5565b90506114ba818585611b70565b600191505092915050565b6114cd611a3e565b80600d5403611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613762565b60405180910390fd5b6001811015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906137f0565b60405180910390fd5b80600d819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161158b9190612e78565b60405180910390a150565b600b5481565b5f603846036115c1577310ed43c718714eb63d5aa57b78b54704e256024e9050611650565b606146036115e55773d99d1c33f9fc3444f8101754abc46c52416550d19050611650565b60014614806115f45750600546145b1561161557737a250d5630b4cf539739df2c5dacb4c659f2488d9050611650565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061387e565b60405180910390fd5b90565b61165b611a3e565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613434565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516117849190612e50565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b611820611a3e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611890575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118879190612ea0565b60405180910390fd5b611899816120ad565b50565b6118a4611a3e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906138e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198e573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611988573d5f5f3e3d5ffd5b50611a3b565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119cc9190612ea0565b602060405180830381865afa1580156119e7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613918565b9050611a3833828473ffffffffffffffffffffffffffffffffffffffff166121709092919063ffffffff16565b50505b50565b611a46611ac5565b73ffffffffffffffffffffffffffffffffffffffff16611a6461128a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac357611a87611ac5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611aba9190612ea0565b60405180910390fd5b565b5f33905090565b611ad983838360016121ef565b505050565b5f611ae98484611790565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b6a5781811015611b5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b5293929190613943565b60405180910390fd5b611b6984848484035f6121ef565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be0575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611bd79190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611c479190612ea0565b60405180910390fd5b611c5b8383836123be565b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611cb957611cb8613978565b5b604051908082528060200260200182016040528015611ce75781602001602082028036833780820191505090505b50905030815f81518110611cfe57611cfd6139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906139e6565b81600181518110611dd957611dd86139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611e1d306111af565b90505f600854600b54611e30919061316d565b90505f81600b5484611e429190613a11565b611e4c9190613a7f565b90505f8184611e5b9190613aaf565b90505f821115611f11577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ee7959493929190613bd2565b5f604051808303815f87803b158015611efe575f5ffd5b505af1925050508015611f0f575060015b505b5f81111561207e575f600282611f279190613a7f565b90505f8183611f369190613aaf565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611f99959493929190613bd2565b5f604051808303815f87803b158015611fb0575f5ffd5b505af1925050508015611fc1575060015b505f4790505f81111561207a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b815260040161203496959493929190613c2a565b60606040518083038185885af19350505050801561207057506040513d601f19601f8201168201806040525081019061206d9190613c89565b60015b15612079575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016121a3929190613cd9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129e5565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361225f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122569190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cf575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016122c69190612ea0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156123b8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123af9190612e78565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061242357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561243857612433838383612a80565b6129e0565b5f810361244f5761244a83835f612a80565b6129e0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c55742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612522575061252082611238565b155b801561253a5750600e60019054906101000a900460ff165b80156125545750610e10600f54612551919061316d565b42105b156125cf5760646001612565610b63565b61256f9190613a11565b6125799190613a7f565b81612583846111af565b61258d919061316d565b11156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613d4a565b60405180910390fd5b5b5f6125d9306111af565b90505f600d5482101590508080156125fe5750600c60149054906101000a900460ff16155b8015612650575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126675750600e5f9054906101000a900460ff165b80156126a6575061267661128a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126e557506126b561128a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156126ff57505f600b546008546126fd919061316d565b115b1561270d5761270c611c82565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ad575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806127c45750600c60149054906101000a900460ff165b156127cd575f90505b80156129d1575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a5577f0000000000000000000000000000000000000000000000000000000000000000866006546128599190613a11565b6128639190613a7f565b90507f0000000000000000000000000000000000000000000000000000000000000000866009546128949190613a11565b61289e9190613a7f565b915061296c565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561296b577f0000000000000000000000000000000000000000000000000000000000000000866007546129239190613a11565b61292d9190613a7f565b90507f000000000000000000000000000000000000000000000000000000000000000086600a5461295e9190613a11565b6129689190613a7f565b91505b5b81600b5f82825461297d919061316d565b925050819055508060085f828254612995919061316d565b925050819055505f81836129a9919061316d565b90505f8111156129cd5780876129bf9190613aaf565b96506129cc893083612a80565b5b5050505b6129dc868686612a80565b5050505b505050565b5f5f60205f8451602086015f885af180612a04576040513d5f823e3d81fd5b3d92505f519150505f8214612a1d576001811415612a38565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612a7a57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612a719190612ea0565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad0578060025f828254612ac4919061316d565b92505081905550612b9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612b5093929190613943565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be5578060025f8282540392505081905550612c2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c8c9190612e78565b60405180910390a3505050565b5f5ffd5b5f819050919050565b612caf81612c9d565b8114612cb9575f5ffd5b50565b5f81359050612cca81612ca6565b92915050565b5f5f60408385031215612ce657612ce5612c99565b5b5f612cf385828601612cbc565b9250506020612d0485828601612cbc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d5082612d0e565b612d5a8185612d18565b9350612d6a818560208601612d28565b612d7381612d36565b840191505092915050565b5f6020820190508181035f830152612d968184612d46565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dc782612d9e565b9050919050565b612dd781612dbd565b8114612de1575f5ffd5b50565b5f81359050612df281612dce565b92915050565b5f5f60408385031215612e0e57612e0d612c99565b5b5f612e1b85828601612de4565b9250506020612e2c85828601612cbc565b9150509250929050565b5f8115159050919050565b612e4a81612e36565b82525050565b5f602082019050612e635f830184612e41565b92915050565b612e7281612c9d565b82525050565b5f602082019050612e8b5f830184612e69565b92915050565b612e9a81612dbd565b82525050565b5f602082019050612eb35f830184612e91565b92915050565b5f819050919050565b5f612edc612ed7612ed284612d9e565b612eb9565b612d9e565b9050919050565b5f612eed82612ec2565b9050919050565b5f612efe82612ee3565b9050919050565b612f0e81612ef4565b82525050565b5f602082019050612f275f830184612f05565b92915050565b612f3681612e36565b8114612f40575f5ffd5b50565b5f81359050612f5181612f2d565b92915050565b5f60208284031215612f6c57612f6b612c99565b5b5f612f7984828501612f43565b91505092915050565b5f5f5f60608486031215612f9957612f98612c99565b5b5f612fa686828701612de4565b9350506020612fb786828701612de4565b9250506040612fc886828701612cbc565b9150509250925092565b5f60ff82169050919050565b612fe781612fd2565b82525050565b5f6020820190506130005f830184612fde565b92915050565b5f5f6040838503121561301c5761301b612c99565b5b5f61302985828601612de4565b925050602061303a85828601612f43565b9150509250929050565b5f6020828403121561305957613058612c99565b5b5f61306684828501612de4565b91505092915050565b5f6020828403121561308457613083612c99565b5b5f61309184828501612cbc565b91505092915050565b5f5f604083850312156130b0576130af612c99565b5b5f6130bd85828601612de4565b92505060206130ce85828601612de4565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e7400005f82015250565b5f61310c601e83612d18565b9150613117826130d8565b602082019050919050565b5f6020820190508181035f83015261313981613100565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61317782612c9d565b915061318283612c9d565b925082820190508082111561319a57613199613140565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e20323025005f82015250565b5f6131d4601f83612d18565b91506131df826131a0565b602082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b5f60408201905061321b5f830185612e69565b6132286020830184612e69565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327357607f821691505b6020821081036132865761328561322f565b5b50919050565b7f537761704261636b20616c7265616479206f6e207374617475730000000000005f82015250565b5f6132c0601a83612d18565b91506132cb8261328c565b602082019050919050565b5f6020820190508181035f8301526132ed816132b4565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74005f82015250565b5f613328601f83612d18565b9150613333826132f4565b602082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203230255f82015250565b5f613390602083612d18565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61341e602a83612d18565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f6134ac602883612d18565b91506134b782613452565b604082019050919050565b5f6020820190508181035f8301526134d9816134a0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61353a602b83612d18565b9150613545826134e0565b604082019050919050565b5f6020820190508181035f8301526135678161352e565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6135c8602583612d18565b91506135d38261356e565b604082019050919050565b5f6020820190508181035f8301526135f5816135bc565b9050919050565b7f43616e742053776170204261636b203020546f6b656e210000000000000000005f82015250565b5f613630601783612d18565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c755f8201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b5f6136be602d83612d18565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e2074685f8201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b5f61374c602983612d18565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f416d6f756e74206d75737420626520657175616c206f722067726561746572205f8201527f7468616e20312057656900000000000000000000000000000000000000000000602082015250565b5f6137da602a83612d18565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602383612d18565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e735f82015250565b5f6138d0602083612d18565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f8151905061391281612ca6565b92915050565b5f6020828403121561392d5761392c612c99565b5b5f61393a84828501613904565b91505092915050565b5f6060820190506139565f830186612e91565b6139636020830185612e69565b6139706040830184612e69565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139e081612dce565b92915050565b5f602082840312156139fb576139fa612c99565b5b5f613a08848285016139d2565b91505092915050565b5f613a1b82612c9d565b9150613a2683612c9d565b9250828202613a3481612c9d565b91508282048414831517613a4b57613a4a613140565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a8982612c9d565b9150613a9483612c9d565b925082613aa457613aa3613a52565b5b828204905092915050565b5f613ab982612c9d565b9150613ac483612c9d565b9250828203905081811115613adc57613adb613140565b5b92915050565b5f819050919050565b5f613b05613b00613afb84613ae2565b612eb9565b612c9d565b9050919050565b613b1581613aeb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b4d81612dbd565b82525050565b5f613b5e8383613b44565b60208301905092915050565b5f602082019050919050565b5f613b8082613b1b565b613b8a8185613b25565b9350613b9583613b35565b805f5b83811015613bc5578151613bac8882613b53565b9750613bb783613b6a565b925050600181019050613b98565b5085935050505092915050565b5f60a082019050613be55f830188612e69565b613bf26020830187613b0c565b8181036040830152613c048186613b76565b9050613c136060830185612e91565b613c206080830184612e69565b9695505050505050565b5f60c082019050613c3d5f830189612e91565b613c4a6020830188612e69565b613c576040830187613b0c565b613c646060830186613b0c565b613c716080830185612e91565b613c7e60a0830184612e69565b979650505050505050565b5f5f5f60608486031215613ca057613c9f612c99565b5b5f613cad86828701613904565b9350506020613cbe86828701613904565b9250506040613ccf86828701613904565b9150509250925092565b5f604082019050613cec5f830185612e91565b613cf96020830184612e69565b9392505050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f613d34601b83612d18565b9150613d3f82613d00565b602082019050919050565b5f6020820190508181035f830152613d6181613d28565b905091905056fea26469706673582212202f588ce69a7713bf99fe41cb5fe7e7c0ff0378bfba88556b31ae6f307e1a048564736f6c634300081c0033
Deployed Bytecode
0x608060405260043610610249575f3560e01c806366eb37851161013857806396ce0795116100b5578063d54f7d5e11610079578063d54f7d5e14610852578063d63cad221461087c578063dd62ed3e146108a4578063e2f45605146108e0578063f2fde38b1461090a578063f9d0831a146109325761024a565b806396ce0795146107725780639a7a23d61461079c578063a9059cbb146107c4578063afa4f3b214610800578063b7235ad0146108285761024a565b806372398aa8116100fc57806372398aa81461068e57806375f0a874146106b85780637949a403146106e25780638da5cb5b1461071e57806395d89b41146107485761024a565b806366eb3785146105c05780636dd3d39f146105d657806370a0823114610612578063715018a61461064e578063721e6233146106645761024a565b8063248ba7ed116101c65780634685c6571161018a5780634685c657146104de57806349bd5a5e146105085780634fbee1931461053257806352dfc8d01461056e5780635d098b38146105985761024a565b8063248ba7ed1461040e5780632b549ad114610438578063313ce56714610462578063412201041461048c57806342d0b0bc146104b45761024a565b80631694505e1161020d5780631694505e1461032e57806318160ddd146103585780631f88a23e1461038257806323b872dd146103aa578063247b912d146103e65761024a565b806305a1f36d1461024c57806306fdde0314610274578063095ea7b31461029e5780630abc8e7b146102da5780630c4f65bd146103045761024a565b5b005b348015610257575f5ffd5b50610272600480360381019061026d9190612cd0565b61095a565b005b34801561027f575f5ffd5b50610288610a4f565b6040516102959190612d7e565b60405180910390f35b3480156102a9575f5ffd5b506102c460048036038101906102bf9190612df8565b610adf565b6040516102d19190612e50565b60405180910390f35b3480156102e5575f5ffd5b506102ee610b01565b6040516102fb9190612e78565b60405180910390f35b34801561030f575f5ffd5b50610318610b07565b6040516103259190612ea0565b60405180910390f35b348015610339575f5ffd5b50610342610b3f565b60405161034f9190612f14565b60405180910390f35b348015610363575f5ffd5b5061036c610b63565b6040516103799190612e78565b60405180910390f35b34801561038d575f5ffd5b506103a860048036038101906103a39190612f57565b610b6c565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190612f82565b610c1b565b6040516103dd9190612e50565b60405180910390f35b3480156103f1575f5ffd5b5061040c60048036038101906104079190612cd0565b610c49565b005b348015610419575f5ffd5b50610422610d3e565b60405161042f9190612e78565b60405180910390f35b348015610443575f5ffd5b5061044c610d44565b6040516104599190612e78565b60405180910390f35b34801561046d575f5ffd5b50610476610d4a565b6040516104839190612fed565b60405180910390f35b348015610497575f5ffd5b506104b260048036038101906104ad9190613006565b610d52565b005b3480156104bf575f5ffd5b506104c8610e8f565b6040516104d59190612e78565b60405180910390f35b3480156104e9575f5ffd5b506104f2610e95565b6040516104ff9190612e50565b60405180910390f35b348015610513575f5ffd5b5061051c610ea8565b6040516105299190612ea0565b60405180910390f35b34801561053d575f5ffd5b5061055860048036038101906105539190613044565b610ecc565b6040516105659190612e50565b60405180910390f35b348015610579575f5ffd5b50610582610f1e565b60405161058f9190612e50565b60405180910390f35b3480156105a3575f5ffd5b506105be60048036038101906105b99190613044565b610f30565b005b3480156105cb575f5ffd5b506105d4611104565b005b3480156105e1575f5ffd5b506105fc60048036038101906105f79190613044565b61115d565b6040516106099190612e50565b60405180910390f35b34801561061d575f5ffd5b5061063860048036038101906106339190613044565b6111af565b6040516106459190612e78565b60405180910390f35b348015610659575f5ffd5b506106626111f4565b005b34801561066f575f5ffd5b50610678611207565b6040516106859190612e78565b60405180910390f35b348015610699575f5ffd5b506106a261120d565b6040516106af9190612e78565b60405180910390f35b3480156106c3575f5ffd5b506106cc611213565b6040516106d99190612ea0565b60405180910390f35b3480156106ed575f5ffd5b5061070860048036038101906107039190613044565b611238565b6040516107159190612e50565b60405180910390f35b348015610729575f5ffd5b5061073261128a565b60405161073f9190612ea0565b60405180910390f35b348015610753575f5ffd5b5061075c6112b2565b6040516107699190612d7e565b60405180910390f35b34801561077d575f5ffd5b50610786611342565b6040516107939190612e78565b60405180910390f35b3480156107a7575f5ffd5b506107c260048036038101906107bd9190613006565b611366565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190612df8565b6114a3565b6040516107f79190612e50565b60405180910390f35b34801561080b575f5ffd5b506108266004803603810190610821919061306f565b6114c5565b005b348015610833575f5ffd5b5061083c611596565b6040516108499190612e78565b60405180910390f35b34801561085d575f5ffd5b5061086661159c565b6040516108739190612ea0565b60405180910390f35b348015610887575f5ffd5b506108a2600480360381019061089d9190613006565b611653565b005b3480156108af575f5ffd5b506108ca60048036038101906108c5919061309a565b611790565b6040516108d79190612e78565b60405180910390f35b3480156108eb575f5ffd5b506108f4611812565b6040516109019190612e78565b60405180910390f35b348015610915575f5ffd5b50610930600480360381019061092b9190613044565b611818565b005b34801561093d575f5ffd5b5061095860048036038101906109539190613044565b61189c565b005b610962611a3e565b8160065414158061097557508060095414155b6109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90613122565b60405180910390fd5b6107d081836109c3919061316d565b1115610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906131ea565b60405180910390fd5b81600681905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610a43929190613208565b60405180910390a15050565b606060038054610a5e9061325c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8a9061325c565b8015610ad55780601f10610aac57610100808354040283529160200191610ad5565b820191905f5260205f20905b815481529060010190602001808311610ab857829003601f168201915b5050505050905090565b5f5f610ae9611ac5565b9050610af6818585611acc565b600191505092915050565b60065481565b5f6038461480610b175750600146145b15610b385773cad8ae113d82601ff14cc8bcbf156df33fdc930a9050610b3c565b3390505b90565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b5f600254905090565b610b74611a3e565b801515600e5f9054906101000a900460ff16151503610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906132d6565b60405180910390fd5b80600e5f6101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c109190612e50565b60405180910390a150565b5f5f610c25611ac5565b9050610c32858285611ade565b610c3d858585611b70565b60019150509392505050565b610c51611a3e565b81600754141580610c64575080600a5414155b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061333e565b60405180910390fd5b6107d08183610cb2919061316d565b1115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea906133a6565b60405180910390fd5b8160078190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d32929190613208565b60405180910390a15050565b60075481565b60085481565b5f6009905090565b610d5a611a3e565b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613434565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9f7d06cb9b03b01b6fb89199a37bd0825030434f6a9f909100d20dfeeb47708782604051610e839190612e50565b60405180910390a25050565b600a5481565b600e60019054906101000a900460ff1681565b7f00000000000000000000000050528216e3a3bca66c4064fce3d50aea8d9e68fa81565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600e5f9054906101000a900460ff1681565b610f38611a3e565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906134c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90613550565b60405180910390fd5b61103e81611c60565b1561107e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611075906135de565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b5f61110e306111af565b90505f8111611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613646565b60405180910390fd5b61115a611c82565b50565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111fc611a3e565b6112055f6120ad565b565b60095481565b600f5481565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c19061325c565b80601f01602080910402602001604051908101604052809291908181526020018280546112ed9061325c565b80156113385780601f1061130f57610100808354040283529160200191611338565b820191905f5260205f20905b81548152906001019060200180831161131b57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000271081565b61136e611a3e565b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f4906136d4565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205826040516114979190612e50565b60405180910390a25050565b5f5f6114ad611ac5565b90506114ba818585611b70565b600191505092915050565b6114cd611a3e565b80600d5403611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613762565b60405180910390fd5b6001811015611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c906137f0565b60405180910390fd5b80600d819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161158b9190612e78565b60405180910390a150565b600b5481565b5f603846036115c1577310ed43c718714eb63d5aa57b78b54704e256024e9050611650565b606146036115e55773d99d1c33f9fc3444f8101754abc46c52416550d19050611650565b60014614806115f45750600546145b1561161557737a250d5630b4cf539739df2c5dacb4c659f2488d9050611650565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061387e565b60405180910390fd5b90565b61165b611a3e565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190613434565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1826040516117849190612e50565b60405180910390a25050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b611820611a3e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611890575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118879190612ea0565b60405180910390fd5b611899816120ad565b50565b6118a4611a3e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906138e6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198e573373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611988573d5f5f3e3d5ffd5b50611a3b565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119cc9190612ea0565b602060405180830381865afa1580156119e7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613918565b9050611a3833828473ffffffffffffffffffffffffffffffffffffffff166121709092919063ffffffff16565b50505b50565b611a46611ac5565b73ffffffffffffffffffffffffffffffffffffffff16611a6461128a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac357611a87611ac5565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611aba9190612ea0565b60405180910390fd5b565b5f33905090565b611ad983838360016121ef565b505050565b5f611ae98484611790565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b6a5781811015611b5b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b5293929190613943565b60405180910390fd5b611b6984848484035f6121ef565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611be0575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611bd79190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c50575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611c479190612ea0565b60405180910390fd5b611c5b8383836123be565b505050565b5f5f8273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600c60146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115611cb957611cb8613978565b5b604051908082528060200260200182016040528015611ce75781602001602082028036833780820191505090505b50905030815f81518110611cfe57611cfd6139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906139e6565b81600181518110611dd957611dd86139a5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611e1d306111af565b90505f600854600b54611e30919061316d565b90505f81600b5484611e429190613a11565b611e4c9190613a7f565b90505f8184611e5b9190613aaf565b90505f821115611f11577f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f88600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611ee7959493929190613bd2565b5f604051808303815f87803b158015611efe575f5ffd5b505af1925050508015611f0f575060015b505b5f81111561207e575f600282611f279190613a7f565b90505f8183611f369190613aaf565b90507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8a30426040518663ffffffff1660e01b8152600401611f99959493929190613bd2565b5f604051808303815f87803b158015611fb0575f5ffd5b505af1925050508015611fc1575060015b505f4790505f81111561207a577f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f5f61dead426040518863ffffffff1660e01b815260040161203496959493929190613c2a565b60606040518083038185885af19350505050801561207057506040513d601f19601f8201168201806040525081019061206d9190613c89565b60015b15612079575050505b5b5050505b5f600b819055505f60088190555050505050505f600c60146101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ea838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016121a3929190613cd9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129e5565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361225f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122569190612ea0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122cf575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016122c69190612ea0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156123b8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123af9190612e78565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061242357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561243857612433838383612a80565b6129e0565b5f810361244f5761244a83835f612a80565b6129e0565b7f00000000000000000000000050528216e3a3bca66c4064fce3d50aea8d9e68fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c55742600f819055506001600e60016101000a81548160ff0219169083151502179055505b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612522575061252082611238565b155b801561253a5750600e60019054906101000a900460ff165b80156125545750610e10600f54612551919061316d565b42105b156125cf5760646001612565610b63565b61256f9190613a11565b6125799190613a7f565b81612583846111af565b61258d919061316d565b11156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c590613d4a565b60405180910390fd5b5b5f6125d9306111af565b90505f600d5482101590508080156125fe5750600c60149054906101000a900460ff16155b8015612650575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126675750600e5f9054906101000a900460ff165b80156126a6575061267661128a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156126e557506126b561128a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156126ff57505f600b546008546126fd919061316d565b115b1561270d5761270c611c82565b5b5f6001905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ad575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806127c45750600c60149054906101000a900460ff165b156127cd575f90505b80156129d1575f5f90505f5f905060115f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a5577f0000000000000000000000000000000000000000000000000000000000002710866006546128599190613a11565b6128639190613a7f565b90507f0000000000000000000000000000000000000000000000000000000000002710866009546128949190613a11565b61289e9190613a7f565b915061296c565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561296b577f0000000000000000000000000000000000000000000000000000000000002710866007546129239190613a11565b61292d9190613a7f565b90507f000000000000000000000000000000000000000000000000000000000000271086600a5461295e9190613a11565b6129689190613a7f565b91505b5b81600b5f82825461297d919061316d565b925050819055508060085f828254612995919061316d565b925050819055505f81836129a9919061316d565b90505f8111156129cd5780876129bf9190613aaf565b96506129cc893083612a80565b5b5050505b6129dc868686612a80565b5050505b505050565b5f5f60205f8451602086015f885af180612a04576040513d5f823e3d81fd5b3d92505f519150505f8214612a1d576001811415612a38565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b15612a7a57836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401612a719190612ea0565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad0578060025f828254612ac4919061316d565b92505081905550612b9e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b59578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612b5093929190613943565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612be5578060025f8282540392505081905550612c2f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c8c9190612e78565b60405180910390a3505050565b5f5ffd5b5f819050919050565b612caf81612c9d565b8114612cb9575f5ffd5b50565b5f81359050612cca81612ca6565b92915050565b5f5f60408385031215612ce657612ce5612c99565b5b5f612cf385828601612cbc565b9250506020612d0485828601612cbc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612d5082612d0e565b612d5a8185612d18565b9350612d6a818560208601612d28565b612d7381612d36565b840191505092915050565b5f6020820190508181035f830152612d968184612d46565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612dc782612d9e565b9050919050565b612dd781612dbd565b8114612de1575f5ffd5b50565b5f81359050612df281612dce565b92915050565b5f5f60408385031215612e0e57612e0d612c99565b5b5f612e1b85828601612de4565b9250506020612e2c85828601612cbc565b9150509250929050565b5f8115159050919050565b612e4a81612e36565b82525050565b5f602082019050612e635f830184612e41565b92915050565b612e7281612c9d565b82525050565b5f602082019050612e8b5f830184612e69565b92915050565b612e9a81612dbd565b82525050565b5f602082019050612eb35f830184612e91565b92915050565b5f819050919050565b5f612edc612ed7612ed284612d9e565b612eb9565b612d9e565b9050919050565b5f612eed82612ec2565b9050919050565b5f612efe82612ee3565b9050919050565b612f0e81612ef4565b82525050565b5f602082019050612f275f830184612f05565b92915050565b612f3681612e36565b8114612f40575f5ffd5b50565b5f81359050612f5181612f2d565b92915050565b5f60208284031215612f6c57612f6b612c99565b5b5f612f7984828501612f43565b91505092915050565b5f5f5f60608486031215612f9957612f98612c99565b5b5f612fa686828701612de4565b9350506020612fb786828701612de4565b9250506040612fc886828701612cbc565b9150509250925092565b5f60ff82169050919050565b612fe781612fd2565b82525050565b5f6020820190506130005f830184612fde565b92915050565b5f5f6040838503121561301c5761301b612c99565b5b5f61302985828601612de4565b925050602061303a85828601612f43565b9150509250929050565b5f6020828403121561305957613058612c99565b5b5f61306684828501612de4565b91505092915050565b5f6020828403121561308457613083612c99565b5b5f61309184828501612cbc565b91505092915050565b5f5f604083850312156130b0576130af612c99565b5b5f6130bd85828601612de4565b92505060206130ce85828601612de4565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e7400005f82015250565b5f61310c601e83612d18565b9150613117826130d8565b602082019050919050565b5f6020820190508181035f83015261313981613100565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61317782612c9d565b915061318283612c9d565b925082820190508082111561319a57613199613140565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e20323025005f82015250565b5f6131d4601f83612d18565b91506131df826131a0565b602082019050919050565b5f6020820190508181035f830152613201816131c8565b9050919050565b5f60408201905061321b5f830185612e69565b6132286020830184612e69565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061327357607f821691505b6020821081036132865761328561322f565b5b50919050565b7f537761704261636b20616c7265616479206f6e207374617475730000000000005f82015250565b5f6132c0601a83612d18565b91506132cb8261328c565b602082019050919050565b5f6020820190508181035f8301526132ed816132b4565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74005f82015250565b5f613328601f83612d18565b9150613333826132f4565b602082019050919050565b5f6020820190508181035f8301526133558161331c565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203230255f82015250565b5f613390602083612d18565b915061339b8261335c565b602082019050919050565b5f6020820190508181035f8301526133bd81613384565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f61341e602a83612d18565b9150613429826133c4565b604082019050919050565b5f6020820190508181035f83015261344b81613412565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f6134ac602883612d18565b91506134b782613452565b604082019050919050565b5f6020820190508181035f8301526134d9816134a0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61353a602b83612d18565b9150613545826134e0565b604082019050919050565b5f6020820190508181035f8301526135678161352e565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e5f8201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b5f6135c8602583612d18565b91506135d38261356e565b604082019050919050565b5f6020820190508181035f8301526135f5816135bc565b9050919050565b7f43616e742053776170204261636b203020546f6b656e210000000000000000005f82015250565b5f613630601783612d18565b915061363b826135fc565b602082019050919050565b5f6020820190508181035f83015261365d81613624565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c755f8201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b5f6136be602d83612d18565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e2074685f8201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b5f61374c602983612d18565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f416d6f756e74206d75737420626520657175616c206f722067726561746572205f8201527f7468616e20312057656900000000000000000000000000000000000000000000602082015250565b5f6137da602a83612d18565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574775f8201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602383612d18565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e735f82015250565b5f6138d0602083612d18565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b5f8151905061391281612ca6565b92915050565b5f6020828403121561392d5761392c612c99565b5b5f61393a84828501613904565b91505092915050565b5f6060820190506139565f830186612e91565b6139636020830185612e69565b6139706040830184612e69565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506139e081612dce565b92915050565b5f602082840312156139fb576139fa612c99565b5b5f613a08848285016139d2565b91505092915050565b5f613a1b82612c9d565b9150613a2683612c9d565b9250828202613a3481612c9d565b91508282048414831517613a4b57613a4a613140565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a8982612c9d565b9150613a9483612c9d565b925082613aa457613aa3613a52565b5b828204905092915050565b5f613ab982612c9d565b9150613ac483612c9d565b9250828203905081811115613adc57613adb613140565b5b92915050565b5f819050919050565b5f613b05613b00613afb84613ae2565b612eb9565b612c9d565b9050919050565b613b1581613aeb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b4d81612dbd565b82525050565b5f613b5e8383613b44565b60208301905092915050565b5f602082019050919050565b5f613b8082613b1b565b613b8a8185613b25565b9350613b9583613b35565b805f5b83811015613bc5578151613bac8882613b53565b9750613bb783613b6a565b925050600181019050613b98565b5085935050505092915050565b5f60a082019050613be55f830188612e69565b613bf26020830187613b0c565b8181036040830152613c048186613b76565b9050613c136060830185612e91565b613c206080830184612e69565b9695505050505050565b5f60c082019050613c3d5f830189612e91565b613c4a6020830188612e69565b613c576040830187613b0c565b613c646060830186613b0c565b613c716080830185612e91565b613c7e60a0830184612e69565b979650505050505050565b5f5f5f60608486031215613ca057613c9f612c99565b5b5f613cad86828701613904565b9350506020613cbe86828701613904565b9250506040613ccf86828701613904565b9150509250925092565b5f604082019050613cec5f830185612e91565b613cf96020830184612e69565b9392505050565b7f4d61782077616c6c65742062616c616e636520657863656564656400000000005f82015250565b5f613d34601b83612d18565b9150613d3f82613d00565b602082019050919050565b5f6020820190508181035f830152613d6181613d28565b905091905056fea26469706673582212202f588ce69a7713bf99fe41cb5fe7e7c0ff0378bfba88556b31ae6f307e1a048564736f6c634300081c0033
Deployed Bytecode Sourcemap
24168:13257:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28738:598;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3407:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4299:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24242:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27529:248;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24666:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3701:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30935:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4522:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29344:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24279:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24317:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27314:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24396:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24771:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24724:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32637:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24628:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29968:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37217:205;;;;;;;;;;;;;:::i;:::-;;31560:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3808:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8390:103;;;;;;;;;;;;;:::i;:::-;;24359:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24801:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24521:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8121:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3506:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24476:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31720:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3934:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30556:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24434:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27785:490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32266:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4124:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24588:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8501:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28283:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28738:598;8080:13;:11;:13::i;:::-;28905:16:::1;28886:15;;:35;;:91;;;;28961:16;28942:15;;:35;;28886:91;28864:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;29107:4;29087:16;29068;:35;;;;:::i;:::-;:43;;29046:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;29201:16;29183:15;:34;;;;29246:16;29228:15;:34;;;;29280:48;29293:16;29311;29280:48;;;;;;;:::i;:::-;;;;;;;;28738:598:::0;;:::o;3407:91::-;3452:13;3485:5;3478:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3407:91;:::o;4299:215::-;4397:4;4414:13;4430:12;:10;:12::i;:::-;4414:28;;4453:31;4462:5;4469:7;4478:5;4453:8;:31::i;:::-;4502:4;4495:11;;;4299:215;;;;:::o;24242:30::-;;;;:::o;27529:248::-;27577:7;27618:2;27601:13;:19;:41;;;;27641:1;27624:13;:18;27601:41;27597:173;;;27666:42;27659:49;;;;27597:173;27748:10;27741:17;;27529:248;;:::o;24666:51::-;;;:::o;3701:99::-;3753:7;3780:12;;3773:19;;3701:99;:::o;30935:224::-;8080:13;:11;:13::i;:::-;31031:6:::1;31010:27;;:17;;;;;;;;;;;:27;;::::0;31002:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31101:6;31081:17;;:26;;;;;;;;;;;;;;;;;;31123:28;31144:6;31123:28;;;;;;:::i;:::-;;;;;;;;30935:224:::0;:::o;4522:283::-;4643:4;4660:15;4678:12;:10;:12::i;:::-;4660:30;;4701:37;4717:4;4723:7;4732:5;4701:15;:37::i;:::-;4749:26;4759:4;4765:2;4769:5;4749:9;:26::i;:::-;4793:4;4786:11;;;4522:283;;;;;:::o;29344:616::-;8080:13;:11;:13::i;:::-;29515:17:::1;29495:16;;:37;;:95;;;;29573:17;29553:16;;:37;;29495:95;29473:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;29723:4;29702:17;29682;:37;;;;:::i;:::-;:45;;29660:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;29819:17;29800:16;:36;;;;29866:17;29847:16;:36;;;;29901:51;29915:17;29934;29901:51;;;;;;;:::i;:::-;;;;;;;;29344:616:::0;;:::o;24279:31::-;;;;:::o;24317:33::-;;;;:::o;27314:84::-;27364:5;27389:1;27382:8;;27314:84;:::o;31167:385::-;8080:13;:11;:13::i;:::-;31347:8:::1;31310:45;;:24;:33;31335:7;31310:33;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;31288:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:8;31436:24;:33;31461:7;31436:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;31526:7;31498:46;;;31535:8;31498:46;;;;;;:::i;:::-;;;;;;;;31167:385:::0;;:::o;24396:31::-;;;;:::o;24771:23::-;;;;;;;;;;;;;:::o;24724:38::-;;;:::o;32637:126::-;32703:4;32727:19;:28;32747:7;32727:28;;;;;;;;;;;;;;;;;;;;;;;;;32720:35;;32637:126;;;:::o;24628:29::-;;;;;;;;;;;;;:::o;29968:580::-;8080:13;:11;:13::i;:::-;30094:15:::1;;;;;;;;;;;30074:35;;:16;:35;;::::0;30052:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30238:1;30210:30;;:16;:30;;::::0;30188:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:28;30356:16;30345:10;:28::i;:::-;30344:29;30322:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;30469:16;30451:15;;:34;;;;;;;;;;;;;;;;;;30523:16;30501:39;;;;;;;;;;;;29968:580:::0;:::o;37217:205::-;37263:28;37294:24;37312:4;37294:9;:24::i;:::-;37263:55;;37362:1;37339:20;:24;37331:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37404:10;:8;:10::i;:::-;37252:170;37217:205::o;31560:152::-;31647:4;31671:24;:33;31696:7;31671:33;;;;;;;;;;;;;;;;;;;;;;;;;31664:40;;31560:152;;;:::o;3808:118::-;3873:7;3900:9;:18;3910:7;3900:18;;;;;;;;;;;;;;;;3893:25;;3808:118;;;:::o;8390:103::-;8080:13;:11;:13::i;:::-;8455:30:::1;8482:1;8455:18;:30::i;:::-;8390:103::o:0;24359:30::-;;;;:::o;24801:26::-;;;;:::o;24521:30::-;;;;;;;;;;;;;:::o;32106:152::-;32193:4;32217:27;:33;32245:4;32217:33;;;;;;;;;;;;;;;;;;;;;;;;;32210:40;;32106:152;;;:::o;8121:87::-;8167:7;8194:6;;;;;;;;;;;8187:13;;8121:87;:::o;3506:95::-;3553:13;3586:7;3579:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3506:95;:::o;24476:36::-;;;:::o;31720:378::-;8080:13;:11;:13::i;:::-;31896:6:::1;31859:43;;:27;:33;31887:4;31859:33;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;31837:138:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32022:6;31986:27;:33;32014:4;31986:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;32077:4;32046:44;;;32083:6;32046:44;;;;;;:::i;:::-;;;;;;;;31720:378:::0;;:::o;3934:182::-;4003:4;4020:13;4036:12;:10;:12::i;:::-;4020:28;;4059:27;4069:5;4076:2;4080:5;4059:9;:27::i;:::-;4104:4;4097:11;;;3934:182;;;;:::o;30556:371::-;8080:13;:11;:13::i;:::-;30677:6:::1;30655:18;;:28:::0;30633:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30781:1;30771:6;:11;;30763:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30863:6;30842:18;:27;;;;30887:32;30912:6;30887:32;;;;;;:::i;:::-;;;;;;;;30556:371:::0;:::o;24434:33::-;;;;:::o;27785:490::-;27834:7;27875:2;27858:13;:19;27854:414;;27901:42;27894:49;;;;27854:414;27982:2;27965:13;:19;27961:307;;28008:42;28001:49;;;;27961:307;28089:1;28072:13;:18;:40;;;;28111:1;28094:13;:18;28072:40;28068:200;;;28136:42;28129:49;;;;28068:200;28211:45;;;;;;;;;;:::i;:::-;;;;;;;;27785:490;;:::o;32266:363::-;8080:13;:11;:13::i;:::-;32435:8:::1;32403:40;;:19;:28;32423:7;32403:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;32381:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32555:8;32524:19;:28;32544:7;32524:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32603:7;32581:40;;;32612:8;32581:40;;;;;;:::i;:::-;;;;;;;;32266:363:::0;;:::o;4124:167::-;4229:7;4256:11;:18;4268:5;4256:18;;;;;;;;;;;;;;;:27;4275:7;4256:27;;;;;;;;;;;;;;;;4249:34;;4124:167;;;;:::o;24588:33::-;;;;:::o;8501:220::-;8080:13;:11;:13::i;:::-;8606:1:::1;8586:22;;:8;:22;;::::0;8582:93:::1;;8660:1;8632:31;;;;;;;;;;;:::i;:::-;;;;;;;;8582:93;8685:28;8704:8;8685:18;:28::i;:::-;8501:220:::0;:::o;28283:447::-;8080:13;:11;:13::i;:::-;28379:4:::1;28362:22;;:5;:22;;::::0;28354:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28455:3;28438:21;;:5;:21;;::::0;28434:126:::1;;28484:10;28476:28;;:51;28505:21;28476:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28542:7;;28434:126;28570:17;28597:5;28570:33;;28614:15;28632:10;:20;;;28661:4;28632:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28614:53;;28678:44;28702:10;28714:7;28678:10;:23;;;;:44;;;;;:::i;:::-;28343:387;;8104:1;28283:447:::0;:::o;8216:166::-;8287:12;:10;:12::i;:::-;8276:23;;:7;:5;:7::i;:::-;:23;;;8272:103;;8350:12;:10;:12::i;:::-;8323:40;;;;;;;;;;;:::i;:::-;;;;;;;;8272:103;8216:166::o;1083:98::-;1136:7;1163:10;1156:17;;1083:98;:::o;6307:130::-;6392:37;6401:5;6408:7;6417:5;6424:4;6392:8;:37::i;:::-;6307:130;;;:::o;6939:603::-;7073:24;7100:25;7110:5;7117:7;7100:9;:25::i;:::-;7073:52;;7160:17;7140:16;:37;7136:399;;7217:5;7198:16;:24;7194:214;;;7299:7;7329:16;7368:5;7250:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;7194:214;7451:57;7460:5;7467:7;7495:5;7476:16;:24;7502:5;7451:8;:57::i;:::-;7136:399;7062:480;6939:603;;;:::o;4813:308::-;4913:1;4897:18;;:4;:18;;;4893:88;;4966:1;4939:30;;;;;;;;;;;:::i;:::-;;;;;;;;4893:88;5009:1;4995:16;;:2;:16;;;4991:88;;5064:1;5035:32;;;;;;;;;;;:::i;:::-;;;;;;;;4991:88;5089:24;5097:4;5103:2;5107:5;5089:7;:24::i;:::-;4813:308;;;:::o;27406:115::-;27466:4;27512:1;27490:7;:19;;;:23;27483:30;;27406:115;;;:::o;35140:2069::-;25068:4;25057:8;;:15;;;;;;;;;;;;;;;;;;35187:27:::1;35231:1;35217:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35187:46;;35268:4;35244:10;35255:1;35244:13;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;35300:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35284:10;35295:1;35284:13;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;::::0;::::1;35335:28;35366:24;35384:4;35366:9;:24::i;:::-;35335:55;;35401:22;35447:18;;35426;;:39;;;;:::i;:::-;35401:64;;35478:28;35570:14;35547:18;;35510:20;:56;;;;:::i;:::-;35509:75;;;;:::i;:::-;35478:106;;35597:28;35665:20;35629;:56;;;;:::i;:::-;35597:89;;35726:1;35703:20;:24;35699:418;;;35765:15;:88;;;35880:20;35927:1;35955:10;36000:15;;;;;;;;;;;36043;35765:316;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35744:362:::0;35699:418:::1;36156:1;36133:20;:24;36129:1005;;;36174:12;36212:1;36189:20;:24;;;;:::i;:::-;36174:39;;36228:17;36271:4;36248:20;:27;;;;:::i;:::-;36228:47;;36313:15;:88;;;36428:4;36459:1;36487:10;36532:4;36564:15;36313:289;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36292:335:::0;36643:26:::1;36672:21;36643:50;;36735:1;36714:18;:22;36710:413;;;36782:15;:31;;;36821:18;36875:4;36907:9;36943:1;36971;37007:6;37041:15;36782:297;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36757:351:::0;::::1;;;;;;36710:413;36159:975;;;36129:1005;37167:1;37146:18;:22;;;;37200:1;37179:18;:22;;;;35176:2033;;;;;25106:5:::0;25095:8;;:16;;;;;;;;;;;;;;;;;;35140:2069::o;8729:191::-;8803:16;8822:6;;;;;;;;;;;8803:25;;8848:8;8839:6;;:17;;;;;;;;;;;;;;;;;;8903:8;8872:40;;8893:8;8872:40;;;;;;;;;;;;8792:128;8729:191;:::o;13555:162::-;13638:71;13658:5;13680;:14;;;13697:2;13701:5;13665:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13638:19;:71::i;:::-;13555:162;;;:::o;6445:486::-;6618:1;6601:19;;:5;:19;;;6597:91;;6673:1;6644:32;;;;;;;;;;;:::i;:::-;;;;;;;;6597:91;6721:1;6702:21;;:7;:21;;;6698:92;;6775:1;6747:31;;;;;;;;;;;:::i;:::-;;;;;;;;6698:92;6830:5;6800:11;:18;6812:5;6800:18;;;;;;;;;;;;;;;:27;6819:7;6800:27;;;;;;;;;;;;;;;:35;;;;6850:9;6846:78;;;6897:7;6881:31;;6890:5;6881:31;;;6906:5;6881:31;;;;;;:::i;:::-;;;;;;;;6846:78;6445:486;;;;:::o;32771:2361::-;32912:1;32896:18;;:4;:18;;;:38;;;;32932:1;32918:16;;:2;:16;;;32896:38;32892:122;;;32951:30;32965:4;32971:2;32975:5;32951:13;:30::i;:::-;32996:7;;32892:122;33037:1;33028:5;:10;33024:90;;33055:26;33069:4;33075:2;33079:1;33055:13;:26::i;:::-;33096:7;;33024:90;33136:13;33130:19;;:2;:19;;;33126:114;;33180:15;33166:11;:29;;;;33224:4;33210:11;;:18;;;;;;;;;;;;;;;;;;33126:114;33271:24;:28;33296:2;33271:28;;;;;;;;;;;;;;;;;;;;;;;;;33270:29;:77;;;;;33317:30;33344:2;33317:26;:30::i;:::-;33316:31;33270:77;:105;;;;;33364:11;;;;;;;;;;;33270:105;:161;;;;;33424:7;33410:11;;:21;;;;:::i;:::-;33392:15;:39;33270:161;33252:357;;;33531:3;33526:1;33510:13;:11;:13::i;:::-;:17;;;;:::i;:::-;33509:25;;;;:::i;:::-;33500:5;33484:13;33494:2;33484:9;:13::i;:::-;:21;;;;:::i;:::-;:50;;33458:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;33252:357;33621:28;33652:24;33670:4;33652:9;:24::i;:::-;33621:55;;33689:12;33728:18;;33704:20;:42;;33689:57;;33777:7;:33;;;;;33802:8;;;;;;;;;;;33801:9;33777:33;:81;;;;;33827:27;:31;33855:2;33827:31;;;;;;;;;;;;;;;;;;;;;;;;;33777:81;:115;;;;;33875:17;;;;;;;;;;;33777:115;:147;;;;;33917:7;:5;:7::i;:::-;33909:15;;:4;:15;;;;33777:147;:177;;;;;33947:7;:5;:7::i;:::-;33941:13;;:2;:13;;;;33777:177;:237;;;;;34013:1;33992:18;;33971;;:39;;;;:::i;:::-;:43;33777:237;33759:304;;;34041:10;:8;:10::i;:::-;33759:304;34075:12;34090:4;34075:19;;34111;:25;34131:4;34111:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34140:19;:23;34160:2;34140:23;;;;;;;;;;;;;;;;;;;;;;;;;34111:52;:64;;;;34167:8;;;;;;;;;;;34111:64;34107:112;;;34202:5;34192:15;;34107:112;34235:7;34231:851;;;34259:20;34282:1;34259:24;;34298:20;34321:1;34298:24;;34343:27;:33;34371:4;34343:33;;;;;;;;;;;;;;;;;;;;;;;;;34339:408;;;34440:11;34431:5;34413:15;;:23;;;;:::i;:::-;34412:39;;;;:::i;:::-;34397:54;;34513:11;34504:5;34486:15;;:23;;;;:::i;:::-;34485:39;;;;:::i;:::-;34470:54;;34339:408;;;34550:27;:31;34578:2;34550:31;;;;;;;;;;;;;;;;;;;;;;;;;34546:201;;;34646:11;34637:5;34618:16;;:24;;;;:::i;:::-;34617:40;;;;:::i;:::-;34602:55;;34720:11;34711:5;34692:16;;:24;;;;:::i;:::-;34691:40;;;;:::i;:::-;34676:55;;34546:201;34339:408;34785:12;34763:18;;:34;;;;;;;:::i;:::-;;;;;;;;34834:12;34812:18;;:34;;;;;;;:::i;:::-;;;;;;;;34863:19;34900:12;34885;:27;;;;:::i;:::-;34863:49;;34947:1;34933:11;:15;34929:142;;;34978:11;34969:20;;;;;:::i;:::-;;;35008:47;35022:4;35036;35043:11;35008:13;:47::i;:::-;34929:142;34244:838;;;34231:851;35094:30;35108:4;35114:2;35118:5;35094:13;:30::i;:::-;32881:2251;;;32771:2361;;;;:::o;16570:868::-;16651:18;16680:19;16940:4;16920:1;16896:4;16890:11;16866:4;16860;16856:15;16836:1;16812:5;16788;16765:194;16985:7;16975:180;;17030:4;17024:11;17076:16;17073:1;17068:3;17053:40;17123:16;17118:3;17111:29;16975:180;17183:16;17169:30;;17234:1;17228:8;17213:23;;16735:512;17291:1;17277:10;:15;:68;;17344:1;17329:11;:16;;17277:68;;;17325:1;17303:5;17295:26;;;:31;17277:68;17259:172;;;17412:5;17379:40;;;;;;;;;;;:::i;:::-;;;;;;;;17259:172;16640:798;;16570:868;;:::o;5129:730::-;5235:1;5219:18;;:4;:18;;;5215:369;;5270:5;5254:12;;:21;;;;;;;:::i;:::-;;;;;;;;5215:369;;;5308:19;5330:9;:15;5340:4;5330:15;;;;;;;;;;;;;;;;5308:37;;5378:5;5364:11;:19;5360:117;;;5436:4;5442:11;5455:5;5411:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;5360:117;5552:5;5538:11;:19;5520:9;:15;5530:4;5520:15;;;;;;;;;;;;;;;:37;;;;5293:291;5215:369;5614:1;5600:16;;:2;:16;;;5596:213;;5678:5;5662:12;;:21;;;;;;;;;;;5596:213;;;5777:5;5760:9;:13;5770:2;5760:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;5596:213;5841:2;5826:25;;5835:4;5826:25;;;5845:5;5826:25;;;;;;:::i;:::-;;;;;;;;5129:730;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:118::-;3906:24;3924:5;3906:24;:::i;:::-;3901:3;3894:37;3819:118;;:::o;3943:222::-;4036:4;4074:2;4063:9;4059:18;4051:26;;4087:71;4155:1;4144:9;4140:17;4131:6;4087:71;:::i;:::-;3943:222;;;;:::o;4171:118::-;4258:24;4276:5;4258:24;:::i;:::-;4253:3;4246:37;4171:118;;:::o;4295:222::-;4388:4;4426:2;4415:9;4411:18;4403:26;;4439:71;4507:1;4496:9;4492:17;4483:6;4439:71;:::i;:::-;4295:222;;;;:::o;4523:60::-;4551:3;4572:5;4565:12;;4523:60;;;:::o;4589:142::-;4639:9;4672:53;4690:34;4699:24;4717:5;4699:24;:::i;:::-;4690:34;:::i;:::-;4672:53;:::i;:::-;4659:66;;4589:142;;;:::o;4737:126::-;4787:9;4820:37;4851:5;4820:37;:::i;:::-;4807:50;;4737:126;;;:::o;4869:153::-;4946:9;4979:37;5010:5;4979:37;:::i;:::-;4966:50;;4869:153;;;:::o;5028:185::-;5142:64;5200:5;5142:64;:::i;:::-;5137:3;5130:77;5028:185;;:::o;5219:276::-;5339:4;5377:2;5366:9;5362:18;5354:26;;5390:98;5485:1;5474:9;5470:17;5461:6;5390:98;:::i;:::-;5219:276;;;;:::o;5501:116::-;5571:21;5586:5;5571:21;:::i;:::-;5564:5;5561:32;5551:60;;5607:1;5604;5597:12;5551:60;5501:116;:::o;5623:133::-;5666:5;5704:6;5691:20;5682:29;;5720:30;5744:5;5720:30;:::i;:::-;5623:133;;;;:::o;5762:323::-;5818:6;5867:2;5855:9;5846:7;5842:23;5838:32;5835:119;;;5873:79;;:::i;:::-;5835:119;5993:1;6018:50;6060:7;6051:6;6040:9;6036:22;6018:50;:::i;:::-;6008:60;;5964:114;5762:323;;;;:::o;6091:619::-;6168:6;6176;6184;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:53;6429:7;6420:6;6409:9;6405:22;6384:53;:::i;:::-;6374:63;;6330:117;6486:2;6512:53;6557:7;6548:6;6537:9;6533:22;6512:53;:::i;:::-;6502:63;;6457:118;6614:2;6640:53;6685:7;6676:6;6665:9;6661:22;6640:53;:::i;:::-;6630:63;;6585:118;6091:619;;;;;:::o;6716:86::-;6751:7;6791:4;6784:5;6780:16;6769:27;;6716:86;;;:::o;6808:112::-;6891:22;6907:5;6891:22;:::i;:::-;6886:3;6879:35;6808:112;;:::o;6926:214::-;7015:4;7053:2;7042:9;7038:18;7030:26;;7066:67;7130:1;7119:9;7115:17;7106:6;7066:67;:::i;:::-;6926:214;;;;:::o;7146:468::-;7211:6;7219;7268:2;7256:9;7247:7;7243:23;7239:32;7236:119;;;7274:79;;:::i;:::-;7236:119;7394:1;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7365:117;7521:2;7547:50;7589:7;7580:6;7569:9;7565:22;7547:50;:::i;:::-;7537:60;;7492:115;7146:468;;;;;:::o;7620:329::-;7679:6;7728:2;7716:9;7707:7;7703:23;7699:32;7696:119;;;7734:79;;:::i;:::-;7696:119;7854:1;7879:53;7924:7;7915:6;7904:9;7900:22;7879:53;:::i;:::-;7869:63;;7825:117;7620:329;;;;:::o;7955:::-;8014:6;8063:2;8051:9;8042:7;8038:23;8034:32;8031:119;;;8069:79;;:::i;:::-;8031:119;8189:1;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8160:117;7955:329;;;;:::o;8290:474::-;8358:6;8366;8415:2;8403:9;8394:7;8390:23;8386:32;8383:119;;;8421:79;;:::i;:::-;8383:119;8541:1;8566:53;8611:7;8602:6;8591:9;8587:22;8566:53;:::i;:::-;8556:63;;8512:117;8668:2;8694:53;8739:7;8730:6;8719:9;8715:22;8694:53;:::i;:::-;8684:63;;8639:118;8290:474;;;;;:::o;8770:180::-;8910:32;8906:1;8898:6;8894:14;8887:56;8770:180;:::o;8956:366::-;9098:3;9119:67;9183:2;9178:3;9119:67;:::i;:::-;9112:74;;9195:93;9284:3;9195:93;:::i;:::-;9313:2;9308:3;9304:12;9297:19;;8956:366;;;:::o;9328:419::-;9494:4;9532:2;9521:9;9517:18;9509:26;;9581:9;9575:4;9571:20;9567:1;9556:9;9552:17;9545:47;9609:131;9735:4;9609:131;:::i;:::-;9601:139;;9328:419;;;:::o;9753:180::-;9801:77;9798:1;9791:88;9898:4;9895:1;9888:15;9922:4;9919:1;9912:15;9939:191;9979:3;9998:20;10016:1;9998:20;:::i;:::-;9993:25;;10032:20;10050:1;10032:20;:::i;:::-;10027:25;;10075:1;10072;10068:9;10061:16;;10096:3;10093:1;10090:10;10087:36;;;10103:18;;:::i;:::-;10087:36;9939:191;;;;:::o;10136:181::-;10276:33;10272:1;10264:6;10260:14;10253:57;10136:181;:::o;10323:366::-;10465:3;10486:67;10550:2;10545:3;10486:67;:::i;:::-;10479:74;;10562:93;10651:3;10562:93;:::i;:::-;10680:2;10675:3;10671:12;10664:19;;10323:366;;;:::o;10695:419::-;10861:4;10899:2;10888:9;10884:18;10876:26;;10948:9;10942:4;10938:20;10934:1;10923:9;10919:17;10912:47;10976:131;11102:4;10976:131;:::i;:::-;10968:139;;10695:419;;;:::o;11120:332::-;11241:4;11279:2;11268:9;11264:18;11256:26;;11292:71;11360:1;11349:9;11345:17;11336:6;11292:71;:::i;:::-;11373:72;11441:2;11430:9;11426:18;11417:6;11373:72;:::i;:::-;11120:332;;;;;:::o;11458:180::-;11506:77;11503:1;11496:88;11603:4;11600:1;11593:15;11627:4;11624:1;11617:15;11644:320;11688:6;11725:1;11719:4;11715:12;11705:22;;11772:1;11766:4;11762:12;11793:18;11783:81;;11849:4;11841:6;11837:17;11827:27;;11783:81;11911:2;11903:6;11900:14;11880:18;11877:38;11874:84;;11930:18;;:::i;:::-;11874:84;11695:269;11644:320;;;:::o;11970:176::-;12110:28;12106:1;12098:6;12094:14;12087:52;11970:176;:::o;12152:366::-;12294:3;12315:67;12379:2;12374:3;12315:67;:::i;:::-;12308:74;;12391:93;12480:3;12391:93;:::i;:::-;12509:2;12504:3;12500:12;12493:19;;12152:366;;;:::o;12524:419::-;12690:4;12728:2;12717:9;12713:18;12705:26;;12777:9;12771:4;12767:20;12763:1;12752:9;12748:17;12741:47;12805:131;12931:4;12805:131;:::i;:::-;12797:139;;12524:419;;;:::o;12949:181::-;13089:33;13085:1;13077:6;13073:14;13066:57;12949:181;:::o;13136:366::-;13278:3;13299:67;13363:2;13358:3;13299:67;:::i;:::-;13292:74;;13375:93;13464:3;13375:93;:::i;:::-;13493:2;13488:3;13484:12;13477:19;;13136:366;;;:::o;13508:419::-;13674:4;13712:2;13701:9;13697:18;13689:26;;13761:9;13755:4;13751:20;13747:1;13736:9;13732:17;13725:47;13789:131;13915:4;13789:131;:::i;:::-;13781:139;;13508:419;;;:::o;13933:182::-;14073:34;14069:1;14061:6;14057:14;14050:58;13933:182;:::o;14121:366::-;14263:3;14284:67;14348:2;14343:3;14284:67;:::i;:::-;14277:74;;14360:93;14449:3;14360:93;:::i;:::-;14478:2;14473:3;14469:12;14462:19;;14121:366;;;:::o;14493:419::-;14659:4;14697:2;14686:9;14682:18;14674:26;;14746:9;14740:4;14736:20;14732:1;14721:9;14717:17;14710:47;14774:131;14900:4;14774:131;:::i;:::-;14766:139;;14493:419;;;:::o;14918:229::-;15058:34;15054:1;15046:6;15042:14;15035:58;15127:12;15122:2;15114:6;15110:15;15103:37;14918:229;:::o;15153:366::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:419::-;15691:4;15729:2;15718:9;15714:18;15706:26;;15778:9;15772:4;15768:20;15764:1;15753:9;15749:17;15742:47;15806:131;15932:4;15806:131;:::i;:::-;15798:139;;15525:419;;;:::o;15950:227::-;16090:34;16086:1;16078:6;16074:14;16067:58;16159:10;16154:2;16146:6;16142:15;16135:35;15950:227;:::o;16183:366::-;16325:3;16346:67;16410:2;16405:3;16346:67;:::i;:::-;16339:74;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16183:366;;;:::o;16555:419::-;16721:4;16759:2;16748:9;16744:18;16736:26;;16808:9;16802:4;16798:20;16794:1;16783:9;16779:17;16772:47;16836:131;16962:4;16836:131;:::i;:::-;16828:139;;16555:419;;;:::o;16980:230::-;17120:34;17116:1;17108:6;17104:14;17097:58;17189:13;17184:2;17176:6;17172:15;17165:38;16980:230;:::o;17216:366::-;17358:3;17379:67;17443:2;17438:3;17379:67;:::i;:::-;17372:74;;17455:93;17544:3;17455:93;:::i;:::-;17573:2;17568:3;17564:12;17557:19;;17216:366;;;:::o;17588:419::-;17754:4;17792:2;17781:9;17777:18;17769:26;;17841:9;17835:4;17831:20;17827:1;17816:9;17812:17;17805:47;17869:131;17995:4;17869:131;:::i;:::-;17861:139;;17588:419;;;:::o;18013:224::-;18153:34;18149:1;18141:6;18137:14;18130:58;18222:7;18217:2;18209:6;18205:15;18198:32;18013:224;:::o;18243:366::-;18385:3;18406:67;18470:2;18465:3;18406:67;:::i;:::-;18399:74;;18482:93;18571:3;18482:93;:::i;:::-;18600:2;18595:3;18591:12;18584:19;;18243:366;;;:::o;18615:419::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:173::-;19180:25;19176:1;19168:6;19164:14;19157:49;19040:173;:::o;19219:366::-;19361:3;19382:67;19446:2;19441:3;19382:67;:::i;:::-;19375:74;;19458:93;19547:3;19458:93;:::i;:::-;19576:2;19571:3;19567:12;19560:19;;19219:366;;;:::o;19591:419::-;19757:4;19795:2;19784:9;19780:18;19772:26;;19844:9;19838:4;19834:20;19830:1;19819:9;19815:17;19808:47;19872:131;19998:4;19872:131;:::i;:::-;19864:139;;19591:419;;;:::o;20016:232::-;20156:34;20152:1;20144:6;20140:14;20133:58;20225:15;20220:2;20212:6;20208:15;20201:40;20016:232;:::o;20254:366::-;20396:3;20417:67;20481:2;20476:3;20417:67;:::i;:::-;20410:74;;20493:93;20582:3;20493:93;:::i;:::-;20611:2;20606:3;20602:12;20595:19;;20254:366;;;:::o;20626:419::-;20792:4;20830:2;20819:9;20815:18;20807:26;;20879:9;20873:4;20869:20;20865:1;20854:9;20850:17;20843:47;20907:131;21033:4;20907:131;:::i;:::-;20899:139;;20626:419;;;:::o;21051:228::-;21191:34;21187:1;21179:6;21175:14;21168:58;21260:11;21255:2;21247:6;21243:15;21236:36;21051:228;:::o;21285:366::-;21427:3;21448:67;21512:2;21507:3;21448:67;:::i;:::-;21441:74;;21524:93;21613:3;21524:93;:::i;:::-;21642:2;21637:3;21633:12;21626:19;;21285:366;;;:::o;21657:419::-;21823:4;21861:2;21850:9;21846:18;21838:26;;21910:9;21904:4;21900:20;21896:1;21885:9;21881:17;21874:47;21938:131;22064:4;21938:131;:::i;:::-;21930:139;;21657:419;;;:::o;22082:229::-;22222:34;22218:1;22210:6;22206:14;22199:58;22291:12;22286:2;22278:6;22274:15;22267:37;22082:229;:::o;22317:366::-;22459:3;22480:67;22544:2;22539:3;22480:67;:::i;:::-;22473:74;;22556:93;22645:3;22556:93;:::i;:::-;22674:2;22669:3;22665:12;22658:19;;22317:366;;;:::o;22689:419::-;22855:4;22893:2;22882:9;22878:18;22870:26;;22942:9;22936:4;22932:20;22928:1;22917:9;22913:17;22906:47;22970:131;23096:4;22970:131;:::i;:::-;22962:139;;22689:419;;;:::o;23114:222::-;23254:34;23250:1;23242:6;23238:14;23231:58;23323:5;23318:2;23310:6;23306:15;23299:30;23114:222;:::o;23342:366::-;23484:3;23505:67;23569:2;23564:3;23505:67;:::i;:::-;23498:74;;23581:93;23670:3;23581:93;:::i;:::-;23699:2;23694:3;23690:12;23683:19;;23342:366;;;:::o;23714:419::-;23880:4;23918:2;23907:9;23903:18;23895:26;;23967:9;23961:4;23957:20;23953:1;23942:9;23938:17;23931:47;23995:131;24121:4;23995:131;:::i;:::-;23987:139;;23714:419;;;:::o;24139:182::-;24279:34;24275:1;24267:6;24263:14;24256:58;24139:182;:::o;24327:366::-;24469:3;24490:67;24554:2;24549:3;24490:67;:::i;:::-;24483:74;;24566:93;24655:3;24566:93;:::i;:::-;24684:2;24679:3;24675:12;24668:19;;24327:366;;;:::o;24699:419::-;24865:4;24903:2;24892:9;24888:18;24880:26;;24952:9;24946:4;24942:20;24938:1;24927:9;24923:17;24916:47;24980:131;25106:4;24980:131;:::i;:::-;24972:139;;24699:419;;;:::o;25124:143::-;25181:5;25212:6;25206:13;25197:22;;25228:33;25255:5;25228:33;:::i;:::-;25124:143;;;;:::o;25273:351::-;25343:6;25392:2;25380:9;25371:7;25367:23;25363:32;25360:119;;;25398:79;;:::i;:::-;25360:119;25518:1;25543:64;25599:7;25590:6;25579:9;25575:22;25543:64;:::i;:::-;25533:74;;25489:128;25273:351;;;;:::o;25630:442::-;25779:4;25817:2;25806:9;25802:18;25794:26;;25830:71;25898:1;25887:9;25883:17;25874:6;25830:71;:::i;:::-;25911:72;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;25993;26061:2;26050:9;26046:18;26037:6;25993:72;:::i;:::-;25630:442;;;;;;:::o;26078:180::-;26126:77;26123:1;26116:88;26223:4;26220:1;26213:15;26247:4;26244:1;26237:15;26264:180;26312:77;26309:1;26302:88;26409:4;26406:1;26399:15;26433:4;26430:1;26423:15;26450:143;26507:5;26538:6;26532:13;26523:22;;26554:33;26581:5;26554:33;:::i;:::-;26450:143;;;;:::o;26599:351::-;26669:6;26718:2;26706:9;26697:7;26693:23;26689:32;26686:119;;;26724:79;;:::i;:::-;26686:119;26844:1;26869:64;26925:7;26916:6;26905:9;26901:22;26869:64;:::i;:::-;26859:74;;26815:128;26599:351;;;;:::o;26956:410::-;26996:7;27019:20;27037:1;27019:20;:::i;:::-;27014:25;;27053:20;27071:1;27053:20;:::i;:::-;27048:25;;27108:1;27105;27101:9;27130:30;27148:11;27130:30;:::i;:::-;27119:41;;27309:1;27300:7;27296:15;27293:1;27290:22;27270:1;27263:9;27243:83;27220:139;;27339:18;;:::i;:::-;27220:139;27004:362;26956:410;;;;:::o;27372:180::-;27420:77;27417:1;27410:88;27517:4;27514:1;27507:15;27541:4;27538:1;27531:15;27558:185;27598:1;27615:20;27633:1;27615:20;:::i;:::-;27610:25;;27649:20;27667:1;27649:20;:::i;:::-;27644:25;;27688:1;27678:35;;27693:18;;:::i;:::-;27678:35;27735:1;27732;27728:9;27723:14;;27558:185;;;;:::o;27749:194::-;27789:4;27809:20;27827:1;27809:20;:::i;:::-;27804:25;;27843:20;27861:1;27843:20;:::i;:::-;27838:25;;27887:1;27884;27880:9;27872:17;;27911:1;27905:4;27902:11;27899:37;;;27916:18;;:::i;:::-;27899:37;27749:194;;;;:::o;27949:85::-;27994:7;28023:5;28012:16;;27949:85;;;:::o;28040:158::-;28098:9;28131:61;28149:42;28158:32;28184:5;28158:32;:::i;:::-;28149:42;:::i;:::-;28131:61;:::i;:::-;28118:74;;28040:158;;;:::o;28204:147::-;28299:45;28338:5;28299:45;:::i;:::-;28294:3;28287:58;28204:147;;:::o;28357:114::-;28424:6;28458:5;28452:12;28442:22;;28357:114;;;:::o;28477:184::-;28576:11;28610:6;28605:3;28598:19;28650:4;28645:3;28641:14;28626:29;;28477:184;;;;:::o;28667:132::-;28734:4;28757:3;28749:11;;28787:4;28782:3;28778:14;28770:22;;28667:132;;;:::o;28805:108::-;28882:24;28900:5;28882:24;:::i;:::-;28877:3;28870:37;28805:108;;:::o;28919:179::-;28988:10;29009:46;29051:3;29043:6;29009:46;:::i;:::-;29087:4;29082:3;29078:14;29064:28;;28919:179;;;;:::o;29104:113::-;29174:4;29206;29201:3;29197:14;29189:22;;29104:113;;;:::o;29253:732::-;29372:3;29401:54;29449:5;29401:54;:::i;:::-;29471:86;29550:6;29545:3;29471:86;:::i;:::-;29464:93;;29581:56;29631:5;29581:56;:::i;:::-;29660:7;29691:1;29676:284;29701:6;29698:1;29695:13;29676:284;;;29777:6;29771:13;29804:63;29863:3;29848:13;29804:63;:::i;:::-;29797:70;;29890:60;29943:6;29890:60;:::i;:::-;29880:70;;29736:224;29723:1;29720;29716:9;29711:14;;29676:284;;;29680:14;29976:3;29969:10;;29377:608;;;29253:732;;;;:::o;29991:831::-;30254:4;30292:3;30281:9;30277:19;30269:27;;30306:71;30374:1;30363:9;30359:17;30350:6;30306:71;:::i;:::-;30387:80;30463:2;30452:9;30448:18;30439:6;30387:80;:::i;:::-;30514:9;30508:4;30504:20;30499:2;30488:9;30484:18;30477:48;30542:108;30645:4;30636:6;30542:108;:::i;:::-;30534:116;;30660:72;30728:2;30717:9;30713:18;30704:6;30660:72;:::i;:::-;30742:73;30810:3;30799:9;30795:19;30786:6;30742:73;:::i;:::-;29991:831;;;;;;;;:::o;30828:807::-;31077:4;31115:3;31104:9;31100:19;31092:27;;31129:71;31197:1;31186:9;31182:17;31173:6;31129:71;:::i;:::-;31210:72;31278:2;31267:9;31263:18;31254:6;31210:72;:::i;:::-;31292:80;31368:2;31357:9;31353:18;31344:6;31292:80;:::i;:::-;31382;31458:2;31447:9;31443:18;31434:6;31382:80;:::i;:::-;31472:73;31540:3;31529:9;31525:19;31516:6;31472:73;:::i;:::-;31555;31623:3;31612:9;31608:19;31599:6;31555:73;:::i;:::-;30828:807;;;;;;;;;:::o;31641:663::-;31729:6;31737;31745;31794:2;31782:9;31773:7;31769:23;31765:32;31762:119;;;31800:79;;:::i;:::-;31762:119;31920:1;31945:64;32001:7;31992:6;31981:9;31977:22;31945:64;:::i;:::-;31935:74;;31891:128;32058:2;32084:64;32140:7;32131:6;32120:9;32116:22;32084:64;:::i;:::-;32074:74;;32029:129;32197:2;32223:64;32279:7;32270:6;32259:9;32255:22;32223:64;:::i;:::-;32213:74;;32168:129;31641:663;;;;;:::o;32310:332::-;32431:4;32469:2;32458:9;32454:18;32446:26;;32482:71;32550:1;32539:9;32535:17;32526:6;32482:71;:::i;:::-;32563:72;32631:2;32620:9;32616:18;32607:6;32563:72;:::i;:::-;32310:332;;;;;:::o;32648:177::-;32788:29;32784:1;32776:6;32772:14;32765:53;32648:177;:::o;32831:366::-;32973:3;32994:67;33058:2;33053:3;32994:67;:::i;:::-;32987:74;;33070:93;33159:3;33070:93;:::i;:::-;33188:2;33183:3;33179:12;33172:19;;32831:366;;;:::o;33203:419::-;33369:4;33407:2;33396:9;33392:18;33384:26;;33456:9;33450:4;33446:20;33442:1;33431:9;33427:17;33420:47;33484:131;33610:4;33484:131;:::i;:::-;33476:139;;33203:419;;;:::o
Swarm Source
ipfs://2f588ce69a7713bf99fe41cb5fe7e7c0ff0378bfba88556b31ae6f307e1a0485
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)