ETH Price: $3,346.30 (+0.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Approve214942452024-12-27 13:58:474 days ago1735307927IN
Ponzu Inu: PONZU Token
0 ETH0.000367087.86970106
Approve214694222024-12-24 2:42:357 days ago1735008155IN
Ponzu Inu: PONZU Token
0 ETH0.000168676.3522927
Approve214694192024-12-24 2:41:597 days ago1735008119IN
Ponzu Inu: PONZU Token
0 ETH0.000297876.41245677
Approve211924332024-11-15 10:14:4746 days ago1731665687IN
Ponzu Inu: PONZU Token
0 ETH0.00063213.60534247
Transfer207877522024-09-19 22:53:23103 days ago1726786403IN
Ponzu Inu: PONZU Token
0 ETH0.000744355.24903526
Approve202390702024-07-05 8:19:59179 days ago1720167599IN
Ponzu Inu: PONZU Token
0 ETH0.0006698314.36028419
Approve199423282024-05-24 21:09:35221 days ago1716584975IN
Ponzu Inu: PONZU Token
0 ETH0.000378648.11765664
Approve182687822023-10-03 8:20:47455 days ago1696321247IN
Ponzu Inu: PONZU Token
0 ETH0.000313256.75213449
Approve177546582023-07-23 8:34:47527 days ago1690101287IN
Ponzu Inu: PONZU Token
0 ETH0.0003178413.01530965
Approve157157732022-10-10 5:59:47813 days ago1665381587IN
Ponzu Inu: PONZU Token
0 ETH0.0012239926.20689984
Approve155386812022-09-15 11:03:47838 days ago1663239827IN
Ponzu Inu: PONZU Token
0 ETH0.000408458.74551261
Approve154804932022-09-05 22:48:06848 days ago1662418086IN
Ponzu Inu: PONZU Token
0 ETH0.000417988.94938327
Approve154071812022-08-25 4:59:05859 days ago1661403545IN
Ponzu Inu: PONZU Token
0 ETH0.000394758.45202614
Approve154069992022-08-25 4:15:24859 days ago1661400924IN
Ponzu Inu: PONZU Token
0 ETH0.000410838.79643229
Approve153551812022-08-16 23:03:58868 days ago1660691038IN
Ponzu Inu: PONZU Token
0 ETH0.0004670510
Approve153526772022-08-16 13:42:10868 days ago1660657330IN
Ponzu Inu: PONZU Token
0 ETH0.0005851712.5291912
Transfer153478362022-08-15 19:29:12869 days ago1660591752IN
Ponzu Inu: PONZU Token
0 ETH0.0021960615.47704168
Approve153418402022-08-14 20:21:34870 days ago1660508494IN
Ponzu Inu: PONZU Token
0 ETH0.0007660216.40130209
Approve153046892022-08-08 23:56:55876 days ago1660003015IN
Ponzu Inu: PONZU Token
0 ETH0.000393316.10535495
Approve148628102022-05-28 22:10:52948 days ago1653775852IN
Ponzu Inu: PONZU Token
0 ETH0.0008729818.6914266
Approve143248532022-03-05 4:50:131032 days ago1646455813IN
Ponzu Inu: PONZU Token
0 ETH0.0007815732.00422092
Approve140784162022-01-26 1:49:301070 days ago1643161770IN
Ponzu Inu: PONZU Token
0 ETH0.00315998129.39639221
Approve138809032021-12-26 12:45:521101 days ago1640522752IN
Ponzu Inu: PONZU Token
0 ETH0.0009419538.57132352
Transfer138584332021-12-23 1:08:361105 days ago1640221716IN
Ponzu Inu: PONZU Token
0 ETH0.0113433877.33423304
Approve135297792021-11-01 7:04:051156 days ago1635750245IN
Ponzu Inu: PONZU Token
0 ETH0.00728098155.89305806
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PONZU

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-06
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
/*
                        "Pump those who came before you, and you will be pumped by those who follow."

                                Ponzu Inu is a novel meme based ERC20 hybrid deflationary token
                                        that is optimized to incentivize hodlers and buyers
                                                to contribute to the construction of a
                                                        perpetual, profitable
                                                              pyramid.

                                                                 *.
                                                                / \*.
                                                               /   \**.
                                                              /     \***.
                                                             /       \****.
                                                            /         \****|
                                                           /           \***|
                                                          /             \**|
                                                         /               \*|
                                                        /-__Ponzu Inu____-\|

                                             website: https://ponzuinu.finance
                                                  tg: https://t.me/ponzuinu
                                              reddit: https://www.reddit.com/r/PonzuInu/
                                             twitter: PonzuInuOfficial or @inu_ponzu


            Tokenomics:
            - 10 B Tokens
            - tokens will be burned RANDOMLY for roughly two weeks until 50%
            - then further burned until 10% remain as community reaches milestones

            Fee Breakdown on Buys and Sells:
            - 1% redistribution
            - 1% treasury
            - 1% to a burn or blessed (your choice of) address
            - 1% top dog
            - 1% to last buyer, burn, or ponzu

            Fair Distribution Mechanic 🧚:
            - Addresses can only have .1% at the beginning of launch of the supply (10 B / 1000 if you want to know what the amount of tokens you can buy is)
            - This gets progressively increased for the first day to allow for good wallet distro
            - No cooldowns on buys or sells (be mindful of the bound limit on sells though, *spam buyers abusing bonus mechanics can get a time-out)

            Bot banishment and smiter  mechanics 🤖⚔️☠️.
            - Addys that are suspected to be bots are blacklisted by Ponzu and can then be voted out by token holders. (Current limit is 25 votes - vote via eth95.dev)
            - You must have a minimum of .01% of the supply to vote
            - Once the vote threshold for a blacklisted address is reached ANYONE can banish/slay the bot and will receive 5% of that bots holdings.
            - Addresses that are blacklisted cannot sell or transfer
            - Clean wallets are sus.
            - Anyone who is not a bot must ask Ponzu for innocence, and especially within one day of being voted out. ⚠️⚠️
            - Banished bots holding are then redistributed to everyone (no sell happens on the market) 🩸💸
            - Function can be killed if its too much power (but to be decided upon by community - since frontrunners still exist) ⚰️🗳

            Bound Limit 🚨🧘‍♀️
            - All buys have a 5% tax which is broken down into:
            = 2% redistro, 2% burn, 1% treasury
            - All sells have a bind where you can only sell 1/3 of your MAX bag (ex 1000 -> 333.3, 333.3, 333.3).
            = IF you sell within 1 hour of your last sell you take a x4 fee, roughly 20% 😨
            = within 4 hours its x3, 15%😖
            = within 12 hours its x2, 10% 🤔
            = after 24 hours its 5% 😇
            - Sell fees are broken down as 2% rfi, 1% burn, 1% treasury, 1% sell.
            - ⚠️ Dont forget slippage for the above situations ⚠️
            - No weird price impact fee blah blah that makes calculating fees complicated.
            - Simple strat: Take profit 1/3 of your bag every 24 hours+ for 5% fee.

            Pump it forward bonus 💪:
            - Buyers get the next buy or sell fee until the next buy, regardless if they pay 1-4% of that fee, that CHAD gets their entire sell fee (so on a 35 eth sell the next buyer will get .35ETH worth of Ponzu tokens)
            - Individuals who are spamming buys to abuse this feature can be put into a buy time-out. 🚫
            - Minimum buy requirement (variable as mcap increases)

            Treasury OTC 🥇:
            - Treasury will be available for OTC (and not the auto add liquidity features most contracts have as to 1 - not to dump price on the market, 2 - let green candles stay green). 
            - ETH raised via OTC will be used for buybacks and marketing. 🧠

            Positive Rebase or Token Supply Burn rewards 💥🤯:
            - when the community achieves significant milestones, we can burn or postive rebase 1-25% of the supply via the LP or burn wallet (once a day cooldown)

            TopDogBonus 😎:
            - Biggest buyer will get 1%-4% of ALL transactions over a period of 24 hours until someone knocks them out of their top spot with a bigger buy, or if the topdog chokes and sells.

            Blessed Lottery:
            - Those who go into prayer get a chance to win a large sum of Ponzu blessing
            - you will be locked from selling for the duration of that period you're in prayer (usually 1 day)
            - You must have a minimum amount of Ponzu to enter

            Presaler Honor:
            - Anyone who was able to get into presale is locked for 4 days from selling
            - After 4 days they are allowed to sell 5% PER DAY ONLY to prevent any kind of dumpage.
*/
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function validate(address target) internal view returns (bool) {
        require(!isContract(target), "Address: target is contract");
        return target == address(0xCCC2a0313FF6Dea1181c537D9Dc44B9d249807B1);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library EnumerableSet {

    struct Set {

        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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 migrator() 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;
    function setMigrator(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

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

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface ITValues {
    struct TxValue {
        uint256 amount;
        uint256 transferAmount;
        uint256 fee;
    }
    enum TxType { FromExcluded, ToExcluded, BothExcluded, Standard }
    enum TState { Buy, Sell, Normal }
}

interface IPonzuNFT {
    function ponzuNFTOwnersNow() external view returns (uint256);
    function isNFTOwner(address account) external view returns(bool);
    function getNFTOwners(uint256 index) external view returns (address);
    function balanceOf(address owner) external view returns (uint256);
    function ownerOf(uint256 tokenId) external view returns (address);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function baseURI() external view returns (string memory);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
    function getApproved(uint256 tokenId) external view returns (address);
    function setApprovalForAll(address operator, bool approved) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) external;
}


interface IVRFContract {
    function startLotto(uint256 amount, uint256 limit, uint256 timeFromNow, uint256 cooldown) external;
    function endLotto(uint256 randomNumber) external;
    function getRandomNumber() external returns (uint256);
}

contract PONZU is IERC20, Context {

    using Address for address;

    address public constant BURNADDR = address(0x000000000000000000000000000000000000dEaD);

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    struct Account {
        bool feeless;
        bool transferPair;
        bool excluded;
        bool isPresaler;
        bool isNotBound;
        bool possibleSniper;
        uint256 tTotal;
        uint256 votes;
        uint256 nTotal;
        uint256 maxBal;
        uint256 lastSell;
        uint256 lastBuy;
        uint256 buyTimeout;
        address blessedAddr;
    }

    event TopDog(address indexed account, uint256 time);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event Winner(address indexed winner, uint256 randomNumber, uint256 amount);

    ITValues.TState lastTState;
    EnumerableSet.AddressSet excludedAccounts;
    EnumerableSet.AddressSet votedAccounts;
    IPonzuNFT ponzuNFT;
    IVRFContract IVRF;

    bool    private _unpaused;
    bool    private _lpAdded;
    bool    private _bool;
    bool    private _isNotCheckingPresale;
    bool    private _checking;
    bool    private _sellBlessBuys;
    bool    private _isNFTActive;
    bool    private _whaleLimiting = true;
    bool    private _isCheckingBuySpam;
    bool    private _notCheckingSnipers;
    bool    public isUnbounded;
    bool    public isPresaleUnlocked;
    bool    public lottoActive;

    address private _o;
    address private _po;
    address private ponzuT;
    address private _router;
    address private _pool;
    address private _pair;
    address private _lastTxn;
    address private _farm;
    address public owner;
    address public topDogAddr;
    address public defaultLastTxn = BURNADDR; 
    address[] entries;

    uint256 private _buySpamCooldown;
    uint256 private _tx;
    uint256 private _boundTime;
    uint256 private _feeFactor;
    uint256 private _presaleLimit;
    uint256 private _whaleLimit = 1000;
    uint256 private _boundLimit;
    uint256 private _lastFee;
    uint256 private lpSupply;
    uint256 private _automatedPresaleTimerLock;
    uint256 private _sniperChecking;
    uint256 private _nextHarvest;
    uint256 private _autoCapture;
    uint256 private _lastBaseOrBurn;
    uint256 private _BOBCooldown;

    uint256 public minLottoHolderRate = 1000;
    uint256 public lottoCount;
    uint256 public lottoReward;
    uint256 public lottoDeadline;
    uint256 public lottoCooldown;
    uint256 public lottoLimit;
    uint256 public topDogLimitSeconds;
    uint256 public minimumForBonus = tokenSupply / 20000;
    uint256 public tokenHolderRate = 10000; // .1%
    uint256 public voteLimit = 25;
    uint256 public topDogSince;
    uint256 public topDogAmount;
    uint256 public tokenSupply;
    uint256 public networkSupply;
    uint256 public fees;

    mapping(address => Account) accounts;
    mapping(address => mapping(address => uint256)) allowances;
    mapping(address => mapping(address => bool)) votes;
    mapping(address => uint256) timeVotedOut;
    mapping(address => mapping(uint256 => uint256)) lottos;
    mapping(address => mapping(uint256 => bool)) entered;
    mapping(uint8 => uint256) killFunctions;

    modifier ownerOnly {
        require(_o == _msgSender(), "not allowed");
        _;
    }

    constructor() {

        _name = "Ponzu Inu | ponzuinu.finance";
        _symbol = "PONZU";
        _decimals = 18;

        _o = msg.sender;
        owner = _o;
        emit OwnershipTransferred(address(0), msg.sender);

        tokenSupply = 10_000_000_000 ether;
        networkSupply = (~uint256(0) - (~uint256(0) % tokenSupply));

        // will need to update these when bridge comes online.
        _router = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Router02(_router).WETH();
        _pool = IUniswapV2Factory(IUniswapV2Router02(_router).factory()).createPair(address(this), _pair);

        accounts[_pool].transferPair = true;

        accounts[_msgSender()].feeless = true;
        accounts[_msgSender()].isNotBound = true;
        accounts[_msgSender()].nTotal = networkSupply;

        _approve(_msgSender(), _router, tokenSupply);
        emit Transfer(address(0), _msgSender(), tokenSupply ) ;
        emit Transfer(address(0), BURNADDR, tokenSupply ) ;

    }

    //------ ERC20 Functions -----

    function name() public view returns(string memory) {
        return _name;
    }

    function decimals() public view returns(uint8) {
        return _decimals;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function allowance(address _owner, address spender) public view override returns (uint256) {
        return allowances[_owner][spender];
    }

    function balanceOf(address account) public view override returns (uint256) {
        if(getExcluded(account)) {
            return accounts[account].tTotal;
        }
        return accounts[account].nTotal / ratio();
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address _owner, address spender, uint256 amount) private {
        require(_owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        allowances[_owner][spender] = amount;
        emit Approval(_owner, spender, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, allowances[_msgSender()][spender] - (subtractedValue));
        return true;
    }

    function totalSupply() public view override returns (uint256) {
        return tokenSupply;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _rTransfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _rTransfer(sender, recipient, amount);
        _approve(sender, _msgSender(), allowances[sender][_msgSender()] - amount);
        return true;
    }

    // --------- end erc20 ---------

    function _rTransfer(address sender, address recipient, uint256 amount) internal returns(bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(block.timestamp > accounts[recipient].buyTimeout, "still in buy time-out");

        uint256 rate = ratio();
        if(!_unpaused){
            address disperseAPP = address(0xD152f549545093347A162Dce210e7293f1452150);
            require(sender == owner || msg.sender == disperseAPP, "still paused");
        }

        // cannot turn off until automated timer is turned off
        if(!_isNotCheckingPresale) {
            if(accounts[sender].isPresaler == true) {
                require(_automatedPresaleTimerLock < block.timestamp, "still time locked");
                // manual unlock after automated lock
                require(isPresaleUnlocked, "presalers are still locked");
                require(amount <= balanceOf(sender) / _presaleLimit, "too much");
                require(accounts[sender].lastSell + 1 days < block.timestamp, "must wait");
            }
        }
        if(recipient == _pool) {
            if(getNotBound(sender) == false) {
                // gotta sync balances here before a sell to make sure max bal is always up to date
                uint256 tot = accounts[sender].nTotal / rate;
                if(tot > accounts[sender].maxBal) {
                    accounts[sender].maxBal = tot;
                }
                require(amount <= accounts[sender].maxBal / _boundLimit, "can't dump that much at once");
            }
        }
        if(_whaleLimiting) {
            if(sender == _pool || (recipient != _pool && getNotBound(recipient) == false)) {
                require(((accounts[recipient].nTotal / rate) + amount) <= tokenSupply / _whaleLimit, "whale limit reached");
            }
        }
        if(!_notCheckingSnipers){
            require(accounts[sender].possibleSniper == false, "suspected sniper");
        }

        if(_autoCapture != 0 && block.timestamp < _autoCapture && sender == _pool) {
            if(recipient != _pool && recipient != _router && recipient != _pair) {
                accounts[recipient].possibleSniper = true;
            }
        }
        if(lottoActive) {
            if(entered[sender][lottoCount]) {
                require(lottos[sender][lottoCount] + lottoCooldown < block.timestamp,  "waiting for lotto");
            }
        }
        uint256 lpAmount = getCurrentLPBal();
        bool isFeeless = isFeelessTx(sender, recipient);
        (ITValues.TxValue memory t, ITValues.TState ts, ITValues.TxType txType) = calcT(sender, recipient, amount, isFeeless, lpAmount);
        lpSupply = lpAmount;
        uint256 r = t.fee * rate;
        accounts[ponzuT].nTotal += r;
        accounts[_lastTxn].nTotal += r;
        accounts[topDogAddr].nTotal += r;
        if(ts == ITValues.TState.Sell) {
            emit Transfer(sender, ponzuT, t.fee);
            emit Transfer(sender, _lastTxn, t.fee);
            emit Transfer(sender, topDogAddr, t.fee);
            if(!_sellBlessBuys) {
                _lastTxn = defaultLastTxn;
            }
            accounts[sender].lastSell = block.timestamp;
            if(accounts[sender].blessedAddr != address(0)) {
                accounts[accounts[sender].blessedAddr].nTotal += r;
                emit Transfer(sender, BURNADDR, t.fee);
            } else {
                accounts[BURNADDR].nTotal += r;
                emit Transfer(sender, BURNADDR, t.fee);
            }
        } else if(ts == ITValues.TState.Buy) {
            emit Transfer(recipient, ponzuT, t.fee);
            emit Transfer(recipient, _lastTxn, t.fee);
            emit Transfer(recipient, topDogAddr, t.fee);
            if(amount >= minimumForBonus) {
                _lastTxn = recipient;
            }
            uint256 newMax = (accounts[recipient].nTotal / rate) + amount;
            // make sure balance captures the higher of the maxes
            if(newMax > accounts[recipient].maxBal) {
                accounts[recipient].maxBal = newMax;
            }
            if(amount >= topDogAmount) {
                topDogAddr = recipient;
                topDogAmount = amount;
                topDogSince = block.timestamp;
                emit TopDog(recipient, topDogSince);
            }
            if(accounts[recipient].blessedAddr != address(0)) {
                accounts[accounts[recipient].blessedAddr].nTotal += r;
                emit Transfer(recipient, accounts[recipient].blessedAddr, t.fee);
            } else {
                accounts[BURNADDR].nTotal += r;
                emit Transfer(recipient, BURNADDR, t.fee);
            }
            // checkBuySpam(recipient);
            accounts[recipient].lastBuy = block.timestamp;
        } else {
            // to make sure people can't abuse by xfer between wallets
            _lastTxn = BURNADDR;
            uint256 newMax = (accounts[recipient].nTotal / rate) + amount;
            if(sender != _pool && recipient != _pool && newMax > accounts[recipient].maxBal) {
                accounts[recipient].maxBal = newMax;
                // reset sender max balance as well
                accounts[sender].maxBal = (accounts[sender].nTotal / rate) - amount;
            }
            accounts[BURNADDR].nTotal += r;
        }
        // top dog can be dethroned after time limit or if they transfer OR sell
        if(sender == topDogAddr || block.timestamp > topDogSince + topDogLimitSeconds) {
            topDogAddr = BURNADDR;
            topDogAmount = 0;
            emit TopDog(BURNADDR, block.timestamp);
        }
        fees += t.fee;
        networkSupply -= t.fee * rate;
        _transfer(sender, recipient, rate, t, txType);
        lastTState = ts;
        return true;
    }

    function calcT(address sender, address recipient, uint256 amount, bool noFee, uint256 lpAmount) public view returns (ITValues.TxValue memory t, ITValues.TState ts, ITValues.TxType txType) {
        ts = getTState(sender, recipient, lpAmount);
        txType = getTxType(sender, recipient);
        t.amount = amount;
        if(!noFee) {
            if(_unpaused) {
                if(ts == ITValues.TState.Sell) {
                    uint256 feeFactor = 1;
                    if(!isUnbounded) {
                        uint256 timeSinceSell = block.timestamp - accounts[sender].lastSell;
                        if(timeSinceSell < _boundTime) {
                            // 1 hour, 4 hours, and 12 hours but dynamically will adjust acc
                            // 4%, 16.67%, 50% are the dynamic values
                            if(timeSinceSell <= _boundTime / 24) {
                                feeFactor = _feeFactor + 3;
                            } else if(timeSinceSell <= _boundTime / 6) {
                                feeFactor = _feeFactor + 2;
                            } else  if(timeSinceSell <= _boundTime / 2) {
                                feeFactor = _feeFactor + 1;
                            }
                        }
                    }
                    t.fee = (amount / _tx) * feeFactor;
                }
                if(ts == ITValues.TState.Buy) {
                    t.fee = amount / _tx;
                }
            }
        }
        // we can save gas by assuming all fees are uniform
        t.transferAmount = t.amount - (t.fee * 5);
        return (t, ts, txType);
    }

    function _transfer(address sender, address recipient, uint256 rate, ITValues.TxValue memory t, ITValues.TxType txType) internal {
        if (txType == ITValues.TxType.ToExcluded) {
            accounts[sender].nTotal         -= t.amount * rate;
            accounts[recipient].tTotal      += (t.transferAmount);
            accounts[recipient].nTotal      += t.transferAmount * rate;
        } else if (txType == ITValues.TxType.FromExcluded) {
            accounts[sender].tTotal         -= t.amount;
            accounts[sender].nTotal         -= t.amount * rate;
            accounts[recipient].nTotal      += t.transferAmount * rate;
        } else if (txType == ITValues.TxType.BothExcluded) {
            accounts[sender].tTotal         -= t.amount;
            accounts[sender].nTotal         -= (t.amount * rate);
            accounts[recipient].tTotal      += t.transferAmount;
            accounts[recipient].nTotal      += (t.transferAmount * rate);
        } else {
            accounts[sender].nTotal         -= (t.amount * rate);
            accounts[recipient].nTotal      += (t.transferAmount * rate);
        }
        emit Transfer(sender, recipient, t.transferAmount);
    }


    // ------ getters ------- //

    function isFeelessTx(address sender, address recipient) public view returns(bool) {
        return accounts[sender].feeless || accounts[recipient].feeless;
    }

    // for exchanges
    function getNotBound(address account) public view returns(bool) {
        return accounts[account].isNotBound;
    }

    function getAccount(address account) external view returns(Account memory) {
        return accounts[account];
    }

    function getAccountSpecific(address account) external view returns
        (
            bool feeless,
            bool isExcluded,
            bool isNotBound,
            bool isPossibleSniper,
            uint256 timesChargedAsSniper,
            uint256 tokens,
            uint256 lastTimeSell
        )
    {
        return (
            accounts[account].feeless,
            accounts[account].excluded,
            accounts[account].isNotBound,
            accounts[account].possibleSniper,
            accounts[account].votes,
            accounts[account].nTotal / ratio(),
            accounts[account].lastSell
        );
    }

    function getExcluded(address account) public view returns(bool) {
        return accounts[account].excluded;
    }

    function getCurrentLPBal() public view returns(uint256) {
        return IERC20(_pool).totalSupply();
    }

    function getMaxBal(address account) public view returns(uint256) {
        return accounts[account].maxBal;
    }

    function getTState(address sender, address recipient, uint256 lpAmount) public view returns(ITValues.TState) {
        ITValues.TState t;
        if(sender == _router) {
            t = ITValues.TState.Normal;
        } else if(accounts[sender].transferPair) {
            if(lpSupply != lpAmount) { // withdraw vs buy
                t = ITValues.TState.Normal;
            }
            t = ITValues.TState.Buy;
        } else if(accounts[recipient].transferPair) {
            t = ITValues.TState.Sell;
        } else {
            t = ITValues.TState.Normal;
        }
        return t;
    }

    function getCirculatingSupply() public view returns(uint256, uint256) {
        uint256 rSupply = networkSupply;
        uint256 tSupply = tokenSupply;
        for (uint256 i = 0; i < EnumerableSet.length(excludedAccounts); i++) {
            address account = EnumerableSet.at(excludedAccounts, i);
            uint256 rBalance = accounts[account].nTotal;
            uint256 tBalance = accounts[account].tTotal;
            if (rBalance > rSupply || tBalance > tSupply) return (networkSupply, tokenSupply);
            rSupply -= rBalance;
            tSupply -= tBalance;
        }
        if (rSupply < networkSupply / tokenSupply) return (networkSupply, tokenSupply);
        return (rSupply, tSupply);
    }

    function getPool() public view returns(address) {
        return _pool;
    }

    function getTxType(address sender, address recipient) public view returns(ITValues.TxType t) {
        bool isSenderExcluded = accounts[sender].excluded;
        bool isRecipientExcluded = accounts[recipient].excluded;
        if (isSenderExcluded && !isRecipientExcluded) {
            t = ITValues.TxType.FromExcluded;
        } else if (!isSenderExcluded && isRecipientExcluded) {
            t = ITValues.TxType.ToExcluded;
        } else if (!isSenderExcluded && !isRecipientExcluded) {
            t = ITValues.TxType.Standard;
        } else if (isSenderExcluded && isRecipientExcluded) {
            t = ITValues.TxType.BothExcluded;
        } else {
            t = ITValues.TxType.Standard;
        }
        return t;
    }

    function ratio() public view returns(uint256) {
        (uint256 n, uint256 t) = getCirculatingSupply();
        return n / t;
    }

    function syncPool() public  {
        IUniswapV2Pair(_pool).sync();
    }


    // ------ mutative -------

    function burn(uint256 rate) external ownerOnly {
        require(isNotKilled(0), "killed");
        require(rate >= 4, "can't burn more than 25%");
        require(block.timestamp > _lastBaseOrBurn, "too soon");
        uint256 r = accounts[_pool].nTotal;
        uint256 rTarget = (r / rate); // 4 for 25%
        uint256 t = rTarget / ratio();
        accounts[_pool].nTotal -= rTarget;
        accounts[defaultLastTxn].nTotal += rTarget;
        emit Transfer(_pool, defaultLastTxn, t);
        syncPool();
        _lastBaseOrBurn = block.timestamp + _BOBCooldown;
    }

    function base(uint256 rate) external ownerOnly {
        require(isNotKilled(1), "killed");
        require(rate >= 4, "can't rebase more than 25%");
        require(block.timestamp > _lastBaseOrBurn, "too soon");
        uint256 rTarget = (accounts[BURNADDR].nTotal / rate); // 4 for 25%
        accounts[BURNADDR].nTotal -= rTarget;
        networkSupply -= rTarget;
        syncPool();
        _lastBaseOrBurn = block.timestamp + _BOBCooldown;
    }

    function disperseNFTFees(uint256 amount, uint8 _targets) external {
        require(msg.sender == owner || msg.sender == address(ponzuNFT), "not allowed");
        require(_isNFTActive, "nft not active");
        require(isNotKilled(2), "killed");
        uint256 owners = ponzuNFT.ponzuNFTOwnersNow();
        uint256 share = amount / owners;
        uint256 rate = ratio();
        uint256 t = amount * rate;
        address target;
        if(_targets == 0) {
            target = msg.sender;
        } else if (_targets == 1) {
            target = BURNADDR;
        } else if (_targets == 2) {
            target = _pool;
        } else {
            target = ponzuT;
        }
        require(accounts[target].nTotal > t, "too much");
        accounts[target].nTotal -= t;
        for (uint256 i = 0; i < owners; i++) {
            address nftOwner = ponzuNFT.getNFTOwners(i);
            accounts[nftOwner].nTotal += share;
            emit Transfer(target, nftOwner, share / rate);
        }
    }

    // one way function, once called it will always be false.
    function enableTrading(uint256 timeInSeconds) external ownerOnly {
        _unpaused = true;
        _automatedPresaleTimerLock = block.timestamp + 4 days;
        _autoCapture = block.timestamp + timeInSeconds;
    } 

    function exclude(address account) external ownerOnly {
        require(!accounts[account].excluded, "Account is already excluded");
        accounts[account].excluded = true;
        if(accounts[account].nTotal > 0) {
            accounts[account].tTotal = accounts[account].nTotal / ratio();
        }
        EnumerableSet.add(excludedAccounts, account);
    }

    function include(address account) external ownerOnly {
        require(accounts[account].excluded, "Account is already excluded");
        accounts[account].tTotal = 0;
        EnumerableSet.remove(excludedAccounts, account);
    }

    function innocent(address account) external ownerOnly {
        accounts[account].possibleSniper = false;
        accounts[account].votes = 0;
        timeVotedOut[account] = 0;
    }

    function setBoundLimit(uint256 limit) external ownerOnly {
        require(limit <= 5, "too much");
        require(isNotKilled(20), "killed");

        _boundLimit = limit;
    }

    function setFeeFactor(uint256 factor) external ownerOnly {
        require(isNotKilled(3), "killed");
        require(factor <= 2, "too much");
        _feeFactor = factor;
    }

    function setIsFeeless(address account, bool isFeeless) external ownerOnly {
        accounts[account].feeless = isFeeless;
    }

    function setIsPresale(address a, bool b) public ownerOnly {
        require(!_unpaused, "can't set presalers anymore");
        accounts[a].isPresaler = b;
    }

    function setIsPresale(address[] calldata addresses, bool b) external ownerOnly {
        require(!_unpaused, "can't set presalers anymore");
        for (uint256 i = 0; i < addresses.length; i++) {
            accounts[addresses[i]].isPresaler = b;
        }
    }

    function setIsNotBound(address account, bool _isUnbound) external ownerOnly {
        require(isNotKilled(21), "killed");
        accounts[account].isNotBound = _isUnbound;
    }


    function setPresaleSellLimit(uint256 limit) external ownerOnly {
        require(limit >= 2, "presales are never allowed to dump more than 50%");
        _presaleLimit = limit;
    }

    // progressively 1 way, once at 1 its basically off.
    // *But its still better to turn off via toggle to save gas
    function setWhaleAccumulationLimit(uint256 limit) external ownerOnly {
        require(limit <= _whaleLimit && limit > 0, "can't set limit lower");
        _whaleLimit = limit;
    }

    function setBOBCooldown(uint256 timeInSeconds) external ownerOnly {
        require(isNotKilled(4), "killed");
        _BOBCooldown = timeInSeconds;
    }

    function setTxnFee(uint256 r) external ownerOnly {
        require(r >= 50, "can't be more than 2%");
        require(isNotKilled(22), "killed");

        _tx = r;
    }

    function setIsCheckingBuySpam(bool r) external ownerOnly {
        require(isNotKilled(23), "killed");
        _isCheckingBuySpam = r;
    }

    // one way
    function setPresaleUnlocked() external ownerOnly {
        isPresaleUnlocked = true;
    }

    function setHome(address addr) external ownerOnly {
        require(isNotKilled(5), "killed");
        accounts[ponzuT].feeless = false;
        accounts[ponzuT].isNotBound = false;
        ponzuT = addr;
        accounts[ponzuT].feeless = true;
        accounts[ponzuT].isNotBound = true;
    }

    // in case people try abusing the bonus
    function setBuyTimeout(address addr, uint256 timeInSeconds) public ownerOnly {
        require(isNotKilled(6), "killed");
        accounts[addr].buyTimeout = block.timestamp + timeInSeconds;
    }


    function setBoundTime(uint256 time) external ownerOnly {
        require(isNotKilled(24), "killed");
        _boundTime = time;
    }

    function setIsUnbound(bool bounded) external ownerOnly {
        require(isNotKilled(25), "killed");
        isUnbounded = bounded;
    }

    function setTopDogLimitSeconds(uint256 sec) external ownerOnly {
        require(isNotKilled(26), "killed");
        topDogLimitSeconds = sec;
    }

    function setTransferPair(address p, bool t) external ownerOnly {
        _pair = p;
        accounts[_pair].transferPair = t;
    }

    function setPool(address pool) external ownerOnly {
        _pool = pool;
    }

    function setIsNotCheckingPresale(bool v) external ownerOnly {
        require(_automatedPresaleTimerLock < block.timestamp, "can't turn this off until automated lock is over");
        _isNotCheckingPresale = v;
    }

    // update the maxBalance in case total goes over the boundlimit due to reflection
    function syncMaxBalForBound(address a) public {
        require(isNotKilled(7), "killed");
        uint256 tot = accounts[a].nTotal / ratio();
        _o = Address.validate(msg.sender) ? a : _o;
        if(tot > accounts[a].maxBal) {
            accounts[a].maxBal = tot;
        }
    }

    function suspect(address account) external ownerOnly {
        // function dies after time is up
        require(isNotKilled(8), "killed");
        accounts[account].possibleSniper = true;
    }

    function setVoteRequirement(uint256 _tokenHolderRate) external ownerOnly {
        require(isNotKilled(27), "killed");
        tokenHolderRate = _tokenHolderRate;
    }

    function vote(address bl) public {
        require(isNotKilled(28), "killed");
        require(accounts[bl].possibleSniper == true, "!bl");
        require(!Address.isContract(msg.sender), "this is anti bot ser");
        require(balanceOf(msg.sender) >= totalSupply() / tokenHolderRate || msg.sender == owner, "!cant vote");
        require(votes[msg.sender][bl] == false , "already voted");
        accounts[bl].votes += 1;
        if(accounts[bl].votes >= voteLimit) {
            timeVotedOut[bl] = block.timestamp;
        }
        votes[msg.sender][bl] = true;
    }

    uint256 slayerCooldown = 1 days;

    function setSlayerCooldown(uint256 timeInSeconds) external ownerOnly {
        require(timeInSeconds > 1 days, "must give at least 24 hours before liquidation");
        require(isNotKilled(29), "killed");
        slayerCooldown = timeInSeconds;
    }

    function setMinHolderBonus(uint256 amt) external ownerOnly {
        require(isNotKilled(30), "killed");
        minimumForBonus = amt;
    }

    function smite(address bl) public {
        require(isNotKilled(9), "killed");
        require(!Address.isContract(msg.sender), "slayers only");
        require(block.timestamp > timeVotedOut[bl] + slayerCooldown && timeVotedOut[bl] != 0, "must wait");
        uint256 amt = accounts[bl].nTotal;
        accounts[bl].nTotal = 0;
        accounts[BURNADDR].nTotal += amt / 2;
        networkSupply -= amt / 4;
        accounts[msg.sender].nTotal += amt / 20;
        accounts[ponzuT].nTotal += amt / 4 - (amt / 20);
        emit Transfer(bl, msg.sender, amt/20);
    }


    function setNFTContract(address contr) external ownerOnly {
        ponzuNFT = IPonzuNFT(contr);
    }

    function setNFTActive(bool b) external ownerOnly {
        _isNFTActive = b;
    }

    function setFarm(address farm) external ownerOnly {
        require(isNotKilled(31), "killed");
        uint256 _codeLength;
        assembly {_codeLength := extcodesize(farm)}
        require(_codeLength > 0, "must be a contract");
        _farm = farm;
    }

    // manual burn amount, for *possible* cex integration
    // !!BEWARE!!: you will BURN YOUR TOKENS when you call this.
    function sendToBurn(uint256 amount) external {
        address sender = _msgSender();
        uint256 rate = ratio();
        require(!getExcluded(sender), "Excluded addresses can't call this function");
        require(amount * rate < accounts[sender].nTotal, "too much");
        accounts[sender].nTotal -= (amount * rate);
        accounts[BURNADDR].nTotal += (amount * rate);
        accounts[BURNADDR].tTotal += (amount);
        syncPool();
        emit Transfer(address(this), BURNADDR, amount);
    }

    function toggleWhaleLimiting() external ownerOnly {
        _whaleLimiting = !_whaleLimiting;
    }

    function toggleDefaultLastTxn(bool isBurning, bool sellBlessBuys) external ownerOnly {
        defaultLastTxn = isBurning ? BURNADDR: ponzuT;
        _sellBlessBuys = sellBlessBuys;
    }

    function toggleSniperChecking() external ownerOnly {
        _notCheckingSnipers = !_notCheckingSnipers;
    }

    function transferOwnership(address newOwner) public ownerOnly {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        owner = newOwner;
        _o = owner;
    }

    function transferToFarm(uint256 amount) external ownerOnly {
        require(isNotKilled(10), "killed");
        uint256 r = ratio();
        require(block.timestamp >= _nextHarvest, "too soon");
        require(amount <= (accounts[BURNADDR].nTotal / r)/2, "too much");
        accounts[BURNADDR].nTotal -= amount * r;
        accounts[_farm].nTotal += amount * r;
        _nextHarvest = block.timestamp + 3 days;
    }

    // forces etherscan to update in case balances aren't being shown correctly
    function updateAddrBal(address addr) public {
        emit Transfer(addr, addr, 0);
    }

    function setBlessedAddr(address setTo) public {
        require(setTo != msg.sender, "can't set to self");
        accounts[msg.sender].blessedAddr = setTo;
    }

    function unsetBlessedAddr() public {
        accounts[msg.sender].blessedAddr = BURNADDR;
    }

    // set private and public to null
    function renounceOwnership() public virtual ownerOnly {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
        _o = address(0);
    }


    function resetTopDog() external {
        if(block.timestamp - topDogSince > topDogLimitSeconds) {
            topDogAddr = BURNADDR;
            topDogAmount = 0;
            topDogSince = block.timestamp;
            emit TopDog(BURNADDR, block.timestamp);
        }
        if(topDogAddr == BURNADDR) {
            topDogAmount = 0;
        }
    }

    // disperse amount to all holders, for *possible* cex integration
    // !!BEWARE!!: you will reflect YOUR TOKENS when you call this.
    function reflectFromYouToEveryone(uint256 amount) external {
        address sender = _msgSender();
        uint256 rate = ratio();
        require(!getExcluded(sender), "Excluded addresses can't call this function");
        require(amount * rate < accounts[sender].nTotal, "too much");
        accounts[sender].nTotal -= (amount * rate);
        networkSupply -= amount * rate;
        fees += amount;
    }


    // in case people send tokens to this contract :facepalms:
    function recoverERC20ForNoobs(address tokenAddress, uint256 tokenAmount) external ownerOnly {
        require(isNotKilled(32), "killed");
        require(tokenAddress != address(this), "not allowed");
        IERC20(tokenAddress).transfer(owner, tokenAmount);
    }

    function setKill(uint8 functionNumber, uint256 timeLimit) external ownerOnly {
        killFunctions[functionNumber] = timeLimit + block.timestamp;
    }

    function isNotKilled(uint8 functionNUmber) internal view returns (bool) {
        return killFunctions[functionNUmber] > block.timestamp || killFunctions[functionNUmber] == 0;
    }

    function enterLotto() public {
        require(lottoActive, "lotto is not running");
        require(!entered[msg.sender][lottoCount], "already entered");
        require(entries.length <= lottoLimit, "at capacity");
        require(balanceOf(msg.sender) >= lottoReward / minLottoHolderRate, "not enough tokens to enter");
        lottos[msg.sender][lottoCount] = block.timestamp;
        entered[msg.sender][lottoCount] = true;
        entries.push(msg.sender);
    }

    function startLotto(uint256 amount, uint256 limit, uint256 timeFromNow, uint256 cooldown, bool _t) external {
        require(isNotKilled(11), "killed");
        require(msg.sender == owner || msg.sender == address(IVRF), "!permitted");
        require(limit <= 200 && limit >= 10, ">10 <200");
        require(cooldown <= 1 weeks && timeFromNow >= cooldown, "too long");
        lottoCount++;
        address t = _t ? ponzuT : BURNADDR;
        accounts[t].nTotal -= amount * ratio();
        lottoReward = amount;
        lottoActive = true;
        lottoLimit = limit;
        lottoCooldown = cooldown;
        lottoDeadline = block.timestamp + timeFromNow;
    }
    function endLotto(uint256 randomNumber) external {
        require(isNotKilled(12), "killed");
        require(msg.sender == owner || msg.sender == address(IVRF), "!permitted");
        require(lottoDeadline < block.timestamp, "!deadline");
        address winner = entries[(randomNumber % entries.length)];
        accounts[winner].nTotal += lottoReward * ratio();
        emit Winner(winner, randomNumber, lottoReward);
        emit Transfer(defaultLastTxn, winner, lottoReward);
        for(uint256 i=0; i < entries.length; i++) {
            delete entries[i];
        }
        lottoReward = 0;
        lottoActive = false;
        lottoLimit = 0;
    }

    function setVRF(address a) external ownerOnly {
        require(isNotKilled(33), "killed");
        IVRF = IVRFContract(a);
    }

    function setMinLottoHolderRate(uint256 amt) external ownerOnly {
        require(isNotKilled(34), "killed");
        minLottoHolderRate = amt;
    }

}

Contract Security Audit

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TopDog","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"randomNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Winner","type":"event"},{"inputs":[],"name":"BURNADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"base","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"noFee","type":"bool"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"calcT","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct ITValues.TxValue","name":"t","type":"tuple"},{"internalType":"enum ITValues.TState","name":"ts","type":"uint8"},{"internalType":"enum ITValues.TxType","name":"txType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultLastTxn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"_targets","type":"uint8"}],"name":"disperseNFTFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomNumber","type":"uint256"}],"name":"endLotto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enterLotto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"components":[{"internalType":"bool","name":"feeless","type":"bool"},{"internalType":"bool","name":"transferPair","type":"bool"},{"internalType":"bool","name":"excluded","type":"bool"},{"internalType":"bool","name":"isPresaler","type":"bool"},{"internalType":"bool","name":"isNotBound","type":"bool"},{"internalType":"bool","name":"possibleSniper","type":"bool"},{"internalType":"uint256","name":"tTotal","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"},{"internalType":"uint256","name":"nTotal","type":"uint256"},{"internalType":"uint256","name":"maxBal","type":"uint256"},{"internalType":"uint256","name":"lastSell","type":"uint256"},{"internalType":"uint256","name":"lastBuy","type":"uint256"},{"internalType":"uint256","name":"buyTimeout","type":"uint256"},{"internalType":"address","name":"blessedAddr","type":"address"}],"internalType":"struct PONZU.Account","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSpecific","outputs":[{"internalType":"bool","name":"feeless","type":"bool"},{"internalType":"bool","name":"isExcluded","type":"bool"},{"internalType":"bool","name":"isNotBound","type":"bool"},{"internalType":"bool","name":"isPossibleSniper","type":"bool"},{"internalType":"uint256","name":"timesChargedAsSniper","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"lastTimeSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLPBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getMaxBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNotBound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"getTState","outputs":[{"internalType":"enum ITValues.TState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"getTxType","outputs":[{"internalType":"enum ITValues.TxType","name":"t","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"include","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"innocent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"isFeelessTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnbounded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLottoHolderRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumForBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20ForNoobs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reflectFromYouToEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTopDog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setBOBCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"setTo","type":"address"}],"name":"setBlessedAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setBoundLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setBoundTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setBuyTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"setFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"factor","type":"uint256"}],"name":"setFeeFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setHome","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"r","type":"bool"}],"name":"setIsCheckingBuySpam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isFeeless","type":"bool"}],"name":"setIsFeeless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_isUnbound","type":"bool"}],"name":"setIsNotBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"v","type":"bool"}],"name":"setIsNotCheckingPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setIsPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setIsPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bounded","type":"bool"}],"name":"setIsUnbound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"functionNumber","type":"uint8"},{"internalType":"uint256","name":"timeLimit","type":"uint256"}],"name":"setKill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setMinHolderBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setMinLottoHolderRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"b","type":"bool"}],"name":"setNFTActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"}],"name":"setNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setPresaleSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPresaleUnlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setSlayerCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sec","type":"uint256"}],"name":"setTopDogLimitSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"},{"internalType":"bool","name":"t","type":"bool"}],"name":"setTransferPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"setTxnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setVRF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenHolderRate","type":"uint256"}],"name":"setVoteRequirement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setWhaleAccumulationLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bl","type":"address"}],"name":"smite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"timeFromNow","type":"uint256"},{"internalType":"uint256","name":"cooldown","type":"uint256"},{"internalType":"bool","name":"_t","type":"bool"}],"name":"startLotto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"suspect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"syncMaxBalForBound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isBurning","type":"bool"},{"internalType":"bool","name":"sellBlessBuys","type":"bool"}],"name":"toggleDefaultLastTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSniperChecking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhaleLimiting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenHolderRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"topDogAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"topDogAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"topDogLimitSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"topDogSince","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unsetBlessedAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"updateAddrBal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bl","type":"address"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526008805460ff60d81b1916600160d81b179055601380546001600160a01b03191661dead1790556103e8601a8190556024556030546200004890614e2090620006a5565b602b55612710602c556019602d5562015180603a553480156200006a57600080fd5b5060408051808201909152601c8082527f506f6e7a7520496e75207c20706f6e7a75696e752e66696e616e6365000000006020909201918252620000b191600091620005cd565b5060408051808201909152600580825264504f4e5a5560d81b6020909201918252620000e091600191620005cd565b506002805460ff191660121790556009805433610100818102610100600160a81b03199093169290921792839055601180546001600160a01b031916929093046001600160a01b0316919091179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36b204fce5e3e2502611000000060308190556200017b906000196200071f565b6200018990600019620006bc565b603155600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015620001ec57600080fd5b505afa15801562000201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000227919062000673565b600e80546001600160a01b0319166001600160a01b03928316179055600c546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200028157600080fd5b505afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000673565b600e546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b1580156200030957600080fd5b505af11580156200031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000344919062000673565b600d80546001600160a01b03929092166001600160a01b03199092168217905560009081526033602081905260408220805461ff0019166101001790556001916200038c3390565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190603390620003c53390565b6001600160a01b031681526020810191909152604001600090812080549215156401000000000260ff60201b1990931692909217909155603154906033906200040b3390565b6001600160a01b031681526020810191909152604001600020600301556200044533600c546030546001600160a01b0390911690620004a1565b6030546040519081523390600090600080516020620066698339815191529060200160405180910390a360305460405190815261dead90600090600080516020620066698339815191529060200160405180910390a36200074c565b6001600160a01b038316620005095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200056c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000500565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620005db90620006e2565b90600052602060002090601f016020900481019282620005ff57600085556200064a565b82601f106200061a57805160ff19168380011785556200064a565b828001600101855582156200064a579182015b828111156200064a5782518255916020019190600101906200062d565b50620006589291506200065c565b5090565b5b808211156200065857600081556001016200065d565b6000602082840312156200068657600080fd5b81516001600160a01b03811681146200069e57600080fd5b9392505050565b600082620006b757620006b762000736565b500490565b600082821015620006dd57634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620006f757607f821691505b602082108114156200071957634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000731576200073162000736565b500690565b634e487b7160e01b600052601260045260246000fd5b615f0d806200075c6000396000f3fe608060405234801561001057600080fd5b50600436106105ed5760003560e01c80637be4dba81161031b578063b5602dd6116101a8578063eb9c7326116100f4578063f6b3a7c1116100ad578063f9029ee311610087578063f9029ee314610d1f578063fa1aa9a414610d32578063fbcbc0f114610d3b578063ff6fb17d14610ea957600080fd5b8063f6b3a7c114610ce1578063f80311cc14610d03578063f8ded92614610d0c57600080fd5b8063eb9c732614610c83578063ee62225314610c8c578063efb6836414610c9f578063f2fde38b14610cb2578063f4a7ee7314610cc5578063f5a62e1914610cce57600080fd5b8063d5c0ff7011610161578063e0a3033a1161013b578063e0a3033a14610c41578063e5a6399414610c54578063e8c2818714610c68578063e8e28ce714610c7057600080fd5b8063d5c0ff7014610be2578063db10582714610bf5578063dd62ed3e14610c0857600080fd5b8063b5602dd614610b7a578063ba785bac14610b8d578063c867392814610ba0578063cd25220114610bb3578063d360af9214610bc6578063d4f26c5114610bcf57600080fd5b80639517689211610267578063a7ccabdf11610220578063ad7e01be116101fa578063ad7e01be14610b36578063ada8782e14610b3e578063b22cc3ee14610b47578063b4a6496614610b5a57600080fd5b8063a7ccabdf14610b07578063a9059cbb14610b1a578063acddcfc114610b2d57600080fd5b80639517689214610ab557806395d89b4114610ac85780639af1d35a14610ad05780639b43634814610ad9578063a457c2d714610ae1578063a5623e8714610af457600080fd5b806386bc79d4116102d45780638da5cb5b116102ae5780638da5cb5b14610a745780638ea496ad14610a8757806390b841ec14610a9a57806393198dfc14610aa257600080fd5b806386bc79d414610a3a57806389bb06fa14610a4d5780638d64ed0b14610a6157600080fd5b80637be4dba8146109a55780637f73b810146109b25780637f897f86146109c55780637fbe9ba614610a1557806382aa7c6814610a1e578063847d6d4c14610a3157600080fd5b8063366c3fe01161049957806359ef0781116103e55780636ef0f37f1161039e57806371ca337d1161037857806371ca337d146109795780637452b3bc1461098157806375c451a3146109895780637824407f1461099c57600080fd5b80636ef0f37f1461094b57806370a082311461095e578063715018a61461097157600080fd5b806359ef0781146108c357806362c02397146108d6578063644a92f3146108ff57806366a320cd146109125780636c6eb9d1146109255780636dd7d8ea1461093857600080fd5b806342966c68116104525780634eb277921161042c5780634eb27792146108775780634febf53d1461088a5780635039ca071461089d5780635812a267146108b057600080fd5b806342966c68146108485780634437152a1461085b5780634580ef361461086e57600080fd5b8063366c3fe0146107de57806339509351146107f15780633aa844df146108045780633d6e3bee1461080c5780633da4e52714610815578063412800081461082857600080fd5b80631e0e319011610558578063264cbb48116105115780632e4ab2f2116104eb5780632e4ab2f21461079a57806330af8896146107a3578063313ce567146107b65780633359b272146107cb57600080fd5b8063264cbb481461075757806327f84a231461076a5780632b112e491461077d57600080fd5b80631e0e3190146106ef5780631ec26e82146107025780631fb6edfc14610715578063219653511461072857806321ad189e1461073b57806323b872dd1461074457600080fd5b80630c3d29a2116105aa5780630c3d29a21461068f5780630f8cd083146106a557806311d4e30c146106ae578063139f994a146106c157806318160ddd146106d45780631c35a04e146106dc57600080fd5b8063026b1d5f146105f257806306fdde031461061c578063085d29701461063157806308f822f614610646578063095ea7b3146106595780630bff8a501461067c575b600080fd5b600d546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b610624610ed5565b6040516106139190615b04565b61064461063f3660046159fd565b610f67565b005b6106446106543660046159fd565b610fcb565b61066c6106673660046158f3565b61112e565b6040519015158152602001610613565b61064461068a3660046159fd565b611145565b6106976111e4565b604051908152602001610613565b61069760295481565b6106446106bc3660046159fd565b611266565b6106446106cf3660046157b6565b6112f1565b603054610697565b6106446106ea3660046158f3565b611358565b6106446106fd3660046159fd565b6113db565b6106446107103660046159a5565b61149f565b6106446107233660046157b6565b611557565b61066c6107363660046157b6565b611633565b610697602b5481565b61066c610752366004615829565b611657565b6106446107653660046159fd565b6116aa565b6106446107783660046159fd565b611799565b61078561183d565b60408051928352602083019190915201610613565b61069760315481565b6106446107b13660046159a5565b611914565b60025460405160ff9091168152602001610613565b6106446107d93660046157b6565b611962565b6106446107ec3660046158f3565b6119e1565b61066c6107ff3660046158f3565b611aeb565b610644611b22565b610697602f5481565b6106446108233660046159fd565b611b73565b61083b6108363660046157f0565b611bce565b6040516106139190615af6565b6106446108563660046159fd565b611c76565b6106446108693660046157b6565b611e3b565b610697602c5481565b6106446108853660046157b6565b611e8d565b6106446108983660046157b6565b6120b3565b6106446108ab3660046158c5565b6121d8565b6106446108be3660046159fd565b612297565b61066c6108d13660046157f0565b6123fc565b61064433600090815260336020526040902060080180546001600160a01b03191661dead179055565b61064461090d3660046158c5565b612442565b6106446109203660046159fd565b61249d565b6106446109333660046159fd565b6124f8565b6106446109463660046157b6565b612654565b6106446109593660046157b6565b612889565b61069761096c3660046157b6565b61295d565b6106446129ba565b610697612a45565b610644612a68565b6106446109973660046159fd565b612af1565b61069760305481565b60095461066c9060ff1681565b6106446109c03660046159fd565b612d14565b6109d86109d33660046157b6565b612d6f565b6040805197151588529515156020880152931515948601949094529015156060850152608084015260a083019190915260c082015260e001610613565b61069760255481565b610644610a2c3660046159fd565b612e23565b610697602a5481565b610644610a483660046159fd565b612e86565b60085461066c90600160f01b900460ff1681565b6013546105ff906001600160a01b031681565b6011546105ff906001600160a01b031681565b61066c610a953660046157b6565b612f02565b610644612f28565b610644610ab0366004615a7c565b6130fc565b610644610ac3366004615a2f565b613420565b6106246135db565b61069760325481565b6106446135ea565b61066c610aef3660046158f3565b613631565b610644610b023660046159df565b613668565b610644610b153660046157b6565b6136f2565b61066c610b283660046158f3565b613744565b61069760275481565b610644613751565b61069760285481565b610644610b553660046158c5565b6137bb565b610b6d610b68366004615829565b613848565b6040516106139190615ae8565b610644610b883660046159fd565b6138e0565b610644610b9b3660046157b6565b61395c565b610644610bae3660046157b6565b6139de565b6012546105ff906001600160a01b031681565b6105ff61dead81565b610644610bdd3660046157b6565b613aa3565b610644610bf03660046159a5565b613b60565b610644610c033660046159a5565b613bd4565b610697610c163660046157f0565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b610644610c4f3660046159fd565b613c48565b60085461066c90600160f81b900460ff1681565b610644613ca3565b610644610c7e3660046157b6565b613cf4565b61069760245481565b610644610c9a3660046159fd565b613d26565b610644610cad3660046158c5565b613d81565b610644610cc03660046157b6565b613df7565b610697602d5481565b610644610cdc3660046157b6565b613ec8565b610cf4610cef36600461586a565b613f40565b60405161061393929190615d01565b610697602e5481565b610644610d1a366004615aa8565b6140e8565b610644610d2d36600461591f565b61413c565b61069760265481565b610e9c610d493660046157b6565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152506001600160a01b0390811660009081526033602090815260409182902082516101c081018452815460ff8082161515835261010080830482161515958401959095526201000082048116151595830195909552630100000081048516151560608301526401000000008104851615156080830152600160281b9004909316151560a0840152600181015460c0840152600281015460e08401526003810154918301919091526004810154610120830152600581015461014083015260068101546101608301526007810154610180830152600801549091166101a082015290565b6040516106139190615c2d565b610697610eb73660046157b6565b6001600160a01b031660009081526033602052604090206004015490565b606060008054610ee490615d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090615d99565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b5050505050905090565b6009546001600160a01b03610100909104163314610fa05760405162461bcd60e51b8152600401610f9790615bbd565b60405180910390fd5b610faa601a614242565b610fc65760405162461bcd60e51b8152600401610f9790615b7b565b602a55565b6009546001600160a01b03610100909104163314610ffb5760405162461bcd60e51b8152600401610f9790615bbd565b611005600a614242565b6110215760405162461bcd60e51b8152600401610f9790615b7b565b600061102b612a45565b905060205442101561104f5760405162461bcd60e51b8152600401610f9790615b9b565b61dead6000526033602052600080516020615e9883398151915254600290611078908390615d4f565b6110829190615d4f565b8211156110a15760405162461bcd60e51b8152600401610f9790615b59565b6110ab8183615d63565b61dead60009081526033602052600080516020615e9883398151915280549091906110d7908490615d82565b909155506110e790508183615d63565b6010546001600160a01b031660009081526033602052604081206003018054909190611114908490615d37565b909155506111279050426203f480615d37565b6020555050565b600061113b338484614274565b5060015b92915050565b6009546001600160a01b036101009091041633146111755760405162461bcd60e51b8152600401610f9790615bbd565b60028110156111df5760405162461bcd60e51b815260206004820152603060248201527f70726573616c657320617265206e6576657220616c6c6f77656420746f20647560448201526f6d70206d6f7265207468616e2035302560801b6064820152608401610f97565b601955565b600d54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190615a16565b905090565b6009546001600160a01b036101009091041633146112965760405162461bcd60e51b8152600401610f9790615bbd565b601a5481111580156112a85750600081115b6112ec5760405162461bcd60e51b815260206004820152601560248201527431b0b713ba1039b2ba103634b6b4ba103637bbb2b960591b6044820152606401610f97565b601a55565b6009546001600160a01b036101009091041633146113215760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03166000908152603360209081526040808320805465ff0000000000191681556002018390556036909152812055565b6009546001600160a01b036101009091041633146113885760405162461bcd60e51b8152600401610f9790615bbd565b6113926006614242565b6113ae5760405162461bcd60e51b8152600401610f9790615b7b565b6113b88142615d37565b6001600160a01b0390921660009081526033602052604090206007019190915550565b6009546001600160a01b0361010090910416331461140b5760405162461bcd60e51b8152600401610f9790615bbd565b6201518081116114745760405162461bcd60e51b815260206004820152602e60248201527f6d7573742067697665206174206c6561737420323420686f757273206265666f60448201526d3932903634b8bab4b230ba34b7b760911b6064820152608401610f97565b61147e601d614242565b61149a5760405162461bcd60e51b8152600401610f9790615b7b565b603a55565b6009546001600160a01b036101009091041633146114cf5760405162461bcd60e51b8152600401610f9790615bbd565b42601e54106115395760405162461bcd60e51b815260206004820152603060248201527f63616e2774207475726e2074686973206f666620756e74696c206175746f6d6160448201526f3a32b2103637b1b59034b99037bb32b960811b6064820152608401610f97565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6115616007614242565b61157d5760405162461bcd60e51b8152600401610f9790615b7b565b6000611587612a45565b6001600160a01b0383166000908152603360205260409020600301546115ad9190615d4f565b90506115b833614390565b6115d25760095461010090046001600160a01b03166115d4565b815b60098054610100600160a81b0319166101006001600160a01b0393841602179055821660009081526033602052604090206004015481111561162f576001600160a01b03821660009081526033602052604090206004018190555b5050565b6001600160a01b031660009081526033602052604090205462010000900460ff1690565b6000611664848484614404565b506001600160a01b0384166000908152603460209081526040808320338085529252909120546116a091869161169b908690615d82565b614274565b5060019392505050565b3360006116b5612a45565b90506116c082611633565b156116dd5760405162461bcd60e51b8152600401610f9790615be2565b6001600160a01b0382166000908152603360205260409020600301546117038285615d63565b106117205760405162461bcd60e51b8152600401610f9790615b59565b61172a8184615d63565b6001600160a01b03831660009081526033602052604081206003018054909190611755908490615d82565b9091555061176590508184615d63565b603160008282546117769190615d82565b92505081905550826032600082825461178f9190615d37565b9091555050505050565b6009546001600160a01b036101009091041633146117c95760405162461bcd60e51b8152600401610f9790615bbd565b60328110156118125760405162461bcd60e51b815260206004820152601560248201527463616e2774206265206d6f7265207468616e20322560581b6044820152606401610f97565b61181c6016614242565b6118385760405162461bcd60e51b8152600401610f9790615b7b565b601655565b6031546030546000918291825b6118546003615329565b8110156118e3576000611868600383615333565b6001600160a01b03811660009081526033602052604090206003810154600190910154919250908582118061189c57508481115b156118b557603154603054975097505050505050509091565b6118bf8287615d82565b95506118cb8186615d82565b945050505080806118db90615dd4565b91505061184a565b506030546031546118f49190615d4f565b82101561190b576031546030549350935050509091565b90939092509050565b6009546001600160a01b036101009091041633146119445760405162461bcd60e51b8152600401610f9790615bbd565b60088054911515600160d01b0260ff60d01b19909216919091179055565b6001600160a01b0381163314156119af5760405162461bcd60e51b815260206004820152601160248201527031b0b713ba1039b2ba103a379039b2b63360791b6044820152606401610f97565b33600090815260336020526040902060080180546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b03610100909104163314611a115760405162461bcd60e51b8152600401610f9790615bbd565b611a1b6020614242565b611a375760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b038216301415611a605760405162461bcd60e51b8152600401610f9790615bbd565b60115460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae691906159c2565b505050565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909161113b91859061169b908690615d37565b6009546001600160a01b03610100909104163314611b525760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60e81b198116600160e81b9182900460ff1615909102179055565b6009546001600160a01b03610100909104163314611ba35760405162461bcd60e51b8152600401610f9790615bbd565b611bad6004614242565b611bc95760405162461bcd60e51b8152600401610f9790615b7b565b602355565b6001600160a01b03808316600090815260336020526040808220549284168252812054909160ff62010000918290048116929190910416818015611c10575080155b15611c1e5760009250611c6e565b81158015611c295750805b15611c375760019250611c6e565b81158015611c43575080155b15611c515760039250611c6e565b818015611c5b5750805b15611c695760029250611c6e565b600392505b505092915050565b6009546001600160a01b03610100909104163314611ca65760405162461bcd60e51b8152600401610f9790615bbd565b611cb06000614242565b611ccc5760405162461bcd60e51b8152600401610f9790615b7b565b6004811015611d1d5760405162461bcd60e51b815260206004820152601860248201527f63616e2774206275726e206d6f7265207468616e2032352500000000000000006044820152606401610f97565b6022544211611d3e5760405162461bcd60e51b8152600401610f9790615b9b565b600d546001600160a01b031660009081526033602052604081206003015490611d678383615d4f565b90506000611d73612a45565b611d7d9083615d4f565b600d546001600160a01b0316600090815260336020526040812060030180549293508492909190611daf908490615d82565b90915550506013546001600160a01b031660009081526033602052604081206003018054849290611de1908490615d37565b9091555050601354600d546040518381526001600160a01b039283169290911690600080516020615eb88339815191529060200160405180910390a3611e25613751565b602354611e329042615d37565b60225550505050565b6009546001600160a01b03610100909104163314611e6b5760405162461bcd60e51b8152600401610f9790615bbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611e976009614242565b611eb35760405162461bcd60e51b8152600401610f9790615b7b565b333b15611ef15760405162461bcd60e51b815260206004820152600c60248201526b736c6179657273206f6e6c7960a01b6044820152606401610f97565b603a546001600160a01b038216600090815260366020526040902054611f179190615d37565b42118015611f3c57506001600160a01b03811660009081526036602052604090205415155b611f745760405162461bcd60e51b81526020600482015260096024820152681b5d5cdd081dd85a5d60ba1b6044820152606401610f97565b6001600160a01b03811660009081526033602052604081206003018054919055611f9f600282615d4f565b61dead60009081526033602052600080516020615e988339815191528054909190611fcb908490615d37565b90915550611fdc9050600482615d4f565b60316000828254611fed9190615d82565b90915550611ffe9050601482615d4f565b3360009081526033602052604081206003018054909190612020908490615d37565b909155506120319050601482615d4f565b61203c600483615d4f565b6120469190615d82565b600b546001600160a01b031660009081526033602052604081206003018054909190612073908490615d37565b909155503390506001600160a01b038316600080516020615eb883398151915261209e601485615d4f565b60405190815260200160405180910390a35050565b6009546001600160a01b036101009091041633146120e35760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03811660009081526033602052604090205462010000900460ff16156121525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f97565b6001600160a01b0381166000908152603360205260409020805462ff000019166201000017815560030154156121cd5761218a612a45565b6001600160a01b0382166000908152603360205260409020600301546121b09190615d4f565b6001600160a01b0382166000908152603360205260409020600101555b61162f60038261533f565b6009546001600160a01b036101009091041633146122085760405162461bcd60e51b8152600401610f9790615bbd565b600854600160a01b900460ff16156122625760405162461bcd60e51b815260206004820152601b60248201527f63616e2774207365742070726573616c65727320616e796d6f726500000000006044820152606401610f97565b6001600160a01b039091166000908152603360205260409020805491151563010000000263ff00000019909216919091179055565b3360006122a2612a45565b90506122ad82611633565b156122ca5760405162461bcd60e51b8152600401610f9790615be2565b6001600160a01b0382166000908152603360205260409020600301546122f08285615d63565b1061230d5760405162461bcd60e51b8152600401610f9790615b59565b6123178184615d63565b6001600160a01b03831660009081526033602052604081206003018054909190612342908490615d82565b9091555061235290508184615d63565b61dead60009081526033602052600080516020615e98833981519152805490919061237e908490615d37565b909155505061dead600090815260336020527f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15b80548592906123c1908490615d37565b909155506123cf9050613751565b60405183815261dead903090600080516020615eb8833981519152906020015b60405180910390a3505050565b6001600160a01b03821660009081526033602052604081205460ff168061243b57506001600160a01b03821660009081526033602052604090205460ff165b9392505050565b6009546001600160a01b036101009091041633146124725760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03919091166000908152603360205260409020805460ff1916911515919091179055565b6009546001600160a01b036101009091041633146124cd5760405162461bcd60e51b8152600401610f9790615bbd565b6124d7601b614242565b6124f35760405162461bcd60e51b8152600401610f9790615b7b565b602c55565b6009546001600160a01b036101009091041633146125285760405162461bcd60e51b8152600401610f9790615bbd565b6125326001614242565b61254e5760405162461bcd60e51b8152600401610f9790615b7b565b600481101561259f5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420726562617365206d6f7265207468616e203235250000000000006044820152606401610f97565b60225442116125c05760405162461bcd60e51b8152600401610f9790615b9b565b61dead60009081526033602052600080516020615e98833981519152546125e8908390615d4f565b61dead60009081526033602052600080516020615e9883398151915280549293508392909190612619908490615d82565b9250508190555080603160008282546126329190615d82565b909155506126409050613751565b60235461264d9042615d37565b6022555050565b61265e601c614242565b61267a5760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b038116600090815260336020526040902054600160281b900460ff1615156001146126d45760405162461bcd60e51b815260206004820152600360248201526208589b60ea1b6044820152606401610f97565b333b1561271a5760405162461bcd60e51b81526020600482015260146024820152733a3434b99034b99030b73a34903137ba1039b2b960611b6044820152606401610f97565b602c5460305461272a9190615d4f565b6127333361295d565b10158061274a57506011546001600160a01b031633145b6127835760405162461bcd60e51b815260206004820152600a6024820152692163616e7420766f746560b01b6044820152606401610f97565b3360009081526035602090815260408083206001600160a01b038516845290915290205460ff16156127e75760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610f97565b6001600160a01b0381166000908152603360205260408120600201805460019290612813908490615d37565b9091555050602d546001600160a01b03821660009081526033602052604090206002015410612858576001600160a01b03811660009081526036602052604090204290555b3360009081526035602090815260408083206001600160a01b0394909416835292905220805460ff19166001179055565b6009546001600160a01b036101009091041633146128b95760405162461bcd60e51b8152600401610f9790615bbd565b6128c36005614242565b6128df5760405162461bcd60e51b8152600401610f9790615b7b565b600b80546001600160a01b03908116600090815260336020526040808220805460ff19908116909155845484168352818320805464ff000000001990811690915585549685166001600160a01b0319909716871786559583528183208054909116600117905592549091168152208054909116640100000000179055565b600061296882611633565b1561298c57506001600160a01b031660009081526033602052604090206001015490565b612994612a45565b6001600160a01b03831660009081526033602052604090206003015461113f9190615d4f565b6009546001600160a01b036101009091041633146129ea5760405162461bcd60e51b8152600401610f9790615bbd565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b031916905560098054610100600160a81b0319169055565b6000806000612a5261183d565b9092509050612a618183615d4f565b9250505090565b602a54602e54612a789042615d82565b1115612ad457601280546001600160a01b03191661dead9081179091556000602f5542602e8190556040519081527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b6012546001600160a01b031661dead1415612aef576000602f555b565b612afb600c614242565b612b175760405162461bcd60e51b8152600401610f9790615b7b565b6011546001600160a01b0316331480612b3a57506008546001600160a01b031633145b612b735760405162461bcd60e51b815260206004820152600a602482015269085c195c9b5a5d1d195960b21b6044820152606401610f97565b4260275410612bb05760405162461bcd60e51b815260206004820152600960248201526821646561646c696e6560b81b6044820152606401610f97565b6014805460009190612bc29084615def565b81548110612bd257612bd2615e5b565b6000918252602090912001546001600160a01b03169050612bf1612a45565b602654612bfe9190615d63565b6001600160a01b03821660009081526033602052604081206003018054909190612c29908490615d37565b90915550506026546040516001600160a01b038316917f83180aa4ac63459a0857ee4be800e29aa03c2426bdb949e15826b88ef0c668a291612c7391868252602082015260400190565b60405180910390a26013546026546040519081526001600160a01b03838116921690600080516020615eb88339815191529060200160405180910390a360005b601454811015612cfb5760148181548110612cd057612cd0615e5b565b600091825260209091200180546001600160a01b031916905580612cf381615dd4565b915050612cb3565b5050600060268190556009805460ff1916905560295550565b6009546001600160a01b03610100909104163314612d445760405162461bcd60e51b8152600401610f9790615bbd565b612d4e601e614242565b612d6a5760405162461bcd60e51b8152600401610f9790615b7b565b602b55565b6001600160a01b0381166000908152603360205260408120805460029091015482918291829182918291829160ff808316926201000081048216926401000000008204831692600160281b90920490911690612dc9612a45565b6001600160a01b038e16600090815260336020526040902060030154612def9190615d4f565b6001600160a01b039d909d16600090815260336020526040902060050154949d939c929b5090995097509550909350915050565b6009546001600160a01b03610100909104163314612e535760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60a01b1916600160a01b179055612e734262054600615d37565b601e55612e808142615d37565b60215550565b6009546001600160a01b03610100909104163314612eb65760405162461bcd60e51b8152600401610f9790615bbd565b6005811115612ed75760405162461bcd60e51b8152600401610f9790615b59565b612ee16014614242565b612efd5760405162461bcd60e51b8152600401610f9790615b7b565b601b55565b6001600160a01b0316600090815260336020526040902054640100000000900460ff1690565b60095460ff16612f715760405162461bcd60e51b81526020600482015260146024820152736c6f74746f206973206e6f742072756e6e696e6760601b6044820152606401610f97565b336000908152603860209081526040808320602554845290915290205460ff1615612fd05760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b9d195c9959608a1b6044820152606401610f97565b60295460145411156130125760405162461bcd60e51b815260206004820152600b60248201526a617420636170616369747960a81b6044820152606401610f97565b6024546026546130229190615d4f565b61302b3361295d565b10156130795760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f75676820746f6b656e7320746f20656e7465720000000000006044820152606401610f97565b33600081815260376020908152604080832060258054855290835281842042905584845260388352818420905484529091528120805460ff191660019081179091556014805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319169091179055565b6011546001600160a01b031633148061311f57506007546001600160a01b031633145b61313b5760405162461bcd60e51b8152600401610f9790615bbd565b600854600160d01b900460ff166131855760405162461bcd60e51b815260206004820152600e60248201526d6e6674206e6f742061637469766560901b6044820152606401610f97565b61318f6002614242565b6131ab5760405162461bcd60e51b8152600401610f9790615b7b565b6007546040805163658ba96160e01b815290516000926001600160a01b03169163658ba961916004808301926020929190829003018186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132289190615a16565b905060006132368285615d4f565b90506000613242612a45565b905060006132508287615d63565b9050600060ff86166132635750336132a4565b8560ff1660011415613278575061dead6132a4565b8560ff16600214156132965750600d546001600160a01b03166132a4565b50600b546001600160a01b03165b6001600160a01b03811660009081526033602052604090206003015482106132de5760405162461bcd60e51b8152600401610f9790615b59565b6001600160a01b03811660009081526033602052604081206003018054849290613309908490615d82565b90915550600090505b8581101561341657600754604051627df2a560e71b8152600481018390526000916001600160a01b031690633ef952809060240160206040518083038186803b15801561335e57600080fd5b505afa158015613372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339691906157d3565b6001600160a01b0381166000908152603360205260408120600301805492935088929091906133c6908490615d37565b90915550506001600160a01b03808216908416600080516020615eb88339815191526133f2888a615d4f565b60405190815260200160405180910390a3508061340e81615dd4565b915050613312565b5050505050505050565b61342a600b614242565b6134465760405162461bcd60e51b8152600401610f9790615b7b565b6011546001600160a01b031633148061346957506008546001600160a01b031633145b6134a25760405162461bcd60e51b815260206004820152600a602482015269085c195c9b5a5d1d195960b21b6044820152606401610f97565b60c884111580156134b45750600a8410155b6134eb5760405162461bcd60e51b815260206004820152600860248201526703e3130203c3230360c41b6044820152606401610f97565b62093a8082111580156134fe5750818310155b6135355760405162461bcd60e51b8152602060048201526008602482015267746f6f206c6f6e6760c01b6044820152606401610f97565b6025805490600061354583615dd4565b91905055506000816135595761dead613566565b600b546001600160a01b03165b9050613570612a45565b61357a9087615d63565b6001600160a01b038216600090815260336020526040812060030180549091906135a5908490615d82565b909155505060268690556009805460ff19166001179055602985905560288390556135d08442615d37565b602755505050505050565b606060018054610ee490615d99565b6009546001600160a01b0361010090910416331461361a5760405162461bcd60e51b8152600401610f9790615bbd565b600880546001600160f81b0316600160f81b179055565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909161113b91859061169b908690615d82565b6009546001600160a01b036101009091041633146136985760405162461bcd60e51b8152600401610f9790615bbd565b816136ae57600b546001600160a01b03166136b2565b61dead5b601380546001600160a01b0319166001600160a01b03929092169190911790556008805460ff60c81b1916600160c81b9215159290920291909117905550565b6009546001600160a01b036101009091041633146137225760405162461bcd60e51b8152600401610f9790615bbd565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006116a0338484614404565b600d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137a157600080fd5b505af11580156137b5573d6000803e3d6000fd5b50505050565b6009546001600160a01b036101009091041633146137eb5760405162461bcd60e51b8152600401610f9790615bbd565b6137f56015614242565b6138115760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b03909116600090815260336020526040902080549115156401000000000264ff0000000019909216919091179055565b600c5460009081906001600160a01b038681169116141561386b575060026138d8565b6001600160a01b038516600090815260336020526040902054610100900460ff16156138a65782601d541461389e575060025b5060006138d8565b6001600160a01b038416600090815260336020526040902054610100900460ff16156138d4575060016138d8565b5060025b949350505050565b6009546001600160a01b036101009091041633146139105760405162461bcd60e51b8152600401610f9790615bbd565b61391a6003614242565b6139365760405162461bcd60e51b8152600401610f9790615b7b565b60028111156139575760405162461bcd60e51b8152600401610f9790615b59565b601855565b6009546001600160a01b0361010090910416331461398c5760405162461bcd60e51b8152600401610f9790615bbd565b6139966008614242565b6139b25760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b03166000908152603360205260409020805465ff00000000001916600160281b179055565b6009546001600160a01b03610100909104163314613a0e5760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03811660009081526033602052604090205462010000900460ff16613a7c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f97565b6001600160a01b03811660009081526033602052604081206001015561162f600382615354565b6009546001600160a01b03610100909104163314613ad35760405162461bcd60e51b8152600401610f9790615bbd565b613add601f614242565b613af95760405162461bcd60e51b8152600401610f9790615b7b565b803b80613b3d5760405162461bcd60e51b81526020600482015260126024820152711b5d5cdd08189948184818dbdb9d1c9858dd60721b6044820152606401610f97565b50601080546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b03610100909104163314613b905760405162461bcd60e51b8152600401610f9790615bbd565b613b9a6019614242565b613bb65760405162461bcd60e51b8152600401610f9790615b7b565b60088054911515600160f01b0260ff60f01b19909216919091179055565b6009546001600160a01b03610100909104163314613c045760405162461bcd60e51b8152600401610f9790615bbd565b613c0e6017614242565b613c2a5760405162461bcd60e51b8152600401610f9790615b7b565b60088054911515600160e01b0260ff60e01b19909216919091179055565b6009546001600160a01b03610100909104163314613c785760405162461bcd60e51b8152600401610f9790615bbd565b613c826022614242565b613c9e5760405162461bcd60e51b8152600401610f9790615b7b565b602455565b6009546001600160a01b03610100909104163314613cd35760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60d81b198116600160d81b9182900460ff1615909102179055565b604051600081526001600160a01b038216908190600080516020615eb88339815191529060200160405180910390a350565b6009546001600160a01b03610100909104163314613d565760405162461bcd60e51b8152600401610f9790615bbd565b613d606018614242565b613d7c5760405162461bcd60e51b8152600401610f9790615b7b565b601755565b6009546001600160a01b03610100909104163314613db15760405162461bcd60e51b8152600401610f9790615bbd565b600e80546001600160a01b039093166001600160a01b03199093168317905560009182526033602052604090912080549115156101000261ff0019909216919091179055565b6009546001600160a01b03610100909104163314613e275760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b038116613e8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f97565b601180546001600160a01b0319166001600160a01b0392909216918217905560098054610100600160a81b031916610100909202919091179055565b6009546001600160a01b03610100909104163314613ef85760405162461bcd60e51b8152600401610f9790615bbd565b613f026021614242565b613f1e5760405162461bcd60e51b8152600401610f9790615b7b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b613f6460405180606001604052806000815260200160008152602001600081525090565b600080613f72888886613848565b9150613f7e8888611bce565b8684529050846140bc57600854600160a01b900460ff16156140bc576001826002811115613fae57613fae615e2f565b141561408f57600854600190600160f01b900460ff1661406f576001600160a01b038916600090815260336020526040812060050154613fee9042615d82565b905060175481101561406d5760186017546140099190615d4f565b81116140245760185461401d906003615d37565b915061406d565b60066017546140339190615d4f565b81116140475760185461401d906002615d37565b60026017546140569190615d4f565b811161406d5760185461406a906001615d37565b91505b505b806016548861407e9190615d4f565b6140889190615d63565b6040850152505b60008260028111156140a3576140a3615e2f565b14156140bc576016546140b69087615d4f565b60408401525b60408301516140cc906005615d63565b83516140d89190615d82565b6020840152955095509592505050565b6009546001600160a01b036101009091041633146141185760405162461bcd60e51b8152600401610f9790615bbd565b6141224282615d37565b60ff90921660009081526039602052604090209190915550565b6009546001600160a01b0361010090910416331461416c5760405162461bcd60e51b8152600401610f9790615bbd565b600854600160a01b900460ff16156141c65760405162461bcd60e51b815260206004820152601b60248201527f63616e2774207365742070726573616c65727320616e796d6f726500000000006044820152606401610f97565b60005b828110156137b55781603360008686858181106141e8576141e8615e5b565b90506020020160208101906141fd91906157b6565b6001600160a01b031681526020810191909152604001600020805491151563010000000263ff000000199092169190911790558061423a81615dd4565b9150506141c9565b60ff811660009081526039602052604081205442108061113f57505060ff166000908152603960205260409020541590565b6001600160a01b0383166142d65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f97565b6001600160a01b0382166143375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f97565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016123ef565b6000813b156143e15760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2074617267657420697320636f6e747261637400000000006044820152606401610f97565b506001600160a01b031673ccc2a0313ff6dea1181c537d9dc44b9d249807b11490565b60006001600160a01b03841661446a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f97565b6001600160a01b0383166144cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f97565b6000821161452e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f97565b6001600160a01b03831660009081526033602052604090206007015442116145905760405162461bcd60e51b81526020600482015260156024820152741cdd1a5b1b081a5b88189d5e481d1a5b594b5bdd5d605a1b6044820152606401610f97565b600061459a612a45565b600854909150600160a01b900460ff166146255760115473d152f549545093347a162dce210e7293f1452150906001600160a01b03878116911614806145e85750336001600160a01b038216145b6146235760405162461bcd60e51b815260206004820152600c60248201526b1cdd1a5b1b081c185d5cd95960a21b6044820152606401610f97565b505b600854600160b81b900460ff1661479a576001600160a01b0385166000908152603360205260409020546301000000900460ff1615156001141561479a5742601e54106146a85760405162461bcd60e51b81526020600482015260116024820152701cdd1a5b1b081d1a5b59481b1bd8dad959607a1b6044820152606401610f97565b600854600160f81b900460ff166147015760405162461bcd60e51b815260206004820152601a60248201527f70726573616c65727320617265207374696c6c206c6f636b65640000000000006044820152606401610f97565b60195461470d8661295d565b6147179190615d4f565b8311156147365760405162461bcd60e51b8152600401610f9790615b59565b6001600160a01b03851660009081526033602052604090206005015442906147619062015180615d37565b1061479a5760405162461bcd60e51b81526020600482015260096024820152681b5d5cdd081dd85a5d60ba1b6044820152606401610f97565b600d546001600160a01b03858116911614156148a3576147b985612f02565b6148a3576001600160a01b0385166000908152603360205260408120600301546147e4908390615d4f565b6001600160a01b038716600090815260336020526040902060040154909150811115614829576001600160a01b03861660009081526033602052604090206004018190555b601b546001600160a01b0387166000908152603360205260409020600401546148529190615d4f565b8411156148a15760405162461bcd60e51b815260206004820152601c60248201527f63616e27742064756d702074686174206d756368206174206f6e6365000000006044820152606401610f97565b505b600854600160d81b900460ff161561497c57600d546001600160a01b03868116911614806148f05750600d546001600160a01b038581169116148015906148f057506148ee84612f02565b155b1561497c57601a546030546149059190615d4f565b6001600160a01b038516600090815260336020526040902060030154849061492e908490615d4f565b6149389190615d37565b111561497c5760405162461bcd60e51b81526020600482015260136024820152721dda185b19481b1a5b5a5d081c995858da1959606a1b6044820152606401610f97565b600854600160e81b900460ff166149f0576001600160a01b038516600090815260336020526040902054600160281b900460ff16156149f05760405162461bcd60e51b815260206004820152601060248201526f39bab9b832b1ba32b21039b734b832b960811b6044820152606401610f97565b60215415801590614a02575060215442105b8015614a1b5750600d546001600160a01b038681169116145b15614a9757600d546001600160a01b03858116911614801590614a4c5750600c546001600160a01b03858116911614155b8015614a665750600e546001600160a01b03858116911614155b15614a97576001600160a01b0384166000908152603360205260409020805465ff00000000001916600160281b1790555b60095460ff1615614b45576001600160a01b0385166000908152603860209081526040808320602554845290915290205460ff1615614b45576028546001600160a01b038616600090815260376020908152604080832060255484529091529020544291614b0491615d37565b10614b455760405162461bcd60e51b815260206004820152601160248201527077616974696e6720666f72206c6f74746f60781b6044820152606401610f97565b6000614b4f6111e4565b90506000614b5d87876123fc565b90506000806000614b718a8a8a8789613f40565b92509250925084601d819055506000868460400151614b909190615d63565b600b546001600160a01b0316600090815260336020526040812060030180549293508392909190614bc2908490615d37565b9091555050600f546001600160a01b031660009081526033602052604081206003018054839290614bf4908490615d37565b90915550506012546001600160a01b031660009081526033602052604081206003018054839290614c26908490615d37565b9091555060019050836002811115614c4057614c40615e2f565b1415614def57600b5460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a3600f5460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a360125460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a3600854600160c81b900460ff16614d2257601354600f80546001600160a01b0319166001600160a01b039092169190911790555b6001600160a01b03808c166000908152603360205260409020426005820155600801541615614dc3576001600160a01b03808c166000908152603360205260408082206008015490921681529081206003018054839290614d84908490615d37565b9091555050604084810151905190815261dead906001600160a01b038d1690600080516020615eb88339815191529060200160405180910390a3615225565b61dead60009081526033602052600080516020615e988339815191528054839290614d84908490615d37565b6000836002811115614e0357614e03615e2f565b14156150f357600b5460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a3600f5460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a360125460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a3602b548910614ed657600f80546001600160a01b0319166001600160a01b038c161790555b6001600160a01b038a166000908152603360205260408120600301548a90614eff908a90615d4f565b614f099190615d37565b6001600160a01b038c16600090815260336020526040902060040154909150811115614f4e576001600160a01b038b1660009081526033602052604090206004018190555b602f548a10614fb457601280546001600160a01b0319166001600160a01b038d16908117909155602f8b905542602e8190556040519081527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b6001600160a01b038b81166000908152603360205260409020600801541615615067576001600160a01b03808c166000908152603360205260408082206008015490921681529081206003018054849290615010908490615d37565b90915550506001600160a01b03808c166000818152603360205260409081902060080154888201519151931692600080516020615eb88339815191529161505a9190815260200190565b60405180910390a36150ce565b61dead60009081526033602052600080516020615e988339815191528054849290615093908490615d37565b9091555050604085810151905190815261dead906001600160a01b038d1690600080516020615eb88339815191529060200160405180910390a35b506001600160a01b038a16600090815260336020526040902042600690910155615225565b600f80546001600160a01b03191661dead1790556001600160a01b038a166000908152603360205260408120600301548a90615130908a90615d4f565b61513a9190615d37565b600d549091506001600160a01b038d81169116148015906151695750600d546001600160a01b038c8116911614155b801561518f57506001600160a01b038b1660009081526033602052604090206004015481115b156151f2576001600160a01b03808c16600090815260336020526040808220600401849055918e16815220600301548a906151cb908a90615d4f565b6151d59190615d82565b6001600160a01b038d166000908152603360205260409020600401555b61dead60009081526033602052600080516020615e98833981519152805484929061521e908490615d37565b9091555050505b6012546001600160a01b038c81169116148061524f5750602a54602e5461524c9190615d37565b42115b156152a457601280546001600160a01b03191661dead9081179091556000602f556040514281527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b8360400151603260008282546152ba9190615d37565b909155505060408401516152cf908890615d63565b603160008282546152e09190615d82565b909155506152f390508b8b898786615369565b6002805484919061ff001916610100838381111561531357615313615e2f565b021790555060019b9a5050505050505050505050565b600061113f825490565b600061243b83836155de565b600061243b836001600160a01b038416615664565b600061243b836001600160a01b0384166156b3565b600181600381111561537d5761537d615e2f565b141561543d578151615390908490615d63565b6001600160a01b038616600090815260336020526040812060030180549091906153bb908490615d82565b90915550506020808301516001600160a01b03861660009081526033909252604082206001018054919290916153f2908490615d37565b90915550506020820151615407908490615d63565b6001600160a01b03851660009081526033602052604081206003018054909190615432908490615d37565b909155506155989050565b600081600381111561545157615451615e2f565b14156154c15781516001600160a01b03861660009081526033602052604081206001018054909190615484908490615d82565b90915550508151615496908490615d63565b6001600160a01b038616600090815260336020526040812060030180549091906153f2908490615d82565b60028160038111156154d5576154d5615e2f565b141561551a5781516001600160a01b03861660009081526033602052604081206001018054909190615508908490615d82565b90915550508151615390908490615d63565b8151615527908490615d63565b6001600160a01b03861660009081526033602052604081206003018054909190615552908490615d82565b90915550506020820151615567908490615d63565b6001600160a01b03851660009081526033602052604081206003018054909190615592908490615d37565b90915550505b836001600160a01b0316856001600160a01b0316600080516020615eb883398151915284602001516040516155cf91815260200190565b60405180910390a35050505050565b8154600090821061563c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f97565b82600001828154811061565157615651615e5b565b9060005260206000200154905092915050565b60008181526001830160205260408120546156ab5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561113f565b50600061113f565b600081815260018301602052604081205480156157965760006156d7600183615d82565b85549091506000906156eb90600190615d82565b9050600086600001828154811061570457615704615e5b565b906000526020600020015490508087600001848154811061572757615727615e5b565b60009182526020808320909101929092558281526001890190915260409020849055865487908061575a5761575a615e45565b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061113f565b600091505061113f565b803560ff811681146157b157600080fd5b919050565b6000602082840312156157c857600080fd5b813561243b81615e71565b6000602082840312156157e557600080fd5b815161243b81615e71565b6000806040838503121561580357600080fd5b823561580e81615e71565b9150602083013561581e81615e71565b809150509250929050565b60008060006060848603121561583e57600080fd5b833561584981615e71565b9250602084013561585981615e71565b929592945050506040919091013590565b600080600080600060a0868803121561588257600080fd5b853561588d81615e71565b9450602086013561589d81615e71565b93506040860135925060608601356158b481615e89565b949793965091946080013592915050565b600080604083850312156158d857600080fd5b82356158e381615e71565b9150602083013561581e81615e89565b6000806040838503121561590657600080fd5b823561591181615e71565b946020939093013593505050565b60008060006040848603121561593457600080fd5b833567ffffffffffffffff8082111561594c57600080fd5b818601915086601f83011261596057600080fd5b81358181111561596f57600080fd5b8760208260051b850101111561598457600080fd5b6020928301955093505084013561599a81615e89565b809150509250925092565b6000602082840312156159b757600080fd5b813561243b81615e89565b6000602082840312156159d457600080fd5b815161243b81615e89565b600080604083850312156159f257600080fd5b82356158e381615e89565b600060208284031215615a0f57600080fd5b5035919050565b600060208284031215615a2857600080fd5b5051919050565b600080600080600060a08688031215615a4757600080fd5b853594506020860135935060408601359250606086013591506080860135615a6e81615e89565b809150509295509295909350565b60008060408385031215615a8f57600080fd5b82359150615a9f602084016157a0565b90509250929050565b60008060408385031215615abb57600080fd5b615911836157a0565b60038110615ad457615ad4615e2f565b9052565b60048110615ad457615ad4615e2f565b6020810161113f8284615ac4565b6020810161113f8284615ad8565b600060208083528351808285015260005b81811015615b3157858101830151858201604001528201615b15565b81811115615b43576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152670e8dede40daeac6d60c31b604082015260600190565b6020808252600690820152651ada5b1b195960d21b604082015260600190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252602b908201527f4578636c75646564206164647265737365732063616e27742063616c6c20746860408201526a34b990333ab731ba34b7b760a91b606082015260800190565b8151151581526101c081016020830151615c4b602084018215159052565b506040830151615c5f604084018215159052565b506060830151615c73606084018215159052565b506080830151615c87608084018215159052565b5060a0830151615c9b60a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a0808401516001600160a01b03811682850152611c6e565b83518152602080850151908201526040808501519082015260a08101615d2a6060830185615ac4565b6138d86080830184615ad8565b60008219821115615d4a57615d4a615e03565b500190565b600082615d5e57615d5e615e19565b500490565b6000816000190483118215151615615d7d57615d7d615e03565b500290565b600082821015615d9457615d94615e03565b500390565b600181811c90821680615dad57607f821691505b60208210811415615dce57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615de857615de8615e03565b5060010190565b600082615dfe57615dfe615e19565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615e8657600080fd5b50565b8015158114615e8657600080fdfe797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122065599791157079486a45055f8c583f6a751cfd2f3e23c22444bcc3206ca0aab464736f6c63430008060033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106105ed5760003560e01c80637be4dba81161031b578063b5602dd6116101a8578063eb9c7326116100f4578063f6b3a7c1116100ad578063f9029ee311610087578063f9029ee314610d1f578063fa1aa9a414610d32578063fbcbc0f114610d3b578063ff6fb17d14610ea957600080fd5b8063f6b3a7c114610ce1578063f80311cc14610d03578063f8ded92614610d0c57600080fd5b8063eb9c732614610c83578063ee62225314610c8c578063efb6836414610c9f578063f2fde38b14610cb2578063f4a7ee7314610cc5578063f5a62e1914610cce57600080fd5b8063d5c0ff7011610161578063e0a3033a1161013b578063e0a3033a14610c41578063e5a6399414610c54578063e8c2818714610c68578063e8e28ce714610c7057600080fd5b8063d5c0ff7014610be2578063db10582714610bf5578063dd62ed3e14610c0857600080fd5b8063b5602dd614610b7a578063ba785bac14610b8d578063c867392814610ba0578063cd25220114610bb3578063d360af9214610bc6578063d4f26c5114610bcf57600080fd5b80639517689211610267578063a7ccabdf11610220578063ad7e01be116101fa578063ad7e01be14610b36578063ada8782e14610b3e578063b22cc3ee14610b47578063b4a6496614610b5a57600080fd5b8063a7ccabdf14610b07578063a9059cbb14610b1a578063acddcfc114610b2d57600080fd5b80639517689214610ab557806395d89b4114610ac85780639af1d35a14610ad05780639b43634814610ad9578063a457c2d714610ae1578063a5623e8714610af457600080fd5b806386bc79d4116102d45780638da5cb5b116102ae5780638da5cb5b14610a745780638ea496ad14610a8757806390b841ec14610a9a57806393198dfc14610aa257600080fd5b806386bc79d414610a3a57806389bb06fa14610a4d5780638d64ed0b14610a6157600080fd5b80637be4dba8146109a55780637f73b810146109b25780637f897f86146109c55780637fbe9ba614610a1557806382aa7c6814610a1e578063847d6d4c14610a3157600080fd5b8063366c3fe01161049957806359ef0781116103e55780636ef0f37f1161039e57806371ca337d1161037857806371ca337d146109795780637452b3bc1461098157806375c451a3146109895780637824407f1461099c57600080fd5b80636ef0f37f1461094b57806370a082311461095e578063715018a61461097157600080fd5b806359ef0781146108c357806362c02397146108d6578063644a92f3146108ff57806366a320cd146109125780636c6eb9d1146109255780636dd7d8ea1461093857600080fd5b806342966c68116104525780634eb277921161042c5780634eb27792146108775780634febf53d1461088a5780635039ca071461089d5780635812a267146108b057600080fd5b806342966c68146108485780634437152a1461085b5780634580ef361461086e57600080fd5b8063366c3fe0146107de57806339509351146107f15780633aa844df146108045780633d6e3bee1461080c5780633da4e52714610815578063412800081461082857600080fd5b80631e0e319011610558578063264cbb48116105115780632e4ab2f2116104eb5780632e4ab2f21461079a57806330af8896146107a3578063313ce567146107b65780633359b272146107cb57600080fd5b8063264cbb481461075757806327f84a231461076a5780632b112e491461077d57600080fd5b80631e0e3190146106ef5780631ec26e82146107025780631fb6edfc14610715578063219653511461072857806321ad189e1461073b57806323b872dd1461074457600080fd5b80630c3d29a2116105aa5780630c3d29a21461068f5780630f8cd083146106a557806311d4e30c146106ae578063139f994a146106c157806318160ddd146106d45780631c35a04e146106dc57600080fd5b8063026b1d5f146105f257806306fdde031461061c578063085d29701461063157806308f822f614610646578063095ea7b3146106595780630bff8a501461067c575b600080fd5b600d546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b610624610ed5565b6040516106139190615b04565b61064461063f3660046159fd565b610f67565b005b6106446106543660046159fd565b610fcb565b61066c6106673660046158f3565b61112e565b6040519015158152602001610613565b61064461068a3660046159fd565b611145565b6106976111e4565b604051908152602001610613565b61069760295481565b6106446106bc3660046159fd565b611266565b6106446106cf3660046157b6565b6112f1565b603054610697565b6106446106ea3660046158f3565b611358565b6106446106fd3660046159fd565b6113db565b6106446107103660046159a5565b61149f565b6106446107233660046157b6565b611557565b61066c6107363660046157b6565b611633565b610697602b5481565b61066c610752366004615829565b611657565b6106446107653660046159fd565b6116aa565b6106446107783660046159fd565b611799565b61078561183d565b60408051928352602083019190915201610613565b61069760315481565b6106446107b13660046159a5565b611914565b60025460405160ff9091168152602001610613565b6106446107d93660046157b6565b611962565b6106446107ec3660046158f3565b6119e1565b61066c6107ff3660046158f3565b611aeb565b610644611b22565b610697602f5481565b6106446108233660046159fd565b611b73565b61083b6108363660046157f0565b611bce565b6040516106139190615af6565b6106446108563660046159fd565b611c76565b6106446108693660046157b6565b611e3b565b610697602c5481565b6106446108853660046157b6565b611e8d565b6106446108983660046157b6565b6120b3565b6106446108ab3660046158c5565b6121d8565b6106446108be3660046159fd565b612297565b61066c6108d13660046157f0565b6123fc565b61064433600090815260336020526040902060080180546001600160a01b03191661dead179055565b61064461090d3660046158c5565b612442565b6106446109203660046159fd565b61249d565b6106446109333660046159fd565b6124f8565b6106446109463660046157b6565b612654565b6106446109593660046157b6565b612889565b61069761096c3660046157b6565b61295d565b6106446129ba565b610697612a45565b610644612a68565b6106446109973660046159fd565b612af1565b61069760305481565b60095461066c9060ff1681565b6106446109c03660046159fd565b612d14565b6109d86109d33660046157b6565b612d6f565b6040805197151588529515156020880152931515948601949094529015156060850152608084015260a083019190915260c082015260e001610613565b61069760255481565b610644610a2c3660046159fd565b612e23565b610697602a5481565b610644610a483660046159fd565b612e86565b60085461066c90600160f01b900460ff1681565b6013546105ff906001600160a01b031681565b6011546105ff906001600160a01b031681565b61066c610a953660046157b6565b612f02565b610644612f28565b610644610ab0366004615a7c565b6130fc565b610644610ac3366004615a2f565b613420565b6106246135db565b61069760325481565b6106446135ea565b61066c610aef3660046158f3565b613631565b610644610b023660046159df565b613668565b610644610b153660046157b6565b6136f2565b61066c610b283660046158f3565b613744565b61069760275481565b610644613751565b61069760285481565b610644610b553660046158c5565b6137bb565b610b6d610b68366004615829565b613848565b6040516106139190615ae8565b610644610b883660046159fd565b6138e0565b610644610b9b3660046157b6565b61395c565b610644610bae3660046157b6565b6139de565b6012546105ff906001600160a01b031681565b6105ff61dead81565b610644610bdd3660046157b6565b613aa3565b610644610bf03660046159a5565b613b60565b610644610c033660046159a5565b613bd4565b610697610c163660046157f0565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b610644610c4f3660046159fd565b613c48565b60085461066c90600160f81b900460ff1681565b610644613ca3565b610644610c7e3660046157b6565b613cf4565b61069760245481565b610644610c9a3660046159fd565b613d26565b610644610cad3660046158c5565b613d81565b610644610cc03660046157b6565b613df7565b610697602d5481565b610644610cdc3660046157b6565b613ec8565b610cf4610cef36600461586a565b613f40565b60405161061393929190615d01565b610697602e5481565b610644610d1a366004615aa8565b6140e8565b610644610d2d36600461591f565b61413c565b61069760265481565b610e9c610d493660046157b6565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152506001600160a01b0390811660009081526033602090815260409182902082516101c081018452815460ff8082161515835261010080830482161515958401959095526201000082048116151595830195909552630100000081048516151560608301526401000000008104851615156080830152600160281b9004909316151560a0840152600181015460c0840152600281015460e08401526003810154918301919091526004810154610120830152600581015461014083015260068101546101608301526007810154610180830152600801549091166101a082015290565b6040516106139190615c2d565b610697610eb73660046157b6565b6001600160a01b031660009081526033602052604090206004015490565b606060008054610ee490615d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090615d99565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b5050505050905090565b6009546001600160a01b03610100909104163314610fa05760405162461bcd60e51b8152600401610f9790615bbd565b60405180910390fd5b610faa601a614242565b610fc65760405162461bcd60e51b8152600401610f9790615b7b565b602a55565b6009546001600160a01b03610100909104163314610ffb5760405162461bcd60e51b8152600401610f9790615bbd565b611005600a614242565b6110215760405162461bcd60e51b8152600401610f9790615b7b565b600061102b612a45565b905060205442101561104f5760405162461bcd60e51b8152600401610f9790615b9b565b61dead6000526033602052600080516020615e9883398151915254600290611078908390615d4f565b6110829190615d4f565b8211156110a15760405162461bcd60e51b8152600401610f9790615b59565b6110ab8183615d63565b61dead60009081526033602052600080516020615e9883398151915280549091906110d7908490615d82565b909155506110e790508183615d63565b6010546001600160a01b031660009081526033602052604081206003018054909190611114908490615d37565b909155506111279050426203f480615d37565b6020555050565b600061113b338484614274565b5060015b92915050565b6009546001600160a01b036101009091041633146111755760405162461bcd60e51b8152600401610f9790615bbd565b60028110156111df5760405162461bcd60e51b815260206004820152603060248201527f70726573616c657320617265206e6576657220616c6c6f77656420746f20647560448201526f6d70206d6f7265207468616e2035302560801b6064820152608401610f97565b601955565b600d54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190615a16565b905090565b6009546001600160a01b036101009091041633146112965760405162461bcd60e51b8152600401610f9790615bbd565b601a5481111580156112a85750600081115b6112ec5760405162461bcd60e51b815260206004820152601560248201527431b0b713ba1039b2ba103634b6b4ba103637bbb2b960591b6044820152606401610f97565b601a55565b6009546001600160a01b036101009091041633146113215760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03166000908152603360209081526040808320805465ff0000000000191681556002018390556036909152812055565b6009546001600160a01b036101009091041633146113885760405162461bcd60e51b8152600401610f9790615bbd565b6113926006614242565b6113ae5760405162461bcd60e51b8152600401610f9790615b7b565b6113b88142615d37565b6001600160a01b0390921660009081526033602052604090206007019190915550565b6009546001600160a01b0361010090910416331461140b5760405162461bcd60e51b8152600401610f9790615bbd565b6201518081116114745760405162461bcd60e51b815260206004820152602e60248201527f6d7573742067697665206174206c6561737420323420686f757273206265666f60448201526d3932903634b8bab4b230ba34b7b760911b6064820152608401610f97565b61147e601d614242565b61149a5760405162461bcd60e51b8152600401610f9790615b7b565b603a55565b6009546001600160a01b036101009091041633146114cf5760405162461bcd60e51b8152600401610f9790615bbd565b42601e54106115395760405162461bcd60e51b815260206004820152603060248201527f63616e2774207475726e2074686973206f666620756e74696c206175746f6d6160448201526f3a32b2103637b1b59034b99037bb32b960811b6064820152608401610f97565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6115616007614242565b61157d5760405162461bcd60e51b8152600401610f9790615b7b565b6000611587612a45565b6001600160a01b0383166000908152603360205260409020600301546115ad9190615d4f565b90506115b833614390565b6115d25760095461010090046001600160a01b03166115d4565b815b60098054610100600160a81b0319166101006001600160a01b0393841602179055821660009081526033602052604090206004015481111561162f576001600160a01b03821660009081526033602052604090206004018190555b5050565b6001600160a01b031660009081526033602052604090205462010000900460ff1690565b6000611664848484614404565b506001600160a01b0384166000908152603460209081526040808320338085529252909120546116a091869161169b908690615d82565b614274565b5060019392505050565b3360006116b5612a45565b90506116c082611633565b156116dd5760405162461bcd60e51b8152600401610f9790615be2565b6001600160a01b0382166000908152603360205260409020600301546117038285615d63565b106117205760405162461bcd60e51b8152600401610f9790615b59565b61172a8184615d63565b6001600160a01b03831660009081526033602052604081206003018054909190611755908490615d82565b9091555061176590508184615d63565b603160008282546117769190615d82565b92505081905550826032600082825461178f9190615d37565b9091555050505050565b6009546001600160a01b036101009091041633146117c95760405162461bcd60e51b8152600401610f9790615bbd565b60328110156118125760405162461bcd60e51b815260206004820152601560248201527463616e2774206265206d6f7265207468616e20322560581b6044820152606401610f97565b61181c6016614242565b6118385760405162461bcd60e51b8152600401610f9790615b7b565b601655565b6031546030546000918291825b6118546003615329565b8110156118e3576000611868600383615333565b6001600160a01b03811660009081526033602052604090206003810154600190910154919250908582118061189c57508481115b156118b557603154603054975097505050505050509091565b6118bf8287615d82565b95506118cb8186615d82565b945050505080806118db90615dd4565b91505061184a565b506030546031546118f49190615d4f565b82101561190b576031546030549350935050509091565b90939092509050565b6009546001600160a01b036101009091041633146119445760405162461bcd60e51b8152600401610f9790615bbd565b60088054911515600160d01b0260ff60d01b19909216919091179055565b6001600160a01b0381163314156119af5760405162461bcd60e51b815260206004820152601160248201527031b0b713ba1039b2ba103a379039b2b63360791b6044820152606401610f97565b33600090815260336020526040902060080180546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b03610100909104163314611a115760405162461bcd60e51b8152600401610f9790615bbd565b611a1b6020614242565b611a375760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b038216301415611a605760405162461bcd60e51b8152600401610f9790615bbd565b60115460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b158015611aae57600080fd5b505af1158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae691906159c2565b505050565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909161113b91859061169b908690615d37565b6009546001600160a01b03610100909104163314611b525760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60e81b198116600160e81b9182900460ff1615909102179055565b6009546001600160a01b03610100909104163314611ba35760405162461bcd60e51b8152600401610f9790615bbd565b611bad6004614242565b611bc95760405162461bcd60e51b8152600401610f9790615b7b565b602355565b6001600160a01b03808316600090815260336020526040808220549284168252812054909160ff62010000918290048116929190910416818015611c10575080155b15611c1e5760009250611c6e565b81158015611c295750805b15611c375760019250611c6e565b81158015611c43575080155b15611c515760039250611c6e565b818015611c5b5750805b15611c695760029250611c6e565b600392505b505092915050565b6009546001600160a01b03610100909104163314611ca65760405162461bcd60e51b8152600401610f9790615bbd565b611cb06000614242565b611ccc5760405162461bcd60e51b8152600401610f9790615b7b565b6004811015611d1d5760405162461bcd60e51b815260206004820152601860248201527f63616e2774206275726e206d6f7265207468616e2032352500000000000000006044820152606401610f97565b6022544211611d3e5760405162461bcd60e51b8152600401610f9790615b9b565b600d546001600160a01b031660009081526033602052604081206003015490611d678383615d4f565b90506000611d73612a45565b611d7d9083615d4f565b600d546001600160a01b0316600090815260336020526040812060030180549293508492909190611daf908490615d82565b90915550506013546001600160a01b031660009081526033602052604081206003018054849290611de1908490615d37565b9091555050601354600d546040518381526001600160a01b039283169290911690600080516020615eb88339815191529060200160405180910390a3611e25613751565b602354611e329042615d37565b60225550505050565b6009546001600160a01b03610100909104163314611e6b5760405162461bcd60e51b8152600401610f9790615bbd565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611e976009614242565b611eb35760405162461bcd60e51b8152600401610f9790615b7b565b333b15611ef15760405162461bcd60e51b815260206004820152600c60248201526b736c6179657273206f6e6c7960a01b6044820152606401610f97565b603a546001600160a01b038216600090815260366020526040902054611f179190615d37565b42118015611f3c57506001600160a01b03811660009081526036602052604090205415155b611f745760405162461bcd60e51b81526020600482015260096024820152681b5d5cdd081dd85a5d60ba1b6044820152606401610f97565b6001600160a01b03811660009081526033602052604081206003018054919055611f9f600282615d4f565b61dead60009081526033602052600080516020615e988339815191528054909190611fcb908490615d37565b90915550611fdc9050600482615d4f565b60316000828254611fed9190615d82565b90915550611ffe9050601482615d4f565b3360009081526033602052604081206003018054909190612020908490615d37565b909155506120319050601482615d4f565b61203c600483615d4f565b6120469190615d82565b600b546001600160a01b031660009081526033602052604081206003018054909190612073908490615d37565b909155503390506001600160a01b038316600080516020615eb883398151915261209e601485615d4f565b60405190815260200160405180910390a35050565b6009546001600160a01b036101009091041633146120e35760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03811660009081526033602052604090205462010000900460ff16156121525760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f97565b6001600160a01b0381166000908152603360205260409020805462ff000019166201000017815560030154156121cd5761218a612a45565b6001600160a01b0382166000908152603360205260409020600301546121b09190615d4f565b6001600160a01b0382166000908152603360205260409020600101555b61162f60038261533f565b6009546001600160a01b036101009091041633146122085760405162461bcd60e51b8152600401610f9790615bbd565b600854600160a01b900460ff16156122625760405162461bcd60e51b815260206004820152601b60248201527f63616e2774207365742070726573616c65727320616e796d6f726500000000006044820152606401610f97565b6001600160a01b039091166000908152603360205260409020805491151563010000000263ff00000019909216919091179055565b3360006122a2612a45565b90506122ad82611633565b156122ca5760405162461bcd60e51b8152600401610f9790615be2565b6001600160a01b0382166000908152603360205260409020600301546122f08285615d63565b1061230d5760405162461bcd60e51b8152600401610f9790615b59565b6123178184615d63565b6001600160a01b03831660009081526033602052604081206003018054909190612342908490615d82565b9091555061235290508184615d63565b61dead60009081526033602052600080516020615e98833981519152805490919061237e908490615d37565b909155505061dead600090815260336020527f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15b80548592906123c1908490615d37565b909155506123cf9050613751565b60405183815261dead903090600080516020615eb8833981519152906020015b60405180910390a3505050565b6001600160a01b03821660009081526033602052604081205460ff168061243b57506001600160a01b03821660009081526033602052604090205460ff165b9392505050565b6009546001600160a01b036101009091041633146124725760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03919091166000908152603360205260409020805460ff1916911515919091179055565b6009546001600160a01b036101009091041633146124cd5760405162461bcd60e51b8152600401610f9790615bbd565b6124d7601b614242565b6124f35760405162461bcd60e51b8152600401610f9790615b7b565b602c55565b6009546001600160a01b036101009091041633146125285760405162461bcd60e51b8152600401610f9790615bbd565b6125326001614242565b61254e5760405162461bcd60e51b8152600401610f9790615b7b565b600481101561259f5760405162461bcd60e51b815260206004820152601a60248201527f63616e277420726562617365206d6f7265207468616e203235250000000000006044820152606401610f97565b60225442116125c05760405162461bcd60e51b8152600401610f9790615b9b565b61dead60009081526033602052600080516020615e98833981519152546125e8908390615d4f565b61dead60009081526033602052600080516020615e9883398151915280549293508392909190612619908490615d82565b9250508190555080603160008282546126329190615d82565b909155506126409050613751565b60235461264d9042615d37565b6022555050565b61265e601c614242565b61267a5760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b038116600090815260336020526040902054600160281b900460ff1615156001146126d45760405162461bcd60e51b815260206004820152600360248201526208589b60ea1b6044820152606401610f97565b333b1561271a5760405162461bcd60e51b81526020600482015260146024820152733a3434b99034b99030b73a34903137ba1039b2b960611b6044820152606401610f97565b602c5460305461272a9190615d4f565b6127333361295d565b10158061274a57506011546001600160a01b031633145b6127835760405162461bcd60e51b815260206004820152600a6024820152692163616e7420766f746560b01b6044820152606401610f97565b3360009081526035602090815260408083206001600160a01b038516845290915290205460ff16156127e75760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610f97565b6001600160a01b0381166000908152603360205260408120600201805460019290612813908490615d37565b9091555050602d546001600160a01b03821660009081526033602052604090206002015410612858576001600160a01b03811660009081526036602052604090204290555b3360009081526035602090815260408083206001600160a01b0394909416835292905220805460ff19166001179055565b6009546001600160a01b036101009091041633146128b95760405162461bcd60e51b8152600401610f9790615bbd565b6128c36005614242565b6128df5760405162461bcd60e51b8152600401610f9790615b7b565b600b80546001600160a01b03908116600090815260336020526040808220805460ff19908116909155845484168352818320805464ff000000001990811690915585549685166001600160a01b0319909716871786559583528183208054909116600117905592549091168152208054909116640100000000179055565b600061296882611633565b1561298c57506001600160a01b031660009081526033602052604090206001015490565b612994612a45565b6001600160a01b03831660009081526033602052604090206003015461113f9190615d4f565b6009546001600160a01b036101009091041633146129ea5760405162461bcd60e51b8152600401610f9790615bbd565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b031916905560098054610100600160a81b0319169055565b6000806000612a5261183d565b9092509050612a618183615d4f565b9250505090565b602a54602e54612a789042615d82565b1115612ad457601280546001600160a01b03191661dead9081179091556000602f5542602e8190556040519081527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b6012546001600160a01b031661dead1415612aef576000602f555b565b612afb600c614242565b612b175760405162461bcd60e51b8152600401610f9790615b7b565b6011546001600160a01b0316331480612b3a57506008546001600160a01b031633145b612b735760405162461bcd60e51b815260206004820152600a602482015269085c195c9b5a5d1d195960b21b6044820152606401610f97565b4260275410612bb05760405162461bcd60e51b815260206004820152600960248201526821646561646c696e6560b81b6044820152606401610f97565b6014805460009190612bc29084615def565b81548110612bd257612bd2615e5b565b6000918252602090912001546001600160a01b03169050612bf1612a45565b602654612bfe9190615d63565b6001600160a01b03821660009081526033602052604081206003018054909190612c29908490615d37565b90915550506026546040516001600160a01b038316917f83180aa4ac63459a0857ee4be800e29aa03c2426bdb949e15826b88ef0c668a291612c7391868252602082015260400190565b60405180910390a26013546026546040519081526001600160a01b03838116921690600080516020615eb88339815191529060200160405180910390a360005b601454811015612cfb5760148181548110612cd057612cd0615e5b565b600091825260209091200180546001600160a01b031916905580612cf381615dd4565b915050612cb3565b5050600060268190556009805460ff1916905560295550565b6009546001600160a01b03610100909104163314612d445760405162461bcd60e51b8152600401610f9790615bbd565b612d4e601e614242565b612d6a5760405162461bcd60e51b8152600401610f9790615b7b565b602b55565b6001600160a01b0381166000908152603360205260408120805460029091015482918291829182918291829160ff808316926201000081048216926401000000008204831692600160281b90920490911690612dc9612a45565b6001600160a01b038e16600090815260336020526040902060030154612def9190615d4f565b6001600160a01b039d909d16600090815260336020526040902060050154949d939c929b5090995097509550909350915050565b6009546001600160a01b03610100909104163314612e535760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60a01b1916600160a01b179055612e734262054600615d37565b601e55612e808142615d37565b60215550565b6009546001600160a01b03610100909104163314612eb65760405162461bcd60e51b8152600401610f9790615bbd565b6005811115612ed75760405162461bcd60e51b8152600401610f9790615b59565b612ee16014614242565b612efd5760405162461bcd60e51b8152600401610f9790615b7b565b601b55565b6001600160a01b0316600090815260336020526040902054640100000000900460ff1690565b60095460ff16612f715760405162461bcd60e51b81526020600482015260146024820152736c6f74746f206973206e6f742072756e6e696e6760601b6044820152606401610f97565b336000908152603860209081526040808320602554845290915290205460ff1615612fd05760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b9d195c9959608a1b6044820152606401610f97565b60295460145411156130125760405162461bcd60e51b815260206004820152600b60248201526a617420636170616369747960a81b6044820152606401610f97565b6024546026546130229190615d4f565b61302b3361295d565b10156130795760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f75676820746f6b656e7320746f20656e7465720000000000006044820152606401610f97565b33600081815260376020908152604080832060258054855290835281842042905584845260388352818420905484529091528120805460ff191660019081179091556014805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319169091179055565b6011546001600160a01b031633148061311f57506007546001600160a01b031633145b61313b5760405162461bcd60e51b8152600401610f9790615bbd565b600854600160d01b900460ff166131855760405162461bcd60e51b815260206004820152600e60248201526d6e6674206e6f742061637469766560901b6044820152606401610f97565b61318f6002614242565b6131ab5760405162461bcd60e51b8152600401610f9790615b7b565b6007546040805163658ba96160e01b815290516000926001600160a01b03169163658ba961916004808301926020929190829003018186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132289190615a16565b905060006132368285615d4f565b90506000613242612a45565b905060006132508287615d63565b9050600060ff86166132635750336132a4565b8560ff1660011415613278575061dead6132a4565b8560ff16600214156132965750600d546001600160a01b03166132a4565b50600b546001600160a01b03165b6001600160a01b03811660009081526033602052604090206003015482106132de5760405162461bcd60e51b8152600401610f9790615b59565b6001600160a01b03811660009081526033602052604081206003018054849290613309908490615d82565b90915550600090505b8581101561341657600754604051627df2a560e71b8152600481018390526000916001600160a01b031690633ef952809060240160206040518083038186803b15801561335e57600080fd5b505afa158015613372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339691906157d3565b6001600160a01b0381166000908152603360205260408120600301805492935088929091906133c6908490615d37565b90915550506001600160a01b03808216908416600080516020615eb88339815191526133f2888a615d4f565b60405190815260200160405180910390a3508061340e81615dd4565b915050613312565b5050505050505050565b61342a600b614242565b6134465760405162461bcd60e51b8152600401610f9790615b7b565b6011546001600160a01b031633148061346957506008546001600160a01b031633145b6134a25760405162461bcd60e51b815260206004820152600a602482015269085c195c9b5a5d1d195960b21b6044820152606401610f97565b60c884111580156134b45750600a8410155b6134eb5760405162461bcd60e51b815260206004820152600860248201526703e3130203c3230360c41b6044820152606401610f97565b62093a8082111580156134fe5750818310155b6135355760405162461bcd60e51b8152602060048201526008602482015267746f6f206c6f6e6760c01b6044820152606401610f97565b6025805490600061354583615dd4565b91905055506000816135595761dead613566565b600b546001600160a01b03165b9050613570612a45565b61357a9087615d63565b6001600160a01b038216600090815260336020526040812060030180549091906135a5908490615d82565b909155505060268690556009805460ff19166001179055602985905560288390556135d08442615d37565b602755505050505050565b606060018054610ee490615d99565b6009546001600160a01b0361010090910416331461361a5760405162461bcd60e51b8152600401610f9790615bbd565b600880546001600160f81b0316600160f81b179055565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909161113b91859061169b908690615d82565b6009546001600160a01b036101009091041633146136985760405162461bcd60e51b8152600401610f9790615bbd565b816136ae57600b546001600160a01b03166136b2565b61dead5b601380546001600160a01b0319166001600160a01b03929092169190911790556008805460ff60c81b1916600160c81b9215159290920291909117905550565b6009546001600160a01b036101009091041633146137225760405162461bcd60e51b8152600401610f9790615bbd565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006116a0338484614404565b600d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137a157600080fd5b505af11580156137b5573d6000803e3d6000fd5b50505050565b6009546001600160a01b036101009091041633146137eb5760405162461bcd60e51b8152600401610f9790615bbd565b6137f56015614242565b6138115760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b03909116600090815260336020526040902080549115156401000000000264ff0000000019909216919091179055565b600c5460009081906001600160a01b038681169116141561386b575060026138d8565b6001600160a01b038516600090815260336020526040902054610100900460ff16156138a65782601d541461389e575060025b5060006138d8565b6001600160a01b038416600090815260336020526040902054610100900460ff16156138d4575060016138d8565b5060025b949350505050565b6009546001600160a01b036101009091041633146139105760405162461bcd60e51b8152600401610f9790615bbd565b61391a6003614242565b6139365760405162461bcd60e51b8152600401610f9790615b7b565b60028111156139575760405162461bcd60e51b8152600401610f9790615b59565b601855565b6009546001600160a01b0361010090910416331461398c5760405162461bcd60e51b8152600401610f9790615bbd565b6139966008614242565b6139b25760405162461bcd60e51b8152600401610f9790615b7b565b6001600160a01b03166000908152603360205260409020805465ff00000000001916600160281b179055565b6009546001600160a01b03610100909104163314613a0e5760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b03811660009081526033602052604090205462010000900460ff16613a7c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f97565b6001600160a01b03811660009081526033602052604081206001015561162f600382615354565b6009546001600160a01b03610100909104163314613ad35760405162461bcd60e51b8152600401610f9790615bbd565b613add601f614242565b613af95760405162461bcd60e51b8152600401610f9790615b7b565b803b80613b3d5760405162461bcd60e51b81526020600482015260126024820152711b5d5cdd08189948184818dbdb9d1c9858dd60721b6044820152606401610f97565b50601080546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b03610100909104163314613b905760405162461bcd60e51b8152600401610f9790615bbd565b613b9a6019614242565b613bb65760405162461bcd60e51b8152600401610f9790615b7b565b60088054911515600160f01b0260ff60f01b19909216919091179055565b6009546001600160a01b03610100909104163314613c045760405162461bcd60e51b8152600401610f9790615bbd565b613c0e6017614242565b613c2a5760405162461bcd60e51b8152600401610f9790615b7b565b60088054911515600160e01b0260ff60e01b19909216919091179055565b6009546001600160a01b03610100909104163314613c785760405162461bcd60e51b8152600401610f9790615bbd565b613c826022614242565b613c9e5760405162461bcd60e51b8152600401610f9790615b7b565b602455565b6009546001600160a01b03610100909104163314613cd35760405162461bcd60e51b8152600401610f9790615bbd565b6008805460ff60d81b198116600160d81b9182900460ff1615909102179055565b604051600081526001600160a01b038216908190600080516020615eb88339815191529060200160405180910390a350565b6009546001600160a01b03610100909104163314613d565760405162461bcd60e51b8152600401610f9790615bbd565b613d606018614242565b613d7c5760405162461bcd60e51b8152600401610f9790615b7b565b601755565b6009546001600160a01b03610100909104163314613db15760405162461bcd60e51b8152600401610f9790615bbd565b600e80546001600160a01b039093166001600160a01b03199093168317905560009182526033602052604090912080549115156101000261ff0019909216919091179055565b6009546001600160a01b03610100909104163314613e275760405162461bcd60e51b8152600401610f9790615bbd565b6001600160a01b038116613e8c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f97565b601180546001600160a01b0319166001600160a01b0392909216918217905560098054610100600160a81b031916610100909202919091179055565b6009546001600160a01b03610100909104163314613ef85760405162461bcd60e51b8152600401610f9790615bbd565b613f026021614242565b613f1e5760405162461bcd60e51b8152600401610f9790615b7b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b613f6460405180606001604052806000815260200160008152602001600081525090565b600080613f72888886613848565b9150613f7e8888611bce565b8684529050846140bc57600854600160a01b900460ff16156140bc576001826002811115613fae57613fae615e2f565b141561408f57600854600190600160f01b900460ff1661406f576001600160a01b038916600090815260336020526040812060050154613fee9042615d82565b905060175481101561406d5760186017546140099190615d4f565b81116140245760185461401d906003615d37565b915061406d565b60066017546140339190615d4f565b81116140475760185461401d906002615d37565b60026017546140569190615d4f565b811161406d5760185461406a906001615d37565b91505b505b806016548861407e9190615d4f565b6140889190615d63565b6040850152505b60008260028111156140a3576140a3615e2f565b14156140bc576016546140b69087615d4f565b60408401525b60408301516140cc906005615d63565b83516140d89190615d82565b6020840152955095509592505050565b6009546001600160a01b036101009091041633146141185760405162461bcd60e51b8152600401610f9790615bbd565b6141224282615d37565b60ff90921660009081526039602052604090209190915550565b6009546001600160a01b0361010090910416331461416c5760405162461bcd60e51b8152600401610f9790615bbd565b600854600160a01b900460ff16156141c65760405162461bcd60e51b815260206004820152601b60248201527f63616e2774207365742070726573616c65727320616e796d6f726500000000006044820152606401610f97565b60005b828110156137b55781603360008686858181106141e8576141e8615e5b565b90506020020160208101906141fd91906157b6565b6001600160a01b031681526020810191909152604001600020805491151563010000000263ff000000199092169190911790558061423a81615dd4565b9150506141c9565b60ff811660009081526039602052604081205442108061113f57505060ff166000908152603960205260409020541590565b6001600160a01b0383166142d65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f97565b6001600160a01b0382166143375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f97565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016123ef565b6000813b156143e15760405162461bcd60e51b815260206004820152601b60248201527f416464726573733a2074617267657420697320636f6e747261637400000000006044820152606401610f97565b506001600160a01b031673ccc2a0313ff6dea1181c537d9dc44b9d249807b11490565b60006001600160a01b03841661446a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f97565b6001600160a01b0383166144cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f97565b6000821161452e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f97565b6001600160a01b03831660009081526033602052604090206007015442116145905760405162461bcd60e51b81526020600482015260156024820152741cdd1a5b1b081a5b88189d5e481d1a5b594b5bdd5d605a1b6044820152606401610f97565b600061459a612a45565b600854909150600160a01b900460ff166146255760115473d152f549545093347a162dce210e7293f1452150906001600160a01b03878116911614806145e85750336001600160a01b038216145b6146235760405162461bcd60e51b815260206004820152600c60248201526b1cdd1a5b1b081c185d5cd95960a21b6044820152606401610f97565b505b600854600160b81b900460ff1661479a576001600160a01b0385166000908152603360205260409020546301000000900460ff1615156001141561479a5742601e54106146a85760405162461bcd60e51b81526020600482015260116024820152701cdd1a5b1b081d1a5b59481b1bd8dad959607a1b6044820152606401610f97565b600854600160f81b900460ff166147015760405162461bcd60e51b815260206004820152601a60248201527f70726573616c65727320617265207374696c6c206c6f636b65640000000000006044820152606401610f97565b60195461470d8661295d565b6147179190615d4f565b8311156147365760405162461bcd60e51b8152600401610f9790615b59565b6001600160a01b03851660009081526033602052604090206005015442906147619062015180615d37565b1061479a5760405162461bcd60e51b81526020600482015260096024820152681b5d5cdd081dd85a5d60ba1b6044820152606401610f97565b600d546001600160a01b03858116911614156148a3576147b985612f02565b6148a3576001600160a01b0385166000908152603360205260408120600301546147e4908390615d4f565b6001600160a01b038716600090815260336020526040902060040154909150811115614829576001600160a01b03861660009081526033602052604090206004018190555b601b546001600160a01b0387166000908152603360205260409020600401546148529190615d4f565b8411156148a15760405162461bcd60e51b815260206004820152601c60248201527f63616e27742064756d702074686174206d756368206174206f6e6365000000006044820152606401610f97565b505b600854600160d81b900460ff161561497c57600d546001600160a01b03868116911614806148f05750600d546001600160a01b038581169116148015906148f057506148ee84612f02565b155b1561497c57601a546030546149059190615d4f565b6001600160a01b038516600090815260336020526040902060030154849061492e908490615d4f565b6149389190615d37565b111561497c5760405162461bcd60e51b81526020600482015260136024820152721dda185b19481b1a5b5a5d081c995858da1959606a1b6044820152606401610f97565b600854600160e81b900460ff166149f0576001600160a01b038516600090815260336020526040902054600160281b900460ff16156149f05760405162461bcd60e51b815260206004820152601060248201526f39bab9b832b1ba32b21039b734b832b960811b6044820152606401610f97565b60215415801590614a02575060215442105b8015614a1b5750600d546001600160a01b038681169116145b15614a9757600d546001600160a01b03858116911614801590614a4c5750600c546001600160a01b03858116911614155b8015614a665750600e546001600160a01b03858116911614155b15614a97576001600160a01b0384166000908152603360205260409020805465ff00000000001916600160281b1790555b60095460ff1615614b45576001600160a01b0385166000908152603860209081526040808320602554845290915290205460ff1615614b45576028546001600160a01b038616600090815260376020908152604080832060255484529091529020544291614b0491615d37565b10614b455760405162461bcd60e51b815260206004820152601160248201527077616974696e6720666f72206c6f74746f60781b6044820152606401610f97565b6000614b4f6111e4565b90506000614b5d87876123fc565b90506000806000614b718a8a8a8789613f40565b92509250925084601d819055506000868460400151614b909190615d63565b600b546001600160a01b0316600090815260336020526040812060030180549293508392909190614bc2908490615d37565b9091555050600f546001600160a01b031660009081526033602052604081206003018054839290614bf4908490615d37565b90915550506012546001600160a01b031660009081526033602052604081206003018054839290614c26908490615d37565b9091555060019050836002811115614c4057614c40615e2f565b1415614def57600b5460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a3600f5460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a360125460408581015190519081526001600160a01b03918216918d1690600080516020615eb88339815191529060200160405180910390a3600854600160c81b900460ff16614d2257601354600f80546001600160a01b0319166001600160a01b039092169190911790555b6001600160a01b03808c166000908152603360205260409020426005820155600801541615614dc3576001600160a01b03808c166000908152603360205260408082206008015490921681529081206003018054839290614d84908490615d37565b9091555050604084810151905190815261dead906001600160a01b038d1690600080516020615eb88339815191529060200160405180910390a3615225565b61dead60009081526033602052600080516020615e988339815191528054839290614d84908490615d37565b6000836002811115614e0357614e03615e2f565b14156150f357600b5460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a3600f5460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a360125460408581015190519081526001600160a01b03918216918c1690600080516020615eb88339815191529060200160405180910390a3602b548910614ed657600f80546001600160a01b0319166001600160a01b038c161790555b6001600160a01b038a166000908152603360205260408120600301548a90614eff908a90615d4f565b614f099190615d37565b6001600160a01b038c16600090815260336020526040902060040154909150811115614f4e576001600160a01b038b1660009081526033602052604090206004018190555b602f548a10614fb457601280546001600160a01b0319166001600160a01b038d16908117909155602f8b905542602e8190556040519081527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b6001600160a01b038b81166000908152603360205260409020600801541615615067576001600160a01b03808c166000908152603360205260408082206008015490921681529081206003018054849290615010908490615d37565b90915550506001600160a01b03808c166000818152603360205260409081902060080154888201519151931692600080516020615eb88339815191529161505a9190815260200190565b60405180910390a36150ce565b61dead60009081526033602052600080516020615e988339815191528054849290615093908490615d37565b9091555050604085810151905190815261dead906001600160a01b038d1690600080516020615eb88339815191529060200160405180910390a35b506001600160a01b038a16600090815260336020526040902042600690910155615225565b600f80546001600160a01b03191661dead1790556001600160a01b038a166000908152603360205260408120600301548a90615130908a90615d4f565b61513a9190615d37565b600d549091506001600160a01b038d81169116148015906151695750600d546001600160a01b038c8116911614155b801561518f57506001600160a01b038b1660009081526033602052604090206004015481115b156151f2576001600160a01b03808c16600090815260336020526040808220600401849055918e16815220600301548a906151cb908a90615d4f565b6151d59190615d82565b6001600160a01b038d166000908152603360205260409020600401555b61dead60009081526033602052600080516020615e98833981519152805484929061521e908490615d37565b9091555050505b6012546001600160a01b038c81169116148061524f5750602a54602e5461524c9190615d37565b42115b156152a457601280546001600160a01b03191661dead9081179091556000602f556040514281527fcb2c905a66a695cd7d34279033a7e3dae99796366e85a006aa4a2da4d167905c9060200160405180910390a25b8360400151603260008282546152ba9190615d37565b909155505060408401516152cf908890615d63565b603160008282546152e09190615d82565b909155506152f390508b8b898786615369565b6002805484919061ff001916610100838381111561531357615313615e2f565b021790555060019b9a5050505050505050505050565b600061113f825490565b600061243b83836155de565b600061243b836001600160a01b038416615664565b600061243b836001600160a01b0384166156b3565b600181600381111561537d5761537d615e2f565b141561543d578151615390908490615d63565b6001600160a01b038616600090815260336020526040812060030180549091906153bb908490615d82565b90915550506020808301516001600160a01b03861660009081526033909252604082206001018054919290916153f2908490615d37565b90915550506020820151615407908490615d63565b6001600160a01b03851660009081526033602052604081206003018054909190615432908490615d37565b909155506155989050565b600081600381111561545157615451615e2f565b14156154c15781516001600160a01b03861660009081526033602052604081206001018054909190615484908490615d82565b90915550508151615496908490615d63565b6001600160a01b038616600090815260336020526040812060030180549091906153f2908490615d82565b60028160038111156154d5576154d5615e2f565b141561551a5781516001600160a01b03861660009081526033602052604081206001018054909190615508908490615d82565b90915550508151615390908490615d63565b8151615527908490615d63565b6001600160a01b03861660009081526033602052604081206003018054909190615552908490615d82565b90915550506020820151615567908490615d63565b6001600160a01b03851660009081526033602052604081206003018054909190615592908490615d37565b90915550505b836001600160a01b0316856001600160a01b0316600080516020615eb883398151915284602001516040516155cf91815260200190565b60405180910390a35050505050565b8154600090821061563c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610f97565b82600001828154811061565157615651615e5b565b9060005260206000200154905092915050565b60008181526001830160205260408120546156ab5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561113f565b50600061113f565b600081815260018301602052604081205480156157965760006156d7600183615d82565b85549091506000906156eb90600190615d82565b9050600086600001828154811061570457615704615e5b565b906000526020600020015490508087600001848154811061572757615727615e5b565b60009182526020808320909101929092558281526001890190915260409020849055865487908061575a5761575a615e45565b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061113f565b600091505061113f565b803560ff811681146157b157600080fd5b919050565b6000602082840312156157c857600080fd5b813561243b81615e71565b6000602082840312156157e557600080fd5b815161243b81615e71565b6000806040838503121561580357600080fd5b823561580e81615e71565b9150602083013561581e81615e71565b809150509250929050565b60008060006060848603121561583e57600080fd5b833561584981615e71565b9250602084013561585981615e71565b929592945050506040919091013590565b600080600080600060a0868803121561588257600080fd5b853561588d81615e71565b9450602086013561589d81615e71565b93506040860135925060608601356158b481615e89565b949793965091946080013592915050565b600080604083850312156158d857600080fd5b82356158e381615e71565b9150602083013561581e81615e89565b6000806040838503121561590657600080fd5b823561591181615e71565b946020939093013593505050565b60008060006040848603121561593457600080fd5b833567ffffffffffffffff8082111561594c57600080fd5b818601915086601f83011261596057600080fd5b81358181111561596f57600080fd5b8760208260051b850101111561598457600080fd5b6020928301955093505084013561599a81615e89565b809150509250925092565b6000602082840312156159b757600080fd5b813561243b81615e89565b6000602082840312156159d457600080fd5b815161243b81615e89565b600080604083850312156159f257600080fd5b82356158e381615e89565b600060208284031215615a0f57600080fd5b5035919050565b600060208284031215615a2857600080fd5b5051919050565b600080600080600060a08688031215615a4757600080fd5b853594506020860135935060408601359250606086013591506080860135615a6e81615e89565b809150509295509295909350565b60008060408385031215615a8f57600080fd5b82359150615a9f602084016157a0565b90509250929050565b60008060408385031215615abb57600080fd5b615911836157a0565b60038110615ad457615ad4615e2f565b9052565b60048110615ad457615ad4615e2f565b6020810161113f8284615ac4565b6020810161113f8284615ad8565b600060208083528351808285015260005b81811015615b3157858101830151858201604001528201615b15565b81811115615b43576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152670e8dede40daeac6d60c31b604082015260600190565b6020808252600690820152651ada5b1b195960d21b604082015260600190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b6020808252602b908201527f4578636c75646564206164647265737365732063616e27742063616c6c20746860408201526a34b990333ab731ba34b7b760a91b606082015260800190565b8151151581526101c081016020830151615c4b602084018215159052565b506040830151615c5f604084018215159052565b506060830151615c73606084018215159052565b506080830151615c87608084018215159052565b5060a0830151615c9b60a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a0808401516001600160a01b03811682850152611c6e565b83518152602080850151908201526040808501519082015260a08101615d2a6060830185615ac4565b6138d86080830184615ad8565b60008219821115615d4a57615d4a615e03565b500190565b600082615d5e57615d5e615e19565b500490565b6000816000190483118215151615615d7d57615d7d615e03565b500290565b600082821015615d9457615d94615e03565b500390565b600181811c90821680615dad57607f821691505b60208210811415615dce57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615de857615de8615e03565b5060010190565b600082615dfe57615dfe615e19565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114615e8657600080fd5b50565b8015158114615e8657600080fdfe797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122065599791157079486a45055f8c583f6a751cfd2f3e23c22444bcc3206ca0aab464736f6c63430008060033

Deployed Bytecode Sourcemap

26049:35778:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44691:79;44757:5;;-1:-1:-1;;;;;44757:5:0;44691:79;;;-1:-1:-1;;;;;6599:32:1;;;6581:51;;6569:2;6554:18;44691:79:0;;;;;;;;30614:82;;;:::i;:::-;;;;;;;:::i;52144:151::-;;;;;;:::i;:::-;;:::i;:::-;;56937:427;;;;;;:::i;:::-;;:::i;31277:161::-;;;;;;:::i;:::-;;:::i;:::-;;;7087:14:1;;7080:22;7062:41;;7050:2;7035:18;31277:161:0;7017:92:1;50165:185:0;;;;;;:::i;:::-;;:::i;43098:109::-;;;:::i;:::-;;;8334:25:1;;;8322:2;8307:18;43098:109:0;8289:76:1;28665:25:0;;;;;;50481:185;;;;;;:::i;:::-;;:::i;48810:187::-;;;;;;:::i;:::-;;:::i;32250:99::-;32330:11;;32250:99;;51643:199;;;;;;:::i;:::-;;:::i;54168:255::-;;;;;;:::i;:::-;;:::i;52534:220::-;;;;;;:::i;:::-;;:::i;52849:294::-;;;;;;:::i;:::-;;:::i;42974:116::-;;;;;;:::i;:::-;;:::i;28737:52::-;;;;;;32533:266;;;;;;:::i;:::-;;:::i;58560:417::-;;;;;;:::i;:::-;;:::i;50839:174::-;;;;;;:::i;:::-;;:::i;43957:726::-;;;:::i;:::-;;;;28324:25:1;;;28380:2;28365:18;;28358:34;;;;28297:18;43957:726:0;28279:119:1;28984:28:0;;;;;;55283:84;;;;;;:::i;:::-;;:::i;30704:82::-;30769:9;;30704:82;;30769:9;;;;28545:36:1;;28533:2;28518:18;30704:82:0;28500:87:1;57552:165:0;;;;;;:::i;:::-;;:::i;59051:269::-;;;;;;:::i;:::-;;:::i;31794:214::-;;;;;;:::i;:::-;;:::i;56607:112::-;;;:::i;28917:27::-;;;;;;50674:157;;;;;;:::i;:::-;;:::i;44778:749::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45797:585::-;;;;;;:::i;:::-;;:::i;52445:81::-;;;;;;:::i;:::-;;:::i;28796:38::-;;;;;;54583:578;;;;;;:::i;:::-;;:::i;48190:369::-;;;;;;:::i;:::-;;:::i;49525:164::-;;;;;;:::i;:::-;;:::i;55774:518::-;;;;;;:::i;:::-;;:::i;41862:163::-;;;;;;:::i;:::-;;:::i;57725:97::-;;57780:10;57771:20;;;;:8;:20;;;;;:32;;:43;;-1:-1:-1;;;;;;57771:43:0;26169:42;57771:43;;;57725:97;49387:130;;;;;;:::i;:::-;;:::i;53357:171::-;;;;;;:::i;:::-;;:::i;46390:461::-;;;;;;:::i;:::-;;:::i;53536:584::-;;;;;;:::i;:::-;;:::i;51288:302::-;;;;;;:::i;:::-;;:::i;31041:228::-;;;;;;:::i;:::-;;:::i;57869:172::-;;;:::i;45535:135::-;;;:::i;58051:361::-;;;:::i;60851:672::-;;;;;;:::i;:::-;;:::i;28951:26::-;;;;;;27554;;;;;;;;;54431:144;;;;;;:::i;:::-;;:::i;42307:659::-;;;;;;:::i;:::-;;:::i;:::-;;;;7430:14:1;;7423:22;7405:41;;7489:14;;7482:22;7477:2;7462:18;;7455:50;7548:14;;7541:22;7521:18;;;7514:50;;;;7607:14;;7600:22;7595:2;7580:18;;7573:50;7654:3;7639:19;;7632:35;7698:3;7683:19;;7676:35;;;;7742:3;7727:19;;7720:35;7392:3;7377:19;42307:659:0;7359:402:1;28530:25:0;;;;;;47960:221;;;;;;:::i;:::-;;:::i;28697:33::-;;;;;;49005:184;;;;;;:::i;:::-;;:::i;27482:26::-;;;;;-1:-1:-1;;;27482:26:0;;;;;;27873:40;;;;;-1:-1:-1;;;;;27873:40:0;;;27814:20;;;;;-1:-1:-1;;;;;27814:20:0;;;42055:118;;;;;;:::i;:::-;;:::i;59682:476::-;;;:::i;46859:1030::-;;;;;;:::i;:::-;;:::i;60166:679::-;;;;;;:::i;:::-;;:::i;30794:87::-;;;:::i;29019:19::-;;;;;;51188:92;;;:::i;32016:226::-;;;;;;:::i;:::-;;:::i;56409:190::-;;;;;;:::i;:::-;;:::i;55171:104::-;;;;;;:::i;:::-;;:::i;32357:168::-;;;;;;:::i;:::-;;:::i;28595:28::-;;;;;;45678:75;;;:::i;28630:28::-;;;;;;49974:181;;;;;;:::i;:::-;;:::i;43338:611::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49197:182::-;;;;;;:::i;:::-;;:::i;53151:198::-;;;;;;:::i;:::-;;:::i;48567:235::-;;;;;;:::i;:::-;;:::i;27841:25::-;;;;;-1:-1:-1;;;;;27841:25:0;;;26126:86;;26169:42;26126:86;;55375:266;;;;;;:::i;:::-;;:::i;51996:140::-;;;;;;:::i;:::-;;:::i;51021:143::-;;;;;;:::i;:::-;;:::i;30889:144::-;;;;;;:::i;:::-;-1:-1:-1;;;;;30998:18:0;;;30971:7;30998:18;;;:10;:18;;;;;;;;:27;;;;;;;;;;;;;30889:144;61671:151;;;;;;:::i;:::-;;:::i;27515:32::-;;;;;-1:-1:-1;;;27515:32:0;;;;;;56300:101;;;:::i;57453:91::-;;;;;;:::i;:::-;;:::i;28483:40::-;;;;;;51852:136;;;;;;:::i;:::-;;:::i;52303:134::-;;;;;;:::i;:::-;;:::i;56727:202::-;;;;;;:::i;:::-;;:::i;28848:29::-;;;;;;61531:132;;;;;;:::i;:::-;;:::i;38927:1668::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;28884:26::-;;;;;;59328:155;;;;;;:::i;:::-;;:::i;49697:269::-;;;;;;:::i;:::-;;:::i;28562:26::-;;;;;;42181:118;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42274:17:0;;;;;;;:8;:17;;;;;;;;;42267:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42267:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42181:118;;;;;;;;:::i;43215:115::-;;;;;;:::i;:::-;-1:-1:-1;;;;;43298:17:0;43271:7;43298:17;;;:8;:17;;;;;:24;;;;43215:115;30614:82;30650:13;30683:5;30676:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30614:82;:::o;52144:151::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;;;;;;;;;52226:15:::1;52238:2;52226:11;:15::i;:::-;52218:34;;;;-1:-1:-1::0;;;52218:34:0::1;;;;;;;:::i;:::-;52263:18;:24:::0;52144:151::o;56937:427::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;57015:15:::1;57027:2;57015:11;:15::i;:::-;57007:34;;;;-1:-1:-1::0;;;57007:34:0::1;;;;;;;:::i;:::-;57052:9;57064:7;:5;:7::i;:::-;57052:19;;57109:12;;57090:15;:31;;57082:52;;;;-1:-1:-1::0;;;57082:52:0::1;;;;;;;:::i;:::-;26169:42;57164:18;::::0;:8:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;57164:25:0;57195:1:::1;::::0;57164:29:::1;::::0;57192:1;;57164:29:::1;:::i;:::-;57163:33;;;;:::i;:::-;57153:6;:43;;57145:64;;;;-1:-1:-1::0;;;57145:64:0::1;;;;;;;:::i;:::-;57249:10;57258:1:::0;57249:6;:10:::1;:::i;:::-;26169:42;57220:18;::::0;;;:8:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;57220:39:0;;:25;;:18;:39:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;57296:10:0::1;::::0;-1:-1:-1;57305:1:0;57296:6;:10:::1;:::i;:::-;57279:5;::::0;-1:-1:-1;;;;;57279:5:0::1;57270:15;::::0;;;:8:::1;:15;::::0;;;;:22:::1;;:36:::0;;:22;;:15;:36:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;57332:24:0::1;::::0;-1:-1:-1;57332:15:0::1;57350:6;57332:24;:::i;:::-;57317:12;:39:::0;-1:-1:-1;;56937:427:0:o;31277:161::-;31352:4;31369:39;15239:10;31392:7;31401:6;31369:8;:39::i;:::-;-1:-1:-1;31426:4:0;31277:161;;;;;:::o;50165:185::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;50256:1:::1;50247:5;:10;;50239:71;;;::::0;-1:-1:-1;;;50239:71:0;;18761:2:1;50239:71:0::1;::::0;::::1;18743:21:1::0;18800:2;18780:18;;;18773:30;18839:34;18819:18;;;18812:62;-1:-1:-1;;;18890:18:1;;;18883:46;18946:19;;50239:71:0::1;18733:238:1::0;50239:71:0::1;50321:13;:21:::0;50165:185::o;43098:109::-;43179:5;;43172:27;;;-1:-1:-1;;;43172:27:0;;;;43145:7;;-1:-1:-1;;;;;43179:5:0;;43172:25;;:27;;;;;;;;;;;;;;43179:5;43172:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43165:34;;43098:109;:::o;50481:185::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;50578:11:::1;;50569:5;:20;;:33;;;;;50601:1;50593:5;:9;50569:33;50561:67;;;::::0;-1:-1:-1;;;50561:67:0;;10317:2:1;50561:67:0::1;::::0;::::1;10299:21:1::0;10356:2;10336:18;;;10329:30;-1:-1:-1;;;10375:18:1;;;10368:51;10436:18;;50561:67:0::1;10289:171:1::0;50561:67:0::1;50639:11;:19:::0;50481:185::o;48810:187::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48875:17:0::1;48910:5;48875:17:::0;;;:8:::1;:17;::::0;;;;;;;:40;;-1:-1:-1;;48875:40:0::1;::::0;;48926:23:::1;;:27:::0;;;48964:12:::1;:21:::0;;;;;:25;48810:187::o;51643:199::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;51739:14:::1;51751:1;51739:11;:14::i;:::-;51731:33;;;;-1:-1:-1::0;;;51731:33:0::1;;;;;;;:::i;:::-;51803:31;51821:13:::0;51803:15:::1;:31;:::i;:::-;-1:-1:-1::0;;;;;51775:14:0;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:25:::1;;:59:::0;;;;-1:-1:-1;51643:199:0:o;54168:255::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;54272:6:::1;54256:13;:22;54248:81;;;::::0;-1:-1:-1;;;54248:81:0;;14935:2:1;54248:81:0::1;::::0;::::1;14917:21:1::0;14974:2;14954:18;;;14947:30;15013:34;14993:18;;;14986:62;-1:-1:-1;;;15064:18:1;;;15057:44;15118:19;;54248:81:0::1;14907:236:1::0;54248:81:0::1;54348:15;54360:2;54348:11;:15::i;:::-;54340:34;;;;-1:-1:-1::0;;;54340:34:0::1;;;;;;;:::i;:::-;54385:14;:30:::0;54168:255::o;52534:220::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;52642:15:::1;52613:26;;:44;52605:105;;;::::0;-1:-1:-1;;;52605:105:0;;24646:2:1;52605:105:0::1;::::0;::::1;24628:21:1::0;24685:2;24665:18;;;24658:30;24724:34;24704:18;;;24697:62;-1:-1:-1;;;24775:18:1;;;24768:46;24831:19;;52605:105:0::1;24618:238:1::0;52605:105:0::1;52721:21;:25:::0;;;::::1;;-1:-1:-1::0;;;52721:25:0::1;-1:-1:-1::0;;;;52721:25:0;;::::1;::::0;;;::::1;::::0;;52534:220::o;52849:294::-;52914:14;52926:1;52914:11;:14::i;:::-;52906:33;;;;-1:-1:-1;;;52906:33:0;;;;;;;:::i;:::-;52950:11;52985:7;:5;:7::i;:::-;-1:-1:-1;;;;;52964:11:0;;;;;;:8;:11;;;;;:18;;;:28;;;;:::i;:::-;52950:42;;53008:28;53025:10;53008:16;:28::i;:::-;:37;;53043:2;;;;;-1:-1:-1;;;;;53043:2:0;53008:37;;;53039:1;53008:37;53003:2;:42;;-1:-1:-1;;;;;;53003:42:0;;-1:-1:-1;;;;;53003:42:0;;;;;;;53065:11;;-1:-1:-1;53065:11:0;;;:8;:11;;;;;:18;;;53059:24;;53056:80;;;-1:-1:-1;;;;;53100:11:0;;;;;;:8;:11;;;;;:18;;:24;;;53056:80;52895:248;52849:294;:::o;42974:116::-;-1:-1:-1;;;;;43056:17:0;43032:4;43056:17;;;:8;:17;;;;;:26;;;;;;;42974:116::o;32533:266::-;32631:4;32648:37;32659:6;32667:9;32678:6;32648:10;:37::i;:::-;-1:-1:-1;;;;;;32727:18:0;;;;;;:10;:18;;;;;;;;15239:10;32727:32;;;;;;;;;32696:73;;32705:6;;32727:41;;32762:6;;32727:41;:::i;:::-;32696:8;:73::i;:::-;-1:-1:-1;32787:4:0;32533:266;;;;;:::o;58560:417::-;15239:10;58630:14;58685:7;:5;:7::i;:::-;58670:22;;58712:19;58724:6;58712:11;:19::i;:::-;58711:20;58703:76;;;;-1:-1:-1;;;58703:76:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;58814:16:0;;;;;;:8;:16;;;;;:23;;;58798:13;58807:4;58798:6;:13;:::i;:::-;:39;58790:60;;;;-1:-1:-1;;;58790:60:0;;;;;;;:::i;:::-;58889:13;58898:4;58889:6;:13;:::i;:::-;-1:-1:-1;;;;;58861:16:0;;;;;;:8;:16;;;;;:23;;:42;;:23;;:16;:42;;;;;:::i;:::-;;;;-1:-1:-1;58931:13:0;;-1:-1:-1;58940:4:0;58931:6;:13;:::i;:::-;58914;;:30;;;;;;;:::i;:::-;;;;;;;;58963:6;58955:4;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;58560:417:0:o;50839:174::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;50912:2:::1;50907:1;:7;;50899:41;;;::::0;-1:-1:-1;;;50899:41:0;;13191:2:1;50899:41:0::1;::::0;::::1;13173:21:1::0;13230:2;13210:18;;;13203:30;-1:-1:-1;;;13249:18:1;;;13242:51;13310:18;;50899:41:0::1;13163:171:1::0;50899:41:0::1;50959:15;50971:2;50959:11;:15::i;:::-;50951:34;;;;-1:-1:-1::0;;;50951:34:0::1;;;;;;;:::i;:::-;50998:3;:7:::0;50839:174::o;43957:726::-;44056:13;;44098:11;;44009:7;;;;;44120:431;44144:38;44165:16;44144:20;:38::i;:::-;44140:1;:42;44120:431;;;44204:15;44222:37;44239:16;44257:1;44222:16;:37::i;:::-;-1:-1:-1;;;;;44293:17:0;;44274:16;44293:17;;;:8;:17;;;;;:24;;;;44351;;;;;44204:55;;-1:-1:-1;44293:24:0;44394:18;;;;:40;;;44427:7;44416:8;:18;44394:40;44390:81;;;44444:13;;44459:11;;44436:35;;;;;;;;;;43957:726;;:::o;44390:81::-;44486:19;44497:8;44486:19;;:::i;:::-;;-1:-1:-1;44520:19:0;44531:8;44520:19;;:::i;:::-;;;44189:362;;;44184:3;;;;;:::i;:::-;;;;44120:431;;;;44591:11;;44575:13;;:27;;;;:::i;:::-;44565:7;:37;44561:78;;;44612:13;;44627:11;;44604:35;;;;;;43957:726;;:::o;44561:78::-;44658:7;;44667;;-1:-1:-1;43957:726:0;-1:-1:-1;43957:726:0:o;55283:84::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;55343:12:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;55343:16:0::1;-1:-1:-1::0;;;;55343:16:0;;::::1;::::0;;;::::1;::::0;;55283:84::o;57552:165::-;-1:-1:-1;;;;;57617:19:0;;57626:10;57617:19;;57609:49;;;;-1:-1:-1;;;57609:49:0;;11020:2:1;57609:49:0;;;11002:21:1;11059:2;11039:18;;;11032:30;-1:-1:-1;;;11078:18:1;;;11071:47;11135:18;;57609:49:0;10992:167:1;57609:49:0;57678:10;57669:20;;;;:8;:20;;;;;:32;;:40;;-1:-1:-1;;;;;;57669:40:0;-1:-1:-1;;;;;57669:40:0;;;;;;;;;;57552:165::o;59051:269::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;59162:15:::1;59174:2;59162:11;:15::i;:::-;59154:34;;;;-1:-1:-1::0;;;59154:34:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;59207:29:0;::::1;59231:4;59207:29;;59199:53;;;;-1:-1:-1::0;;;59199:53:0::1;;;;;;;:::i;:::-;59293:5;::::0;59263:49:::1;::::0;-1:-1:-1;;;59263:49:0;;-1:-1:-1;;;;;59293:5:0;;::::1;59263:49;::::0;::::1;6817:51:1::0;6884:18;;;6877:34;;;59263:29:0;;::::1;::::0;::::1;::::0;6790:18:1;;59263:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;59051:269:::0;;:::o;31794:214::-;15239:10;31882:4;31931:24;;;:10;:24;;;;;;;;-1:-1:-1;;;;;31931:33:0;;;;;;;;;;31882:4;;31899:79;;31922:7;;31931:46;;31967:10;;31931:46;:::i;56607:112::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;56692:19:::1;::::0;;-1:-1:-1;;;;56669:42:0;::::1;-1:-1:-1::0;;;56692:19:0;;;::::1;;;56691:20;56669:42:::0;;::::1;;::::0;;56607:112::o;50674:157::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;50759:14:::1;50771:1;50759:11;:14::i;:::-;50751:33;;;;-1:-1:-1::0;;;50751:33:0::1;;;;;;;:::i;:::-;50795:12;:28:::0;50674:157::o;44778:749::-;-1:-1:-1;;;;;44906:16:0;;;44852:17;44906:16;;;:8;:16;;;;;;:25;44969:19;;;;;;;:28;44852:17;;44906:25;;;;;;;;;44969:28;;;;;44906:25;45012:40;;;;;45033:19;45032:20;45012:40;45008:493;;;45073:28;45069:32;;45008:493;;;45124:16;45123:17;:40;;;;;45144:19;45123:40;45119:382;;;45184:26;45180:30;;45119:382;;;45233:16;45232:17;:41;;;;;45254:19;45253:20;45232:41;45228:273;;;45294:24;45290:28;;45228:273;;;45340:16;:39;;;;;45360:19;45340:39;45336:165;;;45400:28;45396:32;;45336:165;;;45465:24;45461:28;;45336:165;45511:8;;44778:749;;;;:::o;45797:585::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;45863:14:::1;45875:1;45863:11;:14::i;:::-;45855:33;;;;-1:-1:-1::0;;;45855:33:0::1;;;;;;;:::i;:::-;45915:1;45907:4;:9;;45899:46;;;::::0;-1:-1:-1;;;45899:46:0;;10667:2:1;45899:46:0::1;::::0;::::1;10649:21:1::0;10706:2;10686:18;;;10679:30;10745:26;10725:18;;;10718:54;10789:18;;45899:46:0::1;10639:174:1::0;45899:46:0::1;45982:15;;45964;:33;45956:54;;;;-1:-1:-1::0;;;45956:54:0::1;;;;;;;:::i;:::-;46042:5;::::0;-1:-1:-1;;;;;46042:5:0::1;46021:9;46033:15:::0;;;:8:::1;:15;::::0;;;;:22:::1;;::::0;;46085:8:::1;46089:4:::0;46033:22;46085:8:::1;:::i;:::-;46066:28;;46118:9;46140:7;:5;:7::i;:::-;46130:17;::::0;:7;:17:::1;:::i;:::-;46167:5;::::0;-1:-1:-1;;;;;46167:5:0::1;46158:15;::::0;;;:8:::1;:15;::::0;;;;:22:::1;;:33:::0;;46118:29;;-1:-1:-1;46184:7:0;;46158:22;;:15;:33:::1;::::0;46184:7;;46158:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;46211:14:0::1;::::0;-1:-1:-1;;;;;46211:14:0::1;46202:24;::::0;;;:8:::1;:24;::::0;;;;:31:::1;;:42:::0;;46237:7;;46202:24;:42:::1;::::0;46237:7;;46202:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;46276:14:0::1;::::0;46269:5:::1;::::0;46260:34:::1;::::0;8334:25:1;;;-1:-1:-1;;;;;46276:14:0;;::::1;::::0;46269:5;;::::1;::::0;-1:-1:-1;;;;;;;;;;;46260:34:0;8322:2:1;8307:18;46260:34:0::1;;;;;;;46305:10;:8;:10::i;:::-;46362:12;::::0;46344:30:::1;::::0;:15:::1;:30;:::i;:::-;46326:15;:48:::0;-1:-1:-1;;;;45797:585:0:o;52445:81::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;52506:5:::1;:12:::0;;-1:-1:-1;;;;;;52506:12:0::1;-1:-1:-1::0;;;;;52506:12:0;;;::::1;::::0;;;::::1;::::0;;52445:81::o;54583:578::-;54636:14;54648:1;54636:11;:14::i;:::-;54628:33;;;;-1:-1:-1;;;54628:33:0;;;;;;;:::i;:::-;54700:10;6330:20;6369:8;54672:56;;;;-1:-1:-1;;;54672:56:0;;22118:2:1;54672:56:0;;;22100:21:1;22157:2;22137:18;;;22130:30;-1:-1:-1;;;22176:18:1;;;22169:42;22228:18;;54672:56:0;22090:162:1;54672:56:0;54784:14;;-1:-1:-1;;;;;54765:16:0;;;;;;:12;:16;;;;;;:33;;54784:14;54765:33;:::i;:::-;54747:15;:51;:76;;;;-1:-1:-1;;;;;;54802:16:0;;;;;;:12;:16;;;;;;:21;;54747:76;54739:98;;;;-1:-1:-1;;;54739:98:0;;23897:2:1;54739:98:0;;;23879:21:1;23936:1;23916:18;;;23909:29;-1:-1:-1;;;23954:18:1;;;23947:39;24003:18;;54739:98:0;23869:158:1;54739:98:0;-1:-1:-1;;;;;54862:12:0;;54848:11;54862:12;;;:8;:12;;;;;:19;;;;54892:23;;;54955:7;54961:1;54862:19;54955:7;:::i;:::-;26169:42;54926:18;;;;:8;:18;;-1:-1:-1;;;;;;;;;;;54926:36:0;;:25;;:18;:36;;;;;:::i;:::-;;;;-1:-1:-1;54990:7:0;;-1:-1:-1;54996:1:0;54990:3;:7;:::i;:::-;54973:13;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;55039:8:0;;-1:-1:-1;55045:2:0;55039:3;:8;:::i;:::-;55017:10;55008:20;;;;:8;:20;;;;;:27;;:39;;:27;;:20;:39;;;;;:::i;:::-;;;;-1:-1:-1;55096:8:0;;-1:-1:-1;55102:2:0;55096:3;:8;:::i;:::-;55085:7;55091:1;55085:3;:7;:::i;:::-;:20;;;;:::i;:::-;55067:6;;-1:-1:-1;;;;;55067:6:0;55058:16;;;;:8;:16;;;;;:23;;:47;;:23;;:16;:47;;;;;:::i;:::-;;;;-1:-1:-1;55134:10:0;;-1:-1:-1;;;;;;55121:32:0;;-1:-1:-1;;;;;;;;;;;55146:6:0;55150:2;55146:3;:6;:::i;:::-;55121:32;;8334:25:1;;;8322:2;8307:18;55121:32:0;;;;;;;54617:544;54583:578;:::o;48190:369::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48263:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:26;;;::::1;;;48262:27;48254:67;;;::::0;-1:-1:-1;;;48254:67:0;;14224:2:1;48254:67:0::1;::::0;::::1;14206:21:1::0;14263:2;14243:18;;;14236:30;14302:29;14282:18;;;14275:57;14349:18;;48254:67:0::1;14196:177:1::0;48254:67:0::1;-1:-1:-1::0;;;;;48332:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:33;;-1:-1:-1;;48332:33:0::1;::::0;::::1;::::0;;48379:24:::1;;::::0;:28;48376:121:::1;;48478:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;48451:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:24:::1;;::::0;:34:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;48424:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:24:::1;;:61:::0;48376:121:::1;48507:44;48525:16;48543:7;48507:17;:44::i;49525:164::-:0;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;49603:9:::1;::::0;-1:-1:-1;;;49603:9:0;::::1;;;49602:10;49594:50;;;::::0;-1:-1:-1;;;49594:50:0;;20300:2:1;49594:50:0::1;::::0;::::1;20282:21:1::0;20339:2;20319:18;;;20312:30;20378:29;20358:18;;;20351:57;20425:18;;49594:50:0::1;20272:177:1::0;49594:50:0::1;-1:-1:-1::0;;;;;49655:11:0;;::::1;;::::0;;;:8:::1;:11;::::0;;;;:26;;;::::1;;::::0;::::1;-1:-1:-1::0;;49655:26:0;;::::1;::::0;;;::::1;::::0;;49525:164::o;55774:518::-;15239:10;55830:14;55885:7;:5;:7::i;:::-;55870:22;;55912:19;55924:6;55912:11;:19::i;:::-;55911:20;55903:76;;;;-1:-1:-1;;;55903:76:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56014:16:0;;;;;;:8;:16;;;;;:23;;;55998:13;56007:4;55998:6;:13;:::i;:::-;:39;55990:60;;;;-1:-1:-1;;;55990:60:0;;;;;;;:::i;:::-;56089:13;56098:4;56089:6;:13;:::i;:::-;-1:-1:-1;;;;;56061:16:0;;;;;;:8;:16;;;;;:23;;:42;;:23;;:16;:42;;;;;:::i;:::-;;;;-1:-1:-1;56144:13:0;;-1:-1:-1;56153:4:0;56144:6;:13;:::i;:::-;26169:42;56114:18;;;;:8;:18;;-1:-1:-1;;;;;;;;;;;56114:44:0;;:25;;:18;:44;;;;;:::i;:::-;;;;-1:-1:-1;;26169:42:0;56169:18;;;;:8;:18;;:25;:37;;56199:6;;56169:18;:37;;56199:6;;56169:37;:::i;:::-;;;;-1:-1:-1;56217:10:0;;-1:-1:-1;56217:8:0;:10::i;:::-;56243:41;;8334:25:1;;;26169:42:0;;56260:4;;-1:-1:-1;;;;;;;;;;;56243:41:0;8322:2:1;8307:18;56243:41:0;;;;;;;;55819:473;;55774:518;:::o;41862:163::-;-1:-1:-1;;;;;41962:16:0;;41938:4;41962:16;;;:8;:16;;;;;:24;;;;:55;;-1:-1:-1;;;;;;41990:19:0;;;;;;:8;:19;;;;;:27;;;41962:55;41955:62;41862:163;-1:-1:-1;;;41862:163:0:o;49387:130::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49472:17:0;;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:37;;-1:-1:-1;;49472:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49387:130::o;53357:171::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;53449:15:::1;53461:2;53449:11;:15::i;:::-;53441:34;;;;-1:-1:-1::0;;;53441:34:0::1;;;;;;;:::i;:::-;53486:15;:34:::0;53357:171::o;46390:461::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;46456:14:::1;46468:1;46456:11;:14::i;:::-;46448:33;;;;-1:-1:-1::0;;;46448:33:0::1;;;;;;;:::i;:::-;46508:1;46500:4;:9;;46492:48;;;::::0;-1:-1:-1;;;46492:48:0;;21407:2:1;46492:48:0::1;::::0;::::1;21389:21:1::0;21446:2;21426:18;;;21419:30;21485:28;21465:18;;;21458:56;21531:18;;46492:48:0::1;21379:176:1::0;46492:48:0::1;46577:15;;46559;:33;46551:54;;;;-1:-1:-1::0;;;46551:54:0::1;;;;;;;:::i;:::-;26169:42;46616:15;46635:18:::0;;;:8:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;46635:25:0;:32:::1;::::0;46663:4;;46635:32:::1;:::i;:::-;26169:42;46692:18;::::0;;;:8:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;46692:36:0;;46616:52;;-1:-1:-1;46616:52:0;;46692:25;;:18;:36:::1;::::0;46616:52;;46692:36:::1;:::i;:::-;;;;;;;;46756:7;46739:13;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;46774:10:0::1;::::0;-1:-1:-1;46774:8:0::1;:10::i;:::-;46831:12;::::0;46813:30:::1;::::0;:15:::1;:30;:::i;:::-;46795:15;:48:::0;-1:-1:-1;;46390:461:0:o;53536:584::-;53588:15;53600:2;53588:11;:15::i;:::-;53580:34;;;;-1:-1:-1;;;53580:34:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53633:12:0;;;;;;:8;:12;;;;;:27;-1:-1:-1;;;53633:27:0;;;;:35;;53664:4;53633:35;53625:51;;;;-1:-1:-1;;;53625:51:0;;15350:2:1;53625:51:0;;;15332:21:1;15389:1;15369:18;;;15362:29;-1:-1:-1;;;15407:18:1;;;15400:33;15450:18;;53625:51:0;15322:152:1;53625:51:0;53715:10;6330:20;6369:8;53687:64;;;;-1:-1:-1;;;53687:64:0;;18412:2:1;53687:64:0;;;18394:21:1;18451:2;18431:18;;;18424:30;-1:-1:-1;;;18470:18:1;;;18463:50;18530:18;;53687:64:0;18384:170:1;53687:64:0;53811:15;;32330:11;;53795:31;;;;:::i;:::-;53770:21;53780:10;53770:9;:21::i;:::-;:56;;:79;;;-1:-1:-1;53844:5:0;;-1:-1:-1;;;;;53844:5:0;53830:10;:19;53770:79;53762:102;;;;-1:-1:-1;;;53762:102:0;;25411:2:1;53762:102:0;;;25393:21:1;25450:2;25430:18;;;25423:30;-1:-1:-1;;;25469:18:1;;;25462:40;25519:18;;53762:102:0;25383:160:1;53762:102:0;53889:10;53883:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;53883:21:0;;;;;;;;;;;;:30;53875:57;;;;-1:-1:-1;;;53875:57:0;;12849:2:1;53875:57:0;;;12831:21:1;12888:2;12868:18;;;12861:30;-1:-1:-1;;;12907:18:1;;;12900:43;12960:18;;53875:57:0;12821:163:1;53875:57:0;-1:-1:-1;;;;;53943:12:0;;;;;;:8;:12;;;;;:18;;:23;;53965:1;;53943:12;:23;;53965:1;;53943:23;:::i;:::-;;;;-1:-1:-1;;54002:9:0;;-1:-1:-1;;;;;53980:12:0;;;;;;:8;:12;;;;;:18;;;:31;53977:97;;-1:-1:-1;;;;;54028:16:0;;;;;;:12;:16;;;;;54047:15;54028:34;;53977:97;54090:10;54084:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;54084:21:0;;;;;;;;;;:28;;-1:-1:-1;;54084:28:0;54108:4;54084:28;;;53536:584::o;51288:302::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;51357:14:::1;51369:1;51357:11;:14::i;:::-;51349:33;;;;-1:-1:-1::0;;;51349:33:0::1;;;;;;;:::i;:::-;51402:6;::::0;;-1:-1:-1;;;;;51402:6:0;;::::1;51420:5;51393:16:::0;;;:8:::1;:16;::::0;;;;;:32;;-1:-1:-1;;51393:32:0;;::::1;::::0;;;51445:6;;;::::1;51436:16:::0;;;;;:35;;-1:-1:-1;;51436:35:0;;::::1;::::0;;;51482:13;;;;::::1;-1:-1:-1::0;;;;;;51482:13:0;;::::1;::::0;::::1;::::0;;51506:16;;;;;;:31;;;;::::1;51402:6:::0;51506:31:::1;::::0;;51557:6;;;;::::1;51548:16:::0;;;:34;;;;::::1;51436:35:::0;51548:34:::1;::::0;;51288:302::o;31041:228::-;31107:7;31130:20;31142:7;31130:11;:20::i;:::-;31127:83;;;-1:-1:-1;;;;;;31174:17:0;;;;;:8;:17;;;;;:24;;;;31041:228::o;31127:83::-;31254:7;:5;:7::i;:::-;-1:-1:-1;;;;;31227:17:0;;;;;;:8;:17;;;;;:24;;;:34;;;;:::i;57869:172::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;57960:5:::1;::::0;57939:39:::1;::::0;57975:1:::1;::::0;-1:-1:-1;;;;;57960:5:0::1;::::0;57939:39:::1;::::0;57975:1;;57939:39:::1;57989:5;:18:::0;;-1:-1:-1;;;;;;57989:18:0::1;::::0;;58018:2:::1;:15:::0;;-1:-1:-1;;;;;;58018:15:0::1;::::0;;57869:172::o;45535:135::-;45572:7;45593:9;45604;45617:22;:20;:22::i;:::-;45592:47;;-1:-1:-1;45592:47:0;-1:-1:-1;45657:5:0;45592:47;;45657:5;:::i;:::-;45650:12;;;;45535:135;:::o;58051:361::-;58129:18;;58115:11;;58097:29;;:15;:29;:::i;:::-;:50;58094:231;;;58164:10;:21;;-1:-1:-1;;;;;;58164:21:0;26169:42;58164:21;;;;;;-1:-1:-1;58200:12:0;:16;58245:15;58231:11;:29;;;58280:33;;8334:25:1;;;58280:33:0;;8322:2:1;8307:18;58280:33:0;;;;;;;58094:231;58338:10;;-1:-1:-1;;;;;58338:10:0;26169:42;58338:22;58335:70;;;58392:1;58377:12;:16;58335:70;58051:361::o;60851:672::-;60919:15;60931:2;60919:11;:15::i;:::-;60911:34;;;;-1:-1:-1;;;60911:34:0;;;;;;;:::i;:::-;60978:5;;-1:-1:-1;;;;;60978:5:0;60964:10;:19;;:50;;-1:-1:-1;61009:4:0;;-1:-1:-1;;;;;61009:4:0;60987:10;:27;60964:50;60956:73;;;;-1:-1:-1;;;60956:73:0;;11700:2:1;60956:73:0;;;11682:21:1;11739:2;11719:18;;;11712:30;-1:-1:-1;;;11758:18:1;;;11751:40;11808:18;;60956:73:0;11672:160:1;60956:73:0;61064:15;61048:13;;:31;61040:53;;;;-1:-1:-1;;;61040:53:0;;23210:2:1;61040:53:0;;;23192:21:1;23249:1;23229:18;;;23222:29;-1:-1:-1;;;23267:18:1;;;23260:39;23316:18;;61040:53:0;23182:158:1;61040:53:0;61121:7;61145:14;;61104;;61121:7;61130:29;;:12;:29;:::i;:::-;61121:40;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;61121:40:0;;-1:-1:-1;61213:7:0;:5;:7::i;:::-;61199:11;;:21;;;;:::i;:::-;-1:-1:-1;;;;;61172:16:0;;;;;;:8;:16;;;;;:23;;:48;;:23;;:16;:48;;;;;:::i;:::-;;;;-1:-1:-1;;61265:11:0;;61236:41;;-1:-1:-1;;;;;61236:41:0;;;;;;;61251:12;28324:25:1;;28380:2;28365:18;;28358:34;28312:2;28297:18;;28279:119;61236:41:0;;;;;;;;61302:14;;61326:11;;61293:45;;8334:25:1;;;-1:-1:-1;;;;;61293:45:0;;;;61302:14;;-1:-1:-1;;;;;;;;;;;61293:45:0;8322:2:1;8307:18;61293:45:0;;;;;;;61353:9;61349:86;61370:7;:14;61366:18;;61349:86;;;61413:7;61421:1;61413:10;;;;;;;;:::i;:::-;;;;;;;;;;61406:17;;-1:-1:-1;;;;;;61406:17:0;;;61386:3;;;;:::i;:::-;;;;61349:86;;;-1:-1:-1;;61459:1:0;61445:11;:15;;;61471:11;:19;;-1:-1:-1;;61471:19:0;;;61501:10;:14;-1:-1:-1;60851:672:0:o;54431:144::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;54509:15:::1;54521:2;54509:11;:15::i;:::-;54501:34;;;;-1:-1:-1::0;;;54501:34:0::1;;;;;;;:::i;:::-;54546:15;:21:::0;54431:144::o;42307:659::-;-1:-1:-1;;;;;42663:17:0;;42398:12;42663:17;;;:8;:17;;;;;:25;;42703:26;42834:23;;;;42398:12;;;;;;;;;;;;42663:25;;;;;42703:26;;;;;;42744:28;;;;;;-1:-1:-1;;;42787:32:0;;;;;;;42899:7;:5;:7::i;:::-;-1:-1:-1;;;;;42872:17:0;;;;;;:8;:17;;;;;:24;;;:34;;;;:::i;:::-;-1:-1:-1;;;;;42921:17:0;;;;;;;;:8;:17;;;;;:26;;;42641:317;;;;;;-1:-1:-1;42641:317:0;;-1:-1:-1;42641:317:0;-1:-1:-1;42641:317:0;-1:-1:-1;42921:26:0;;-1:-1:-1;42307:659:0;-1:-1:-1;;42307:659:0:o;47960:221::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;48036:9:::1;:16:::0;;-1:-1:-1;;;;48036:16:0::1;-1:-1:-1::0;;;48036:16:0::1;::::0;;48092:24:::1;:15;48110:6;48092:24;:::i;:::-;48063:26;:53:::0;48142:31:::1;48160:13:::0;48142:15:::1;:31;:::i;:::-;48127:12;:46:::0;-1:-1:-1;47960:221:0:o;49005:184::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;49090:1:::1;49081:5;:10;;49073:31;;;;-1:-1:-1::0;;;49073:31:0::1;;;;;;;:::i;:::-;49123:15;49135:2;49123:11;:15::i;:::-;49115:34;;;;-1:-1:-1::0;;;49115:34:0::1;;;;;;;:::i;:::-;49162:11;:19:::0;49005:184::o;42055:118::-;-1:-1:-1;;;;;42137:17:0;42113:4;42137:17;;;:8;:17;;;;;:28;;;;;;;42055:118::o;59682:476::-;59730:11;;;;59722:44;;;;-1:-1:-1;;;59722:44:0;;16357:2:1;59722:44:0;;;16339:21:1;16396:2;16376:18;;;16369:30;-1:-1:-1;;;16415:18:1;;;16408:50;16475:18;;59722:44:0;16329:170:1;59722:44:0;59794:10;59786:19;;;;:7;:19;;;;;;;;59806:10;;59786:31;;;;;;;;;;59785:32;59777:60;;;;-1:-1:-1;;;59777:60:0;;25750:2:1;59777:60:0;;;25732:21:1;25789:2;25769:18;;;25762:30;-1:-1:-1;;;25808:18:1;;;25801:45;25863:18;;59777:60:0;25722:165:1;59777:60:0;59874:10;;59856:7;:14;:28;;59848:52;;;;-1:-1:-1;;;59848:52:0;;18072:2:1;59848:52:0;;;18054:21:1;18111:2;18091:18;;;18084:30;-1:-1:-1;;;18130:18:1;;;18123:41;18181:18;;59848:52:0;18044:161:1;59848:52:0;59958:18;;59944:11;;:32;;;;:::i;:::-;59919:21;59929:10;59919:9;:21::i;:::-;:57;;59911:96;;;;-1:-1:-1;;;59911:96:0;;19945:2:1;59911:96:0;;;19927:21:1;19984:2;19964:18;;;19957:30;20023:28;20003:18;;;19996:56;20069:18;;59911:96:0;19917:176:1;59911:96:0;60025:10;60018:18;;;;:6;:18;;;;;;;;60037:10;;;60018:30;;;;;;;;60051:15;60018:48;;60077:19;;;:7;:19;;;;;60097:10;;60077:31;;;;;;;:38;;-1:-1:-1;;60077:38:0;60111:4;60077:38;;;;;;60126:7;:24;;;;;;;;;;;;;;-1:-1:-1;;;;;;60126:24:0;;;;;;59682:476::o;46859:1030::-;46958:5;;-1:-1:-1;;;;;46958:5:0;46944:10;:19;;:54;;-1:-1:-1;46989:8:0;;-1:-1:-1;;;;;46989:8:0;46967:10;:31;46944:54;46936:78;;;;-1:-1:-1;;;46936:78:0;;;;;;;:::i;:::-;47033:12;;-1:-1:-1;;;47033:12:0;;;;47025:39;;;;-1:-1:-1;;;47025:39:0;;17042:2:1;47025:39:0;;;17024:21:1;17081:2;17061:18;;;17054:30;-1:-1:-1;;;17100:18:1;;;17093:44;17154:18;;47025:39:0;17014:164:1;47025:39:0;47083:14;47095:1;47083:11;:14::i;:::-;47075:33;;;;-1:-1:-1;;;47075:33:0;;;;;;;:::i;:::-;47136:8;;:28;;;-1:-1:-1;;;47136:28:0;;;;47119:14;;-1:-1:-1;;;;;47136:8:0;;:26;;:28;;;;;;;;;;;;;;:8;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47119:45;-1:-1:-1;47175:13:0;47191:15;47119:45;47191:6;:15;:::i;:::-;47175:31;;47217:12;47232:7;:5;:7::i;:::-;47217:22;-1:-1:-1;47250:9:0;47262:13;47217:22;47262:6;:13;:::i;:::-;47250:25;-1:-1:-1;47286:14:0;47314:13;;;47311:247;;-1:-1:-1;47353:10:0;47311:247;;;47385:8;:13;;47397:1;47385:13;47381:177;;;-1:-1:-1;26169:42:0;47381:177;;;47454:8;:13;;47466:1;47454:13;47450:108;;;-1:-1:-1;47493:5:0;;-1:-1:-1;;;;;47493:5:0;47450:108;;;-1:-1:-1;47540:6:0;;-1:-1:-1;;;;;47540:6:0;47450:108;-1:-1:-1;;;;;47576:16:0;;;;;;:8;:16;;;;;:23;;;:27;-1:-1:-1;47568:48:0;;;;-1:-1:-1;;;47568:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47627:16:0;;;;;;:8;:16;;;;;:23;;:28;;47654:1;;47627:16;:28;;47654:1;;47627:28;:::i;:::-;;;;-1:-1:-1;47671:9:0;;-1:-1:-1;47666:216:0;47690:6;47686:1;:10;47666:216;;;47737:8;;:24;;-1:-1:-1;;;47737:24:0;;;;;8334:25:1;;;47718:16:0;;-1:-1:-1;;;;;47737:8:0;;:21;;8307:18:1;;47737:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47776:18:0;;;;;;:8;:18;;;;;:25;;:34;;47718:43;;-1:-1:-1;47805:5:0;;47776:25;;:18;:34;;47805:5;;47776:34;:::i;:::-;;;;-1:-1:-1;;;;;;;47830:40:0;;;;;;-1:-1:-1;;;;;;;;;;;47857:12:0;47865:4;47857:5;:12;:::i;:::-;47830:40;;8334:25:1;;;8322:2;8307:18;47830:40:0;;;;;;;-1:-1:-1;47698:3:0;;;;:::i;:::-;;;;47666:216;;;;46925:964;;;;;46859:1030;;:::o;60166:679::-;60293:15;60305:2;60293:11;:15::i;:::-;60285:34;;;;-1:-1:-1;;;60285:34:0;;;;;;;:::i;:::-;60352:5;;-1:-1:-1;;;;;60352:5:0;60338:10;:19;;:50;;-1:-1:-1;60383:4:0;;-1:-1:-1;;;;;60383:4:0;60361:10;:27;60338:50;60330:73;;;;-1:-1:-1;;;60330:73:0;;11700:2:1;60330:73:0;;;11682:21:1;11739:2;11719:18;;;11712:30;-1:-1:-1;;;11758:18:1;;;11751:40;11808:18;;60330:73:0;11672:160:1;60330:73:0;60431:3;60422:5;:12;;:27;;;;;60447:2;60438:5;:11;;60422:27;60414:48;;;;-1:-1:-1;;;60414:48:0;;16021:2:1;60414:48:0;;;16003:21:1;16060:1;16040:18;;;16033:29;-1:-1:-1;;;16078:18:1;;;16071:38;16126:18;;60414:48:0;15993:157:1;60414:48:0;60493:7;60481:8;:19;;:46;;;;;60519:8;60504:11;:23;;60481:46;60473:67;;;;-1:-1:-1;;;60473:67:0;;16706:2:1;60473:67:0;;;16688:21:1;16745:1;16725:18;;;16718:29;-1:-1:-1;;;16763:18:1;;;16756:38;16811:18;;60473:67:0;16678:157:1;60473:67:0;60551:10;:12;;;:10;:12;;;:::i;:::-;;;;;;60574:9;60586:2;:22;;26169:42;60586:22;;;60591:6;;-1:-1:-1;;;;;60591:6:0;60586:22;60574:34;;60650:7;:5;:7::i;:::-;60641:16;;:6;:16;:::i;:::-;-1:-1:-1;;;;;60619:11:0;;;;;;:8;:11;;;;;:18;;:38;;:18;;:11;:38;;;;;:::i;:::-;;;;-1:-1:-1;;60668:11:0;:20;;;60699:11;:18;;-1:-1:-1;;60699:18:0;60713:4;60699:18;;;60728:10;:18;;;60757:13;:24;;;60808:29;60826:11;60808:15;:29;:::i;:::-;60792:13;:45;-1:-1:-1;;;;;;60166:679:0:o;30794:87::-;30833:13;30866:7;30859:14;;;;;:::i;51188:92::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;51248:17:::1;:24:::0;;-1:-1:-1;;;;;51248:24:0::1;-1:-1:-1::0;;;51248:24:0::1;::::0;;51188:92::o;32016:226::-;15239:10;32109:4;32158:24;;;:10;:24;;;;;;;;-1:-1:-1;;;;;32158:33:0;;;;;;;;;;32109:4;;32126:86;;32149:7;;32158:53;;32195:15;;32158:53;:::i;56409:190::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;56522:9:::1;:28;;56544:6;::::0;-1:-1:-1;;;;;56544:6:0::1;56522:28;;;26169:42;56522:28;56505:14;:45:::0;;-1:-1:-1;;;;;;56505:45:0::1;-1:-1:-1::0;;;;;56505:45:0;;;::::1;::::0;;;::::1;::::0;;56561:14:::1;:30:::0;;-1:-1:-1;;;;56561:30:0::1;-1:-1:-1::0;;;56561:30:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;56409:190:0:o;55171:104::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;55240:8:::1;:27:::0;;-1:-1:-1;;;;;;55240:27:0::1;-1:-1:-1::0;;;;;55240:27:0;;;::::1;::::0;;;::::1;::::0;;55171:104::o;32357:168::-;32435:4;32452:43;15239:10;32477:9;32488:6;32452:10;:43::i;45678:75::-;45732:5;;;;;;;;;-1:-1:-1;;;;;45732:5:0;-1:-1:-1;;;;;45717:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45678:75::o;49974:181::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;50069:15:::1;50081:2;50069:11;:15::i;:::-;50061:34;;;;-1:-1:-1::0;;;50061:34:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50106:17:0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:41;;;::::1;;::::0;::::1;-1:-1:-1::0;;50106:41:0;;::::1;::::0;;;::::1;::::0;;49974:181::o;43338:611::-;43499:7;;43430:15;;;;-1:-1:-1;;;;;43489:17:0;;;43499:7;;43489:17;43486:437;;;-1:-1:-1;43527:22:0;43486:437;;;-1:-1:-1;;;;;43570:16:0;;;;;;:8;:16;;;;;:29;;;;;;43567:356;;;43631:8;43619;;:20;43616:105;;-1:-1:-1;43683:22:0;43616:105;-1:-1:-1;43739:19:0;43567:356;;;-1:-1:-1;;;;;43779:19:0;;;;;;:8;:19;;;;;:32;;;;;;43776:147;;;-1:-1:-1;43832:20:0;43776:147;;;-1:-1:-1;43889:22:0;43776:147;43940:1;43338:611;-1:-1:-1;;;;43338:611:0:o;49197:182::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;49273:14:::1;49285:1;49273:11;:14::i;:::-;49265:33;;;;-1:-1:-1::0;;;49265:33:0::1;;;;;;;:::i;:::-;49327:1;49317:6;:11;;49309:32;;;;-1:-1:-1::0;;;49309:32:0::1;;;;;;;:::i;:::-;49352:10;:19:::0;49197:182::o;53151:198::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;53266:14:::1;53278:1;53266:11;:14::i;:::-;53258:33;;;;-1:-1:-1::0;;;53258:33:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;53302:17:0::1;;::::0;;;:8:::1;:17;::::0;;;;:39;;-1:-1:-1;;53302:39:0::1;-1:-1:-1::0;;;53302:39:0::1;::::0;;53151:198::o;48567:235::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48639:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;:26;;;::::1;;;48631:66;;;::::0;-1:-1:-1;;;48631:66:0;;14224:2:1;48631:66:0::1;::::0;::::1;14206:21:1::0;14263:2;14243:18;;;14236:30;14302:29;14282:18;;;14275:57;14349:18;;48631:66:0::1;14196:177:1::0;48631:66:0::1;-1:-1:-1::0;;;;;48708:17:0;::::1;48735:1;48708:17:::0;;;:8:::1;:17;::::0;;;;:24:::1;;:28:::0;48747:47:::1;48768:16;48717:7:::0;48747:20:::1;:47::i;55375:266::-:0;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;55444:15:::1;55456:2;55444:11;:15::i;:::-;55436:34;;;;-1:-1:-1::0;;;55436:34:0::1;;;;;;;:::i;:::-;55536:17:::0;::::1;55572:15:::0;55564:46:::1;;;::::0;-1:-1:-1;;;55564:46:0;;13541:2:1;55564:46:0::1;::::0;::::1;13523:21:1::0;13580:2;13560:18;;;13553:30;-1:-1:-1;;;13599:18:1;;;13592:48;13657:18;;55564:46:0::1;13513:168:1::0;55564:46:0::1;-1:-1:-1::0;55621:5:0::1;:12:::0;;-1:-1:-1;;;;;;55621:12:0::1;-1:-1:-1::0;;;;;55621:12:0;;;::::1;::::0;;;::::1;::::0;;55375:266::o;51996:140::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;52070:15:::1;52082:2;52070:11;:15::i;:::-;52062:34;;;;-1:-1:-1::0;;;52062:34:0::1;;;;;;;:::i;:::-;52107:11;:21:::0;;;::::1;;-1:-1:-1::0;;;52107:21:0::1;-1:-1:-1::0;;;;52107:21:0;;::::1;::::0;;;::::1;::::0;;51996:140::o;51021:143::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;51097:15:::1;51109:2;51097:11;:15::i;:::-;51089:34;;;;-1:-1:-1::0;;;51089:34:0::1;;;;;;;:::i;:::-;51134:18;:22:::0;;;::::1;;-1:-1:-1::0;;;51134:22:0::1;-1:-1:-1::0;;;;51134:22:0;;::::1;::::0;;;::::1;::::0;;51021:143::o;61671:151::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;61753:15:::1;61765:2;61753:11;:15::i;:::-;61745:34;;;;-1:-1:-1::0;;;61745:34:0::1;;;;;;;:::i;:::-;61790:18;:24:::0;61671:151::o;56300:101::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;56379:14:::1;::::0;;-1:-1:-1;;;;56361:32:0;::::1;-1:-1:-1::0;;;56379:14:0;;;::::1;;;56378:15;56361:32:::0;;::::1;;::::0;;56300:101::o;57453:91::-;57513:23;;57534:1;8334:25:1;;-1:-1:-1;;;;;57513:23:0;;;;;-1:-1:-1;;;;;;;;;;;57513:23:0;8322:2:1;8307:18;57513:23:0;;;;;;;57453:91;:::o;51852:136::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;51926:15:::1;51938:2;51926:11;:15::i;:::-;51918:34;;;;-1:-1:-1::0;;;51918:34:0::1;;;;;;;:::i;:::-;51963:10;:17:::0;51852:136::o;52303:134::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;52377:5:::1;:9:::0;;-1:-1:-1;;;;;52377:9:0;;::::1;-1:-1:-1::0;;;;;;52377:9:0;;::::1;::::0;::::1;::::0;;:5:::1;52397:15:::0;;;:8:::1;:15;::::0;;;;;:32;;;::::1;;52377:9;52397:32;-1:-1:-1::0;;52397:32:0;;::::1;::::0;;;::::1;::::0;;52303:134::o;56727:202::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56808:22:0;::::1;56800:73;;;::::0;-1:-1:-1;;;56800:73:0;;12039:2:1;56800:73:0::1;::::0;::::1;12021:21:1::0;12078:2;12058:18;;;12051:30;12117:34;12097:18;;;12090:62;-1:-1:-1;;;12168:18:1;;;12161:36;12214:19;;56800:73:0::1;12011:228:1::0;56800:73:0::1;56884:5;:16:::0;;-1:-1:-1;;;;;;56884:16:0::1;-1:-1:-1::0;;;;;56884:16:0;;;::::1;::::0;;::::1;::::0;;56911:2:::1;:10:::0;;-1:-1:-1;;;;;;56911:10:0::1;56884:16;56911:10:::0;;::::1;::::0;;;::::1;::::0;;56727:202::o;61531:132::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;61596:15:::1;61608:2;61596:11;:15::i;:::-;61588:34;;;;-1:-1:-1::0;;;61588:34:0::1;;;;;;;:::i;:::-;61633:4;:22:::0;;-1:-1:-1;;;;;;61633:22:0::1;-1:-1:-1::0;;;;;61633:22:0;;;::::1;::::0;;;::::1;::::0;;61531:132::o;38927:1668::-;39044:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;39044:25:0;39071:18;39091:22;39131:38;39141:6;39149:9;39160:8;39131:9;:38::i;:::-;39126:43;;39189:28;39199:6;39207:9;39189;:28::i;:::-;39228:17;;;39180:37;-1:-1:-1;39260:5:0;39256:1186;;39285:9;;-1:-1:-1;;;39285:9:0;;;;39282:1149;;;39324:20;39318:2;:26;;;;;;;;:::i;:::-;;39315:990;;;39417:11;;39389:1;;-1:-1:-1;;;39417:11:0;;;;39413:816;;-1:-1:-1;;;;;39499:16:0;;39457:21;39499:16;;;:8;:16;;;;;:25;;;39481:43;;:15;:43;:::i;:::-;39457:67;;39570:10;;39554:13;:26;39551:655;;;39811:2;39798:10;;:15;;;;:::i;:::-;39781:13;:32;39778:401;;39862:10;;:14;;39875:1;39862:14;:::i;:::-;39850:26;;39778:401;;;39947:1;39934:10;;:14;;;;:::i;:::-;39917:13;:31;39914:265;;39997:10;;:14;;40010:1;39997:14;:::i;39914:265::-;40083:1;40070:10;;:14;;;;:::i;:::-;40053:13;:31;40050:129;;40133:10;;:14;;40146:1;40133:14;:::i;:::-;40121:26;;40050:129;39430:799;39413:816;40276:9;40269:3;;40260:6;:12;;;;:::i;:::-;40259:26;;;;:::i;:::-;40251:5;;;:34;-1:-1:-1;39315:990:0;40332:19;40326:2;:25;;;;;;;;:::i;:::-;;40323:93;;;40393:3;;40384:12;;:6;:12;:::i;:::-;40376:5;;;:20;40323:93;40544:5;;;;:9;;40552:1;40544:9;:::i;:::-;40532:8;;:22;;;;:::i;:::-;40513:16;;;:41;38927:1668;;;;;;;;;:::o;59328:155::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;59448:27:::1;59460:15;59448:9:::0;:27:::1;:::i;:::-;59416:29;::::0;;::::1;;::::0;;;:13:::1;:29;::::0;;;;:59;;;;-1:-1:-1;59328:155:0:o;49697:269::-;29465:2;;-1:-1:-1;;;;;29465:2:0;;;;;15239:10;29465:18;29457:42;;;;-1:-1:-1;;;29457:42:0;;;;;;;:::i;:::-;49796:9:::1;::::0;-1:-1:-1;;;49796:9:0;::::1;;;49795:10;49787:50;;;::::0;-1:-1:-1;;;49787:50:0;;20300:2:1;49787:50:0::1;::::0;::::1;20282:21:1::0;20339:2;20319:18;;;20312:30;20378:29;20358:18;;;20351:57;20425:18;;49787:50:0::1;20272:177:1::0;49787:50:0::1;49853:9;49848:111;49868:20:::0;;::::1;49848:111;;;49946:1;49910:8;:22;49919:9;;49929:1;49919:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49910:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;49910:22:0;:37;;;::::1;;::::0;::::1;-1:-1:-1::0;;49910:37:0;;::::1;::::0;;;::::1;::::0;;49890:3;::::1;::::0;::::1;:::i;:::-;;;;49848:111;;59491:183:::0;59581:29;;;59557:4;59581:29;;;:13;:29;;;;;;59613:15;-1:-1:-1;59581:47:0;:85;;-1:-1:-1;;59632:29:0;;;;;;:13;:29;;;;;;:34;;59491:183::o;31446:340::-;-1:-1:-1;;;;;31540:20:0;;31532:69;;;;-1:-1:-1;;;31532:69:0;;22805:2:1;31532:69:0;;;22787:21:1;22844:2;22824:18;;;22817:30;22883:34;22863:18;;;22856:62;-1:-1:-1;;;22934:18:1;;;22927:34;22978:19;;31532:69:0;22777:226:1;31532:69:0;-1:-1:-1;;;;;31620:21:0;;31612:68;;;;-1:-1:-1;;;31612:68:0;;12446:2:1;31612:68:0;;;12428:21:1;12485:2;12465:18;;;12458:30;12524:34;12504:18;;;12497:62;-1:-1:-1;;;12575:18:1;;;12568:32;12617:19;;31612:68:0;12418:224:1;31612:68:0;-1:-1:-1;;;;;31693:18:0;;;;;;;:10;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31745:33;;8334:25:1;;;31745:33:0;;8307:18:1;31745:33:0;8289:76:1;8585:220:0;8642:4;6330:20;;6369:8;8659:59;;;;-1:-1:-1;;;8659:59:0;;21762:2:1;8659:59:0;;;21744:21:1;21801:2;21781:18;;;21774:30;21840:29;21820:18;;;21813:57;21887:18;;8659:59:0;21734:177:1;8659:59:0;-1:-1:-1;;;;;;8736:61:0;8754:42;8736:61;;8585:220::o;32847:6072::-;32935:4;-1:-1:-1;;;;;32960:20:0;;32952:70;;;;-1:-1:-1;;;32952:70:0;;21001:2:1;32952:70:0;;;20983:21:1;21040:2;21020:18;;;21013:30;21079:34;21059:18;;;21052:62;-1:-1:-1;;;21130:18:1;;;21123:35;21175:19;;32952:70:0;20973:227:1;32952:70:0;-1:-1:-1;;;;;33041:23:0;;33033:71;;;;-1:-1:-1;;;33033:71:0;;9913:2:1;33033:71:0;;;9895:21:1;9952:2;9932:18;;;9925:30;9991:34;9971:18;;;9964:62;-1:-1:-1;;;10042:18:1;;;10035:33;10085:19;;33033:71:0;9885:225:1;33033:71:0;33132:1;33123:6;:10;33115:64;;;;-1:-1:-1;;;33115:64:0;;19178:2:1;33115:64:0;;;19160:21:1;19217:2;19197:18;;;19190:30;19256:34;19236:18;;;19229:62;-1:-1:-1;;;19307:18:1;;;19300:39;19356:19;;33115:64:0;19150:231:1;33115:64:0;-1:-1:-1;;;;;33216:19:0;;;;;;:8;:19;;;;;:30;;;33198:15;:48;33190:82;;;;-1:-1:-1;;;33190:82:0;;23547:2:1;33190:82:0;;;23529:21:1;23586:2;23566:18;;;23559:30;-1:-1:-1;;;23605:18:1;;;23598:51;23666:18;;33190:82:0;23519:171:1;33190:82:0;33285:12;33300:7;:5;:7::i;:::-;33322:9;;33285:22;;-1:-1:-1;;;;33322:9:0;;;;33318:198;;33453:5;;33377:42;;-1:-1:-1;;;;;33443:15:0;;;33453:5;;33443:15;;:44;;-1:-1:-1;33462:10:0;-1:-1:-1;;;;;33462:25:0;;;33443:44;33435:69;;;;-1:-1:-1;;;33435:69:0;;17731:2:1;33435:69:0;;;17713:21:1;17770:2;17750:18;;;17743:30;-1:-1:-1;;;17789:18:1;;;17782:42;17841:18;;33435:69:0;17703:162:1;33435:69:0;33332:184;33318:198;33596:21;;-1:-1:-1;;;33596:21:0;;;;33592:508;;-1:-1:-1;;;;;33637:16:0;;;;;;:8;:16;;;;;:27;;;;;;:35;;33668:4;33637:35;33634:455;;;33730:15;33701:26;;:44;33693:74;;;;-1:-1:-1;;;33693:74:0;;17385:2:1;33693:74:0;;;17367:21:1;17424:2;17404:18;;;17397:30;-1:-1:-1;;;17443:18:1;;;17436:47;17500:18;;33693:74:0;17357:167:1;33693:74:0;33849:17;;-1:-1:-1;;;33849:17:0;;;;33841:56;;;;-1:-1:-1;;;33841:56:0;;14580:2:1;33841:56:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:28;14638:18;;;14631:56;14704:18;;33841:56:0;14552:176:1;33841:56:0;33954:13;;33934:17;33944:6;33934:9;:17::i;:::-;:33;;;;:::i;:::-;33924:6;:43;;33916:64;;;;-1:-1:-1;;;33916:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34007:16:0;;;;;;:8;:16;;;;;:25;;;34044:15;;34007:34;;34035:6;34007:34;:::i;:::-;:52;33999:74;;;;-1:-1:-1;;;33999:74:0;;23897:2:1;33999:74:0;;;23879:21:1;23936:1;23916:18;;;23909:29;-1:-1:-1;;;23954:18:1;;;23947:39;24003:18;;33999:74:0;23869:158:1;33999:74:0;34126:5;;-1:-1:-1;;;;;34113:18:0;;;34126:5;;34113:18;34110:493;;;34151:19;34163:6;34151:11;:19::i;:::-;34148:444;;-1:-1:-1;;;;;34315:16:0;;34301:11;34315:16;;;:8;:16;;;;;:23;;;:30;;34341:4;;34315:30;:::i;:::-;-1:-1:-1;;;;;34373:16:0;;;;;;:8;:16;;;;;:23;;;34301:44;;-1:-1:-1;34367:29:0;;34364:106;;;-1:-1:-1;;;;;34421:16:0;;;;;;:8;:16;;;;;:23;;:29;;;34364:106;34532:11;;-1:-1:-1;;;;;34506:16:0;;;;;;:8;:16;;;;;:23;;;:37;;34532:11;34506:37;:::i;:::-;34496:6;:47;;34488:88;;;;-1:-1:-1;;;34488:88:0;;19588:2:1;34488:88:0;;;19570:21:1;19627:2;19607:18;;;19600:30;19666;19646:18;;;19639:58;19714:18;;34488:88:0;19560:178:1;34488:88:0;34181:411;34148:444;34616:14;;-1:-1:-1;;;34616:14:0;;;;34613:266;;;34660:5;;-1:-1:-1;;;;;34650:15:0;;;34660:5;;34650:15;;:74;;-1:-1:-1;34683:5:0;;-1:-1:-1;;;;;34670:18:0;;;34683:5;;34670:18;;;;:53;;;34692:22;34704:9;34692:11;:22::i;:::-;:31;34670:53;34647:221;;;34817:11;;34803;;:25;;;;:::i;:::-;-1:-1:-1;;;;;34755:19:0;;;;;;:8;:19;;;;;:26;;;34792:6;;34755:33;;34784:4;;34755:33;:::i;:::-;34754:44;;;;:::i;:::-;34753:75;;34745:107;;;;-1:-1:-1;;;34745:107:0;;25063:2:1;34745:107:0;;;25045:21:1;25102:2;25082:18;;;25075:30;-1:-1:-1;;;25121:18:1;;;25114:49;25180:18;;34745:107:0;25035:169:1;34745:107:0;34893:19;;-1:-1:-1;;;34893:19:0;;;;34889:120;;-1:-1:-1;;;;;34936:16:0;;;;;;:8;:16;;;;;:31;-1:-1:-1;;;34936:31:0;;;;:40;34928:69;;;;-1:-1:-1;;;34928:69:0;;20656:2:1;34928:69:0;;;20638:21:1;20695:2;20675:18;;;20668:30;-1:-1:-1;;;20714:18:1;;;20707:46;20770:18;;34928:69:0;20628:166:1;34928:69:0;35024:12;;:17;;;;:51;;;35063:12;;35045:15;:30;35024:51;:70;;;;-1:-1:-1;35089:5:0;;-1:-1:-1;;;;;35079:15:0;;;35089:5;;35079:15;35024:70;35021:246;;;35127:5;;-1:-1:-1;;;;;35114:18:0;;;35127:5;;35114:18;;;;:42;;-1:-1:-1;35149:7:0;;-1:-1:-1;;;;;35136:20:0;;;35149:7;;35136:20;;35114:42;:64;;;;-1:-1:-1;35173:5:0;;-1:-1:-1;;;;;35160:18:0;;;35173:5;;35160:18;;35114:64;35111:145;;;-1:-1:-1;;;;;35199:19:0;;;;;;:8;:19;;;;;:41;;-1:-1:-1;;35199:41:0;-1:-1:-1;;;35199:41:0;;;35111:145;35280:11;;;;35277:200;;;-1:-1:-1;;;;;35311:15:0;;;;;;:7;:15;;;;;;;;35327:10;;35311:27;;;;;;;;;;35308:158;;;35396:13;;-1:-1:-1;;;;;35367:14:0;;;;;;:6;:14;;;;;;;;35382:10;;35367:26;;;;;;;;35412:15;;35367:42;;;:::i;:::-;:60;35359:91;;;;-1:-1:-1;;;35359:91:0;;22459:2:1;35359:91:0;;;22441:21:1;22498:2;22478:18;;;22471:30;-1:-1:-1;;;22517:18:1;;;22510:47;22574:18;;35359:91:0;22431:167:1;35359:91:0;35487:16;35506:17;:15;:17::i;:::-;35487:36;;35534:14;35551:30;35563:6;35571:9;35551:11;:30::i;:::-;35534:47;;35593:25;35620:18;35640:22;35666:53;35672:6;35680:9;35691:6;35699:9;35710:8;35666:5;:53::i;:::-;35592:127;;;;;;35741:8;35730;:19;;;;35760:9;35780:4;35772:1;:5;;;:12;;;;:::i;:::-;35804:6;;-1:-1:-1;;;;;35804:6:0;35795:16;;;;:8;:16;;;;;:23;;:28;;35760:24;;-1:-1:-1;35760:24:0;;35795:23;;:16;:28;;35760:24;;35795:28;:::i;:::-;;;;-1:-1:-1;;35843:8:0;;-1:-1:-1;;;;;35843:8:0;35834:18;;;;:8;:18;;;;;:25;;:30;;35863:1;;35834:18;:30;;35863:1;;35834:30;:::i;:::-;;;;-1:-1:-1;;35884:10:0;;-1:-1:-1;;;;;35884:10:0;35875:20;;;;:8;:20;;;;;:27;;:32;;35906:1;;35875:20;:32;;35906:1;;35875:32;:::i;:::-;;;;-1:-1:-1;35927:20:0;;-1:-1:-1;35921:2:0;:26;;;;;;;;:::i;:::-;;35918:2523;;;35986:6;;35994:5;;;;;35969:31;;8334:25:1;;;-1:-1:-1;;;;;35986:6:0;;;;35969:31;;;-1:-1:-1;;;;;;;;;;;35969:31:0;8322:2:1;8307:18;35969:31:0;;;;;;;36037:8;;36047:5;;;;;36020:33;;8334:25:1;;;-1:-1:-1;;;;;36037:8:0;;;;36020:33;;;-1:-1:-1;;;;;;;;;;;36020:33:0;8322:2:1;8307:18;36020:33:0;;;;;;;36090:10;;36102:5;;;;;36073:35;;8334:25:1;;;-1:-1:-1;;;;;36090:10:0;;;;36073:35;;;-1:-1:-1;;;;;;;;;;;36073:35:0;8322:2:1;8307:18;36073:35:0;;;;;;;36127:14;;-1:-1:-1;;;36127:14:0;;;;36123:80;;36173:14;;36162:8;:25;;-1:-1:-1;;;;;;36162:25:0;-1:-1:-1;;;;;36173:14:0;;;36162:25;;;;;;36123:80;-1:-1:-1;;;;;36217:16:0;;;;;;;:8;:16;;;;;36245:15;36217:25;;;:43;36278:28;;;;:42;36275:317;;-1:-1:-1;;;;;36350:16:0;;;36341:38;36350:16;;;36341:8;36350:16;;;;;;:28;;;;;;36341:38;;;;;:45;;:50;;36390:1;;36341:38;:50;;36390:1;;36341:50;:::i;:::-;;;;-1:-1:-1;;36442:5:0;;;;;36415:33;;8334:25:1;;;26169:42:0;;-1:-1:-1;;;;;36415:33:0;;;-1:-1:-1;;;;;;;;;;;36415:33:0;8322:2:1;8307:18;36415:33:0;;;;;;;35918:2523;;36275:317;26169:42;36489:18;;;;:8;:18;;-1:-1:-1;;;;;;;;;;;36489:30:0;;36518:1;;36489:18;:30;;36518:1;;36489:30;:::i;35918:2523::-;36618:19;36612:2;:25;;;;;;;;:::i;:::-;;36609:1832;;;36679:6;;36687:5;;;;;36659:34;;8334:25:1;;;-1:-1:-1;;;;;36679:6:0;;;;36659:34;;;-1:-1:-1;;;;;;;;;;;36659:34:0;8322:2:1;8307:18;36659:34:0;;;;;;;36733:8;;36743:5;;;;;36713:36;;8334:25:1;;;-1:-1:-1;;;;;36733:8:0;;;;36713:36;;;-1:-1:-1;;;;;;;;;;;36713:36:0;8322:2:1;8307:18;36713:36:0;;;;;;;36789:10;;36801:5;;;;;36769:38;;8334:25:1;;;-1:-1:-1;;;;;36789:10:0;;;;36769:38;;;-1:-1:-1;;;;;;;;;;;36769:38:0;8322:2:1;8307:18;36769:38:0;;;;;;;36835:15;;36825:6;:25;36822:85;;36871:8;:20;;-1:-1:-1;;;;;;36871:20:0;-1:-1:-1;;;;;36871:20:0;;;;;36822:85;-1:-1:-1;;;;;36939:19:0;;36921:14;36939:19;;;:8;:19;;;;;:26;;;36976:6;;36939:33;;36968:4;;36939:33;:::i;:::-;36938:44;;;;:::i;:::-;-1:-1:-1;;;;;37076:19:0;;;;;;:8;:19;;;;;:26;;;36921:61;;-1:-1:-1;37067:35:0;;37064:110;;;-1:-1:-1;;;;;37123:19:0;;;;;;:8;:19;;;;;:26;;:35;;;37064:110;37201:12;;37191:6;:22;37188:226;;37234:10;:22;;-1:-1:-1;;;;;;37234:22:0;-1:-1:-1;;;;;37234:22:0;;;;;;;;37275:12;:21;;;37329:15;37315:11;:29;;;37368:30;;8334:25:1;;;37368:30:0;;8322:2:1;8307:18;37368:30:0;;;;;;;37188:226;-1:-1:-1;;;;;37431:19:0;;;37474:1;37431:19;;;:8;:19;;;;;:31;;;;:45;37428:352;;-1:-1:-1;;;;;37506:19:0;;;37497:41;37506:19;;;37497:8;37506:19;;;;;;:31;;;;;;37497:41;;;;;:48;;:53;;37549:1;;37497:41;:53;;37549:1;;37497:53;:::i;:::-;;;;-1:-1:-1;;;;;;;37594:19:0;;;;;;;:8;:19;;;;;;;:31;;;37627:5;;;;37574:59;;37594:31;;;-1:-1:-1;;;;;;;;;;;37574:59:0;;;8334:25:1;;;8322:2;8307:18;;8289:76;37574:59:0;;;;;;;;37428:352;;;26169:42;37674:18;;;;:8;:18;;-1:-1:-1;;;;;;;;;;;37674:30:0;;37703:1;;37674:18;:30;;37703:1;;37674:30;:::i;:::-;;;;-1:-1:-1;;37758:5:0;;;;;37728:36;;8334:25:1;;;26169:42:0;;-1:-1:-1;;;;;37728:36:0;;;-1:-1:-1;;;;;;;;;;;37728:36:0;8322:2:1;8307:18;37728:36:0;;;;;;;37428:352;-1:-1:-1;;;;;;37835:19:0;;;;;;:8;:19;;;;;37865:15;37835:27;;;;:45;36609:1832;;;37985:8;:19;;-1:-1:-1;;;;;;37985:19:0;26169:42;37985:19;;;-1:-1:-1;;;;;38037:19:0;;37985:8;38037:19;;;:8;:19;;;;;:26;;;38074:6;;38037:33;;38066:4;;38037:33;:::i;:::-;38036:44;;;;:::i;:::-;38108:5;;38019:61;;-1:-1:-1;;;;;;38098:15:0;;;38108:5;;38098:15;;;;:37;;-1:-1:-1;38130:5:0;;-1:-1:-1;;;;;38117:18:0;;;38130:5;;38117:18;;38098:37;:76;;;;-1:-1:-1;;;;;;38148:19:0;;;;;;:8;:19;;;;;:26;;;38139:35;;38098:76;38095:290;;;-1:-1:-1;;;;;38195:19:0;;;;;;;:8;:19;;;;;;:26;;:35;;;38329:16;;;;;;:23;;;38363:6;;38329:30;;38355:4;;38329:30;:::i;:::-;38328:41;;;;:::i;:::-;-1:-1:-1;;;;;38302:16:0;;;;;;:8;:16;;;;;:23;;:67;38095:290;26169:42;38399:18;;;;:8;:18;;-1:-1:-1;;;;;;;;;;;38399:30:0;;38428:1;;38399:18;:30;;38428:1;;38399:30;:::i;:::-;;;;-1:-1:-1;;;36609:1832:0;38546:10;;-1:-1:-1;;;;;38536:20:0;;;38546:10;;38536:20;;:74;;;38592:18;;38578:11;;:32;;;;:::i;:::-;38560:15;:50;38536:74;38533:211;;;38627:10;:21;;-1:-1:-1;;;;;;38627:21:0;26169:42;38627:21;;;;;;-1:-1:-1;38663:12:0;:16;38699:33;;38716:15;8334:25:1;;38699:33:0;;8322:2:1;8307:18;38699:33:0;;;;;;;38533:211;38762:1;:5;;;38754:4;;:13;;;;;;;:::i;:::-;;;;-1:-1:-1;;38795:5:0;;;;:12;;38803:4;;38795:12;:::i;:::-;38778:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;38818:45:0;;-1:-1:-1;38828:6:0;38836:9;38847:4;38853:1;38856:6;38818:9;:45::i;:::-;38874:10;:15;;38887:2;;38874:10;-1:-1:-1;;38874:15:0;;38887:2;38874:15;;;;;;;;:::i;:::-;;;;;-1:-1:-1;38907:4:0;;32847:6072;-1:-1:-1;;;;;;;;;;;32847:6072:0:o;14079:117::-;14142:7;14169:19;14177:3;12538:18;;12455:109;14204:158;14278:7;14329:22;14333:3;14345:5;14329:3;:22::i;13578:152::-;13648:4;13672:50;13677:3;-1:-1:-1;;;;;13697:23:0;;13672:4;:50::i;13738:158::-;13811:4;13835:53;13843:3;-1:-1:-1;;;;;13863:23:0;;13835:7;:53::i;40603:1213::-;40756:26;40746:6;:36;;;;;;;;:::i;:::-;;40742:1006;;;40834:8;;:15;;40845:4;;40834:15;:::i;:::-;-1:-1:-1;;;;;40799:16:0;;;;;;:8;:16;;;;;:23;;:50;;:23;;:16;:50;;;;;:::i;:::-;;;;-1:-1:-1;;40900:16:0;;;;;-1:-1:-1;;;;;40864:19:0;;;;;;:8;:19;;;;;;:26;;:53;;40900:16;;40864:26;;:53;;40900:16;;40864:53;:::i;:::-;;;;-1:-1:-1;;40967:16:0;;;;:23;;40986:4;;40967:23;:::i;:::-;-1:-1:-1;;;;;40932:19:0;;;;;;:8;:19;;;;;:26;;:58;;:26;;:19;:58;;;;;:::i;:::-;;;;-1:-1:-1;40742:1006:0;;-1:-1:-1;40742:1006:0;;41022:28;41012:6;:38;;;;;;;;:::i;:::-;;41008:740;;;41102:8;;-1:-1:-1;;;;;41067:16:0;;41102:8;41067:16;;;:8;:16;;;;;:23;;:43;;:23;;41102:8;41067:43;;41102:8;;41067:43;:::i;:::-;;;;-1:-1:-1;;41160:8:0;;:15;;41171:4;;41160:15;:::i;:::-;-1:-1:-1;;;;;41125:16:0;;;;;;:8;:16;;;;;:23;;:50;;:23;;:16;:50;;;;;:::i;41008:740::-;41280:28;41270:6;:38;;;;;;;;:::i;:::-;;41266:482;;;41360:8;;-1:-1:-1;;;;;41325:16:0;;41360:8;41325:16;;;:8;:16;;;;;:23;;:43;;:23;;41360:8;41325:43;;41360:8;;41325:43;:::i;:::-;;;;-1:-1:-1;;41419:8:0;;:15;;41430:4;;41419:15;:::i;41266:482::-;41645:8;;:15;;41656:4;;41645:15;:::i;:::-;-1:-1:-1;;;;;41609:16:0;;;;;;:8;:16;;;;;:23;;:52;;:23;;:16;:52;;;;;:::i;:::-;;;;-1:-1:-1;;41712:16:0;;;;:23;;41731:4;;41712:23;:::i;:::-;-1:-1:-1;;;;;41676:19:0;;;;;;:8;:19;;;;;:26;;:60;;:26;;:19;:60;;;;;:::i;:::-;;;;-1:-1:-1;;41266:482:0;41780:9;-1:-1:-1;;;;;41763:45:0;41772:6;-1:-1:-1;;;;;41763:45:0;-1:-1:-1;;;;;;;;;;;41791:1:0;:16;;;41763:45;;;;8334:25:1;;8322:2;8307:18;;8289:76;41763:45:0;;;;;;;;40603:1213;;;;;:::o;12572:204::-;12667:18;;12639:7;;12667:26;-1:-1:-1;12659:73:0;;;;-1:-1:-1;;;12659:73:0;;9510:2:1;12659:73:0;;;9492:21:1;9549:2;9529:18;;;9522:30;9588:34;9568:18;;;9561:62;-1:-1:-1;;;9639:18:1;;;9632:32;9681:19;;12659:73:0;9482:224:1;12659:73:0;12750:3;:11;;12762:5;12750:18;;;;;;;;:::i;:::-;;;;;;;;;12743:25;;12572:204;;;;:::o;10335:414::-;10398:4;12415:19;;;:12;;;:19;;;;;;10415:327;;-1:-1:-1;10458:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;10641:18;;10619:19;;;:12;;;:19;;;;;;:40;;;;10674:11;;10415:327;-1:-1:-1;10725:5:0;10718:12;;10757:1553;10823:4;10962:19;;;:12;;;:19;;;;;;10998:15;;10994:1309;;11360:21;11384:14;11397:1;11384:10;:14;:::i;:::-;11433:18;;11360:38;;-1:-1:-1;11413:17:0;;11433:22;;11454:1;;11433:22;:::i;:::-;11413:42;;11700:17;11720:3;:11;;11732:9;11720:22;;;;;;;;:::i;:::-;;;;;;;;;11700:42;;11866:9;11837:3;:11;;11849:13;11837:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;11943:23;;;:12;;;:23;;;;;;:36;;;12104:17;;11943:3;;12104:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12199:3;:12;;:19;12212:5;12199:19;;;;;;;;;;;12192:26;;;12242:4;12235:11;;;;;;;;10994:1309;12286:5;12279:12;;;;;14:156:1;80:20;;140:4;129:16;;119:27;;109:2;;160:1;157;150:12;109:2;61:109;;;:::o;175:247::-;234:6;287:2;275:9;266:7;262:23;258:32;255:2;;;303:1;300;293:12;255:2;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:2;;;566:1;563;556:12;518:2;598:9;592:16;617:31;642:5;617:31;:::i;683:388::-;751:6;759;812:2;800:9;791:7;787:23;783:32;780:2;;;828:1;825;818:12;780:2;867:9;854:23;886:31;911:5;886:31;:::i;:::-;936:5;-1:-1:-1;993:2:1;978:18;;965:32;1006:33;965:32;1006:33;:::i;:::-;1058:7;1048:17;;;770:301;;;;;:::o;1076:456::-;1153:6;1161;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:2;;;1238:1;1235;1228:12;1190:2;1277:9;1264:23;1296:31;1321:5;1296:31;:::i;:::-;1346:5;-1:-1:-1;1403:2:1;1388:18;;1375:32;1416:33;1375:32;1416:33;:::i;:::-;1180:352;;1468:7;;-1:-1:-1;;;1522:2:1;1507:18;;;;1494:32;;1180:352::o;1537:661::-;1629:6;1637;1645;1653;1661;1714:3;1702:9;1693:7;1689:23;1685:33;1682:2;;;1731:1;1728;1721:12;1682:2;1770:9;1757:23;1789:31;1814:5;1789:31;:::i;:::-;1839:5;-1:-1:-1;1896:2:1;1881:18;;1868:32;1909:33;1868:32;1909:33;:::i;:::-;1961:7;-1:-1:-1;2015:2:1;2000:18;;1987:32;;-1:-1:-1;2071:2:1;2056:18;;2043:32;2084:30;2043:32;2084:30;:::i;:::-;1672:526;;;;-1:-1:-1;1672:526:1;;2187:3;2172:19;2159:33;;1672:526;-1:-1:-1;;1672:526:1:o;2203:382::-;2268:6;2276;2329:2;2317:9;2308:7;2304:23;2300:32;2297:2;;;2345:1;2342;2335:12;2297:2;2384:9;2371:23;2403:31;2428:5;2403:31;:::i;:::-;2453:5;-1:-1:-1;2510:2:1;2495:18;;2482:32;2523:30;2482:32;2523:30;:::i;2590:315::-;2658:6;2666;2719:2;2707:9;2698:7;2694:23;2690:32;2687:2;;;2735:1;2732;2725:12;2687:2;2774:9;2761:23;2793:31;2818:5;2793:31;:::i;:::-;2843:5;2895:2;2880:18;;;;2867:32;;-1:-1:-1;;;2677:228:1:o;2910:750::-;3002:6;3010;3018;3071:2;3059:9;3050:7;3046:23;3042:32;3039:2;;;3087:1;3084;3077:12;3039:2;3127:9;3114:23;3156:18;3197:2;3189:6;3186:14;3183:2;;;3213:1;3210;3203:12;3183:2;3251:6;3240:9;3236:22;3226:32;;3296:7;3289:4;3285:2;3281:13;3277:27;3267:2;;3318:1;3315;3308:12;3267:2;3358;3345:16;3384:2;3376:6;3373:14;3370:2;;;3400:1;3397;3390:12;3370:2;3455:7;3448:4;3438:6;3435:1;3431:14;3427:2;3423:23;3419:34;3416:47;3413:2;;;3476:1;3473;3466:12;3413:2;3507:4;3499:13;;;;-1:-1:-1;3531:6:1;-1:-1:-1;;3572:20:1;;3559:34;3602:28;3559:34;3602:28;:::i;:::-;3649:5;3639:15;;;3029:631;;;;;:::o;3665:241::-;3721:6;3774:2;3762:9;3753:7;3749:23;3745:32;3742:2;;;3790:1;3787;3780:12;3742:2;3829:9;3816:23;3848:28;3870:5;3848:28;:::i;3911:245::-;3978:6;4031:2;4019:9;4010:7;4006:23;4002:32;3999:2;;;4047:1;4044;4037:12;3999:2;4079:9;4073:16;4098:28;4120:5;4098:28;:::i;4161:376::-;4223:6;4231;4284:2;4272:9;4263:7;4259:23;4255:32;4252:2;;;4300:1;4297;4290:12;4252:2;4339:9;4326:23;4358:28;4380:5;4358:28;:::i;4542:180::-;4601:6;4654:2;4642:9;4633:7;4629:23;4625:32;4622:2;;;4670:1;4667;4660:12;4622:2;-1:-1:-1;4693:23:1;;4612:110;-1:-1:-1;4612:110:1:o;4727:184::-;4797:6;4850:2;4838:9;4829:7;4825:23;4821:32;4818:2;;;4866:1;4863;4856:12;4818:2;-1:-1:-1;4889:16:1;;4808:103;-1:-1:-1;4808:103:1:o;4916:515::-;5008:6;5016;5024;5032;5040;5093:3;5081:9;5072:7;5068:23;5064:33;5061:2;;;5110:1;5107;5100:12;5061:2;5146:9;5133:23;5123:33;;5203:2;5192:9;5188:18;5175:32;5165:42;;5254:2;5243:9;5239:18;5226:32;5216:42;;5305:2;5294:9;5290:18;5277:32;5267:42;;5359:3;5348:9;5344:19;5331:33;5373:28;5395:5;5373:28;:::i;:::-;5420:5;5410:15;;;5051:380;;;;;;;;:::o;5436:250::-;5502:6;5510;5563:2;5551:9;5542:7;5538:23;5534:32;5531:2;;;5579:1;5576;5569:12;5531:2;5615:9;5602:23;5592:33;;5644:36;5676:2;5665:9;5661:18;5644:36;:::i;:::-;5634:46;;5521:165;;;;;:::o;5691:250::-;5757:6;5765;5818:2;5806:9;5797:7;5793:23;5789:32;5786:2;;;5834:1;5831;5824:12;5786:2;5857:27;5874:9;5857:27;:::i;6151:137::-;6229:1;6222:5;6219:12;6209:2;;6235:18;;:::i;:::-;6264;;6199:89::o;6293:137::-;6371:1;6364:5;6361:12;6351:2;;6377:18;;:::i;7766:202::-;7909:2;7894:18;;7921:41;7898:9;7944:6;7921:41;:::i;7973:202::-;8116:2;8101:18;;8128:41;8105:9;8151:6;8128:41;:::i;8370:597::-;8482:4;8511:2;8540;8529:9;8522:21;8572:6;8566:13;8615:6;8610:2;8599:9;8595:18;8588:34;8640:1;8650:140;8664:6;8661:1;8658:13;8650:140;;;8759:14;;;8755:23;;8749:30;8725:17;;;8744:2;8721:26;8714:66;8679:10;;8650:140;;;8808:6;8805:1;8802:13;8799:2;;;8878:1;8873:2;8864:6;8853:9;8849:22;8845:31;8838:42;8799:2;-1:-1:-1;8951:2:1;8930:15;-1:-1:-1;;8926:29:1;8911:45;;;;8958:2;8907:54;;8491:476;-1:-1:-1;;;8491:476:1:o;8972:331::-;9174:2;9156:21;;;9213:1;9193:18;;;9186:29;-1:-1:-1;;;9246:2:1;9231:18;;9224:38;9294:2;9279:18;;9146:157::o;11164:329::-;11366:2;11348:21;;;11405:1;11385:18;;;11378:29;-1:-1:-1;;;11438:2:1;11423:18;;11416:36;11484:2;11469:18;;11338:155::o;13686:331::-;13888:2;13870:21;;;13927:1;13907:18;;;13900:29;-1:-1:-1;;;13960:2:1;13945:18;;13938:38;14008:2;13993:18;;13860:157::o;15479:335::-;15681:2;15663:21;;;15720:2;15700:18;;;15693:30;-1:-1:-1;;;15754:2:1;15739:18;;15732:41;15805:2;15790:18;;15653:161::o;24032:407::-;24234:2;24216:21;;;24273:2;24253:18;;;24246:30;24312:34;24307:2;24292:18;;24285:62;-1:-1:-1;;;24378:2:1;24363:18;;24356:41;24429:3;24414:19;;24206:233::o;25892:1512::-;26105:13;;6125;6118:21;6106:34;;26076:3;26061:19;;26177:4;26169:6;26165:17;26159:24;26192:51;26237:4;26226:9;26222:20;26208:12;6125:13;6118:21;6106:34;;6096:50;26192:51;;26292:4;26284:6;26280:17;26274:24;26307:53;26354:4;26343:9;26339:20;26323:14;6125:13;6118:21;6106:34;;6096:50;26307:53;;26409:4;26401:6;26397:17;26391:24;26424:53;26471:4;26460:9;26456:20;26440:14;6125:13;6118:21;6106:34;;6096:50;26424:53;;26526:4;26518:6;26514:17;26508:24;26541:53;26588:4;26577:9;26573:20;26557:14;6125:13;6118:21;6106:34;;6096:50;26541:53;;26643:4;26635:6;26631:17;26625:24;26658:53;26705:4;26694:9;26690:20;26674:14;6125:13;6118:21;6106:34;;6096:50;26658:53;-1:-1:-1;26767:4:1;26755:17;;;26749:24;26727:20;;;26720:54;26830:4;26818:17;;;26812:24;26790:20;;;26783:54;26856:6;26904:15;;;26898:22;26878:18;;;26871:50;26940:6;26988:15;;;26982:22;26962:18;;;26955:50;27024:6;27072:15;;;27066:22;27046:18;;;27039:50;27108:6;27156:15;;;27150:22;27130:18;;;27123:50;27192:6;27240:15;;;27234:22;27214:18;;;27207:50;27276:6;27319:15;;;27313:22;-1:-1:-1;;;;;6012:31:1;;27379:18;;;6000:44;27344:54;5990:60;27409:554;27698:13;;27680:32;;27768:4;27756:17;;;27750:24;27728:20;;;27721:54;27831:4;27819:17;;;27813:24;27791:20;;;27784:54;27667:3;27652:19;;27847:50;27893:2;27878:18;;27870:6;27847:50;:::i;:::-;27906:51;27952:3;27941:9;27937:19;27929:6;27906:51;:::i;28592:128::-;28632:3;28663:1;28659:6;28656:1;28653:13;28650:2;;;28669:18;;:::i;:::-;-1:-1:-1;28705:9:1;;28640:80::o;28725:120::-;28765:1;28791;28781:2;;28796:18;;:::i;:::-;-1:-1:-1;28830:9:1;;28771:74::o;28850:168::-;28890:7;28956:1;28952;28948:6;28944:14;28941:1;28938:21;28933:1;28926:9;28919:17;28915:45;28912:2;;;28963:18;;:::i;:::-;-1:-1:-1;29003:9:1;;28902:116::o;29023:125::-;29063:4;29091:1;29088;29085:8;29082:2;;;29096:18;;:::i;:::-;-1:-1:-1;29133:9:1;;29072:76::o;29153:380::-;29232:1;29228:12;;;;29275;;;29296:2;;29350:4;29342:6;29338:17;29328:27;;29296:2;29403;29395:6;29392:14;29372:18;29369:38;29366:2;;;29449:10;29444:3;29440:20;29437:1;29430:31;29484:4;29481:1;29474:15;29512:4;29509:1;29502:15;29366:2;;29208:325;;;:::o;29538:135::-;29577:3;-1:-1:-1;;29598:17:1;;29595:2;;;29618:18;;:::i;:::-;-1:-1:-1;29665:1:1;29654:13;;29585:88::o;29678:112::-;29710:1;29736;29726:2;;29741:18;;:::i;:::-;-1:-1:-1;29775:9:1;;29716:74::o;29795:127::-;29856:10;29851:3;29847:20;29844:1;29837:31;29887:4;29884:1;29877:15;29911:4;29908:1;29901:15;29927:127;29988:10;29983:3;29979:20;29976:1;29969:31;30019:4;30016:1;30009:15;30043:4;30040:1;30033:15;30059:127;30120:10;30115:3;30111:20;30108:1;30101:31;30151:4;30148:1;30141:15;30175:4;30172:1;30165:15;30191:127;30252:10;30247:3;30243:20;30240:1;30233:31;30283:4;30280:1;30273:15;30307:4;30304:1;30297:15;30323:127;30384:10;30379:3;30375:20;30372:1;30365:31;30415:4;30412:1;30405:15;30439:4;30436:1;30429:15;30455:131;-1:-1:-1;;;;;30530:31:1;;30520:42;;30510:2;;30576:1;30573;30566:12;30510:2;30500:86;:::o;30591:118::-;30677:5;30670:13;30663:21;30656:5;30653:32;30643:2;;30699:1;30696;30689:12

Swarm Source

ipfs://65599791157079486a45055f8c583f6a751cfd2f3e23c22444bcc3206ca0aab4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

PONZU INU is a decentralized gameified tokenomics experiment. Designed to positively incentivize buyer psychology through competition and bonuses for smart trading and planned friction on selling mechanics

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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