ETH Price: $1,978.29 (+0.22%)
 

Overview

ETH Balance

0.001252145950317824 ETH

Eth Value

$2.48 (@ $1,978.29/ETH)

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Approve243779602026-02-03 17:56:3518 days ago1770141395IN
DollarSqueeze: DSQ Token
0 ETH0.000028391.16636937
Approve236497172025-10-24 20:30:11120 days ago1761337811IN
DollarSqueeze: DSQ Token
0 ETH0.000051051.09342211
Approve236423132025-10-23 19:34:23121 days ago1761248063IN
DollarSqueeze: DSQ Token
0 ETH0.000053971.15772469
Approve231901582025-08-21 14:49:11184 days ago1755787751IN
DollarSqueeze: DSQ Token
0 ETH0.000051882.12564319
Transfer231843352025-08-20 19:18:59185 days ago1755717539IN
DollarSqueeze: DSQ Token
0 ETH0.000362612.68753773
Approve228260802025-07-01 18:09:11235 days ago1751393351IN
DollarSqueeze: DSQ Token
0 ETH0.000187094.00712183
Transfer228229022025-07-01 7:28:59236 days ago1751354939IN
DollarSqueeze: DSQ Token
0 ETH0.000315462.67742134
Transfer226261652025-06-03 19:17:59263 days ago1748978279IN
DollarSqueeze: DSQ Token
0 ETH0.000547623.23803825
Transfer226118132025-06-01 19:04:47265 days ago1748804687IN
DollarSqueeze: DSQ Token
0 ETH0.000279982.37632788
Transfer226111862025-06-01 16:57:59265 days ago1748797079IN
DollarSqueeze: DSQ Token
0 ETH0.000257912.18896088
Transfer226104912025-06-01 14:37:47265 days ago1748788667IN
DollarSqueeze: DSQ Token
0 ETH0.000357523.03436479
Transfer226030022025-05-31 13:26:59266 days ago1748698019IN
DollarSqueeze: DSQ Token
0 ETH0.000370063.14080523
Transfer226029982025-05-31 13:26:11266 days ago1748697971IN
DollarSqueeze: DSQ Token
0 ETH0.0003623.07241804
Transfer225977202025-05-30 19:45:11267 days ago1748634311IN
DollarSqueeze: DSQ Token
0 ETH0.000289453.06355447
Transfer225976872025-05-30 19:38:35267 days ago1748633915IN
DollarSqueeze: DSQ Token
0 ETH0.000359322.13817166
Transfer225976542025-05-30 19:31:59267 days ago1748633519IN
DollarSqueeze: DSQ Token
0 ETH0.00056512.3506462
Transfer225967122025-05-30 16:21:59267 days ago1748622119IN
DollarSqueeze: DSQ Token
0 ETH0.001042568.8484781
Transfer225962142025-05-30 14:42:11267 days ago1748616131IN
DollarSqueeze: DSQ Token
0 ETH0.0010373310.97908964
Transfer225961932025-05-30 14:37:59267 days ago1748615879IN
DollarSqueeze: DSQ Token
0 ETH0.001494988.8947162
Transfer225961852025-05-30 14:36:23267 days ago1748615783IN
DollarSqueeze: DSQ Token
0 ETH0.001823249.64141871
Transfer225906322025-05-29 19:57:47268 days ago1748548667IN
DollarSqueeze: DSQ Token
0 ETH0.000533943.51220895
Transfer225896792025-05-29 16:45:35268 days ago1748537135IN
DollarSqueeze: DSQ Token
0 ETH0.000552444.68822286
Transfer225894352025-05-29 15:56:35268 days ago1748534195IN
DollarSqueeze: DSQ Token
0 ETH0.000344713.44716819
Transfer225894142025-05-29 15:52:23268 days ago1748533943IN
DollarSqueeze: DSQ Token
0 ETH0.000581575.81571548
Transfer225893392025-05-29 15:37:23268 days ago1748533043IN
DollarSqueeze: DSQ Token
0 ETH0.00042864.28608174
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer222932392025-04-18 3:36:59310 days ago1744947419
DollarSqueeze: DSQ Token
0.00000036 ETH
Add Liquidity ET...222932392025-04-18 3:36:59310 days ago1744947419
DollarSqueeze: DSQ Token
0.00019015 ETH
Transfer222932392025-04-18 3:36:59310 days ago1744947419
DollarSqueeze: DSQ Token
0.03689852 ETH
Deposit222932392025-04-18 3:36:59310 days ago1744947419
DollarSqueeze: DSQ Token
0.00075303 ETH
Transfer222932392025-04-18 3:36:59310 days ago1744947419
DollarSqueeze: DSQ Token
0.03784171 ETH
Transfer222905862025-04-17 18:44:11310 days ago1744915451
DollarSqueeze: DSQ Token
0.0000006 ETH
Add Liquidity ET...222905862025-04-17 18:44:11310 days ago1744915451
DollarSqueeze: DSQ Token
0.00023834 ETH
Transfer222905862025-04-17 18:44:11310 days ago1744915451
DollarSqueeze: DSQ Token
0.04624819 ETH
Deposit222905862025-04-17 18:44:11310 days ago1744915451
DollarSqueeze: DSQ Token
0.00094384 ETH
Transfer222905862025-04-17 18:44:11310 days ago1744915451
DollarSqueeze: DSQ Token
0.04743037 ETH
Transfer222905712025-04-17 18:41:11310 days ago1744915271
DollarSqueeze: DSQ Token
0.00000094 ETH
Add Liquidity ET...222905712025-04-17 18:41:11310 days ago1744915271
DollarSqueeze: DSQ Token
0.00029747 ETH
Transfer222905712025-04-17 18:41:11310 days ago1744915271
DollarSqueeze: DSQ Token
0.05772186 ETH
Deposit222905712025-04-17 18:41:11310 days ago1744915271
DollarSqueeze: DSQ Token
0.00117799 ETH
Transfer222905712025-04-17 18:41:11310 days ago1744915271
DollarSqueeze: DSQ Token
0.05919733 ETH
Transfer222894252025-04-17 14:50:59310 days ago1744901459
DollarSqueeze: DSQ Token
0.00000157 ETH
Add Liquidity ET...222894252025-04-17 14:50:59310 days ago1744901459
DollarSqueeze: DSQ Token
0.00038746 ETH
Transfer222894252025-04-17 14:50:59310 days ago1744901459
DollarSqueeze: DSQ Token
0.07518344 ETH
Deposit222894252025-04-17 14:50:59310 days ago1744901459
DollarSqueeze: DSQ Token
0.00153435 ETH
Transfer222894252025-04-17 14:50:59310 days ago1744901459
DollarSqueeze: DSQ Token
0.07710526 ETH
Transfer222894192025-04-17 14:49:47310 days ago1744901387
DollarSqueeze: DSQ Token
0.0000026 ETH
Add Liquidity ET...222894192025-04-17 14:49:47310 days ago1744901387
DollarSqueeze: DSQ Token
0.00051055 ETH
Transfer222894192025-04-17 14:49:47310 days ago1744901387
DollarSqueeze: DSQ Token
0.09906819 ETH
Deposit222894192025-04-17 14:49:47310 days ago1744901387
DollarSqueeze: DSQ Token
0.00202179 ETH
Transfer222894192025-04-17 14:49:47310 days ago1744901387
DollarSqueeze: DSQ Token
0.10160055 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DollarSqueeze

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2023-10-20
*/

/**
TG: https://t.me/DollarSqueeze
Website: https://dollarsqueeze.io
Author: @bLock_doctor
 */
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.12;
 
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IUniRouterV1
{
    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 IUniRouterV2 is IUniRouterV1
{
    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;
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    IUniRouterV2 router;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1;
    uint256 currentIndex;
    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }
    modifier onlyToken() {
        require(msg.sender == _token); _;
    }
    constructor (IUniRouterV2 _router) {
        router = _router;
        _token = msg.sender;
    }
    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }
    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }
    function deposit() external payable override onlyToken
    {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares));
    }
    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){ currentIndex = 0; }
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }
    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            (bool success, ) = payable(shareholder).call{value: amount, gas: 30000}("");
            success = false;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    function claimDividend() external {
        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }
    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }
    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }
    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}
contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(msg.sender==owner(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }
}
contract DollarSqueeze is IERC20, Ownable {
    string private _tokenName="DollarSqueeze";
    string private _tokenSymbol="DSQ";
    uint8 private _decimals=18;
    uint256 private _totalSupply=100000000*10**_decimals; // 100m
    // Transaction Tax
    uint8 private _buyTax=6;
    uint8 private _sellTax=20;
    uint8 private _burnTax=1;
    uint8 private _transferTax=0;
    // Trading
    bool private _airdropDone=false;
    bool private _tradingEnabled=false;
    uint256 private _maxTx=1000000*10**_decimals; // 1m
    // Wallets
    address public backupOwner=0xAe7c6C4D33667185db125842d31e3D79d614986d;
    address public marketingWallet=0xa62909d663e79Eaa49c86F429EE1538be50862aD;
    address public burnWallet=address(0xdead);
    address public zeroAddress=address(0);
    IUniRouterV2 private _router;
    address public _pair;
    // Reward Distributor
    DividendDistributor public dividendDistributor;
    address public dividendDistributorAddress;
    uint256 distributorGas=500000;
    // Mappings
    mapping(address=>uint256) private _balances;
    mapping(address=>mapping (address => uint256)) private _allowances;
    mapping(address=>bool) private _excludedFromFee;
    mapping(address=>bool) private _excludedFromRewards;
    mapping(address=>bool) private _automatedMarketMakers;
    //
    // Swap & Liquify Taxes
    SwapTaxes private _swapTaxes;
    struct SwapTaxes {
        uint8 marketingTax;
        uint8 liquidityTax;
        uint8 rewardsTax;
    }
    //Swap & Liquify
    bool private _inSwap;
    bool private _swapEnabled;
    uint256 private _swapThreshold=100000*10**_decimals;
    modifier lockTheSwap {_inSwap = true;_;_inSwap = false;}
    event SwapAndLiquify(
        uint256 amountTokens,
        uint256 amountETH
    );
 
    constructor() {
        _router = IUniRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IDEXFactory(_router.factory()).createPair(_router.WETH(), address(this));
        _allowances[address(this)][address(_router)]=type(uint256).max;
        _automatedMarketMakers[_pair] = true;
        _excludedFromFee[msg.sender]=true;
        _excludedFromFee[address(this)]=true;
        _excludedFromFee[burnWallet]=true;
        _excludedFromFee[zeroAddress]=true;
        _excludedFromRewards[_pair]=true;
        _excludedFromRewards[msg.sender]=true;
        _excludedFromRewards[address(this)]=true;
        _excludedFromRewards[burnWallet]=true;
        _excludedFromRewards[zeroAddress]=true;
        _swapTaxes=SwapTaxes(50,20,30);
        dividendDistributor = new DividendDistributor(_router);
        dividendDistributorAddress=address(dividendDistributor);
        _balances[msg.sender]+=_totalSupply;
        emit Transfer(address(0),msg.sender,_totalSupply);
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        bool isExcluded=_excludedFromFee[from]||_excludedFromFee[to]||_inSwap;
        bool isBuy=_automatedMarketMakers[from];
        bool isSell=_automatedMarketMakers[to];
        if(isExcluded)_tokenTransfer(from,to,amount,0);
        else {
            require(_tradingEnabled);
            if(isBuy)_buyTokens(from,to,amount);
            else if(isSell) {
                if(!_inSwap&&_swapEnabled)_swapAndLiquify(false);
                _sellTokens(from,to,amount);
            } else {
                _tokenTransfer(from,to,amount,_transferTax*amount/100);
            }
        }
    }
    function _swapAndLiquify(
        bool ignoreLimits
    ) private lockTheSwap {
        uint256 contractTokenBalance=_balances[address(this)];
        uint256 toSwap=_swapThreshold;
        if(contractTokenBalance<toSwap) {
            if(ignoreLimits&&contractTokenBalance>0) {
                toSwap=contractTokenBalance;
            } else return;
        }
        uint256 totalLiquidityTokens=toSwap*_swapTaxes.liquidityTax/100;
        uint256 tokensRemaining=toSwap-totalLiquidityTokens;
        uint256 liquidityTokens=totalLiquidityTokens/2;
        uint256 liquidityETHTokens=totalLiquidityTokens-liquidityTokens;
        toSwap=tokensRemaining+liquidityETHTokens;
        uint256 oldETH=address(this).balance;
        _swapTokensForETH(toSwap);
        uint256 newETH=address(this).balance-oldETH;
        uint256 liquidityETH=(newETH*liquidityETHTokens)/toSwap;
        uint256 remainingETH=newETH-liquidityETH;
        uint256 marketingETH=remainingETH*_swapTaxes.marketingTax/100;
        uint256 rewardsETH=remainingETH-marketingETH;
        if (rewardsETH > 0)
            try dividendDistributor.deposit{value: rewardsETH}() {} catch {}
        (bool transferMarketing,) = payable(marketingWallet).call{value: marketingETH, gas: 30000}("");
        transferMarketing=false;
        _addLiquidity(liquidityTokens,liquidityETH);
        emit SwapAndLiquify(liquidityTokens,liquidityETH);
    }
    function _buyTokens(
        address from,
        address to,
        uint256 amount
    ) private {
        require(amount<=_maxTx,"Amount exceeds maxTx.");
        _tokenTransfer(from,to,amount,amount*_buyTax/100);
    }
    function _sellTokens(
        address from,
        address to,
        uint256 amount
    ) private {
        require(amount<=_maxTx,"Amount exceeds maxTx.");
        _tokenTransfer(from,to,amount,amount*_sellTax/100);
    }
    function _tokenTransfer(
        address from,
        address to,
        uint256 amount,
        uint256 tax
    ) private {
        uint256 tokensToBurn=_burnTax*tax/100;
        _balances[from]-=amount;
        _balances[burnWallet]+=tokensToBurn;
        _balances[address(this)]+=(tax-tokensToBurn);
        _balances[to]+=(amount-tax);
        if(!_excludedFromRewards[from]) try dividendDistributor.setShare(from,_balances[from]) {} catch {}
        if(!_excludedFromRewards[to]) try dividendDistributor.setShare(to,_balances[to]) {} catch {}
        try dividendDistributor.process(distributorGas) {} catch {}
        emit Transfer(from,to,(amount-tax));
    }
    function _swapTokensForETH(
        uint256 tokenAmount
    ) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();
        _approve(address(this), address(_router), tokenAmount);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }
    function _addLiquidity(
        uint256 tokenAmount,
        uint256 ETHAmount
    ) private {
        _approve(address(this), address(_router), tokenAmount);
        _router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            burnWallet,
            block.timestamp
        );
    }
    //
    function enableTrading() public onlyOwner() {
        require(!_tradingEnabled,"Trading is already enabled.");
        _tradingEnabled=!_tradingEnabled;
    }
    function recoverOwnershipFromBackup() public {
        require(msg.sender==backupOwner);
        transferOwnership(backupOwner);
    }
    function updateBackupOwnerWallet(
        address _backupOwner
    ) public onlyOwner {
        backupOwner=_backupOwner;
    }
    function updateAutomatedMarketMakers(
        address marketMaker,
        bool enabled
    ) public onlyOwner {
        _automatedMarketMakers[marketMaker]=enabled;
        excludeFromReward(marketMaker,true);
    }
    function updateTax(
        uint8 buyTax,
        uint8 sellTax,
        uint8 burnTax,
        uint8 transferTax
    ) public onlyOwner {
        require(_buyTax+sellTax<=30,"Taxes cannot exceed 30%.");
        require(_transferTax<=20,"Transfer tax cannot exceed 20%.");
        _buyTax=buyTax;
        _sellTax=sellTax;
        _burnTax=burnTax;
        _transferTax=transferTax;
    }
    function updateSwapTaxes(
        uint8 marketingTax,
        uint8 rewardsTax,
        uint8 liquidityTax
    ) public onlyOwner {
        require((marketingTax+rewardsTax+liquidityTax)==100,"Swap tax cannot exceed 100.");
        _swapTaxes.marketingTax=marketingTax;
        _swapTaxes.rewardsTax=rewardsTax;
        _swapTaxes.liquidityTax=liquidityTax;
    }
    function updateSwapThreshold(
        uint256 swapThreshold
    ) public onlyOwner {
        require(_swapThreshold>0&&swapThreshold<=(_totalSupply*1/100));
        _swapThreshold=swapThreshold;
    }
    function switchSwapEnabled(
        bool swapEnabled
    ) public onlyOwner {
        _swapEnabled=swapEnabled;
    }
    function triggerSwapAndLiquify(
        bool ignoreLimits
    ) public onlyOwner {
        _swapAndLiquify(ignoreLimits);
    }
    function excludeFromFee(
        address account,
        bool excluded
    ) public onlyOwner {
        _excludedFromFee[account]=excluded;
    }
    function excludeFromReward(
        address account,
        bool excluded
    ) public onlyOwner {
        _excludedFromRewards[account]=excluded;
        try dividendDistributor.setShare(account,excluded?0:_balances[account]) {} catch {}
    }
    function updateMaxTx(
        uint256 maxTx
    ) public onlyOwner {
        require(maxTx>=(_totalSupply*1/100) / 2);
        _maxTx=maxTx*10**_decimals;
    }
    function updateMarketingWallet(
        address _marketingWallet
    ) public onlyOwner {
        require(_marketingWallet!=address(0),"Cannot be zero address!");
        marketingWallet=_marketingWallet;
    }
    function withdrawStrandedToken(
        address strandedToken
    ) public onlyOwner {
        require(strandedToken!=address(this));
        IERC20 token=IERC20(strandedToken);
        token.transfer(owner(),token.balanceOf(address(this)));
    }
    function withdrawStuckETH() public onlyOwner {
        (bool success,)=msg.sender.call{value:(address(this).balance)}("");
        require(success);
    }
    function addRewardsManually() public payable onlyOwner {
        require(msg.value>0);
        try dividendDistributor.deposit{value: msg.value}() {} catch {}
    }
    function updateDistributorSettings(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 gas
    ) public onlyOwner {
        require(gas<=1200000);
        dividendDistributor.setDistributionCriteria(_minPeriod, _minDistribution);
        distributorGas = gas;
    }
    //
    function showMaxTx() public view returns(uint256) {
        return _maxTx;
    }
    function isSwapEnabled() public view returns(bool) {
        return _swapEnabled;
    }
    function showTradeTaxes() public view returns(
        uint8 buyTax, 
        uint8 sellTax,
        uint8 burnTax,
        uint8 transferTax
    ) {
        buyTax=_buyTax;
        sellTax=_sellTax;
        burnTax=_burnTax;
        transferTax=_transferTax;
    }
    function showSwapTaxes() public view returns(
        uint8 marketingTax, 
        uint8 liquidityTax, 
        uint8 rewardsTax
    ) {
        marketingTax=_swapTaxes.marketingTax;
        liquidityTax=_swapTaxes.liquidityTax;
        rewardsTax=_swapTaxes.rewardsTax;
    }
    function showDistributorDetails() public view returns(
        address _distributorAddress, 
        uint256 _distributorGas
    ) {
        _distributorAddress=dividendDistributorAddress;
        _distributorGas=distributorGas;
    }
    function isTradingEnabled() public view returns(bool) {
        return _tradingEnabled;
    }
    //
    function transfer(
        address recipient, 
        uint256 amount
    ) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function transferFrom(
        address sender, 
        address recipient, 
        uint256 amount
    ) external override returns (bool) {
        uint256 allowance_ = _allowances[sender][msg.sender];
        _transfer(sender, recipient, amount);
        require(allowance_ >= amount);
        _approve(sender, msg.sender, allowance_ - amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }
    function _approve(
        address owner, 
        address spender, 
        uint256 amount
    ) private {
        require((owner != address(0) && spender != address(0)), "Owner/Spender address cannot be 0.");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function approve(
        address spender, 
        uint256 amount
    ) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function allowance(
        address owner_,
        address spender
    ) external view override returns (uint256) {
        return _allowances[owner_][spender];
    }
    function balanceOf(
        address account
    ) external view override returns (uint256) {
        return _balances[account];
    }
    function name() external view returns (string memory) {
        return _tokenName;
    }
    function symbol() external view returns (string memory) {
        return _tokenSymbol;
    }
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
    function decimals() external view returns (uint8) {
        return _decimals;
    }
    function getOwner() external view returns (address) {
        return owner();
    }
    receive() external payable { }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addRewardsManually","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"backupOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"recoverOwnershipFromBackup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDistributorDetails","outputs":[{"internalType":"address","name":"_distributorAddress","type":"address"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showSwapTaxes","outputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showTradeTaxes","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"switchSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"triggerSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketMaker","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateAutomatedMarketMakers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_backupOwner","type":"address"}],"name":"updateBackupOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"updateDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"}],"name":"updateSwapTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strandedToken","type":"address"}],"name":"withdrawStrandedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600d60808190526c446f6c6c617253717565657a6560981b60a09081526200003091600191906200051f565b506040805180820190915260038082526244535160e81b60209092019182526200005d916002916200051f565b506003805460ff191660129081179091556200007b90600a620006e8565b6200008b906305f5e10062000700565b6004556005805465ffffffffffff191662011406179055600354620000b59060ff16600a620006e8565b620000c490620f424062000700565b600655600780546001600160a01b031990811673ae7c6c4d33667185db125842d31e3d79d614986d1790915560088054821673a62909d663e79eaa49c86f429ee1538be50862ad17905560098054821661dead179055600a805490911681556207a120600f556003546200013e9160ff90911690620006e8565b6200014d90620186a062000700565b6017553480156200015d57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000228919062000722565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000722565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000722565b600c80546001600160a01b0319166001600160a01b03928316178155306000818152601160209081526040808320600b80548816855290835281842060001990558554871684526014808452828520805460ff199081166001908117909255338088526012875285882080548316841790558888528588208054831684179055600980548c1689528689208054841685179055600a80548d168a52878a2080548516861790559a548c16895260138852868920805484168517905590885285882080548316841790559787528487208054821683179055965489168652838620805488168217905596548816855293829020805490951690951790935582516060810184526032815290810191909152601e908201526015805462ffffff1916621e1432179055905490519116906200045c90620005ae565b6001600160a01b039091168152602001604051809103906000f08015801562000489573d6000803e3d6000fd5b50600d80546001600160a01b03929092166001600160a01b03199283168117909155600e80549092161790556004543360009081526010602052604081208054909190620004d99084906200074d565b909155505060045460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620007a5565b8280546200052d9062000768565b90600052602060002090601f0160209004810192826200055157600085556200059c565b82601f106200056c57805160ff19168380011785556200059c565b828001600101855582156200059c579182015b828111156200059c5782518255916020019190600101906200057f565b50620005aa929150620005bc565b5090565b610b878062002bea83390190565b5b80821115620005aa5760008155600101620005bd565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b60008160001904831182151516156200071d576200071d620005d3565b500290565b6000602082840312156200073557600080fd5b81516001600160a01b0381168114620006f957600080fd5b60008219821115620007635762000763620005d3565b500190565b600181811c908216806200077d57607f821691505b602082108114156200079f57634e487b7160e01b600052602260045260246000fd5b50919050565b61243580620007b56000396000f3fe6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b556001600c5534801561002e57600080fd5b50604051610b87380380610b8783398101604081905261004d9161007b565b600180546001600160a01b039092166001600160a01b031992831617905560008054909116331790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b610acd806100ba6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600a5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b61012636600461094a565b610285565b005b34801561013957600080fd5b506100f8610148366004610974565b6103fd565b34801561015957600080fd5b5061012b61016836600461098f565b610486565b34801561017957600080fd5b506100f860065481565b34801561018f57600080fd5b506100f8600c5481565b3480156101a557600080fd5b506100f860075481565b3480156101bb57600080fd5b506101eb6101ca366004610974565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f860095481565b34801561023057600080fd5b506100f860085481565b34801561024657600080fd5b5061012b6104fb565b34801561025b57600080fd5b5061012b61026a3660046109b1565b61055f565b34801561027b57600080fd5b506100f8600b5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260056020526040902054156102c3576102c38261065f565b6000811180156102e957506001600160a01b038216600090815260056020526040902054155b1561034f57600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526005602052604090205415155b15610382576103828261077a565b6001600160a01b0382166000908152600560205260409020546006546103b39183916103ad9161088f565b906108a2565b6006556001600160a01b03821660009081526005602052604090208190556103da816108ae565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b03811660009081526005602052604081205461042257506000919050565b6001600160a01b038216600090815260056020526040812054610444906108ae565b6001600160a01b038416600090815260056020526040902060010154909150808211610474575060009392505050565b61047e828261088f565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600b91909155600c55565b6000546001600160a01b031633146104bf57600080fd5b6007546104cc90346108a2565b600755600654600a546104f6916104ed916104e790346108d1565b906108dd565b600954906108a2565b600955565b610504336108e9565b6105545760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640160405180910390fd5b61055d3361065f565b565b6000546001600160a01b0316331461057657600080fd5b60025480610582575050565b60008060005a90505b848210801561059957508383105b156106585783600d54106105ad576000600d555b6105df6002600d54815481106105c5576105c56109ca565b6000918252602090912001546001600160a01b03166108e9565b15610616576106166002600d54815481106105fc576105fc6109ca565b6000918252602090912001546001600160a01b031661065f565b61062b6106245a839061088f565b83906108a2565b91505a600d80549192506000610640836109f6565b91905055508280610650906109f6565b93505061058b565b5050505050565b6001600160a01b03811660009081526005602052604090205461067f5750565b600061068a826103fd565b905080156107765760085461069f90826108a2565b6008556040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b505050506001600160a01b0382166000908152600460209081526040808320429055600590915281206002015461072e90836108a2565b6001600160a01b0384166000908152600560205260409020600281019190915554610758906108ae565b6001600160a01b038416600090815260056020526040902060010155505b5050565b6002805461078a90600190610a11565b8154811061079a5761079a6109ca565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106107d8576107d86109ca565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161082490600190610a11565b81548110610834576108346109ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061086a5761086a610a28565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089b8284610a11565b9392505050565b600061089b8284610a3e565b60006108cb600a546104e7600954856108d190919063ffffffff16565b92915050565b600061089b8284610a56565b600061089b8284610a75565b600b546001600160a01b038216600090815260046020526040812054909142916109139190610a3e565b1080156108cb5750600c54610927836103fd565b1192915050565b80356001600160a01b038116811461094557600080fd5b919050565b6000806040838503121561095d57600080fd5b6109668361092e565b946020939093013593505050565b60006020828403121561098657600080fd5b61089b8261092e565b600080604083850312156109a257600080fd5b50508035926020909101359150565b6000602082840312156109c357600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610a0a57610a0a6109e0565b5060010190565b600082821015610a2357610a236109e0565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610a5157610a516109e0565b500190565b6000816000190483118215151615610a7057610a706109e0565b500290565b600082610a9257634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa90064736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c0033

Deployed Bytecode Sourcemap

17967:13780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:41;;;;;;;;;;-1:-1:-1;18680:41:0;;;;-1:-1:-1;;;;;18680:41:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;18680:41:0;;;;;;;;29644:95;;;;;;;;;;-1:-1:-1;29716:15:0;;-1:-1:-1;;;29716:15:0;;;;29644:95;;;387:14:1;;380:22;362:41;;350:2;335:18;29644:95:0;222:187:1;31228:90:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18728:37::-;;;;;;;;;;-1:-1:-1;18728:37:0;;;;-1:-1:-1;;;;;18728:37:0;;;30714:187;;;;;;;;;;-1:-1:-1;30714:187:0;;;;;:::i;:::-;;:::i;31424:102::-;;;;;;;;;;-1:-1:-1;31506:12:0;;31424:102;;;1618:25:1;;;1606:2;1591:18;31424:102:0;1472:177:1;26076:372:0;;;;;;;;;;-1:-1:-1;26076:372:0;;;;;:::i;:::-;;:::i;:::-;;29952:433;;;;;;;;;;-1:-1:-1;29952:433:0;;;;;:::i;:::-;;:::i;26665:121::-;;;;;;;;;;-1:-1:-1;26665:121:0;;;;;:::i;:::-;;:::i;29398:240::-;;;;;;;;;;;;29563:26;;29616:14;;-1:-1:-1;;;;;29563:26:0;;;;29398:240;;;;;-1:-1:-1;;;;;3164:32:1;;;3146:51;;3228:2;3213:18;;3206:34;;;;3119:18;29398:240:0;2972:274:1;25305:131:0;;;;;;;;;;-1:-1:-1;25305:131:0;;;;;:::i;:::-;;:::i;31532:85::-;;;;;;;;;;-1:-1:-1;31600:9:0;;31532:85;;31600:9;;;;3645:36:1;;3633:2;3618:18;31532:85:0;3503:184:1;25442:222:0;;;;;;;;;;-1:-1:-1;25442:222:0;;;;;:::i;:::-;;:::i;28732:89::-;;;;;;;;;;-1:-1:-1;28801:12:0;;;;;;;28732:89;;27086:251;;;;;;;;;;-1:-1:-1;27086:251:0;;;;;:::i;:::-;;:::i;27735:253::-;;;;;;;;;;-1:-1:-1;27735:253:0;;;;;:::i;:::-;;:::i;28330:300::-;;;;;;;;;;-1:-1:-1;28330:300:0;;;;;:::i;:::-;;:::i;18524:69::-;;;;;;;;;;-1:-1:-1;18524:69:0;;;;-1:-1:-1;;;;;18524:69:0;;;31085:137;;;;;;;;;;-1:-1:-1;31085:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;31196:18:0;31169:7;31196:18;;;:9;:18;;;;;;;31085:137;17564:148;;;;;;;;;;;;;:::i;28157:167::-;;;:::i;18600:73::-;;;;;;;;;;-1:-1:-1;18600:73:0;;;;-1:-1:-1;;;;;18600:73:0;;;25162:137;;;;;;;;;;;;;:::i;31623:85::-;;;;;;;;;;-1:-1:-1;31666:7:0;17422:6;-1:-1:-1;;;;;17422:6:0;31623:85;;24995:161;;;;;;;;;;;;;:::i;25670:400::-;;;;;;;;;;-1:-1:-1;25670:400:0;;;;;:::i;:::-;;:::i;31324:94::-;;;;;;;;;;;;;:::i;18914:41::-;;;;;;;;;;-1:-1:-1;18914:41:0;;;;-1:-1:-1;;;;;18914:41:0;;;29753:193;;;;;;;;;;-1:-1:-1;29753:193:0;;;;;:::i;:::-;;:::i;27514:215::-;;;;;;;;;;-1:-1:-1;27514:215:0;;;;;:::i;:::-;;:::i;18807:20::-;;;;;;;;;;-1:-1:-1;18807:20:0;;;;-1:-1:-1;;;;;18807:20:0;;;18861:46;;;;;;;;;;-1:-1:-1;18861:46:0;;;;-1:-1:-1;;;;;18861:46:0;;;27343:165;;;;;;;;;;-1:-1:-1;27343:165:0;;;;;:::i;:::-;;:::i;26792:131::-;;;;;;;;;;-1:-1:-1;26792:131:0;;;;;:::i;:::-;;:::i;26454:205::-;;;;;;;;;;-1:-1:-1;26454:205:0;;;;;:::i;:::-;;:::i;30907:172::-;;;;;;;;;;-1:-1:-1;30907:172:0;;;;;:::i;:::-;-1:-1:-1;;;;;31043:19:0;;;31016:7;31043:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;30907:172;26929:151;;;;;;;;;;-1:-1:-1;26929:151:0;;;;;:::i;:::-;;:::i;28827:275::-;;;;;;;;;;-1:-1:-1;28998:7:0;;28827:275;;;28998:7;;;;5827:36:1;;28998:7:0;29024:8;;;;5894:2:1;5879:18;;5872:45;29051:8:0;;;;;5933:18:1;;;5926:45;;;;29082:12:0;;;;;6002:2:1;5987:18;;5980:45;5814:3;5799:19;28827:275:0;5612:419:1;17718:244:0;;;;;;;;;;-1:-1:-1;17718:244:0;;;;;:::i;:::-;;:::i;27994:157::-;;;;;;;;;;;;;:::i;29108:284::-;;;;;;;;;;-1:-1:-1;29271:10:0;:23;29108:284;;;29271:23;;;;6226:36:1;;29271:23:0;29318;;;;6293:2:1;6278:18;;6271:45;29363:21:0;;;;;;;6332:18:1;;;6325:45;6214:2;6199:18;29108:284:0;6036:340:1;28644:82:0;;;;;;;;;;-1:-1:-1;28712:6:0;;28644:82;;31228:90;31267:13;31300:10;31293:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31228:90;:::o;30714:187::-;30817:4;30834:37;30843:10;30855:7;30864:6;30834:8;:37::i;:::-;-1:-1:-1;30889:4:0;30714:187;;;;;:::o;26076:372::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;;;;;;;;;26254:12;26230:23:::1;26243:10:::0;26230:12;:23:::1;:::i;:::-;:36;;;;:::i;:::-;26229:43;;26269:3;26229:43;26221:82;;;::::0;-1:-1:-1;;;26221:82:0;;7670:2:1;26221:82:0::1;::::0;::::1;7652:21:1::0;7709:2;7689:18;;;7682:30;7748:29;7728:18;;;7721:57;7795:18;;26221:82:0::1;7468:351:1::0;26221:82:0::1;26314:10;:36:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;26361:32:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26404:36:0::1;26314;26404::::0;;;::::1;;::::0;;;::::1;::::0;;26076:372::o;29952:433::-;-1:-1:-1;;;;;30126:19:0;;30088:4;30126:19;;;:11;:19;;;;;;;;30146:10;30126:31;;;;;;;;30168:36;30138:6;30186:9;30197:6;30168:9;:36::i;:::-;30237:6;30223:10;:20;;30215:29;;;;;;30255:49;30264:6;30272:10;30284:19;30297:6;30284:10;:19;:::i;:::-;30255:8;:49::i;:::-;30337:9;-1:-1:-1;;;;;30320:35:0;30329:6;-1:-1:-1;;;;;30320:35:0;;30348:6;30320:35;;;;1618:25:1;;1606:2;1591:18;;1472:177;30320:35:0;;;;;;;;-1:-1:-1;30373:4:0;;29952:433;-1:-1:-1;;;;29952:433:0:o;26665:121::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26754:12:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;26754:24:0;;::::1;::::0;;;::::1;::::0;;26665:121::o;25305:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25404:11:::1;:24:::0;;-1:-1:-1;;;;;;25404:24:0::1;-1:-1:-1::0;;;;;25404:24:0;;;::::1;::::0;;;::::1;::::0;;25305:131::o;25442:222::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25567:35:0;::::1;;::::0;;;:22:::1;:35;::::0;;;;:43;;-1:-1:-1;;25567:43:0::1;::::0;::::1;;;::::0;;25621:35:::1;25567::::0;-1:-1:-1;25621:17:0::1;:35::i;:::-;25442:222:::0;;:::o;27086:251::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27198:29:0;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:38;;-1:-1:-1;;27198:38:0::1;::::0;::::1;;;::::0;;27251:19:::1;::::0;::::1;:28;27198:29:::0;:38;27288:29:::1;;-1:-1:-1::0;;;;;27299:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;27288:29:::1;;;27297:1;27288:29;27251:67;::::0;-1:-1:-1;;;;;;27251:67:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27251:67:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27251:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27247:83;;25442:222:::0;;:::o;27735:253::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27841:28:0;::::1;27864:4;27841:28;;27833:37;;;::::0;::::1;;27901:13:::0;-1:-1:-1;;;;;27926:14:0;::::1;;27941:7;17395::::0;17422:6;-1:-1:-1;;;;;17422:6:0;;17357:79;27941:7:::1;27949:30;::::0;-1:-1:-1;;;27949:30:0;;27973:4:::1;27949:30;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;27949:15:0;::::1;::::0;::::1;::::0;133:18:1;;27949:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27926:54;::::0;-1:-1:-1;;;;;;27926:54:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27926:54:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27926:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27822:166;27735:253:::0;:::o;28330:300::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28499:7:::1;28494:3;:12;;28486:21;;;::::0;::::1;;28518:19;::::0;:73:::1;::::0;-1:-1:-1;;;28518:73:0;;::::1;::::0;::::1;8567:25:1::0;;;8608:18;;;8601:34;;;-1:-1:-1;;;;;28518:19:0;;::::1;::::0;:43:::1;::::0;8540:18:1;;28518:73:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;28602:14:0::1;:20:::0;;;;-1:-1:-1;;;28330:300:0:o;17564:148::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;17646:1:::1;17629:19:::0;;-1:-1:-1;;;;;;17629:19:0::1;::::0;;17664:40:::1;::::0;17646:1;;17664:40:::1;::::0;17646:1;;17664:40:::1;17564:148::o:0;28157:167::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28241:1:::1;28231:9;:11;28223:20;;;::::0;::::1;;28258:19;;;;;;;;;-1:-1:-1::0;;;;;28258:19:0::1;-1:-1:-1::0;;;;;28258:27:0::1;;28293:9;28258:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28254:63:::0;::::1;28157:167::o:0;25162:137::-;25238:11;;-1:-1:-1;;;;;25238:11:0;25226:10;:23;25218:32;;;;;;25279:11;;25261:30;;-1:-1:-1;;;;;25279:11:0;25261:17;:30::i;24995:161::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25059:15:::1;::::0;-1:-1:-1;;;25059:15:0;::::1;;;25058:16;25050:55;;;::::0;-1:-1:-1;;;25050:55:0;;8848:2:1;25050:55:0::1;::::0;::::1;8830:21:1::0;8887:2;8867:18;;;8860:30;8926:29;8906:18;;;8899:57;8973:18;;25050:55:0::1;8646:351:1::0;25050:55:0::1;25133:15;::::0;;-1:-1:-1;;25116:32:0;::::1;-1:-1:-1::0;;;25133:15:0;;;::::1;;;25132:16;25116:32:::0;;::::1;;::::0;;24995:161::o;25670:400::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25831:7:::1;::::0;25848:2:::1;::::0;25831:15:::1;::::0;25839:7;;25831::::1;;:15;:::i;:::-;:19;;;;25823:55;;;::::0;-1:-1:-1;;;25823:55:0;;9204:2:1;25823:55:0::1;::::0;::::1;9186:21:1::0;9243:2;9223:18;;;9216:30;9282:26;9262:18;;;9255:54;9326:18;;25823:55:0::1;9002:348:1::0;25823:55:0::1;25897:12;::::0;25911:2:::1;25897:12:::0;;;::::1;;;:16;;25889:59;;;::::0;-1:-1:-1;;;25889:59:0;;9557:2:1;25889:59:0::1;::::0;::::1;9539:21:1::0;9596:2;9576:18;;;9569:30;9635:33;9615:18;;;9608:61;9686:18;;25889:59:0::1;9355:355:1::0;25889:59:0::1;25959:7;:14:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;25984:16:0;;;;25959:14:::1;25984:16:::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;26011:16;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;;;;;;;;;::::1;;::::0;;;::::1;::::0;;25670:400::o;31324:94::-;31365:13;31398:12;31391:19;;;;;:::i;29753:193::-;29859:4;29876:40;29886:10;29898:9;29909:6;29876:9;:40::i;27514:215::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27623:28:0;::::1;27615:63;;;::::0;-1:-1:-1;;;27615:63:0;;9917:2:1;27615:63:0::1;::::0;::::1;9899:21:1::0;9956:2;9936:18;;;9929:30;9995:25;9975:18;;;9968:53;10038:18;;27615:63:0::1;9715:347:1::0;27615:63:0::1;27689:15;:32:::0;;-1:-1:-1;;;;;;27689:32:0::1;-1:-1:-1::0;;;;;27689:32:0;;;::::1;::::0;;;::::1;::::0;;27514:215::o;27343:165::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;27461:1:::1;27454:3;27439:12;;27452:1;27439:14;;;;:::i;:::-;:18;;;;:::i;:::-;27438:24;;;;:::i;:::-;27431:5;:31;;27423:40;;;::::0;::::1;;27491:9;::::0;27487:13:::1;::::0;27491:9:::1;;27487:2;:13;:::i;:::-;27481:19;::::0;:5;:19:::1;:::i;:::-;27474:6;:26:::0;-1:-1:-1;27343:165:0:o;26792:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26886:29:::1;26902:12;26886:15;:29::i;26454:205::-:0;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26573:1:::1;26558:14;;:16;:53;;;;;26607:3;26592:12;;26605:1;26592:14;;;;:::i;:::-;:18;;;;:::i;:::-;26576:13;:35;;26558:53;26550:62;;;::::0;::::1;;26623:14;:28:::0;26454:205::o;26929:151::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27038:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:34;;-1:-1:-1;;27038:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26929:151::o;17718:244::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17807:22:0;::::1;17799:73;;;::::0;-1:-1:-1;;;17799:73:0;;12047:2:1;17799:73:0::1;::::0;::::1;12029:21:1::0;12086:2;12066:18;;;12059:30;12125:34;12105:18;;;12098:62;-1:-1:-1;;;12176:18:1;;;12169:36;12222:19;;17799:73:0::1;11845:402:1::0;17799:73:0::1;17883:6;:17:::0;;-1:-1:-1;;;;;;17883:17:0::1;-1:-1:-1::0;;;;;17883:17:0;::::1;::::0;;::::1;::::0;;17916:38:::1;::::0;17883:17;;;;17916:38:::1;::::0;17883:6;17916:38:::1;17718:244:::0;:::o;27994:157::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28066:50:::1;::::0;28051:12:::1;::::0;28066:10:::1;::::0;28089:21:::1;::::0;28051:12;28066:50;28051:12;28066:50;28089:21;28066:10;:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:66;;;28135:7;28127:16;;;::::0;::::1;30391:317:::0;-1:-1:-1;;;;;30521:19:0;;;;;;:44;;-1:-1:-1;;;;;;30544:21:0;;;;30521:44;30512:93;;;;-1:-1:-1;;;30512:93:0;;12664:2:1;30512:93:0;;;12646:21:1;12703:2;12683:18;;;12676:30;12742:34;12722:18;;;12715:62;-1:-1:-1;;;12793:18:1;;;12786:32;12835:19;;30512:93:0;12462:398:1;30512:93:0;-1:-1:-1;;;;;30616:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30668:32;;1618:25:1;;;30668:32:0;;1591:18:1;30668:32:0;;;;;;;30391:317;;;:::o;20808:717::-;-1:-1:-1;;;;;20938:22:0;;20922:15;20938:22;;;:16;:22;;;;;;;;;:44;;-1:-1:-1;;;;;;20962:20:0;;;;;;:16;:20;;;;;;;;20938:44;:53;;;-1:-1:-1;20984:7:0;;;;20938:53;-1:-1:-1;;;;;21013:28:0;;;21002:10;21013:28;;;:22;:28;;;;;;;21064:26;;;;;;;;20922:69;;-1:-1:-1;21013:28:0;;;;;21064:26;21101:417;;;;21115:32;21130:4;21135:2;21138:6;21145:1;21115:14;:32::i;:::-;21101:417;;;21186:15;;-1:-1:-1;;;21186:15:0;;;;21178:24;;;;;;21220:5;21217:290;;;21226:26;21237:4;21242:2;21245:6;21226:10;:26::i;21217:290::-;21275:6;21272:235;;;21306:7;;;;21305:8;:22;;;;-1:-1:-1;21315:12:0;;;;;;;21305:22;21302:48;;;21328:22;21344:5;21328:15;:22::i;:::-;21369:27;21381:4;21386:2;21389:6;21369:11;:27::i;21272:235::-;21437:54;21452:4;21457:2;21460:6;21487:3;21480:6;21467:12;;;;;;;;;;;:19;;;;;;:::i;:::-;:23;;;;:::i;:::-;21437:14;:54::i;:::-;20911:614;;;20808:717;;;:::o;21531:1436::-;19659:7;:14;;-1:-1:-1;;19659:14:0;19669:4;19659:14;;;21669:4:::1;19659:7:::0;21651:24;;;:9:::1;:24;::::0;;;;;21701:14:::1;::::0;21729:27;;::::1;21726:174;;;21776:12;:36;;;;;21811:1;21790:20;:22;21776:36;21773:116;;;-1:-1:-1::0;21840:20:0;21773:116:::1;;;21882:7;;;;21773:116;21946:10;:23:::0;21910:28:::1;::::0;21970:3:::1;::::0;21939:30:::1;::::0;21946:23:::1;::::0;::::1;;;21939:6:::0;:30:::1;:::i;:::-;:34;;;;:::i;:::-;21910:63:::0;-1:-1:-1;21984:23:0::1;22008:27;21910:63:::0;22008:6;:27:::1;:::i;:::-;21984:51:::0;-1:-1:-1;22046:23:0::1;22070:22;22091:1;22070:20:::0;:22:::1;:::i;:::-;22046:46:::0;-1:-1:-1;22103:26:0::1;22130:36;22046:46:::0;22130:20;:36:::1;:::i;:::-;22103:63:::0;-1:-1:-1;22184:34:0::1;22103:63:::0;22184:15;:34:::1;:::i;:::-;22177:41:::0;-1:-1:-1;22244:21:0::1;22276:25;22177:41:::0;22276:17:::1;:25::i;:::-;22312:14;22327:28;22349:6:::0;22327:21:::1;:28;:::i;:::-;22312:43:::0;-1:-1:-1;22366:20:0::1;22415:6:::0;22388:25:::1;22395:18:::0;22312:43;22388:25:::1;:::i;:::-;22387:34;;;;:::i;:::-;22366:55:::0;-1:-1:-1;22432:20:0::1;22453:19;22366:55:::0;22453:6;:19:::1;:::i;:::-;22517:10;:23:::0;22432:40;;-1:-1:-1;22483:20:0::1;::::0;22541:3:::1;::::0;22504:36:::1;::::0;22517:23:::1;;22432:40:::0;22504:36:::1;:::i;:::-;:40;;;;:::i;:::-;22483:61:::0;-1:-1:-1;22555:18:0::1;22574:25;22483:61:::0;22574:12;:25:::1;:::i;:::-;22555:44:::0;-1:-1:-1;22614:14:0;;22610:97:::1;;22647:19;;;;;;;;;-1:-1:-1::0;;;;;22647:19:0::1;-1:-1:-1::0;;;;;22647:27:0::1;;22682:10;22647:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22643:64:::0;::::1;22753:15;::::0;22745:66:::1;::::0;22718:22:::1;::::0;-1:-1:-1;;;;;22753:15:0::1;::::0;22801:5:::1;::::0;22782:12;;22718:22;22745:66;22718:22;22745:66;22782:12;22753:15;22801:5;22745:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22717:94;;;22840:5;22822:23;;22856:43;22870:15;22886:12;22856:13;:43::i;:::-;22915:44;::::0;;8567:25:1;;;8623:2;8608:18;;8601:34;;;22915:44:0::1;::::0;8540:18:1;22915:44:0::1;;;;;;;21611:1356;;;;;;;;;;;;;19674:1;-1:-1:-1::0;19676:7:0;:15;;-1:-1:-1;;19676:15:0;;;21531:1436::o;23447:684::-;23609:8;;23588:20;;23622:3;;23609:12;;23618:3;;23609:8;;;;;:12;:::i;:::-;:16;;;;:::i;:::-;-1:-1:-1;;;;;23636:15:0;;;;;;:9;:15;;;;;:23;;23588:37;;-1:-1:-1;23653:6:0;;23636:15;;;:23;;23653:6;;23636:23;:::i;:::-;;;;-1:-1:-1;;23680:10:0;;-1:-1:-1;;;;;23680:10:0;23670:21;;;;:9;:21;;;;;:35;;23693:12;;23670:21;:35;;23693:12;;23670:35;:::i;:::-;;;;-1:-1:-1;23743:16:0;;-1:-1:-1;23747:12:0;23743:3;:16;:::i;:::-;23734:4;23716:24;;;;:9;:24;;;;;:44;;:24;;;:44;;;;;:::i;:::-;;;;-1:-1:-1;23787:10:0;;-1:-1:-1;23794:3:0;23787:6;:10;:::i;:::-;-1:-1:-1;;;;;23771:13:0;;;;;;:9;:13;;;;;:27;;:13;;;:27;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23813:26:0;;;;;;:20;:26;;;;;;;;23809:98;;23845:19;;-1:-1:-1;;;;;23879:15:0;;;23845:19;23879:15;;;:9;:15;;;;;;;;23845:50;;-1:-1:-1;;;23845:50:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23845:19:0;;;:28;;3119:18:1;;23845:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23841:66;;-1:-1:-1;;;;;23921:24:0;;;;;;:20;:24;;;;;;;;23917:92;;23951:19;;-1:-1:-1;;;;;23983:13:0;;;23951:19;23983:13;;;:9;:13;;;;;;;;23951:46;;-1:-1:-1;;;23951:46:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23951:19:0;;;:28;;3119:18:1;;23951:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23947:62;;24023:19;;24051:14;;24023:43;;-1:-1:-1;;;;;;24023:43:0;;-1:-1:-1;;;;;24023:19:0;;;;:27;;:43;;;;1618:25:1;;;1606:2;1591:18;;1472:177;24023:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24019:59;-1:-1:-1;;;;;24093:30:0;;;;;;;24111:10;24118:3;24111:6;:10;:::i;:::-;24093:30;;1618:25:1;;;1606:2;1591:18;24093:30:0;;;;;;;23577:554;23447:684;;;;:::o;22973:230::-;23104:6;;23096;:14;;23088:47;;;;-1:-1:-1;;;23088:47:0;;13200:2:1;23088:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23088:47:0;12998:345:1;23088:47:0;23183:7;;23146:49;;23161:4;;23166:2;;23169:6;;23191:3;;23176:14;;23183:7;;23169:6;23176:14;:::i;23209:232::-;23341:6;;23333;:14;;23325:47;;;;-1:-1:-1;;;23325:47:0;;13200:2:1;23325:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23325:47:0;12998:345:1;23325:47:0;23420:8;;23383:50;;23398:4;;23403:2;;23406:6;;23429:3;;23413:15;;23420:8;;;;;23406:6;23413:15;:::i;24137:465::-;24244:16;;;24258:1;24244:16;;;;;;;;24220:21;;24244:16;;;;;;;;;;-1:-1:-1;24244:16:0;24220:40;;24289:4;24271;24276:1;24271:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24271:23:0;;;:7;;;;;;;;;;:23;;;;24315:7;;:14;;;-1:-1:-1;;;24315:14:0;;;;:7;;;;;:12;;:14;;;;;24271:7;;24315:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24305:4;24310:1;24305:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24305:24:0;;;:7;;;;;;;;;:24;24372:7;;24340:54;;24357:4;;24372:7;24382:11;24340:8;:54::i;:::-;24405:7;;:189;;-1:-1:-1;;;24405:189:0;;-1:-1:-1;;;;;24405:7:0;;;;:58;;:189;;24478:11;;24405:7;;24521:4;;24548;;24568:15;;24405:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24608:373;24747:7;;24715:54;;24732:4;;-1:-1:-1;;;;;24747:7:0;24757:11;24715:8;:54::i;:::-;24780:7;;24922:10;;24780:193;;-1:-1:-1;;;24780:193:0;;24844:4;24780:193;;;15194:34:1;15244:18;;;15237:34;;;24780:7:0;15287:18:1;;;15280:34;;;15330:18;;;15323:34;-1:-1:-1;;;;;24922:10:0;;;15373:19:1;;;15366:44;24947:15:0;15426:19:1;;;15419:35;24780:7:0;;;:23;;24811:9;;15128:19:1;;24780:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24608:373;;:::o;414:597:1:-;526:4;555:2;584;573:9;566:21;616:6;610:13;659:6;654:2;643:9;639:18;632:34;684:1;694:140;708:6;705:1;702:13;694:140;;;803:14;;;799:23;;793:30;769:17;;;788:2;765:26;758:66;723:10;;694:140;;;852:6;849:1;846:13;843:91;;;922:1;917:2;908:6;897:9;893:22;889:31;882:42;843:91;-1:-1:-1;995:2:1;974:15;-1:-1:-1;;970:29:1;955:45;;;;1002:2;951:54;;414:597;-1:-1:-1;;;414:597:1:o;1016:131::-;-1:-1:-1;;;;;1091:31:1;;1081:42;;1071:70;;1137:1;1134;1127:12;1152:315;1220:6;1228;1281:2;1269:9;1260:7;1256:23;1252:32;1249:52;;;1297:1;1294;1287:12;1249:52;1336:9;1323:23;1355:31;1380:5;1355:31;:::i;:::-;1405:5;1457:2;1442:18;;;;1429:32;;-1:-1:-1;;;1152:315:1:o;1654:156::-;1720:20;;1780:4;1769:16;;1759:27;;1749:55;;1800:1;1797;1790:12;1749:55;1654:156;;;:::o;1815:322::-;1886:6;1894;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;1994:27;2011:9;1994:27;:::i;:::-;1984:37;;2040:36;2072:2;2061:9;2057:18;2040:36;:::i;:::-;2030:46;;2095:36;2127:2;2116:9;2112:18;2095:36;:::i;:::-;2085:46;;1815:322;;;;;:::o;2142:456::-;2219:6;2227;2235;2288:2;2276:9;2267:7;2263:23;2259:32;2256:52;;;2304:1;2301;2294:12;2256:52;2343:9;2330:23;2362:31;2387:5;2362:31;:::i;:::-;2412:5;-1:-1:-1;2469:2:1;2454:18;;2441:32;2482:33;2441:32;2482:33;:::i;:::-;2142:456;;2534:7;;-1:-1:-1;;;2588:2:1;2573:18;;;;2560:32;;2142:456::o;2603:118::-;2689:5;2682:13;2675:21;2668:5;2665:32;2655:60;;2711:1;2708;2701:12;2726:241;2782:6;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2890:9;2877:23;2909:28;2931:5;2909:28;:::i;:::-;2956:5;2726:241;-1:-1:-1;;;2726:241:1:o;3251:247::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;3418:9;3405:23;3437:31;3462:5;3437:31;:::i;3692:382::-;3757:6;3765;3818:2;3806:9;3797:7;3793:23;3789:32;3786:52;;;3834:1;3831;3824:12;3786:52;3873:9;3860:23;3892:31;3917:5;3892:31;:::i;:::-;3942:5;-1:-1:-1;3999:2:1;3984:18;;3971:32;4012:30;3971:32;4012:30;:::i;:::-;4061:7;4051:17;;;3692:382;;;;;:::o;4079:316::-;4156:6;4164;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;-1:-1:-1;;4264:23:1;;;4334:2;4319:18;;4306:32;;-1:-1:-1;4385:2:1;4370:18;;;4357:32;;4079:316;-1:-1:-1;4079:316:1:o;4400:393::-;4478:6;4486;4494;4502;4555:3;4543:9;4534:7;4530:23;4526:33;4523:53;;;4572:1;4569;4562:12;4523:53;4595:27;4612:9;4595:27;:::i;:::-;4585:37;;4641:36;4673:2;4662:9;4658:18;4641:36;:::i;:::-;4631:46;;4696:36;4728:2;4717:9;4713:18;4696:36;:::i;:::-;4686:46;;4751:36;4783:2;4772:9;4768:18;4751:36;:::i;:::-;4741:46;;4400:393;;;;;;;:::o;5034:180::-;5093:6;5146:2;5134:9;5125:7;5121:23;5117:32;5114:52;;;5162:1;5159;5152:12;5114:52;-1:-1:-1;5185:23:1;;5034:180;-1:-1:-1;5034:180:1:o;5219:388::-;5287:6;5295;5348:2;5336:9;5327:7;5323:23;5319:32;5316:52;;;5364:1;5361;5354:12;5316:52;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;6381:380::-;6460:1;6456:12;;;;6503;;;6524:61;;6578:4;6570:6;6566:17;6556:27;;6524:61;6631:2;6623:6;6620:14;6600:18;6597:38;6594:161;;;6677:10;6672:3;6668:20;6665:1;6658:31;6712:4;6709:1;6702:15;6740:4;6737:1;6730:15;6594:161;;6381:380;;;:::o;6766:356::-;6968:2;6950:21;;;6987:18;;;6980:30;7046:34;7041:2;7026:18;;7019:62;7113:2;7098:18;;6766:356::o;7127:127::-;7188:10;7183:3;7179:20;7176:1;7169:31;7219:4;7216:1;7209:15;7243:4;7240:1;7233:15;7259:204;7297:3;7333:4;7330:1;7326:12;7365:4;7362:1;7358:12;7400:3;7394:4;7390:14;7385:3;7382:23;7379:49;;;7408:18;;:::i;:::-;7444:13;;7259:204;-1:-1:-1;;;7259:204:1:o;7824:125::-;7864:4;7892:1;7889;7886:8;7883:34;;;7897:18;;:::i;:::-;-1:-1:-1;7934:9:1;;7824:125::o;7954:184::-;8024:6;8077:2;8065:9;8056:7;8052:23;8048:32;8045:52;;;8093:1;8090;8083:12;8045:52;-1:-1:-1;8116:16:1;;7954:184;-1:-1:-1;7954:184:1:o;8143:245::-;8210:6;8263:2;8251:9;8242:7;8238:23;8234:32;8231:52;;;8279:1;8276;8269:12;8231:52;8311:9;8305:16;8330:28;8352:5;8330:28;:::i;10067:168::-;10107:7;10173:1;10169;10165:6;10161:14;10158:1;10155:21;10150:1;10143:9;10136:17;10132:45;10129:71;;;10180:18;;:::i;:::-;-1:-1:-1;10220:9:1;;10067:168::o;10240:217::-;10280:1;10306;10296:132;;10350:10;10345:3;10341:20;10338:1;10331:31;10385:4;10382:1;10375:15;10413:4;10410:1;10403:15;10296:132;-1:-1:-1;10442:9:1;;10240:217::o;10462:422::-;10551:1;10594:5;10551:1;10608:270;10629:7;10619:8;10616:21;10608:270;;;10688:4;10684:1;10680:6;10676:17;10670:4;10667:27;10664:53;;;10697:18;;:::i;:::-;10747:7;10737:8;10733:22;10730:55;;;10767:16;;;;10730:55;10846:22;;;;10806:15;;;;10608:270;;;10612:3;10462:422;;;;;:::o;10889:806::-;10938:5;10968:8;10958:80;;-1:-1:-1;11009:1:1;11023:5;;10958:80;11057:4;11047:76;;-1:-1:-1;11094:1:1;11108:5;;11047:76;11139:4;11157:1;11152:59;;;;11225:1;11220:130;;;;11132:218;;11152:59;11182:1;11173:10;;11196:5;;;11220:130;11257:3;11247:8;11244:17;11241:43;;;11264:18;;:::i;:::-;-1:-1:-1;;11320:1:1;11306:16;;11335:5;;11132:218;;11434:2;11424:8;11421:16;11415:3;11409:4;11406:13;11402:36;11396:2;11386:8;11383:16;11378:2;11372:4;11369:12;11365:35;11362:77;11359:159;;;-1:-1:-1;11471:19:1;;;11503:5;;11359:159;11550:34;11575:8;11569:4;11550:34;:::i;:::-;11620:6;11616:1;11612:6;11608:19;11599:7;11596:32;11593:58;;;11631:18;;:::i;:::-;11669:20;;10889:806;-1:-1:-1;;;10889:806:1:o;11700:140::-;11758:5;11787:47;11828:4;11818:8;11814:19;11808:4;11787:47;:::i;12865:128::-;12905:3;12936:1;12932:6;12929:1;12926:13;12923:39;;;12942:18;;:::i;:::-;-1:-1:-1;12978:9:1;;12865:128::o;13480:127::-;13541:10;13536:3;13532:20;13529:1;13522:31;13572:4;13569:1;13562:15;13596:4;13593:1;13586:15;13612:251;13682:6;13735:2;13723:9;13714:7;13710:23;13706:32;13703:52;;;13751:1;13748;13741:12;13703:52;13783:9;13777:16;13802:31;13827:5;13802:31;:::i;13868:980::-;14130:4;14178:3;14167:9;14163:19;14209:6;14198:9;14191:25;14235:2;14273:6;14268:2;14257:9;14253:18;14246:34;14316:3;14311:2;14300:9;14296:18;14289:31;14340:6;14375;14369:13;14406:6;14398;14391:22;14444:3;14433:9;14429:19;14422:26;;14483:2;14475:6;14471:15;14457:29;;14504:1;14514:195;14528:6;14525:1;14522:13;14514:195;;;14593:13;;-1:-1:-1;;;;;14589:39:1;14577:52;;14684:15;;;;14649:12;;;;14625:1;14543:9;14514:195;;;-1:-1:-1;;;;;;;14765:32:1;;;;14760:2;14745:18;;14738:60;-1:-1:-1;;;14829:3:1;14814:19;14807:35;14726:3;13868:980;-1:-1:-1;;;13868:980:1:o;15465:306::-;15553:6;15561;15569;15622:2;15610:9;15601:7;15597:23;15593:32;15590:52;;;15638:1;15635;15628:12;15590:52;15667:9;15661:16;15651:26;;15717:2;15706:9;15702:18;15696:25;15686:35;;15761:2;15750:9;15746:18;15740:25;15730:35;;15465:306;;;;;:::o

Swarm Source

ipfs://c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa900

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

OVERVIEW

A utility-focused project that aims to reduce supply from 100M to 21M using revenue from top-quality utilities. This goal being attained by burning as much tokens as possible from taxes + revenue of our utilities.

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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