Contract 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb 6

 

Contract Overview

Balance:
0.013687255165182573 ETH

ETH Value:
$25.92 (@ $1,894.03/ETH)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe26ddbc0a92f9537b5931c7e6a6e2bdca83262c89f7b587a53c2248ed98bb1baTransfer963871862023-05-31 15:36:482 days 2 hrs ago0x2363a983b82f30ad3259aacb33acf5db605352e7 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.000105180.1
0x0789bd72dc068b1848884b7dc1df1d8d9f735023055d4e0a9a03f30dfe8d2869Approve954296262023-05-28 20:24:034 days 21 hrs ago0x57de8415ecfd698430e59a8d3edc4333daad3fb1 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00007416 0.1
0xb56d68021592bc6214f212bd66e21467b91fdd5fd09a4c80337add5616effa05Approve939951962023-05-24 16:08:089 days 1 hr ago0x57de8415ecfd698430e59a8d3edc4333daad3fb1 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.0000731 0.1
0x8a4c5c422e46e352435c3aaefd4886ca158ab43b3ffc6f065591adbea25165b3Approve931159122023-05-22 1:45:3411 days 16 hrs ago0x1e808ad1de7615484636e5cbf08fb0cf0c99952f IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00005217 0.1
0x22ee2c51dc43038df062752a37f7016dca1f50e688b92b6c8c8e7fd0ab4c5f9bTransfer912675142023-05-16 11:46:0517 days 6 hrs ago0x7d75acd9b52e01b149557ed230717ecd088b898a IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00008572 0.1
0x6d838d2b3439ef319927354fd335043cb5822ce60aef77732b5426ea115ba9c8Approve912547982023-05-16 10:53:1317 days 7 hrs ago0x0da3275b6651a170032f9de84c0986bb1e0c7d36 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00007802 0.1
0x28030f7828d016776007f6a6a2e21df94f964ab6eacd14330e6341afa602b286Approve908202962023-05-15 3:48:4618 days 14 hrs ago0x55956aaad86b318992e7f6dbd8e41923f6829606 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00008099 0.1
0xb6a652122c650b58ec3ea694983567c14bb2aaa45275066603388c044a03036cApprove908202482023-05-15 3:48:3318 days 14 hrs ago0x55956aaad86b318992e7f6dbd8e41923f6829606 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00008099 0.1
0xbc50eeb0348a1f84a18c05899ae420430d55539518d9e93b1728806746f9bb69Approve908202132023-05-15 3:48:2418 days 14 hrs ago0x55956aaad86b318992e7f6dbd8e41923f6829606 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00008099 0.1
0xa9366e3367f9af60498ae06d4e890a91fbe1aef303b6d433a17c9c731f8da9e7Approve906891192023-05-14 18:10:4918 days 23 hrs ago0x43b513c90cb8a32d34ee213ed94f9655f10550fe IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00008531 0.1
0x2105a7fcdf744498b9be75e73ab44dcd78ed1d0cc313ec022a00b8d1853ffd26Approve895802192023-05-11 11:36:3022 days 6 hrs ago0x0507b3ffe3836ad0f256f3d53b8fa7653e54e2eb IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.000140780.1
0x6dcbeb2b99241f43eacdcc23da362c284f33d99aab663bd5ac2134ba3f6b285bTransfer895739422023-05-11 11:10:0222 days 6 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.0001412 0.1
0x577c13430746f9aa178a688fec476621254eaf12dc85d98b0936549de8b0ac8dBurn895735242023-05-11 11:08:1522 days 6 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00014287 0.1
0xac2a9947c961617062c698ed4d87002cc7dc1a51c27eab74f181dde7100a1b7aMint895690432023-05-11 10:49:2322 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00017577 0.1
0x44aed7b204a4b5667b3cbf6eed70b20b834cfb43f18a8e1a0c5a912b0400d9a9Mint895688702023-05-11 10:48:3822 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00017748 0.1
0xde67e519c56fa2bac1a555434493c610883814a206a47b7059fd4d0b4a23ffa6Set Blacklist895685792023-05-11 10:47:2322 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00018172 0.1
0x87a78d5c5eda78f5889d2f9fb0f1aad3177dafc3163a1daed2dff0fb01af5ed4Burn895675232023-05-11 10:42:5522 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00015047 0.1
0x837f98517a2ed6ff8d581d5189003f4e690dd11df415c5d891b7d10d0979ba02Burn895673402023-05-11 10:42:0822 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.0001505 0.1
0xadd2ace62a73ed50e332f1f4e9d096c2b969c7d8fab51270f243c128366c4376Burn895672172023-05-11 10:41:3922 days 7 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00015651 0.1
0x755adedf5dda1ca22e91f87551a1e9eb9573d7c96d0b9e95869a6da4c47cc985Mint895550292023-05-11 9:50:1722 days 8 hrs ago0x48e8362a5e8713e25ebc8922ce8ff8a745e0373d IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00019733 0.1
0xb4bb8dd4e8792fe403bf768502806a831f376035dfc3a06cbc9e40008576c9d8Approve893751272023-05-10 20:47:5122 days 21 hrs ago0x0da3275b6651a170032f9de84c0986bb1e0c7d36 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00020533 0.1
0x8d729f855c8b9efdb8a572924ced598acf1f591565b05262bc31e3203ce4c0afApprove893730102023-05-10 20:38:5422 days 21 hrs ago0x57de8415ecfd698430e59a8d3edc4333daad3fb1 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00021266 0.1
0xe43d33592c33aacd1cdf45beb7ae3c64b873cc899f3ff5a15cb4d885041b5410Transfer893222552023-05-10 17:00:2123 days 58 mins ago0xd528009e4b3fb9c4a56c5603d0e5308fa87578eb IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00032022 0.1
0x95666aef051c164d4fe4846d8c771eaa57d811637b37e85bd7a969871e13d4f0Transfer888651602023-05-09 9:12:3924 days 8 hrs ago0x011f3c53648ec76d17e28d7b32ccebedcd842200 IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.00010368 0.1
0x9270eccb0f27bf9d40880e1b3864f803ed5aa7271493d9e56843d65963ec4742Approve888393502023-05-09 7:25:4624 days 10 hrs ago0x0ae7343b8651415de3014d17be10e867977914fe IN  0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0 ETH0.000088720.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000066460371761525 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000066460371761525 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000037211189328613 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000037211189328613 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.00013570434419981 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.00013570434419981 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000038187287106784 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000038187287106784 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000038405428495656 ETH
0x0232dad45f316af973c33a054573c167eb0b9c5c54ab7f4544b274f591ab9190895656922023-05-11 10:35:1622 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000038405428495656 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000263720291509589 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000263325785612814 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000000394505896775 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000148605393438056 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000148605393438056 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.00054968167040377 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000549236825606979 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000000444844796791 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000156653818845853 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000156653818845853 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000000461040801664 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000158505064781523 ETH
0x6f5ed7992fe5106d48e9d99cd0188c5b1daf3e38b91b88a08209886816c8b592895654822023-05-11 10:34:2222 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000158505064781523 ETH
0xe0bee14cc2077d308c09781f9c814d16963ee1a948d58a01040b62296fd9118a895652002023-05-11 10:33:1022 days 7 hrs ago 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb SushiSwap: Router0.000834617280091443 ETH
0xe0bee14cc2077d308c09781f9c814d16963ee1a948d58a01040b62296fd9118a895652002023-05-11 10:33:1022 days 7 hrs ago SushiSwap: Router 0x3350748459411d148e9c9e2cb3dcb3b4bdc509cb0.000825432422200367 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Yakuza2033

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2023-01-31
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.17;


//  __   __    _                  ___ __ ________
//  \ \ / /_ _| |___  _ _____ _  |_  )  \__ /__ /
//   \ V / _` | / / || |_ / _` |  / / () |_ \|_ \
//    |_|\__,_|_\_\\_,_/__\__,_| /___\__/___/___/


//  / __| |_  ___  __ _ _  _ _ _                 
//  \__ \ ' \/ _ \/ _` | || | ' \                
//  |___/_||_\___/\__, |\_,_|_||_|               
//                |___/                          


// (•_•)
// ( •_•)>⌐■-■
// (⌐■_■)


// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


// File @openzeppelin/contracts/token/ERC20/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}


// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}


// File @uniswap/v2-core/contracts/interfaces/[email protected]
interface IUniswapV2ERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}


// File @uniswap/v2-core/contracts/interfaces/[email protected]
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// File @openzeppelin/contracts/security/[email protected]
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// File contracts/utility/Permissions.sol
/**
 * @title A generic permissions-management contract for Yakuza 2033.
 *
 * @notice Yakuza 2033
 *             Telegram: t.me/yakuza2033
 *             Twitter:  yakuza2033
 *             App:      yakuza2033.com
 *
 * @author Shogun
 *             Telegram: zeroXshogun
 *             Web:      coinlord.finance
 *
 * @custom:security-contact Telegram: zeroXshogun
 */
contract Permissions is Context, Ownable {
    /// Accounts permitted to modify rules.
    mapping(address => bool) public appAddresses;

    modifier onlyApp() {
        require(appAddresses[_msgSender()] == true, "Caller is not admin");
        _;
    }

    constructor() {}

    function setPermission(address account, bool permitted)
        external
        onlyOwner
    {
        appAddresses[account] = permitted;
    }
}


// File contracts/inventory/Bugs.sol
/**
 * @title An ERC-20 contract for Yakuza 2033.
 *
 * @dev All token amounts in Wei.
 * @dev Forked from Mithril (https://bscscan.com/address/0x566fdf5bf13b9642cbdfdd1e5f2a67dc2bc1755a#code).
 *
 * @notice Yakuza 2033
 *             Telegram: t.me/yakuza2033
 *             Twitter:  yakuza2033
 *             App:      yakuza2033.com
 *
 * @author Shogun
 *             Telegram: zeroXshogun
 *             Web:      coinlord.finance
 *
 * @custom:security-contact Telegram: zeroXshogun
 */
contract Yakuza2033 is IERC20, Permissions {
    using Address for address;

    address private _token;

    ////
    //// ERC20
    ////

    string public name;
    string public symbol;

    uint8 public decimals;
    uint256 private _totalSupply;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    /// Emitted when new tokens are minted.
    event Mint(address indexed account, uint256 indexed amount);

    ////
    //// LP
    ////

    /// @dev Used for approval.
    IUniswapV2Router02 public router;
    /// @dev Used for transfer.
    address public pair;

    /// Prevents collision of multiple concurrent calls to swap and liquify.
    uint256 public swapAndLiquifyTrigger;
    bool private _inSwapAndLiquify;
    modifier lockTheSwap() {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }

    /// Token and ETH added to LP.
    event SwapAndLiquify(uint256 tokenIntoLiquidity, uint256 ethIntoLiquidity);

    ////
    //// TOKENOMICS: LIMITS
    ////

    /// @dev Amount of tokens, in Wei.
    uint256 public maxTransfer;
    /// @dev Amount of tokens, in Wei.
    uint256 public maxWallet;

    address[] public maxExempt;
    mapping(address => bool) public _isMaxExempt;

    ////
    //// TOKENOMICS: FEES
    ////

    address[] public feePayers;
    mapping(address => bool) public isFeePayer;

    address[] public feeReceivers;
    mapping(address => uint8) private _feeReceiversAndRates;

    address public stablecoin;
    mapping(address => bool) public receivesStablecoin;

    ////
    //// WHITELIST
    ////

    bool public whitelistEnabled;
    mapping(address => uint256) public whitelistBalance;

    ////
    //// BLACKLIST
    ////

    address[] public blacklist;
    mapping(address => bool) public isBlacklisted;

    ////
    //// INIT
    ////

    /**
     * Deploy contract.
     */
    constructor() {
        _token = address(this);

        // ERC20.

        name = "Yakuza2033";
        symbol = "BUGS";
        decimals = 18;
        _totalSupply = 10000000 * (10 ** decimals); // 10m

        // LP.

        router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // Arbitrum One SushiSwap router.
        // router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // Goerli SushiSwap router.
        // router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); // BSC Testnet Pancakeswap router.
        // router = IUniswapV2Router02(0xab7664500b19a7a2362Ab26081e6DfB971B6F1B0); // Arbitrum Goerli
        pair = IUniswapV2Factory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        swapAndLiquifyTrigger = _totalSupply / 1000;

        // Tokenomics: limits.

        maxTransfer = _totalSupply / 100;
        maxWallet = _totalSupply / 100;

        // Tokenomics: fees.

        stablecoin = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8; // Arbitrum One USDC
        // stablecoin = 0x55a309598ABf543bF76FbB22859938ba2F29C2eA; // Goerli DAI
        // stablecoin = 0xeD24FC36d5Ee211Ea25A80239Fb8C4Cfd80f12Ee; // BSC Testnet BUSD
        // stablecoin = 0x42437026bD32BC07914dc1FB35B8009805277915; // Arbitrum Goerli

        // Whitelist.
        whitelistEnabled = true;

        // Initial mint.

        _balances[owner()] += _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    ////
    //// ERC20
    ////

    /**
     * Get current supply of tokens, in Wei.
     *
     * @return uint256 of _totalSupply.
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * Get amount of tokens owned by `account`, in Wei.
     *
     * @param account as address to check.
     * @return uint256 as the amount of tokens.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    /**
     * Standardized mint wrapper for App's yielding contracts.
     *
     * @dev id param is included so app contracts have consistent mint interface,
     * @dev regardless of whether minted token is ERC20 or ERC1155.
     *
     * @param to as the address to assign the tokens to.
     * @param id not applicable here, as ERC20 has no ID.
     * @param amount of tokens to mint.
     */
    function mint(address to, uint256 id, uint256 amount)
        external
        onlyApp
    {
        _mint(to, amount);
    }

    /**
     * Mint `amount` of tokens to `account`.
     *
     * @param account as the address to assign the tokens to.
     * @param amount as the amount of tokens to create.
     */
    function _mint(address account, uint256 amount) private {
        require(account != address(0), "Invalid account");

        _totalSupply += amount;
        _balances[account] += amount;

        emit Mint(account, amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * Burn `amount` of `account`'s tokens.
     *
     * @dev Only authorized callers.
     *
     * @param account as the address to burn from.
     * @param amount of tokens to burn.
     */
    function burn(address account, uint256 amount) external onlyApp {
        _burn(account, amount);
    }

    /**
     * Transfers `amount` of tokens from `account` to the zero address.
     *
     * @param account as the address to take the tokens from.
     * @param amount as the amount of tokens to burn.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "Invalid account");

        require(_balances[account] >= amount, "Insufficient balance");
        unchecked {
            _balances[account] -= amount;
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

    ////
    //// ALLOWANCES
    ////

    /**
     * Get max amount of `owner` tokens that `spender` can move with transferFrom.
     *
     * @param owner as address of account owning tokens.
     * @param spender as address of account moving tokens.
     *
     * @return uint256 as max amount of tokens able to be transferred.
     */
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * Set max amount of caller's tokens that `spender` can move with transferFrom.
     *
     * @param spender as address of account moving tokens.
     * @param amount as the amount of tokens allowed to be transferred.
     *
     * @return bool on success.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * Set max amount of `owner` tokens that `spender` can move with transferFrom.
     *
     * @param owner as address of token owner.
     * @param spender as address of account moving tokens.
     * @param amount as the amount of tokens allowed to be transferred.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * Update `owner`'s allowance for `spender` based on spent `amount`.
     *
     * @dev Does not update the allowance amount in case of infinite allowance.
     * @dev Revert if not enough allowance is available.
     *
     * @param owner as address of token owner.
     * @param spender as address of account moving tokens.
     * @param amount as the amount of tokens allowed to be transferred.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    ////
    //// TRANSFERS
    ////

    /**
     * Transfer tokens from caller to `to`.
     *
     * @param to as address of receiver.
     * @param amount of tokens.
     *
     * @return bool on success.
     */
    function transfer(address to, uint256 amount) public override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * Transfer `amount` of tokens from `from` to `to`.
     *
     * @dev `from` has to have approved caller to spend `amount`.
     *
     * @param from as address of sender.
     * @param to as address of receiver.
     * @param amount of tokens.
     *
     * @return bool on success.
     */
    function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * Determine the context of this transfer.
     *
     * @param from address of sender.
     * @param to address of receiver.
     * @param amount tokens being transferred.
     */
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0) && to != address(0), "Transfer with zero address");
        require(amount <= _balances[from], "Insufficient funds");
        require(!isBlacklisted[from] && !isBlacklisted[to], "Blacklisted account");

        // Check max limits.
        if (!_isMaxExempt[from]) { // Non-exempt senders cannot send more than maxTransfer.
            require(amount <= maxTransfer, "Exceeds max tx");
        }
        if (!_isMaxExempt[to]) { // Non-exempt receivers cannot exceed maxWallet if the sender is non-exempt too.
            require(_balances[to] + amount <= maxWallet, "Exceeds max wallet");
        }

        // Check whitelist.
        if (whitelistEnabled) {
            require(from == pair, "Only LP can send during whitelist");
            require(whitelistBalance[to] > 0, "No whitelist balance available");
            whitelistBalance[to] -= amount;
        }

        // Check LP contribution.
        if (!_inSwapAndLiquify // Avoid circular liquidity event.
            && isFeePayer[to] // Only on token sales.
            && swapAndLiquifyTrigger > 0 // Swap and liquify enabled.
            && _balances[_token] >= swapAndLiquifyTrigger // Contract's balance of token > trigger.
        ) {
            _swapAndLiquify(swapAndLiquifyTrigger);
        }

        // Check fee requirement, then transfer.
        if (from != _token && (isFeePayer[from] || isFeePayer[to])) {
            _transferWithFees(from, to, amount);
        }
        else {
            _transferWithoutFees(from, to, amount);
        }
    }

    /**
     * Transfer tokens and take fees.
     *
     * @dev Balance changes are checked in _transfer.
     *
     * @param from address of sender.
     * @param to address of receiver.
     * @param amount of tokens being transferred.
     */
    function _transferWithFees(address from, address to, uint256 amount) private {
        uint256 amountMinusFees = _takeFees(from, to, amount);
        unchecked {
            _balances[from] -= amountMinusFees;
            _balances[to] += amountMinusFees;
        }
        emit Transfer(from, to, amountMinusFees);
    }

    /**
     * Transfer tokens and don't take fees.
     *
     * @dev Balance changes are checked in _transfer.
     *
     * @param from address of sender.
     * @param to address of receivers.
     * @param amount of tokens being transferred.
     */
    function _transferWithoutFees(address from, address to, uint256 amount) private {
        unchecked {
            _balances[from] -= amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    /**
     * Move fees from transferred amount to fee receivers.
     *
     * @param from address of sender.
     * @param to address of receiver.
     * @param amount quantity of tokens being transferred.
     *
     * @return uint256 amount to transfer after fees.
     */
    function _takeFees(address from, address to, uint256 amount) private returns (uint256) {
        uint256 amountMinusFees = amount;
        uint256 feeReceiversLength = feeReceivers.length;

        for (uint8 i = 0; i < feeReceiversLength; i++) {
            uint256 fee = amount * _feeReceiversAndRates[feeReceivers[i]] / 100;
            amountMinusFees -= fee;
            _balances[from] -= fee;

            // Stablecoin receiver gets stablecoin on token sale.
            if (receivesStablecoin[feeReceivers[i]] && isFeePayer[to]) {
                uint256 eth = _swapTokenForETH(fee);
                _swapETHForToken(eth, stablecoin, feeReceivers[i]);
            }
            else { // Otherwise fee is in token.
                _balances[feeReceivers[i]] += fee;
                emit Transfer(from, feeReceivers[i], fee);
            }
        }

        return amountMinusFees;
    }

    ////
    //// LP
    ////

    /**
     * Add liquidity to the LP pool.
     *
     * @dev approve is called to ensure that the router is able to call transferFrom.
     *
     * @param tokenAmount quantity of token to transfer.
     * @param ethAmount quantity of ETH to transfer.
     */
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(_token, address(router), tokenAmount);

        router.addLiquidityETH{value: ethAmount}(
            _token,         // address token
            tokenAmount,    // uint amountTokenDesired
            0,              // uint amountTokenMin
            0,              // uint amountETHMin
            owner(),        // address to
            block.timestamp // uint deadline
        );
    }

    /**
     * Set the quantity of token at which _swapAndLiquify should be called.
     *
     * @dev Disable swap and liquify by setting trigger to 0.
     *
     * @param trigger quantity of token at which to swap and liquify.
     */
    function setSwapAndLiquifyTrigger(uint256 trigger) external onlyOwner {
        require(trigger > 0 && trigger < _totalSupply, "Set from 0 to totalSupply");
        swapAndLiquifyTrigger = trigger;
    }

    /**
     * Sell half of the contract's token for ETH, and add both to the LP pool.
     *
     * @param amount of token to split, swap half of, and add to LP pool.
     */
    function _swapAndLiquify(uint256 amount) private lockTheSwap {
        uint256 tokenHalf = amount / 2;
        uint256 ethHalf = amount - tokenHalf;
        uint256 ethReceived = _swapTokenForETH(ethHalf);
        _addLiquidity(tokenHalf, ethReceived);
        emit SwapAndLiquify(tokenHalf, ethReceived);
    }

    /**
     * Sell ETH to buy ERC20 token.
     *
     * @param ethAmount quantity of ETH to sell.
     * @param token address of token to buy.
     * @param receiver address to send the token to.
     */
    function _swapETHForToken(uint256 ethAmount, address token, address receiver) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = token;

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // uint amountOutMin
            path, // address[] path
            receiver, // address to
            block.timestamp + 300 // uint deadline
        );
    }

    /**
     * Sell token to buy ETH.
     *
     * @param tokenAmount quantity of token to sell.
     *
     * @return uint256 amount of ETH from swap.
     */
    function _swapTokenForETH(uint256 tokenAmount) private returns (uint256) {
        uint256 initBalance = _token.balance;
        address[] memory path = new address[](2);
        path[0] = _token;
        path[1] = router.WETH();

        _approve(_token, address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount, // uint amountIn
            0, // uint amountOutMin
            path, // address[] path
            _token, // address to
            block.timestamp // uint deadline
        );

        return _token.balance - initBalance;
    }

    ////
    //// Tokenomics: limits
    ////

    /**
     * Set token transfer and ownership limits.
     *
     * @dev Set exemptions from these limits with setMaxLimitsExempt.
     *
     * @param maxTransfer_ max amount of transferrable tokens.
     * @param maxWallet_ max amount of tokens in an account.
     */
    function setMaxLimits(uint256 maxTransfer_, uint256 maxWallet_) external onlyOwner {
        require(
            maxTransfer_ >= 0
            && maxTransfer_ <= totalSupply()
            && maxWallet_ >= 0
            && maxWallet_ <= totalSupply(),
            "Set from 0 to total supply."
        );
        maxTransfer = maxTransfer_;
        maxWallet = maxWallet_;
    }

    /**
     * Set list of addresses exempt from the max transfer and wallet limits.
     *
     * @dev Overwrites existing exemptions.
     *
     * @param accounts list of exempt accounts.
     */
    function setMaxLimitsExempt(address[] memory accounts) external onlyOwner {
        // Clear current exemptions mapping.
        for (uint8 i = 0; i < maxExempt.length; i++)
            _isMaxExempt[maxExempt[i]] = false;
        // Update exemptions list.
        maxExempt = accounts;
        // Set new exemptions mapping.
        for (uint8 i = 0; i < accounts.length; i++)
            _isMaxExempt[accounts[i]] = true;
    }

    ////
    //// Tokenomics: fees ///
    ////

    /**
     * Get the fee rate for a given fee receiver.
     *
     * @param receiver address of receiver to query.
     *
     * @return uint8 percent fee rate.
     */
    function getFeeRate(address receiver) external view returns (uint8) {
        return _feeReceiversAndRates[receiver];
    }

    /**
     * Set fee receivers and rates for fee-paying transfers.
     *
     * @dev Address at feeReceivers[i] receives rate at feeRates[i]).
     * @dev Overwrites existing fee receivers and rates.
     *
     * @param feeReceivers_ addresses of fee-receivers.
     * @param feeRates percent fees for each receiver.
     */
    function setFeeReceiversAndRates(address payable[] memory feeReceivers_, uint8[] memory feeRates) external onlyOwner {
        require(feeReceivers_.length == feeRates.length, "Array lengths must match");
        // Clear current receivers mapping.
        for (uint8 i = 0; i < feeReceivers.length; i++)
            _feeReceiversAndRates[feeReceivers[i]] = 0;
        // Update receivers list.
        feeReceivers = feeReceivers_;
        // Count new fees.
        uint8 totalFees = 0;
        // Set new receivers mapping.
        for (uint8 i = 0; i < feeReceivers_.length; i++) {
            require(feeReceivers_[i] != address(0), "Transfer to address(0)");
            _feeReceiversAndRates[feeReceivers_[i]] = feeRates[i];
            totalFees += feeRates[i];
        }
        // Check validity of new fees.
        require(totalFees >= 0 && totalFees <= 100, "Set fees from 0 to 100");
    }

    /**
     * Set ERC20 token to be used for stablecoin fee receivers.
     *
     * @param stablecoin_ address of ERC20 token.
     */
    function setStablecoin(address stablecoin_) external onlyOwner {
        stablecoin = stablecoin_;
    }

    /**
     * Set whether an account should receive fees in stablecoins.
     *
     * @dev account must already be a fee receiver.
     *
     * @param account address of fee receiver.
     * @param _receivesStablecoin true for stablecoin, false for token.
     */
    function setStablecoinReceiver(address account, bool _receivesStablecoin) external onlyOwner {
        require(_feeReceiversAndRates[account] != 0, "Not a fee receiver");
        receivesStablecoin[account] = _receivesStablecoin;
    }

    /**
     * Set the fee payers.
     *
     * @dev Overwrites existing fee-payer list.
     *
     * @param accounts list of fee-paying addresses.
     */
    function setFeePayers(address[] memory accounts) external onlyOwner {
        // Clear current payers mapping.
        for (uint8 i = 0; i < feePayers.length; i++)
            isFeePayer[feePayers[i]] = false;
        // Update payers list.
        feePayers = accounts;
        // Set new payers mapping.
        for (uint8 i = 0; i < accounts.length; i++)
            isFeePayer[accounts[i]] = true;
    }

    ////
    //// WHITELIST
    ////

    /**
     * Enable or disable whitelist check before allowing a transfer.
     */
    function toggleWhitelist() external onlyOwner {
        whitelistEnabled = !whitelistEnabled;
    }

    /**
     * Toggle  an account to the transfer whitelist.
     *
     * @param account as address.
     */
    function addToWhitelist(address account) external onlyApp {
        whitelistBalance[account] = maxWallet;
    }

    ////
    //// BLACKLIST
    ////

    /**
     * Set list of accounts blocked from transfers.
     * @dev Overwrites existing blacklist.
     * @param accounts addresses to blacklist.
     */
    function setBlacklist(address[] memory accounts) external onlyOwner {
        // Clear current blacklist mapping.
        for (uint8 i = 0; i < blacklist.length; i++)
            isBlacklisted[blacklist[i]] = false;
        // Update blacklist list.
        blacklist = accounts;
        // Set new blacklist mapping.
        for (uint8 i = 0; i < accounts.length; i++)
            isBlacklisted[accounts[i]] = true;
    }

    ////
    //// INTERNAL BALANCES
    ////

    /**
     * Fallback function.
     *
     * @dev Receives ETH from router when swapping.
     */
    receive() external payable {}

    /**
     * Withdraw ETH to owner.
     *
     * @param amount quantity of ETH to withdraw.
     */
    function recoverETH(uint256 amount) external payable onlyOwner {
        (bool success, ) = payable(owner()).call{value: amount}('');
        require(success, 'Transfer failed.');
    }

    /**
     * Withdraw ERC20 token to owner.
     *
     * @param token address of token to withdraw.
     * @param amount of tokens to withdraw.
     */
    function recoverToken(address token, uint256 amount) external onlyOwner {
        IERC20(token).transfer(owner(), amount);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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":"tokenIntoLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethIntoLiquidity","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isMaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feePayers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feeReceivers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"getFeeRate","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeePayer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxExempt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"receivesStablecoin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"setFeePayers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"feeReceivers_","type":"address[]"},{"internalType":"uint8[]","name":"feeRates","type":"uint8[]"}],"name":"setFeeReceiversAndRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTransfer_","type":"uint256"},{"internalType":"uint256","name":"maxWallet_","type":"uint256"}],"name":"setMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"setMaxLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"permitted","type":"bool"}],"name":"setPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stablecoin_","type":"address"}],"name":"setStablecoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_receivesStablecoin","type":"bool"}],"name":"setStablecoinReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"trigger","type":"uint256"}],"name":"setSwapAndLiquifyTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stablecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyTrigger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"address","name":"","type":"address"}],"name":"whitelistBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506200001d3362000383565b600280546001600160a01b0319163017905560408051808201909152600a81526959616b757a613230333360b01b60208201526003906200005f908262000478565b50604080518082019091526004808252634255475360e01b60208301529062000089908262000478565b506005805460ff19166012908117909155620000a790600a62000659565b620000b6906298968062000671565b600655600980546001600160a01b031916731b02da8cb0d097eb8d57a175b88c7d8b479975069081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014491906200068b565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cd91906200068b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024191906200068b565b600a80546001600160a01b0319166001600160a01b039290921691909117905560065462000273906103e890620006b6565b600b556006546200028790606490620006b6565b600d556006546200029b90606490620006b6565b600e55601580546001600160a01b03191673ff970a61a04b1ca14834a43f5de4533ebddb5cc81790556017805460ff1916600117905560065460076000620002eb6000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546200031c9190620006d9565b90915550506000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200037591815260200190565b60405180910390a3620006ef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003fe57607f821691505b6020821081036200041f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200047357600081815260208120601f850160051c810160208610156200044e5750805b601f850160051c820191505b818110156200046f578281556001016200045a565b5050505b505050565b81516001600160401b03811115620004945762000494620003d3565b620004ac81620004a58454620003e9565b8462000425565b602080601f831160018114620004e45760008415620004cb5750858301515b600019600386901b1c1916600185901b1785556200046f565b600085815260208120601f198616915b828110156200051557888601518255948401946001909101908401620004f4565b5085821015620005345787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200059b5781600019048211156200057f576200057f62000544565b808516156200058d57918102915b93841c93908002906200055f565b509250929050565b600082620005b45750600162000653565b81620005c35750600062000653565b8160018114620005dc5760028114620005e75762000607565b600191505062000653565b60ff841115620005fb57620005fb62000544565b50506001821b62000653565b5060208310610133831016604e8410600b84101617156200062c575081810a62000653565b6200063883836200055a565b80600019048211156200064f576200064f62000544565b0290505b92915050565b60006200066a60ff841683620005a3565b9392505050565b808202811582820484141762000653576200065362000544565b6000602082840312156200069e57600080fd5b81516001600160a01b03811681146200066a57600080fd5b600082620006d457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000653576200065362000544565b612ae680620006ff6000396000f3fe6080604052600436106102765760003560e01c806390de21041161014f578063e088bfc0116100c1578063f1178d171161007a578063f1178d1714610804578063f2fde38b14610824578063f679b3d614610844578063f887ea401461085a578063f8b45b051461087a578063fe575a871461089057600080fd5b8063e088bfc01461073e578063e43252d71461075e578063e770d1991461077e578063e9cbd822146107ae578063ec6263c0146107ce578063ed233ee9146107ee57600080fd5b8063a9059cbb11610113578063a9059cbb14610665578063b29a814014610685578063bf772491146106a5578063d3335553146106c5578063dd62ed3e146106d8578063e084a4b71461071e57600080fd5b806390de2104146105c057806395d89b41146105f05780639d913ef5146106055780639dc29fac14610625578063a8aa1b311461064557600080fd5b80634a7b9558116101e857806362d1ade8116101ac57806362d1ade8146104e957806370a0823114610509578063715018a61461053f5780637e15144b146105545780638198edbf146105695780638da5cb5b146105a257600080fd5b80634a7b95581461042f5780634d08f8011461045f5780634ffbfbe61461048f57806351fb012d146104af5780635b381760146104c957600080fd5b8063163d91981161023a578063163d91981461035757806318160ddd1461037757806323b872dd14610396578063313ce567146103b6578063368e1861146103e25780633b3d17091461040f57600080fd5b806306fdde0314610282578063095ea7b3146102ad5780630f2a0919146102dd578063156e29f614610315578063161bccc41461033757600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102976108c0565b6040516102a4919061242e565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004612491565b61094e565b60405190151581526020016102a4565b3480156102e957600080fd5b506102fd6102f83660046124bd565b610968565b6040516001600160a01b0390911681526020016102a4565b34801561032157600080fd5b506103356103303660046124d6565b610992565b005b34801561034357600080fd5b506102fd6103523660046124bd565b6109df565b34801561036357600080fd5b50610335610372366004612519565b6109ef565b34801561038357600080fd5b506006545b6040519081526020016102a4565b3480156103a257600080fd5b506102cd6103b1366004612552565b610a81565b3480156103c257600080fd5b506005546103d09060ff1681565b60405160ff90911681526020016102a4565b3480156103ee57600080fd5b506103886103fd366004612593565b60186020526000908152604090205481565b34801561041b57600080fd5b5061033561042a3660046124bd565b610aa5565b34801561043b57600080fd5b506102cd61044a366004612593565b60106020526000908152604090205460ff1681565b34801561046b57600080fd5b506102cd61047a366004612593565b60166020526000908152604090205460ff1681565b34801561049b57600080fd5b506103356104aa366004612622565b610b0f565b3480156104bb57600080fd5b506017546102cd9060ff1681565b3480156104d557600080fd5b506102fd6104e43660046124bd565b610c10565b3480156104f557600080fd5b50610335610504366004612737565b610c20565b34801561051557600080fd5b50610388610524366004612593565b6001600160a01b031660009081526007602052604090205490565b34801561054b57600080fd5b50610335610e7b565b34801561056057600080fd5b50610335610e8f565b34801561057557600080fd5b506103d0610584366004612593565b6001600160a01b031660009081526014602052604090205460ff1690565b3480156105ae57600080fd5b506000546001600160a01b03166102fd565b3480156105cc57600080fd5b506102cd6105db366004612593565b60016020526000908152604090205460ff1681565b3480156105fc57600080fd5b50610297610eab565b34801561061157600080fd5b506103356106203660046127f9565b610eb8565b34801561063157600080fd5b50610335610640366004612491565b610f35565b34801561065157600080fd5b50600a546102fd906001600160a01b031681565b34801561067157600080fd5b506102cd610680366004612491565b610f74565b34801561069157600080fd5b506103356106a0366004612491565b610f82565b3480156106b157600080fd5b506103356106c0366004612622565b61101c565b6103356106d33660046124bd565b611119565b3480156106e457600080fd5b506103886106f336600461281b565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561072a57600080fd5b506102fd6107393660046124bd565b6111b7565b34801561074a57600080fd5b50610335610759366004612593565b6111c7565b34801561076a57600080fd5b50610335610779366004612593565b6111f1565b34801561078a57600080fd5b506102cd610799366004612593565b60126020526000908152604090205460ff1681565b3480156107ba57600080fd5b506015546102fd906001600160a01b031681565b3480156107da57600080fd5b506103356107e9366004612519565b611245565b3480156107fa57600080fd5b50610388600d5481565b34801561081057600080fd5b5061033561081f366004612622565b611278565b34801561083057600080fd5b5061033561083f366004612593565b611375565b34801561085057600080fd5b50610388600b5481565b34801561086657600080fd5b506009546102fd906001600160a01b031681565b34801561088657600080fd5b50610388600e5481565b34801561089c57600080fd5b506102cd6108ab366004612593565b601a6020526000908152604090205460ff1681565b600380546108cd90612849565b80601f01602080910402602001604051908101604052809291908181526020018280546108f990612849565b80156109465780601f1061091b57610100808354040283529160200191610946565b820191906000526020600020905b81548152906001019060200180831161092957829003601f168201915b505050505081565b60003361095c8185856113ee565b60019150505b92915050565b6019818154811061097857600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526001602081905260409091205460ff161515146109d05760405162461bcd60e51b81526004016109c790612883565b60405180910390fd5b6109da8382611513565b505050565b6011818154811061097857600080fd5b6109f7611609565b6001600160a01b03821660009081526014602052604081205460ff169003610a565760405162461bcd60e51b81526020600482015260126024820152712737ba1030903332b2903932b1b2b4bb32b960711b60448201526064016109c7565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600033610a8f858285611663565b610a9a8585856116f5565b506001949350505050565b610aad611609565b600081118015610abe575060065481105b610b0a5760405162461bcd60e51b815260206004820152601960248201527f5365742066726f6d203020746f20746f74616c537570706c790000000000000060448201526064016109c7565b600b55565b610b17611609565b60005b600f5460ff82161015610b8957600060106000600f8460ff1681548110610b4357610b436128b0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610b81816128dc565b915050610b1a565b508051610b9d90600f9060208401906123b4565b5060005b81518160ff161015610c0c57600160106000848460ff1681518110610bc857610bc86128b0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c04816128dc565b915050610ba1565b5050565b6013818154811061097857600080fd5b610c28611609565b8051825114610c795760405162461bcd60e51b815260206004820152601860248201527f4172726179206c656e67746873206d757374206d61746368000000000000000060448201526064016109c7565b60005b60135460ff82161015610cee5760006014600060138460ff1681548110610ca557610ca56128b0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff9290921691909117905580610ce6816128dc565b915050610c7c565b508151610d029060139060208501906123b4565b506000805b83518160ff161015610e2d5760006001600160a01b0316848260ff1681518110610d3357610d336128b0565b60200260200101516001600160a01b031603610d8a5760405162461bcd60e51b81526020600482015260166024820152755472616e7366657220746f206164647265737328302960501b60448201526064016109c7565b828160ff1681518110610d9f57610d9f6128b0565b602002602001015160146000868460ff1681518110610dc057610dc06128b0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff928316179055835184918316908110610e0657610e066128b0565b602002602001015182610e1991906128fb565b915080610e25816128dc565b915050610d07565b5060648160ff1611156109da5760405162461bcd60e51b8152602060048201526016602482015275053657420666565732066726f6d203020746f203130360541b60448201526064016109c7565b610e83611609565b610e8d6000611b18565b565b610e97611609565b6017805460ff19811660ff90911615179055565b600480546108cd90612849565b610ec0611609565b6006548211158015610ed0575060015b8015610ede57506006548111155b610f2a5760405162461bcd60e51b815260206004820152601b60248201527f5365742066726f6d203020746f20746f74616c20737570706c792e000000000060448201526064016109c7565b600d91909155600e55565b3360009081526001602081905260409091205460ff16151514610f6a5760405162461bcd60e51b81526004016109c790612883565b610c0c8282611b68565b60003361095c8185856116f5565b610f8a611609565b816001600160a01b031663a9059cbb610fab6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610ff8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da9190612914565b611024611609565b60005b60195460ff82161015611096576000601a600060198460ff1681548110611050576110506128b0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061108e816128dc565b915050611027565b5080516110aa9060199060208401906123b4565b5060005b81518160ff161015610c0c576001601a6000848460ff16815181106110d5576110d56128b0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611111816128dc565b9150506110ae565b611121611609565b600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461116e576040519150601f19603f3d011682016040523d82523d6000602084013e611173565b606091505b5050905080610c0c5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016109c7565b600f818154811061097857600080fd5b6111cf611609565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526001602081905260409091205460ff161515146112265760405162461bcd60e51b81526004016109c790612883565b600e546001600160a01b03909116600090815260186020526040902055565b61124d611609565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b611280611609565b60005b60115460ff821610156112f25760006012600060118460ff16815481106112ac576112ac6128b0565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806112ea816128dc565b915050611283565b5080516113069060119060208401906123b4565b5060005b81518160ff161015610c0c57600160126000848460ff1681518110611331576113316128b0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061136d816128dc565b91505061130a565b61137d611609565b6001600160a01b0381166113e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c7565b6113eb81611b18565b50565b6001600160a01b0383166114505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109c7565b6001600160a01b0382166114b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109c7565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661155b5760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081858d8dbdd5b9d608a1b60448201526064016109c7565b806006600082825461156d9190612931565b90915550506001600160a01b0382166000908152600760205260408120805483929061159a908490612931565b909155505060405181906001600160a01b038416907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688590600090a36040518181526001600160a01b03831690600090600080516020612a91833981519152906020015b60405180910390a35050565b6000546001600160a01b03163314610e8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c7565b6001600160a01b0383811660009081526008602090815260408083209386168352929052205460001981146116ef57818110156116e25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109c7565b6116ef84848484036113ee565b50505050565b6001600160a01b0383161580159061171557506001600160a01b03821615155b6117615760405162461bcd60e51b815260206004820152601a60248201527f5472616e736665722077697468207a65726f206164647265737300000000000060448201526064016109c7565b6001600160a01b0383166000908152600760205260409020548111156117be5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016109c7565b6001600160a01b0383166000908152601a602052604090205460ff1615801561180057506001600160a01b0382166000908152601a602052604090205460ff16155b6118425760405162461bcd60e51b8152602060048201526013602482015272109b1858dadb1a5cdd1959081858d8dbdd5b9d606a1b60448201526064016109c7565b6001600160a01b03831660009081526010602052604090205460ff166118a557600d548111156118a55760405162461bcd60e51b815260206004820152600e60248201526d08af0c6cacac8e640dac2f040e8f60931b60448201526064016109c7565b6001600160a01b03821660009081526010602052604090205460ff1661192f57600e546001600160a01b0383166000908152600760205260409020546118ec908390612931565b111561192f5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b60448201526064016109c7565b60175460ff1615611a3457600a546001600160a01b038481169116146119a15760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79204c502063616e2073656e6420647572696e672077686974656c69736044820152601d60fa1b60648201526084016109c7565b6001600160a01b038216600090815260186020526040902054611a065760405162461bcd60e51b815260206004820152601e60248201527f4e6f2077686974656c6973742062616c616e636520617661696c61626c65000060448201526064016109c7565b6001600160a01b03821660009081526018602052604081208054839290611a2e908490612944565b90915550505b600c5460ff16158015611a5f57506001600160a01b03821660009081526012602052604090205460ff165b8015611a6d57506000600b54115b8015611a955750600b546002546001600160a01b031660009081526007602052604090205410155b15611aa557611aa5600b54611c57565b6002546001600160a01b03848116911614801590611afd57506001600160a01b03831660009081526012602052604090205460ff1680611afd57506001600160a01b03821660009081526012602052604090205460ff165b15611b0d576109da838383611ce1565b6109da838383611d51565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a59081858d8dbdd5b9d608a1b60448201526064016109c7565b6001600160a01b038216600090815260076020526040902054811115611c0f5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109c7565b6001600160a01b03821660008181526007602090815260408083208054869003905560068054869003905551848152919291600080516020612a9183398151915291016115fd565b600c805460ff191660011790556000611c71600283612957565b90506000611c7f8284612944565b90506000611c8c82611da1565b9050611c988382611f3d565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15050600c805460ff191690555050565b6000611cee84848461201f565b6001600160a01b03808616600081815260076020526040808220805486900390559287168082529083902080548501905591519293509091600080516020612a9183398151915290611d439085815260200190565b60405180910390a350505050565b6001600160a01b0380841660008181526007602052604080822080548690039055928516808252908390208054850190559151600080516020612a91833981519152906115069085815260200190565b60028054604080518381526060810182526000936001600160a01b0390931631928492602083019080368337505060025482519293506001600160a01b031691839150600090611df357611df36128b0565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e709190612979565b81600181518110611e8357611e836128b0565b6001600160a01b039283166020918202929092010152600254600954611eae929182169116866113ee565b60095460025460405163791ac94760e01b81526001600160a01b039283169263791ac94792611eeb928992600092889291169042906004016129da565b600060405180830381600087803b158015611f0557600080fd5b505af1158015611f19573d6000803e3d6000fd5b5050600254611f3592508491506001600160a01b031631612944565b949350505050565b600254600954611f5a916001600160a01b039081169116846113ee565b6009546002546001600160a01b039182169163f305d7199184911685600080611f8b6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611ff3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120189190612a16565b5050505050565b6013546000908290825b818160ff16101561224d57600060646014600060138560ff1681548110612052576120526128b0565b60009182526020808320909101546001600160a01b031683528201929092526040019020546120849060ff1688612a44565b61208e9190612957565b905061209a8185612944565b6001600160a01b0389166000908152600760205260408120805492965083929091906120c7908490612944565b925050819055506016600060138460ff16815481106120e8576120e86128b0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16801561213457506001600160a01b03871660009081526012602052604090205460ff165b1561219257600061214482611da1565b6015546013805492935061218c9284926001600160a01b0316919060ff8816908110612172576121726128b0565b6000918252602090912001546001600160a01b0316612258565b5061223a565b806007600060138560ff16815481106121ad576121ad6128b0565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906121e1908490612931565b90915550506013805460ff84169081106121fd576121fd6128b0565b600091825260209182902001546040518381526001600160a01b0391821692918b1691600080516020612a91833981519152910160405180910390a35b5080612245816128dc565b915050612029565b509095945050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156122c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e69190612979565b816000815181106122f9576122f96128b0565b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061232d5761232d6128b0565b6001600160a01b0392831660209182029290920101526009541663b6f9de95856000848661235d4261012c612931565b6040518663ffffffff1660e01b815260040161237c9493929190612a5b565b6000604051808303818588803b15801561239557600080fd5b505af11580156123a9573d6000803e3d6000fd5b505050505050505050565b828054828255906000526020600020908101928215612409579160200282015b8281111561240957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906123d4565b50612415929150612419565b5090565b5b80821115612415576000815560010161241a565b600060208083528351808285015260005b8181101561245b5785810183015185820160400152820161243f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113eb57600080fd5b600080604083850312156124a457600080fd5b82356124af8161247c565b946020939093013593505050565b6000602082840312156124cf57600080fd5b5035919050565b6000806000606084860312156124eb57600080fd5b83356124f68161247c565b95602085013595506040909401359392505050565b80151581146113eb57600080fd5b6000806040838503121561252c57600080fd5b82356125378161247c565b915060208301356125478161250b565b809150509250929050565b60008060006060848603121561256757600080fd5b83356125728161247c565b925060208401356125828161247c565b929592945050506040919091013590565b6000602082840312156125a557600080fd5b81356125b08161247c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156125f6576125f66125b7565b604052919050565b600067ffffffffffffffff821115612618576126186125b7565b5060051b60200190565b6000602080838503121561263557600080fd5b823567ffffffffffffffff81111561264c57600080fd5b8301601f8101851361265d57600080fd5b803561267061266b826125fe565b6125cd565b81815260059190911b8201830190838101908783111561268f57600080fd5b928401925b828410156126b65783356126a78161247c565b82529284019290840190612694565b979650505050505050565b600082601f8301126126d257600080fd5b813560206126e261266b836125fe565b82815260059290921b8401810191818101908684111561270157600080fd5b8286015b8481101561272c57803560ff8116811461271f5760008081fd5b8352918301918301612705565b509695505050505050565b6000806040838503121561274a57600080fd5b823567ffffffffffffffff8082111561276257600080fd5b818501915085601f83011261277657600080fd5b8135602061278661266b836125fe565b82815260059290921b840181019181810190898411156127a557600080fd5b948201945b838610156127cc5785356127bd8161247c565b825294820194908201906127aa565b965050860135925050808211156127e257600080fd5b506127ef858286016126c1565b9150509250929050565b6000806040838503121561280c57600080fd5b50508035926020909101359150565b6000806040838503121561282e57600080fd5b82356128398161247c565b915060208301356125478161247c565b600181811c9082168061285d57607f821691505b60208210810361287d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527221b0b63632b91034b9903737ba1030b236b4b760691b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036128f2576128f26128c6565b60010192915050565b60ff8181168382160190811115610962576109626128c6565b60006020828403121561292657600080fd5b81516125b08161250b565b80820180821115610962576109626128c6565b81810381811115610962576109626128c6565b60008261297457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561298b57600080fd5b81516125b08161247c565b600081518084526020808501945080840160005b838110156129cf5781516001600160a01b0316875295820195908201906001016129aa565b509495945050505050565b85815284602082015260a0604082015260006129f960a0830186612996565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215612a2b57600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610962576109626128c6565b848152608060208201526000612a746080830186612996565b6001600160a01b0394909416604083015250606001529291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b781a2f05055a641d602336f657efc0fd5a802c9321add98dc8440ade75f9b1964736f6c63430008110033

Deployed ByteCode Sourcemap

27691:23423:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27844:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34609:193;;;;;;;;;;-1:-1:-1;34609:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;34609:193:0;1023:187:1;29557:26:0;;;;;;;;;;-1:-1:-1;29557:26:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1564:32:1;;;1546:51;;1534:2;1519:18;29557:26:0;1400:203:1;32272:130:0;;;;;;;;;;-1:-1:-1;32272:130:0;;;;;:::i;:::-;;:::i;:::-;;29103:26;;;;;;;;;;-1:-1:-1;29103:26:0;;;;;:::i;:::-;;:::i;48368:238::-;;;;;;;;;;-1:-1:-1;48368:238:0;;;;;:::i;:::-;;:::i;31453:100::-;;;;;;;;;;-1:-1:-1;31533:12:0;;31453:100;;;2652:25:1;;;2640:2;2625:18;31453:100:0;2506:177:1;37108:253:0;;;;;;;;;;-1:-1:-1;37108:253:0;;;;;:::i;:::-;;:::i;27898:21::-;;;;;;;;;;-1:-1:-1;27898:21:0;;;;;;;;;;;3321:4:1;3309:17;;;3291:36;;3279:2;3264:18;27898:21:0;3149:184:1;29455:51:0;;;;;;;;;;-1:-1:-1;29455:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;42617:206;;;;;;;;;;-1:-1:-1;42617:206:0;;;;;:::i;:::-;;:::i;29001:44::-;;;;;;;;;;-1:-1:-1;29001:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29319:50;;;;;;;;;;-1:-1:-1;29319:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45760:438;;;;;;;;;;-1:-1:-1;45760:438:0;;;;;:::i;:::-;;:::i;29420:28::-;;;;;;;;;;-1:-1:-1;29420:28:0;;;;;;;;29187:29;;;;;;;;;;-1:-1:-1;29187:29:0;;;;;:::i;:::-;;:::i;46909:920::-;;;;;;;;;;-1:-1:-1;46909:920:0;;;;;:::i;:::-;;:::i;31737:119::-;;;;;;;;;;-1:-1:-1;31737:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;31830:18:0;31803:7;31830:18;;;:9;:18;;;;;;;31737:119;3268:103;;;;;;;;;;;;;:::i;49333:101::-;;;;;;;;;;;;;:::i;46438:125::-;;;;;;;;;;-1:-1:-1;46438:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;46524:31:0;46499:5;46524:31;;;:21;:31;;;;;;;;;46438:125;2620:87;;;;;;;;;;-1:-1:-1;2666:7:0;2693:6;-1:-1:-1;;;;;2693:6:0;2620:87;;26782:44;;;;;;;;;;-1:-1:-1;26782:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27869:20;;;;;;;;;;;;;:::i;45158:388::-;;;;;;;;;;-1:-1:-1;45158:388:0;;;;;:::i;:::-;;:::i;33110:105::-;;;;;;;;;;-1:-1:-1;33110:105:0;;;;;:::i;:::-;;:::i;28344:19::-;;;;;;;;;;-1:-1:-1;28344:19:0;;;;-1:-1:-1;;;;;28344:19:0;;;36599:185;;;;;;;;;;-1:-1:-1;36599:185:0;;;;;:::i;:::-;;:::i;50981:130::-;;;;;;;;;;-1:-1:-1;50981:130:0;;;;;:::i;:::-;;:::i;49884:431::-;;;;;;;;;;-1:-1:-1;49884:431:0;;;;;:::i;:::-;;:::i;50624:188::-;;;;;;:::i;:::-;;:::i;34173:143::-;;;;;;;;;;-1:-1:-1;34173:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;34281:18:0;;;34254:7;34281:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34173:143;28968:26;;;;;;;;;;-1:-1:-1;28968:26:0;;;;;:::i;:::-;;:::i;47979:106::-;;;;;;;;;;-1:-1:-1;47979:106:0;;;;;:::i;:::-;;:::i;49557:114::-;;;;;;;;;;-1:-1:-1;49557:114:0;;;;;:::i;:::-;;:::i;29136:42::-;;;;;;;;;;-1:-1:-1;29136:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29287:25;;;;;;;;;;-1:-1:-1;29287:25:0;;;;-1:-1:-1;;;;;29287:25:0;;;26983:150;;;;;;;;;;-1:-1:-1;26983:150:0;;;;;:::i;:::-;;:::i;28862:26::-;;;;;;;;;;;;;;;;48779:416;;;;;;;;;;-1:-1:-1;48779:416:0;;;;;:::i;:::-;;:::i;3526:201::-;;;;;;;;;;-1:-1:-1;3526:201:0;;;;;:::i;:::-;;:::i;28450:36::-;;;;;;;;;;;;;;;;28272:32;;;;;;;;;;-1:-1:-1;28272:32:0;;;;-1:-1:-1;;;;;28272:32:0;;;28935:24;;;;;;;;;;;;;;;;29590:45;;;;;;;;;;-1:-1:-1;29590:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27844:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34609:193::-;34684:4;1278:10;34740:32;1278:10;34756:7;34765:6;34740:8;:32::i;:::-;34790:4;34783:11;;;34609:193;;;;;:::o;29557:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29557:26:0;;-1:-1:-1;29557:26:0;:::o;32272:130::-;1278:10;26873:26;;;;:12;:26;;;;;;;;;;;:34;;;26865:66;;;;-1:-1:-1;;;26865:66:0;;;;;;;:::i;:::-;;;;;;;;;32377:17:::1;32383:2;32387:6;32377:5;:17::i;:::-;32272:130:::0;;;:::o;29103:26::-;;;;;;;;;;;;48368:238;2506:13;:11;:13::i;:::-;-1:-1:-1;;;;;48480:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;:35:::0;;48472:66:::1;;;::::0;-1:-1:-1;;;48472:66:0;;9034:2:1;48472:66:0::1;::::0;::::1;9016:21:1::0;9073:2;9053:18;;;9046:30;-1:-1:-1;;;9092:18:1;;;9085:48;9150:18;;48472:66:0::1;8832:342:1::0;48472:66:0::1;-1:-1:-1::0;;;;;48549:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:49;;-1:-1:-1;;48549:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48368:238::o;37108:253::-;37197:4;1278:10;37255:38;37271:4;1278:10;37286:6;37255:15;:38::i;:::-;37304:27;37314:4;37320:2;37324:6;37304:9;:27::i;:::-;-1:-1:-1;37349:4:0;;37108:253;-1:-1:-1;;;;37108:253:0:o;42617:206::-;2506:13;:11;:13::i;:::-;42716:1:::1;42706:7;:11;:37;;;;;42731:12;;42721:7;:22;42706:37;42698:75;;;::::0;-1:-1:-1;;;42698:75:0;;9381:2:1;42698:75:0::1;::::0;::::1;9363:21:1::0;9420:2;9400:18;;;9393:30;9459:27;9439:18;;;9432:55;9504:18;;42698:75:0::1;9179:349:1::0;42698:75:0::1;42784:21;:31:::0;42617:206::o;45760:438::-;2506:13;:11;:13::i;:::-;45896:7:::1;45891:92;45913:9;:16:::0;45909:20:::1;::::0;::::1;;45891:92;;;45978:5;45949:12;:26;45962:9;45972:1;45962:12;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;45962:12:0::1;45949:26:::0;;;::::1;::::0;;;;;;;;:34;;-1:-1:-1;;45949:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45931:3;::::1;::::0;::::1;:::i;:::-;;;;45891:92;;;-1:-1:-1::0;46030:20:0;;::::1;::::0;:9:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46106:7;46101:89;46123:8;:15;46119:1;:19;;;46101:89;;;46186:4;46158:12;:25;46171:8;46180:1;46171:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;46158:25:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;46158:25:0;:32;;-1:-1:-1;;46158:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46140:3;::::1;::::0;::::1;:::i;:::-;;;;46101:89;;;;45760:438:::0;:::o;29187:29::-;;;;;;;;;;;;46909:920;2506:13;:11;:13::i;:::-;47069:8:::1;:15;47045:13;:20;:39;47037:76;;;::::0;-1:-1:-1;;;47037:76:0;;10179:2:1;47037:76:0::1;::::0;::::1;10161:21:1::0;10218:2;10198:18;;;10191:30;10257:26;10237:18;;;10230:54;10301:18;;47037:76:0::1;9977:348:1::0;47037:76:0::1;47174:7;47169:103;47191:12;:19:::0;47187:23:::1;::::0;::::1;;47169:103;;;47271:1;47230:21;:38;47252:12;47265:1;47252:15;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;47252:15:0::1;47230:38:::0;;;::::1;::::0;;;;;;;;:42;;-1:-1:-1;;47230:42:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;47212:3;::::1;::::0;::::1;:::i;:::-;;;;47169:103;;;-1:-1:-1::0;47318:28:0;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47385:15;47459:7:::0;47454:248:::1;47476:13;:20;47472:1;:24;;;47454:248;;;47554:1;-1:-1:-1::0;;;;;47526:30:0::1;:13;47540:1;47526:16;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;47526:30:0::1;::::0;47518:65:::1;;;::::0;-1:-1:-1;;;47518:65:0;;10532:2:1;47518:65:0::1;::::0;::::1;10514:21:1::0;10571:2;10551:18;;;10544:30;-1:-1:-1;;;10590:18:1;;;10583:52;10652:18;;47518:65:0::1;10330:346:1::0;47518:65:0::1;47640:8;47649:1;47640:11;;;;;;;;;;:::i;:::-;;;;;;;47598:21;:39;47620:13;47634:1;47620:16;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;47598:39:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;47598:39:0;:53;;-1:-1:-1;;47598:53:0::1;;::::0;;::::1;;::::0;;47679:11;;;;;::::1;::::0;;::::1;;;;;:::i;:::-;;;;;;;47666:24;;;;;:::i;:::-;::::0;-1:-1:-1;47498:3:0;::::1;::::0;::::1;:::i;:::-;;;;47454:248;;;-1:-1:-1::0;47791:3:0::1;47778:9;:16;;;;47752:69;;;::::0;-1:-1:-1;;;47752:69:0;;11036:2:1;47752:69:0::1;::::0;::::1;11018:21:1::0;11075:2;11055:18;;;11048:30;-1:-1:-1;;;11094:18:1;;;11087:52;11156:18;;47752:69:0::1;10834:346:1::0;3268:103:0;2506:13;:11;:13::i;:::-;3333:30:::1;3360:1;3333:18;:30::i;:::-;3268:103::o:0;49333:101::-;2506:13;:11;:13::i;:::-;49410:16:::1;::::0;;-1:-1:-1;;49390:36:0;::::1;49410:16;::::0;;::::1;49409:17;49390:36;::::0;;49333:101::o;27869:20::-;;;;;;;:::i;45158:388::-;2506:13;:11;:13::i;:::-;31533:12;;45308::::1;:29;;45274:95;;;;-1:-1:-1::0;45354:15:0;45274:95:::1;:139;;;;-1:-1:-1::0;31533:12:0;;45386:10:::1;:27;;45274:139;45252:216;;;::::0;-1:-1:-1;;;45252:216:0;;11387:2:1;45252:216:0::1;::::0;::::1;11369:21:1::0;11426:2;11406:18;;;11399:30;11465:29;11445:18;;;11438:57;11512:18;;45252:216:0::1;11185:351:1::0;45252:216:0::1;45479:11;:26:::0;;;;45516:9:::1;:22:::0;45158:388::o;33110:105::-;1278:10;26873:26;;;;:12;:26;;;;;;;;;;;:34;;;26865:66;;;;-1:-1:-1;;;26865:66:0;;;;;;;:::i;:::-;33185:22:::1;33191:7;33200:6;33185:5;:22::i;36599:185::-:0;36670:4;1278:10;36726:28;1278:10;36743:2;36747:6;36726:9;:28::i;50981:130::-;2506:13;:11;:13::i;:::-;51071:5:::1;-1:-1:-1::0;;;;;51064:22:0::1;;51087:7;2666::::0;2693:6;-1:-1:-1;;;;;2693:6:0;;2620:87;51087:7:::1;51064:39;::::0;-1:-1:-1;;;;;;51064:39:0::1;::::0;;;;;;-1:-1:-1;;;;;11733:32:1;;;51064:39:0::1;::::0;::::1;11715:51:1::0;11782:18;;;11775:34;;;11688:18;;51064:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;49884:431::-:0;2506:13;:11;:13::i;:::-;50013:7:::1;50008:93;50030:9;:16:::0;50026:20:::1;::::0;::::1;;50008:93;;;50096:5;50066:13;:27;50080:9;50090:1;50080:12;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;50080:12:0::1;50066:27:::0;;;::::1;::::0;;;;;;;;:35;;-1:-1:-1;;50066:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50048:3;::::1;::::0;::::1;:::i;:::-;;;;50008:93;;;-1:-1:-1::0;50147:20:0;;::::1;::::0;:9:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;50222:7;50217:90;50239:8;:15;50235:1;:19;;;50217:90;;;50303:4;50274:13;:26;50288:8;50297:1;50288:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50274:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;50274:26:0;:33;;-1:-1:-1;;50274:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50256:3;::::1;::::0;::::1;:::i;:::-;;;;50217:90;;50624:188:::0;2506:13;:11;:13::i;:::-;50699:12:::1;2693:6:::0;;50717:40:::1;::::0;-1:-1:-1;;;;;2693:6:0;;;;50746;;50699:12;50717:40;50699:12;50717:40;50746:6;2693;50717:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50698:59;;;50776:7;50768:36;;;::::0;-1:-1:-1;;;50768:36:0;;12482:2:1;50768:36:0::1;::::0;::::1;12464:21:1::0;12521:2;12501:18;;;12494:30;-1:-1:-1;;;12540:18:1;;;12533:46;12596:18;;50768:36:0::1;12280:340:1::0;28968:26:0;;;;;;;;;;;;47979:106;2506:13;:11;:13::i;:::-;48053:10:::1;:24:::0;;-1:-1:-1;;;;;;48053:24:0::1;-1:-1:-1::0;;;;;48053:24:0;;;::::1;::::0;;;::::1;::::0;;47979:106::o;49557:114::-;1278:10;26873:26;;;;:12;:26;;;;;;;;;;;:34;;;26865:66;;;;-1:-1:-1;;;26865:66:0;;;;;;;:::i;:::-;49654:9:::1;::::0;-1:-1:-1;;;;;49626:25:0;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:37;49557:114::o;26983:150::-;2506:13;:11;:13::i;:::-;-1:-1:-1;;;;;27092:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:33;;-1:-1:-1;;27092:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26983:150::o;48779:416::-;2506:13;:11;:13::i;:::-;48905:7:::1;48900:90;48922:9;:16:::0;48918:20:::1;::::0;::::1;;48900:90;;;48985:5;48958:10;:24;48969:9;48979:1;48969:12;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;48969:12:0::1;48958:24:::0;;;::::1;::::0;;;;;;;;:32;;-1:-1:-1;;48958:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48940:3;::::1;::::0;::::1;:::i;:::-;;;;48900:90;;;-1:-1:-1::0;49033:20:0;;::::1;::::0;:9:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49105:7;49100:87;49122:8;:15;49118:1;:19;;;49100:87;;;49183:4;49157:10;:23;49168:8;49177:1;49168:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;49157:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;49157:23:0;:30;;-1:-1:-1;;49157:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49139:3;::::1;::::0;::::1;:::i;:::-;;;;49100:87;;3526:201:::0;2506:13;:11;:13::i;:::-;-1:-1:-1;;;;;3615:22:0;::::1;3607:73;;;::::0;-1:-1:-1;;;3607:73:0;;12827:2:1;3607:73:0::1;::::0;::::1;12809:21:1::0;12866:2;12846:18;;;12839:30;12905:34;12885:18;;;12878:62;-1:-1:-1;;;12956:18:1;;;12949:36;13002:19;;3607:73:0::1;12625:402:1::0;3607:73:0::1;3691:28;3710:8;3691:18;:28::i;:::-;3526:201:::0;:::o;35101:372::-;-1:-1:-1;;;;;35229:19:0;;35221:68;;;;-1:-1:-1;;;35221:68:0;;13234:2:1;35221:68:0;;;13216:21:1;13273:2;13253:18;;;13246:30;13312:34;13292:18;;;13285:62;-1:-1:-1;;;13363:18:1;;;13356:34;13407:19;;35221:68:0;13032:400:1;35221:68:0;-1:-1:-1;;;;;35308:21:0;;35300:68;;;;-1:-1:-1;;;35300:68:0;;13639:2:1;35300:68:0;;;13621:21:1;13678:2;13658:18;;;13651:30;13717:34;13697:18;;;13690:62;-1:-1:-1;;;13768:18:1;;;13761:32;13810:19;;35300:68:0;13437:398:1;35300:68:0;-1:-1:-1;;;;;35381:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35433:32;;2652:25:1;;;35433:32:0;;2625:18:1;35433:32:0;;;;;;;;35101:372;;;:::o;32602:290::-;-1:-1:-1;;;;;32677:21:0;;32669:49;;;;-1:-1:-1;;;32669:49:0;;14042:2:1;32669:49:0;;;14024:21:1;14081:2;14061:18;;;14054:30;-1:-1:-1;;;14100:18:1;;;14093:45;14155:18;;32669:49:0;13840:339:1;32669:49:0;32747:6;32731:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;32764:18:0;;;;;;:9;:18;;;;;:28;;32786:6;;32764:18;:28;;32786:6;;32764:28;:::i;:::-;;;;-1:-1:-1;;32810:21:0;;32824:6;;-1:-1:-1;;;;;32810:21:0;;;;;;;;32847:37;;2652:25:1;;;-1:-1:-1;;;;;32847:37:0;;;32864:1;;-1:-1:-1;;;;;;;;;;;32847:37:0;2640:2:1;2625:18;32847:37:0;;;;;;;;32602:290;;:::o;2785:132::-;2666:7;2693:6;-1:-1:-1;;;;;2693:6:0;1278:10;2849:23;2841:68;;;;-1:-1:-1;;;2841:68:0;;14516:2:1;2841:68:0;;;14498:21:1;;;14535:18;;;14528:30;14594:34;14574:18;;;14567:62;14646:18;;2841:68:0;14314:356:1;35909:453:0;-1:-1:-1;;;;;34281:18:0;;;36044:24;34281:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;36111:37:0;;36107:248;;36193:6;36173:16;:26;;36165:68;;;;-1:-1:-1;;;36165:68:0;;14877:2:1;36165:68:0;;;14859:21:1;14916:2;14896:18;;;14889:30;14955:31;14935:18;;;14928:59;15004:18;;36165:68:0;14675:353:1;36165:68:0;36277:51;36286:5;36293:7;36321:6;36302:16;:25;36277:8;:51::i;:::-;36033:329;35909:453;;;:::o;37569:1670::-;-1:-1:-1;;;;;37657:18:0;;;;;;:38;;-1:-1:-1;;;;;;37679:16:0;;;;37657:38;37649:77;;;;-1:-1:-1;;;37649:77:0;;15235:2:1;37649:77:0;;;15217:21:1;15274:2;15254:18;;;15247:30;15313:28;15293:18;;;15286:56;15359:18;;37649:77:0;15033:350:1;37649:77:0;-1:-1:-1;;;;;37755:15:0;;;;;;:9;:15;;;;;;37745:25;;;37737:56;;;;-1:-1:-1;;;37737:56:0;;15590:2:1;37737:56:0;;;15572:21:1;15629:2;15609:18;;;15602:30;-1:-1:-1;;;15648:18:1;;;15641:48;15706:18;;37737:56:0;15388:342:1;37737:56:0;-1:-1:-1;;;;;37813:19:0;;;;;;:13;:19;;;;;;;;37812:20;:42;;;;-1:-1:-1;;;;;;37837:17:0;;;;;;:13;:17;;;;;;;;37836:18;37812:42;37804:74;;;;-1:-1:-1;;;37804:74:0;;15937:2:1;37804:74:0;;;15919:21:1;15976:2;15956:18;;;15949:30;-1:-1:-1;;;15995:18:1;;;15988:49;16054:18;;37804:74:0;15735:343:1;37804:74:0;-1:-1:-1;;;;;37926:18:0;;;;;;:12;:18;;;;;;;;37921:157;;38036:11;;38026:6;:21;;38018:48;;;;-1:-1:-1;;;38018:48:0;;16285:2:1;38018:48:0;;;16267:21:1;16324:2;16304:18;;;16297:30;-1:-1:-1;;;16343:18:1;;;16336:44;16397:18;;38018:48:0;16083:338:1;38018:48:0;-1:-1:-1;;;;;38093:16:0;;;;;;:12;:16;;;;;;;;38088:197;;38241:9;;-1:-1:-1;;;;;38215:13:0;;;;;;:9;:13;;;;;;:22;;38231:6;;38215:22;:::i;:::-;:35;;38207:66;;;;-1:-1:-1;;;38207:66:0;;16628:2:1;38207:66:0;;;16610:21:1;16667:2;16647:18;;;16640:30;-1:-1:-1;;;16686:18:1;;;16679:48;16744:18;;38207:66:0;16426:342:1;38207:66:0;38330:16;;;;38326:234;;;38379:4;;-1:-1:-1;;;;;38371:12:0;;;38379:4;;38371:12;38363:58;;;;-1:-1:-1;;;38363:58:0;;16975:2:1;38363:58:0;;;16957:21:1;17014:2;16994:18;;;16987:30;17053:34;17033:18;;;17026:62;-1:-1:-1;;;17104:18:1;;;17097:31;17145:19;;38363:58:0;16773:397:1;38363:58:0;-1:-1:-1;;;;;38444:20:0;;38467:1;38444:20;;;:16;:20;;;;;;38436:67;;;;-1:-1:-1;;;38436:67:0;;17377:2:1;38436:67:0;;;17359:21:1;17416:2;17396:18;;;17389:30;17455:32;17435:18;;;17428:60;17505:18;;38436:67:0;17175:354:1;38436:67:0;-1:-1:-1;;;;;38518:20:0;;;;;;:16;:20;;;;;:30;;38542:6;;38518:20;:30;;38542:6;;38518:30;:::i;:::-;;;;-1:-1:-1;;38326:234:0;38612:17;;;;38611:18;:84;;;;-1:-1:-1;;;;;;38681:14:0;;;;;;:10;:14;;;;;;;;38611:84;:150;;;;;38760:1;38736:21;;:25;38611:150;:238;;;;-1:-1:-1;38828:21:0;;38817:6;;-1:-1:-1;;;;;38817:6:0;38807:17;;;;:9;:17;;;;;;:42;;38611:238;38607:361;;;38918:38;38934:21;;38918:15;:38::i;:::-;39042:6;;-1:-1:-1;;;;;39034:14:0;;;39042:6;;39034:14;;;;:54;;-1:-1:-1;;;;;;39053:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;39073:14:0;;;;;;:10;:14;;;;;;;;39053:34;39030:202;;;39105:35;39123:4;39129:2;39133:6;39105:17;:35::i;39030:202::-;39182:38;39203:4;39209:2;39213:6;39182:20;:38::i;3887:191::-;3961:16;3980:6;;-1:-1:-1;;;;;3997:17:0;;;-1:-1:-1;;;;;;3997:17:0;;;;;;4030:40;;3980:6;;;;;;;4030:40;;3961:16;4030:40;3950:128;3887:191;:::o;33440:374::-;-1:-1:-1;;;;;33524:21:0;;33516:49;;;;-1:-1:-1;;;33516:49:0;;14042:2:1;33516:49:0;;;14024:21:1;14081:2;14061:18;;;14054:30;-1:-1:-1;;;14100:18:1;;;14093:45;14155:18;;33516:49:0;13840:339:1;33516:49:0;-1:-1:-1;;;;;33586:18:0;;;;;;:9;:18;;;;;;:28;-1:-1:-1;33586:28:0;33578:61;;;;-1:-1:-1;;;33578:61:0;;17869:2:1;33578:61:0;;;17851:21:1;17908:2;17888:18;;;17881:30;-1:-1:-1;;;17927:18:1;;;17920:50;17987:18;;33578:61:0;17667:344:1;33578:61:0;-1:-1:-1;;;;;33675:18:0;;;;;;:9;:18;;;;;;;;:28;;;;;;;33718:12;:22;;;;;;;33769:37;2652:25:1;;;33675:18:0;;;-1:-1:-1;;;;;;;;;;;33769:37:0;2625:18:1;33769:37:0;2506:177:1;43012:317:0;28564:17;:24;;-1:-1:-1;;28564:24:0;28584:4;28564:24;;;:17;43104:10:::1;43113:1;43104:6:::0;:10:::1;:::i;:::-;43084:30:::0;-1:-1:-1;43125:15:0::1;43143:18;43084:30:::0;43143:6;:18:::1;:::i;:::-;43125:36;;43172:19;43194:25;43211:7;43194:16;:25::i;:::-;43172:47;;43230:37;43244:9;43255:11;43230:13;:37::i;:::-;43283:38;::::0;;18412:25:1;;;18468:2;18453:18;;18446:34;;;43283:38:0::1;::::0;18385:18:1;43283:38:0::1;;;;;;;-1:-1:-1::0;;28611:17:0;:25;;-1:-1:-1;;28611:25:0;;;-1:-1:-1;;43012:317:0:o;39504:328::-;39592:23;39618:27;39628:4;39634:2;39638:6;39618:9;:27::i;:::-;-1:-1:-1;;;;;39681:15:0;;;;;;;:9;:15;;;;;;:34;;;;;;;39730:13;;;;;;;;;;:32;;;;;;39789:35;;39592:53;;-1:-1:-1;39730:13:0;;-1:-1:-1;;;;;;;;;;;39789:35:0;;;39592:53;2652:25:1;;2640:2;2625:18;;2506:177;39789:35:0;;;;;;;;39581:251;39504:328;;;:::o;40104:240::-;-1:-1:-1;;;;;40220:15:0;;;;;;;:9;:15;;;;;;:25;;;;;;;40260:13;;;;;;;;;;:23;;;;;;40310:26;;-1:-1:-1;;;;;;;;;;;40310:26:0;;;40239:6;2652:25:1;;2640:2;2625:18;;2506:177;44194:625:0;44300:6;;;44349:16;;;;;;;;;;;44258:7;;-1:-1:-1;;;;;44300:6:0;;;:14;;44258:7;;44349:16;;;;;;;;-1:-1:-1;;44386:6:0;;44376:7;;;;-1:-1:-1;;;;;;44386:6:0;;44376:7;;-1:-1:-1;44386:6:0;;44376:7;;;;:::i;:::-;-1:-1:-1;;;;;44376:16:0;;;:7;;;;;;;;;;:16;;;;44413:6;;:13;;;-1:-1:-1;;;44413:13:0;;;;:6;;;;;:11;;:13;;;;;44376:7;;44413:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44403:4;44408:1;44403:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44403:23:0;;;:7;;;;;;;;;:23;44448:6;;44464;;44439:46;;44448:6;;;;44464;44473:11;44439:8;:46::i;:::-;44496:6;;44685;;44496:267;;-1:-1:-1;;;44496:267:0;;-1:-1:-1;;;;;44496:6:0;;;;:57;;:267;;44568:11;;44496:6;;44648:4;;44685:6;;;44720:15;;44496:267;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44783:6:0;;:28;;-1:-1:-1;44800:11:0;;-1:-1:-1;;;;;;44783:6:0;:14;:28;:::i;:::-;44776:35;44194:625;-1:-1:-1;;;;44194:625:0:o;41870:494::-;41961:6;;41977;;41952:46;;-1:-1:-1;;;;;41961:6:0;;;;41977;41986:11;41952:8;:46::i;:::-;42011:6;;42066;;-1:-1:-1;;;;;42011:6:0;;;;:22;;42041:9;;42066:6;42112:11;42011:6;;42270:7;2666;2693:6;-1:-1:-1;;;;;2693:6:0;;2620:87;42270:7;42011:345;;;;;;-1:-1:-1;;;;;;42011:345:0;;;-1:-1:-1;;;;;20159:15:1;;;42011:345:0;;;20141:34:1;20191:18;;;20184:34;;;;20234:18;;;20227:34;;;;20277:18;;;20270:34;20341:15;;;20320:19;;;20313:44;42313:15:0;20373:19:1;;;20366:35;20075:19;;42011:345:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41870:494;;:::o;40639:917::-;40809:12;:19;40717:7;;40763:6;;40717:7;40841:673;40863:18;40859:1;:22;;;40841:673;;;40903:11;40967:3;40926:21;:38;40948:12;40961:1;40948:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40948:15:0;40926:38;;;;;;;;;;;;;40917:47;;40926:38;;40917:6;:47;:::i;:::-;:53;;;;:::i;:::-;40903:67;-1:-1:-1;40985:22:0;40903:67;40985:22;;:::i;:::-;-1:-1:-1;;;;;41022:15:0;;;;;;:9;:15;;;;;:22;;40985;;-1:-1:-1;41041:3:0;;41022:15;;;:22;;41041:3;;41022:22;:::i;:::-;;;;;;;;41132:18;:35;41151:12;41164:1;41151:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41151:15:0;41132:35;;;;;;;;;;;;;;;:53;;;;-1:-1:-1;;;;;;41171:14:0;;;;;;:10;:14;;;;;;;;41132:53;41128:375;;;41206:11;41220:21;41237:3;41220:16;:21::i;:::-;41282:10;;41294:12;:15;;41206:35;;-1:-1:-1;41260:50:0;;41206:35;;-1:-1:-1;;;;;41282:10:0;;41294:12;:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;41294:15:0;41260:16;:50::i;:::-;41187:139;41128:375;;;41424:3;41394:9;:26;41404:12;41417:1;41404:15;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41404:15:0;41394:26;;;;;;;;;;;;:33;;:26;;41404:15;41394:33;;;;;:::i;:::-;;;;-1:-1:-1;;41466:12:0;:15;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;41451:36;;2652:25:1;;;-1:-1:-1;;;;;41466:15:0;;;;41451:36;;;;-1:-1:-1;;;;;;;;;;;41451:36:0;2625:18:1;41451:36:0;;;;;;;41128:375;-1:-1:-1;40883:3:0;;;;:::i;:::-;;;;40841:673;;;-1:-1:-1;41533:15:0;;40639:917;-1:-1:-1;;;;;40639:917:0:o;43550:468::-;43671:16;;;43685:1;43671:16;;;;;;;;43647:21;;43671:16;;;;;;;;-1:-1:-1;;43708:6:0;;:13;;;-1:-1:-1;;;43708:13:0;;;;43647:40;;-1:-1:-1;;;;;;43708:6:0;;;;:11;;-1:-1:-1;43708:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43698:4;43703:1;43698:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43698:23:0;;;-1:-1:-1;;;;;43698:23:0;;;;;43742:5;43732:4;43737:1;43732:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43732:15:0;;;:7;;;;;;;;;:15;43760:6;;;:57;43825:9;43760:6;43887:4;43924:8;43961:21;:15;43979:3;43961:21;:::i;:::-;43760:250;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43636:382;43550:468;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1608:383::-;1685:6;1693;1701;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;1930:2;1915:18;;1902:32;;-1:-1:-1;1981:2:1;1966:18;;;1953:32;;1608:383;-1:-1:-1;;;1608:383:1:o;1996:118::-;2082:5;2075:13;2068:21;2061:5;2058:32;2048:60;;2104:1;2101;2094:12;2119:382;2184:6;2192;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2300:9;2287:23;2319:31;2344:5;2319:31;:::i;:::-;2369:5;-1:-1:-1;2426:2:1;2411:18;;2398:32;2439:30;2398:32;2439:30;:::i;:::-;2488:7;2478:17;;;2119:382;;;;;:::o;2688:456::-;2765:6;2773;2781;2834:2;2822:9;2813:7;2809:23;2805:32;2802:52;;;2850:1;2847;2840:12;2802:52;2889:9;2876:23;2908:31;2933:5;2908:31;:::i;:::-;2958:5;-1:-1:-1;3015:2:1;3000:18;;2987:32;3028:33;2987:32;3028:33;:::i;:::-;2688:456;;3080:7;;-1:-1:-1;;;3134:2:1;3119:18;;;;3106:32;;2688:456::o;3338:247::-;3397:6;3450:2;3438:9;3429:7;3425:23;3421:32;3418:52;;;3466:1;3463;3456:12;3418:52;3505:9;3492:23;3524:31;3549:5;3524:31;:::i;:::-;3574:5;3338:247;-1:-1:-1;;;3338:247:1:o;3590:127::-;3651:10;3646:3;3642:20;3639:1;3632:31;3682:4;3679:1;3672:15;3706:4;3703:1;3696:15;3722:275;3793:2;3787:9;3858:2;3839:13;;-1:-1:-1;;3835:27:1;3823:40;;3893:18;3878:34;;3914:22;;;3875:62;3872:88;;;3940:18;;:::i;:::-;3976:2;3969:22;3722:275;;-1:-1:-1;3722:275:1:o;4002:183::-;4062:4;4095:18;4087:6;4084:30;4081:56;;;4117:18;;:::i;:::-;-1:-1:-1;4162:1:1;4158:14;4174:4;4154:25;;4002:183::o;4190:966::-;4274:6;4305:2;4348;4336:9;4327:7;4323:23;4319:32;4316:52;;;4364:1;4361;4354:12;4316:52;4404:9;4391:23;4437:18;4429:6;4426:30;4423:50;;;4469:1;4466;4459:12;4423:50;4492:22;;4545:4;4537:13;;4533:27;-1:-1:-1;4523:55:1;;4574:1;4571;4564:12;4523:55;4610:2;4597:16;4633:60;4649:43;4689:2;4649:43;:::i;:::-;4633:60;:::i;:::-;4727:15;;;4809:1;4805:10;;;;4797:19;;4793:28;;;4758:12;;;;4833:19;;;4830:39;;;4865:1;4862;4855:12;4830:39;4889:11;;;;4909:217;4925:6;4920:3;4917:15;4909:217;;;5005:3;4992:17;5022:31;5047:5;5022:31;:::i;:::-;5066:18;;4942:12;;;;5104;;;;4909:217;;;5145:5;4190:966;-1:-1:-1;;;;;;;4190:966:1:o;5161:829::-;5213:5;5266:3;5259:4;5251:6;5247:17;5243:27;5233:55;;5284:1;5281;5274:12;5233:55;5320:6;5307:20;5346:4;5370:60;5386:43;5426:2;5386:43;:::i;5370:60::-;5464:15;;;5550:1;5546:10;;;;5534:23;;5530:32;;;5495:12;;;;5574:15;;;5571:35;;;5602:1;5599;5592:12;5571:35;5638:2;5630:6;5626:15;5650:311;5666:6;5661:3;5658:15;5650:311;;;5746:3;5733:17;5794:4;5787:5;5783:16;5776:5;5773:27;5763:125;;5842:1;5871:2;5867;5860:14;5763:125;5901:18;;5939:12;;;;5683;;5650:311;;;-1:-1:-1;5979:5:1;5161:829;-1:-1:-1;;;;;;5161:829:1:o;5995:1219::-;6119:6;6127;6180:2;6168:9;6159:7;6155:23;6151:32;6148:52;;;6196:1;6193;6186:12;6148:52;6236:9;6223:23;6265:18;6306:2;6298:6;6295:14;6292:34;;;6322:1;6319;6312:12;6292:34;6360:6;6349:9;6345:22;6335:32;;6405:7;6398:4;6394:2;6390:13;6386:27;6376:55;;6427:1;6424;6417:12;6376:55;6463:2;6450:16;6485:4;6509:60;6525:43;6565:2;6525:43;:::i;6509:60::-;6603:15;;;6685:1;6681:10;;;;6673:19;;6669:28;;;6634:12;;;;6709:19;;;6706:39;;;6741:1;6738;6731:12;6706:39;6765:11;;;;6785:217;6801:6;6796:3;6793:15;6785:217;;;6881:3;6868:17;6898:31;6923:5;6898:31;:::i;:::-;6942:18;;6818:12;;;;6980;;;;6785:217;;;7021:5;-1:-1:-1;;7064:18:1;;7051:32;;-1:-1:-1;;7095:16:1;;;7092:36;;;7124:1;7121;7114:12;7092:36;;7147:61;7200:7;7189:8;7178:9;7174:24;7147:61;:::i;:::-;7137:71;;;5995:1219;;;;;:::o;7219:248::-;7287:6;7295;7348:2;7336:9;7327:7;7323:23;7319:32;7316:52;;;7364:1;7361;7354:12;7316:52;-1:-1:-1;;7387:23:1;;;7457:2;7442:18;;;7429:32;;-1:-1:-1;7219:248:1:o;7472:388::-;7540:6;7548;7601:2;7589:9;7580:7;7576:23;7572:32;7569:52;;;7617:1;7614;7607:12;7569:52;7656:9;7643:23;7675:31;7700:5;7675:31;:::i;:::-;7725:5;-1:-1:-1;7782:2:1;7767:18;;7754:32;7795:33;7754:32;7795:33;:::i;8099:380::-;8178:1;8174:12;;;;8221;;;8242:61;;8296:4;8288:6;8284:17;8274:27;;8242:61;8349:2;8341:6;8338:14;8318:18;8315:38;8312:161;;8395:10;8390:3;8386:20;8383:1;8376:31;8430:4;8427:1;8420:15;8458:4;8455:1;8448:15;8312:161;;8099:380;;;:::o;8484:343::-;8686:2;8668:21;;;8725:2;8705:18;;;8698:30;-1:-1:-1;;;8759:2:1;8744:18;;8737:49;8818:2;8803:18;;8484:343::o;9533:127::-;9594:10;9589:3;9585:20;9582:1;9575:31;9625:4;9622:1;9615:15;9649:4;9646:1;9639:15;9665:127;9726:10;9721:3;9717:20;9714:1;9707:31;9757:4;9754:1;9747:15;9781:4;9778:1;9771:15;9797:175;9834:3;9878:4;9871:5;9867:16;9907:4;9898:7;9895:17;9892:43;;9915:18;;:::i;:::-;9964:1;9951:15;;9797:175;-1:-1:-1;;9797:175:1:o;10681:148::-;10769:4;10748:12;;;10762;;;10744:31;;10787:13;;10784:39;;;10803:18;;:::i;11820:245::-;11887:6;11940:2;11928:9;11919:7;11915:23;11911:32;11908:52;;;11956:1;11953;11946:12;11908:52;11988:9;11982:16;12007:28;12029:5;12007:28;:::i;14184:125::-;14249:9;;;14270:10;;;14267:36;;;14283:18;;:::i;17534:128::-;17601:9;;;17622:11;;;17619:37;;;17636:18;;:::i;18016:217::-;18056:1;18082;18072:132;;18126:10;18121:3;18117:20;18114:1;18107:31;18161:4;18158:1;18151:15;18189:4;18186:1;18179:15;18072:132;-1:-1:-1;18218:9:1;;18016:217::o;18491:251::-;18561:6;18614:2;18602:9;18593:7;18589:23;18585:32;18582:52;;;18630:1;18627;18620:12;18582:52;18662:9;18656:16;18681:31;18706:5;18681:31;:::i;18747:461::-;18800:3;18838:5;18832:12;18865:6;18860:3;18853:19;18891:4;18920:2;18915:3;18911:12;18904:19;;18957:2;18950:5;18946:14;18978:1;18988:195;19002:6;18999:1;18996:13;18988:195;;;19067:13;;-1:-1:-1;;;;;19063:39:1;19051:52;;19123:12;;;;19158:15;;;;19099:1;19017:9;18988:195;;;-1:-1:-1;19199:3:1;;18747:461;-1:-1:-1;;;;;18747:461:1:o;19213:582::-;19512:6;19501:9;19494:25;19555:6;19550:2;19539:9;19535:18;19528:34;19598:3;19593:2;19582:9;19578:18;19571:31;19475:4;19619:57;19671:3;19660:9;19656:19;19648:6;19619:57;:::i;:::-;-1:-1:-1;;;;;19712:32:1;;;;19707:2;19692:18;;19685:60;-1:-1:-1;19776:3:1;19761:19;19754:35;19611:65;19213:582;-1:-1:-1;;;19213:582:1:o;20412:306::-;20500:6;20508;20516;20569:2;20557:9;20548:7;20544:23;20540:32;20537:52;;;20585:1;20582;20575:12;20537:52;20614:9;20608:16;20598:26;;20664:2;20653:9;20649:18;20643:25;20633:35;;20708:2;20697:9;20693:18;20687:25;20677:35;;20412:306;;;;;:::o;20723:168::-;20796:9;;;20827;;20844:15;;;20838:22;;20824:37;20814:71;;20865:18;;:::i;20896:510::-;21167:6;21156:9;21149:25;21210:3;21205:2;21194:9;21190:18;21183:31;21130:4;21231:57;21283:3;21272:9;21268:19;21260:6;21231:57;:::i;:::-;-1:-1:-1;;;;;21324:32:1;;;;21319:2;21304:18;;21297:60;-1:-1:-1;21388:2:1;21373:18;21366:34;21223:65;20896:510;-1:-1:-1;;20896:510:1:o

Metadata Hash

b781a2f05055a641d602336f657efc0fd5a802c9321add98dc8440ade75f9b19
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.