ETH Price: $2,651.28 (+1.76%)

Contract

0x1aB62fB6339912dd58638632b657B5CF689ad936
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve152974382022-08-07 20:46:29802 days ago1659905189IN
0x1aB62fB6...F689ad936
0 ETH0.0006747414.47833146
Approve143797102022-03-13 17:47:50949 days ago1647193670IN
0x1aB62fB6...F689ad936
0 ETH0.0017243437
Approve138386052021-12-19 23:39:331033 days ago1639957173IN
0x1aB62fB6...F689ad936
0 ETH0.0024889553.40636052
Approve138143732021-12-16 5:50:311037 days ago1639633831IN
0x1aB62fB6...F689ad936
0 ETH0.0033854172.64205186
Approve138143592021-12-16 5:46:491037 days ago1639633609IN
0x1aB62fB6...F689ad936
0 ETH0.0032294569.29564568
Approve138143532021-12-16 5:44:471037 days ago1639633487IN
0x1aB62fB6...F689ad936
0 ETH0.0029189862.63375492
Approve138143262021-12-16 5:38:121037 days ago1639633092IN
0x1aB62fB6...F689ad936
0 ETH0.0034952574.99902696
Approve138143192021-12-16 5:35:451037 days ago1639632945IN
0x1aB62fB6...F689ad936
0 ETH0.0035532376.24318613
Approve138143102021-12-16 5:32:171037 days ago1639632737IN
0x1aB62fB6...F689ad936
0 ETH0.0027087958.12362197
Approve138143002021-12-16 5:30:501037 days ago1639632650IN
0x1aB62fB6...F689ad936
0 ETH0.0033055270.92794702
Approve138141172021-12-16 4:47:161037 days ago1639630036IN
0x1aB62fB6...F689ad936
0 ETH0.0029699763.72796617
Approve138140912021-12-16 4:40:511037 days ago1639629651IN
0x1aB62fB6...F689ad936
0 ETH0.0027798159.64756642
Approve138140072021-12-16 4:23:181037 days ago1639628598IN
0x1aB62fB6...F689ad936
0 ETH0.0044855696.24854822
Approve138139992021-12-16 4:20:481037 days ago1639628448IN
0x1aB62fB6...F689ad936
0 ETH0.0039565184.89645352
Approve138139262021-12-16 4:02:471037 days ago1639627367IN
0x1aB62fB6...F689ad936
0 ETH0.003500475.10962344
Transfer138139152021-12-16 3:59:491037 days ago1639627189IN
0x1aB62fB6...F689ad936
0 ETH0.0059671866.38392983
Transfer138139072021-12-16 3:58:121037 days ago1639627092IN
0x1aB62fB6...F689ad936
0 ETH0.0059548966.23830802
Transfer138138792021-12-16 3:51:131037 days ago1639626673IN
0x1aB62fB6...F689ad936
0 ETH0.0050572556.25361507
Transfer138138622021-12-16 3:48:061037 days ago1639626486IN
0x1aB62fB6...F689ad936
0 ETH0.0049397654.9466942
Transfer138138482021-12-16 3:46:021037 days ago1639626362IN
0x1aB62fB6...F689ad936
0 ETH0.0066019461.69986106
Approve138138322021-12-16 3:42:341037 days ago1639626154IN
0x1aB62fB6...F689ad936
0 ETH0.0036202777.68169937
Approve137932942021-12-12 23:15:101040 days ago1639350910IN
0x1aB62fB6...F689ad936
0 ETH0.00644754138.34752728
Approve137724392021-12-09 17:44:491043 days ago1639071889IN
0x1aB62fB6...F689ad936
0 ETH0.0034590174.22146854
Approve137723452021-12-09 17:24:551043 days ago1639070695IN
0x1aB62fB6...F689ad936
0 ETH0.004097887.9281395
Approve137612202021-12-07 22:40:001045 days ago1638916800IN
0x1aB62fB6...F689ad936
0 ETH0.004038686.65787941
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00029155 ETH
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00029155 ETH
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00066814 ETH
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00066814 ETH
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00167036 ETH
152974402022-08-07 20:47:12802 days ago1659905232
0x1aB62fB6...F689ad936
0.00300665 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00041636 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00041636 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00095368 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00095368 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00238421 ETH
152633662022-08-02 13:23:06808 days ago1659446586
0x1aB62fB6...F689ad936
0.00429158 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00095752 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00095752 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00218833 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00218833 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00547082 ETH
143797102022-03-13 17:47:50949 days ago1647193670
0x1aB62fB6...F689ad936
0.00984748 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.00111874 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.00111874 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.00255575 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.00255575 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.00638937 ETH
143793242022-03-13 16:24:19950 days ago1647188659
0x1aB62fB6...F689ad936
0.01150088 ETH
138143762021-12-16 5:50:541037 days ago1639633854
0x1aB62fB6...F689ad936
0.00097768 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ElephInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-02
*/

// File: elehelpers/IUniswapV2Factory.sol


pragma solidity ^0.8.7;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
// File: elehelpers/IERC20.sol


pragma solidity ^0.8.7;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}
// File: elehelpers/SafeMath.sol



pragma solidity ^0.8.7;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
// File: elehelpers/IUniswapV2Router02.sol


pragma solidity ^0.8.7;

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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



pragma solidity ^0.8.7;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
// File: elehelpers/ERC20Ownable.sol


pragma solidity ^0.8.7;


abstract contract ERC20Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
// File: contracts/elephinu.sol









pragma solidity ^0.8.7;

contract ElephInu is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint) private _setCoolDown;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e12 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _maxTxAmount = _tTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 private pcsV2Router;
    address private pcsV2Pair;

    bool inSwapAndLiquify;
    bool private swapAndLiquifyEnabled = true;
    bool private coolDownEnabled = true;
    bool private _initiate = true;
    bool private _limitTxns = false;

    address payable public marketingAddress;
    address payable public charityAddress;

    uint256 private tokensForLiquidityToSwap;
    uint256 private tokensForMarketingToSwap;
    uint256 private tokensForCharityToSwap;
    uint256 private numTokensBeforeSwap;

    //HOW TAX IS TAKEN. FIXED 
    uint8 private _refTax = 1; // Fee for Reflection
    uint8 private _previousRefTax = _refTax;
    uint8 private _liqTax = 2; // Fee for Liquidity
    uint8 private _previousLiqTax = _liqTax;
    uint8 private _devTax = 7; // Fee to marketing/charity wallet
    uint8 private _previousDevTax = _devTax;

    //HOW TAX IS SPLIT. FIXED
    uint8 public taxReflections = 1;
    uint8 public taxLiquidity = 2;
    uint8 public taxCharity = 2;
    uint8 public taxMarketing = 5;
    uint8 public taxTotal = taxReflections + taxCharity + taxLiquidity + taxMarketing;

    string private constant _nomenclature = "ELEPHINU";
    string private constant _ticker = "ELEPHINU";
    uint8 private constant _decimals = 18;

    address dead = 0x000000000000000000000000000000000000dEaD;

    event MaxTxAmountUpdated(uint _maxTxAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event UpdatedMarketingAddress(address marketing);
    event UpdatedCharityAddress(address charity);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        charityAddress = payable(0x7EE3C40f2e65f8514fC3898d1524BcC0c222C9B6);
        marketingAddress = payable(0xc3F8BEa25ff8C51c4b33612B3F5641B83B8F93C5);
        numTokensBeforeSwap = _tTotal * 5 / 10000; //Must have 0.05% of total supply before swap
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    receive() external payable {}
    function name() public pure override returns (string memory) {
        return _nomenclature;
    }
    function symbol() public pure override returns (string memory) {
        return _ticker;
    }
    function decimals() public pure override returns (uint8) {
        return _decimals;
    }
    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function taxTokensBeforeSwapAmount() external view returns (uint256) {
        return numTokensBeforeSwap;
    }
    function taxTokensForLiquidityAmount() external view returns (uint256) {
        return tokensForLiquidityToSwap;
    }
    function taxTokensForCharityAmount() external view returns (uint256) {
        return tokensForCharityToSwap;
    }
    function taxTokensForMarketingAmount() external view returns (uint256) {
        return tokensForMarketingToSwap;
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function setCooldownEnabled(bool onoff) external onlyOwner() {
        coolDownEnabled = onoff;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    function setRouterPair() external onlyOwner {
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pcsV2Router = _pcsV2Router;
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).getPair(address(this), _pcsV2Router.WETH());
    }
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    function _getValues(uint256 tAmount) private view returns (uint256,uint256,uint256,uint256,uint256,uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }
    function _getTValues(uint256 tAmount)private view returns (uint256,uint256,uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }
    function _getRValues(uint256 tAmount,uint256 tFee,uint256 tLiquidity,uint256 currentRate) private pure returns (uint256,uint256,uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    function _takeLiquidity(uint256 tLiquidity) private {
        tokensForLiquidityToSwap += tLiquidity * 2 / 9; //Division by 9 for total tax minus reflections
        tokensForMarketingToSwap += tLiquidity * 5 / 9;
        tokensForCharityToSwap += tLiquidity * 2 / 9;
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_refTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liqTax + _devTax).div(10**2);
    }
    function removeAllFee() private {
        if (_refTax == 0 && _liqTax == 0 && _devTax == 0) return;

        _previousRefTax = _refTax;
        _previousLiqTax = _liqTax;
        _previousDevTax = _devTax;

        _refTax = 0;
        _liqTax = 0;
        _devTax = 0;
    }
    function restoreAllFee() private {
        _refTax = _previousRefTax;
        _liqTax = _previousLiqTax;
        _devTax = _previousDevTax;
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _transfer(address from,address to,uint256 amount) private {
        require(from != address(0), "ERC20: transfer from zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_limitTxns == true) {
            require(amount <= 500000000 * 10**18, "Amount must be lower then 0.05% of total supply");
        }
        if (from == pcsV2Pair && to != address(pcsV2Router) && ! _isExcludedFromFee[to] && coolDownEnabled) {
                require(amount <= _maxTxAmount);
                require(_setCoolDown[to] < block.timestamp);
                _setCoolDown[to] = block.timestamp + (30 seconds);
            }
        if(_initiate == true) {
            IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            pcsV2Router = _pcsV2Router;
            pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).getPair(address(this), _pcsV2Router.WETH());
            _limitTxns = true;
            _initiate = false;
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        if (!inSwapAndLiquify && to == pcsV2Pair && swapAndLiquifyEnabled) {
            if (contractTokenBalance >= numTokensBeforeSwap) {
                SwapIt();
            }
        }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function SwapIt() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidityToSwap + tokensForMarketingToSwap + tokensForCharityToSwap;
        uint256 tokensForLiquidity = tokensForLiquidityToSwap.div(2); //Halve the amount of liquidity tokens
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketingToSwap).div(totalTokensToSwap);
        uint256 ethForCharity = ethBalance.mul(tokensForCharityToSwap).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForCharity);
        tokensForLiquidityToSwap = 0;
        tokensForMarketingToSwap = 0;
        tokensForCharityToSwap = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        (success,) = address(charityAddress).call{value: ethForCharity}("");
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        //If any eth left over transfer out of contract as to not get stuck
        if(address(this).balance > 0 * 10**18){
            (success,) = address(marketingAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp.add(300)
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(pcsV2Router), tokenAmount);
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            dead,
            block.timestamp.add(300)
        );
    }
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    function setCharityAddress(address _charityAddress) public onlyOwner {
        require(_charityAddress != address(0), "_liquidityAddress address cannot be 0");
        charityAddress = payable(_charityAddress);
        emit UpdatedCharityAddress(_charityAddress);
    }
    function initiate() external onlyOwner {
        _initiate = true;
    }
    function SwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function SwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function LimitTxnsOn() external onlyOwner {
        _limitTxns = true;
    }
    function LimitTxnsOff() external onlyOwner {
        _limitTxns = false;
    }
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        if (!takeFee) removeAllFee();
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        if (!takeFee) restoreAllFee();
    }
    function _transferStandard(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender,address recipient,uint256 tAmount) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
}

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":false,"internalType":"address","name":"charity","type":"address"}],"name":"UpdatedCharityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"LimitTxnsOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitTxnsOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":[],"name":"initiate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRouterPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxCharity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLiquidity","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxMarketing","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReflections","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForCharityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForLiquidityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTokensForMarketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTotal","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

60806040526200001f6c0c9f2c9cd04674edea4000000060001962000345565b6200002d906000196200032b565b6008556c0c9f2c9cd04674edea40000000600955600c80546201010160a81b63ffffffff60a81b199091161790556013805461ffff60201b1963ffffffff19821660ff6201000062ffffff19909416620201019081179490940481166301000000029190911790921790811664010000000060ff60201b19929092166407000000009081179290920483166501000000000002171763ffffffff60301b1916690502020100000000000017918290556901000000000000000000820481169167010000000000000081048216916200012091680100000000000000008104821691660100000000000090910416620002ca565b6200012c9190620002ca565b620001389190620002ca565b60138054600160501b600160f81b0319166a010000000000000000000060ff9390931692909202600160581b600160f81b031916919091176cdead00000000000000000000001790553480156200018e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060085433600090815260016020526040902055600e80546001600160a01b0319908116737ee3c40f2e65f8514fc3898d1524bcc0c222c9b617909155600d805490911673c3f8bea25ff8c51c4b33612b3f5641b83b8f93c5179055612710620002486c0c9f2c9cd04674edea40000000600562000309565b620002549190620002f2565b6012553360008181526005602090815260408083208054600160ff19918216811790925530855282852080549091169091179055516c0c9f2c9cd04674edea4000000081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000388565b600060ff821660ff84168060ff03821115620002ea57620002ea6200035c565b019392505050565b60008262000304576200030462000372565b500490565b60008160001904831182151516156200032657620003266200035c565b500290565b6000828210156200034057620003406200035c565b500390565b60008262000357576200035762000372565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61291780620003986000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063a5ece941116100ab578063d78ddca71161006f578063d78ddca714610673578063dd62ed3e14610698578063e2314bea146106de578063ea2a487014610705578063f2fde38b1461072657600080fd5b8063a5ece941146105e9578063a9059cbb14610609578063afcf2fc414610629578063b8578bfd14610649578063c3e4f87e1461065e57600080fd5b80638dd45fb2116100f25780638dd45fb21461057f578063906e9dd014610594578063956354fe146105b457806395d89b4114610240578063a457c2d7146105c957600080fd5b8063715018a6146104c657806383918605146104db57806385af175e146104f057806388f82020146105145780638da5cb5b1461054d57600080fd5b8063437823ec116101bc5780635932ead1116101805780635932ead11461043657806366aa56c5146104565780636ae8b6171461046b5780636c1699441461048057806370a08231146104a657600080fd5b8063437823ec146103935780634549b039146103b35780634b9d8413146103d35780635342acb4146103e857806357f79e201461042157600080fd5b806323b872dd1161020357806323b872dd146102fc5780632d8381191461031c578063313ce5671461033c57806336f3709e1461035e578063395093511461037357600080fd5b806306fdde0314610240578063095ea7b3146102805780630c9be46d146102b057806318160ddd146102d257600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506040805180820182526008815267454c455048494e5560c01b602082015290516102779190612695565b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046125db565b610746565b6040519015158152602001610277565b3480156102bc57600080fd5b506102d06102cb366004612527565b61075d565b005b3480156102de57600080fd5b506c0c9f2c9cd04674edea400000005b604051908152602001610277565b34801561030857600080fd5b506102a061031736600461259a565b610849565b34801561032857600080fd5b506102ee610337366004612622565b6108b2565b34801561034857600080fd5b5060125b60405160ff9091168152602001610277565b34801561036a57600080fd5b506102d0610923565b34801561037f57600080fd5b506102a061038e3660046125db565b610962565b34801561039f57600080fd5b506102d06103ae366004612527565b610998565b3480156103bf57600080fd5b506102ee6103ce36600461263b565b6109e6565b3480156103df57600080fd5b506010546102ee565b3480156103f457600080fd5b506102a0610403366004612527565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561042d57600080fd5b506012546102ee565b34801561044257600080fd5b506102d0610451366004612607565b610a7e565b34801561046257600080fd5b506102d0610ac6565b34801561047757600080fd5b506102d0610b05565b34801561048c57600080fd5b5060135461034c9068010000000000000000900460ff1681565b3480156104b257600080fd5b506102ee6104c1366004612527565b610ce8565b3480156104d257600080fd5b506102d0610d47565b3480156104e757600080fd5b50600f546102ee565b3480156104fc57600080fd5b5060135461034c906601000000000000900460ff1681565b34801561052057600080fd5b506102a061052f366004612527565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561055957600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610277565b34801561058b57600080fd5b506102d0610dbb565b3480156105a057600080fd5b506102d06105af366004612527565b610df4565b3480156105c057600080fd5b506102d0610f00565b3480156105d557600080fd5b506102a06105e43660046125db565b610f39565b3480156105f557600080fd5b50600d54610567906001600160a01b031681565b34801561061557600080fd5b506102a06106243660046125db565b610f88565b34801561063557600080fd5b50600e54610567906001600160a01b031681565b34801561065557600080fd5b506102d0610f95565b34801561066a57600080fd5b506011546102ee565b34801561067f57600080fd5b5060135461034c90670100000000000000900460ff1681565b3480156106a457600080fd5b506102ee6106b3366004612561565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106ea57600080fd5b5060135461034c906901000000000000000000900460ff1681565b34801561071157600080fd5b5060135461034c90600160501b900460ff1681565b34801561073257600080fd5b506102d0610741366004612527565b610fd4565b60006107533384846110c3565b5060015b92915050565b6000546001600160a01b031633146107905760405162461bcd60e51b8152600401610787906126ea565b60405180910390fd5b6001600160a01b0381166107f45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610787565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa6632906020015b60405180910390a150565b60006108568484846111d0565b6108a884336108a385604051806060016040528060288152602001612895602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906116d5565b6110c3565b5060019392505050565b60006008548211156109065760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610787565b6000610910611701565b905061091c8382611724565b9392505050565b6000546001600160a01b0316331461094d5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60c01b1916600160c01b179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107539185906108a39086611730565b6000546001600160a01b031633146109c25760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006c0c9f2c9cd04674edea40000000831115610a455760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610787565b81610a64576000610a558461173c565b50939550610757945050505050565b6000610a6f8461173c565b50929550610757945050505050565b6000546001600160a01b03163314610aa85760405162461bcd60e51b8152600401610787906126ea565b600c8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314610af05760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610b2f5760405162461bcd60e51b8152600401610787906126ea565b600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015610b8f57600080fd5b505afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190612544565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0f57600080fd5b505afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612544565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610c8d57600080fd5b505afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc59190612544565b600c80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b03811660009081526006602052604081205460ff1615610d2557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610757906108b2565b6000546001600160a01b03163314610d715760405162461bcd60e51b8152600401610787906126ea565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610de55760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60a81b19169055565b6000546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b038116610e825760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610787565b600d80546001600160a01b039081166000908152600560209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9910161083e565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60c01b19169055565b600061075333846108a3856040518060600160405280602581526020016128bd602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906116d5565b60006107533384846111d0565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b0381166110685760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610787565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111195760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610787565b6001600160a01b03821661116f5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610787565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112305760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610787565b6001600160a01b0382166112865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610787565b600081116112e85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610787565b600c54600160c01b900460ff16151560011415611373576b019d971e4fe8401e740000008111156113735760405162461bcd60e51b815260206004820152602f60248201527f416d6f756e74206d757374206265206c6f776572207468656e20302e3035252060448201526e6f6620746f74616c20737570706c7960881b6064820152608401610787565b600c546001600160a01b03848116911614801561139e5750600b546001600160a01b03838116911614155b80156113c357506001600160a01b03821660009081526005602052604090205460ff16155b80156113d85750600c54600160b01b900460ff165b15611435576009548111156113ec57600080fd5b6001600160a01b038216600090815260046020526040902054421161141057600080fd5b61141b42601e6127a0565b6001600160a01b0383166000908152600460205260409020555b600c54600160b81b900460ff1615156001141561161757600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190612544565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190612544565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115aa57600080fd5b505afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190612544565b600c8054600160c01b6001600160a01b0393909316600164ff0000000160a01b0319909116179190911760ff60b81b19169055505b600061162230610ce8565b600c54909150600160a01b900460ff1615801561164c5750600c546001600160a01b038481169116145b80156116615750600c54600160a81b900460ff165b156116775760125481106116775761167761178b565b6001600160a01b03841660009081526005602052604090205460019060ff16806116b957506001600160a01b03841660009081526005602052604090205460ff165b156116c2575060005b6116ce858585846119e6565b5050505050565b600081848411156116f95760405162461bcd60e51b81526004016107879190612695565b505050900390565b600080600061170e611ba7565b909250905061171d8282611724565b9250505090565b600061091c82846127dd565b600061091c82846127a0565b60008060008060008060008060006117538a611d53565b92509250925060008060006117718d868661176c611701565b611d8f565b919f909e50909c50959a5093985091965092945050505050565b600c805460ff60a01b1916600160a01b17905560006117a930610ce8565b90506000601154601054600f546117c091906127a0565b6117ca91906127a0565b905060006117e46002600f5461172490919063ffffffff16565b905060006117f28483611ddf565b9050476117fe82611deb565b600061180a4783611ddf565b9050600061182d8661182760105485611f5d90919063ffffffff16565b90611724565b9050600061184a8761182760115486611f5d90919063ffffffff16565b905060006118628261185c8686611ddf565b90611ddf565b6000600f81905560108190556011819055600d5460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146118c4576040519150601f19603f3d011682016040523d82523d6000602084013e6118c9565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b50508091505061192e8883611f69565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a147156119cd57600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146119c2576040519150601f19603f3d011682016040523d82523d6000602084013e6119c7565b606091505b50909150505b5050600c805460ff60a01b191690555050505050505050565b806119f3576119f361205a565b6001600160a01b03841660009081526006602052604090205460ff168015611a3457506001600160a01b03831660009081526006602052604090205460ff16155b15611a4957611a44848484612102565b611b47565b6001600160a01b03841660009081526006602052604090205460ff16158015611a8a57506001600160a01b03831660009081526006602052604090205460ff165b15611a9a57611a44848484612228565b6001600160a01b03841660009081526006602052604090205460ff16158015611adc57506001600160a01b03831660009081526006602052604090205460ff16155b15611aec57611a448484846122d1565b6001600160a01b03841660009081526006602052604090205460ff168015611b2c57506001600160a01b03831660009081526006602052604090205460ff165b15611b3c57611a44848484612315565b611b478484846122d1565b80611ba1576013805464ff000000001962ff00ff198216610100830460ff908116918217630100000060ff199095169290921793909304831662010000021790811665010000000000909104909116640100000000021790555b50505050565b60085460009081906c0c9f2c9cd04674edea40000000825b600754811015611d0e57826001600060078481548110611be157611be1612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611c4c5750816002600060078481548110611c2557611c25612866565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611c6c575050600854936c0c9f2c9cd04674edea400000009350915050565b611cb26001600060078481548110611c8657611c86612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ddf565b9250611cfa6002600060078481548110611cce57611cce612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ddf565b915080611d0681612835565b915050611bbf565b50600854611d29906c0c9f2c9cd04674edea40000000611724565b821015611d4a575050600854926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b600080600080611d6285612388565b90506000611d6f866123a3565b90506000611d818261185c8986611ddf565b979296509094509092505050565b6000808080611d9e8886611f5d565b90506000611dac8887611f5d565b90506000611dba8888611f5d565b90506000611dcc8261185c8686611ddf565b939b939a50919850919650505050505050565b600061091c828461281e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2057611e20612866565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e7457600080fd5b505afa158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eac9190612544565b81600181518110611ebf57611ebf612866565b6001600160a01b039283166020918202929092010152600b54611ee591309116846110c3565b600b546001600160a01b031663791ac9478360008430611f074261012c611730565b6040518663ffffffff1660e01b8152600401611f2795949392919061272f565b600060405180830381600087803b158015611f4157600080fd5b505af1158015611f55573d6000803e3d6000fd5b505050505050565b600061091c82846127ff565b600b54611f819030906001600160a01b0316846110c3565b600b546013546001600160a01b039182169163f305d719918491309187916000918291600160581b90910416611fb94261012c611730565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561202157600080fd5b505af1158015612035573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116ce9190612667565b60135460ff16158015612076575060135462010000900460ff16155b801561208d5750601354640100000000900460ff16155b1561209457565b6013805464ff00ff00ff196501000000000064010000000063010000006201000060ff8087166101000261ff0019881681179290920481169290920263ff0000001990911663ff00ff00199096169590951794909417908104909316021665ffff00ff00ff19909116179055565b6000806000806000806121148761173c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506121469088611ddf565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546121759087611ddf565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546121a49086611730565b6001600160a01b0389166000908152600160205260409020556121c6816123db565b6121d084836124ee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161221591815260200190565b60405180910390a3505050505050505050565b60008060008060008061223a8761173c565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061226c9087611ddf565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546122a29084611730565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546121a49086611730565b6000806000806000806122e38761173c565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506121759087611ddf565b6000806000806000806123278761173c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506123599088611ddf565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461226c9087611ddf565b6013546000906107579060649061182790859060ff16611f5d565b60135460009061075790606490611827906123d19060ff6401000000008204811691620100009004166127b8565b859060ff16611f5d565b60096123e88260026127ff565b6123f291906127dd565b600f600082825461240391906127a0565b90915550600990506124168260056127ff565b61242091906127dd565b6010600082825461243191906127a0565b90915550600990506124448260026127ff565b61244e91906127dd565b6011600082825461245f91906127a0565b909155506000905061246f611701565b9050600061247d8383611f5d565b3060009081526001602052604090205490915061249a9082611730565b3060009081526001602090815260408083209390935560069052205460ff16156124e957306000908152600260205260409020546124d89084611730565b306000908152600260205260409020555b505050565b6008546124fb9083611ddf565b600855600a5461250b9082611730565b600a555050565b8035801515811461252257600080fd5b919050565b60006020828403121561253957600080fd5b813561091c8161287c565b60006020828403121561255657600080fd5b815161091c8161287c565b6000806040838503121561257457600080fd5b823561257f8161287c565b9150602083013561258f8161287c565b809150509250929050565b6000806000606084860312156125af57600080fd5b83356125ba8161287c565b925060208401356125ca8161287c565b929592945050506040919091013590565b600080604083850312156125ee57600080fd5b82356125f98161287c565b946020939093013593505050565b60006020828403121561261957600080fd5b61091c82612512565b60006020828403121561263457600080fd5b5035919050565b6000806040838503121561264e57600080fd5b8235915061265e60208401612512565b90509250929050565b60008060006060848603121561267c57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156126c2578581018301518582016040015282016126a6565b818111156126d4576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561277f5784516001600160a01b03168352938301939183019160010161275a565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127b3576127b3612850565b500190565b600060ff821660ff84168060ff038211156127d5576127d5612850565b019392505050565b6000826127fa57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561281957612819612850565b500290565b60008282101561283057612830612850565b500390565b600060001982141561284957612849612850565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461289157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220be4209130bb88765174e55735afb47aaca2804549e9225e2fded2ea2f4c1a91864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063a5ece941116100ab578063d78ddca71161006f578063d78ddca714610673578063dd62ed3e14610698578063e2314bea146106de578063ea2a487014610705578063f2fde38b1461072657600080fd5b8063a5ece941146105e9578063a9059cbb14610609578063afcf2fc414610629578063b8578bfd14610649578063c3e4f87e1461065e57600080fd5b80638dd45fb2116100f25780638dd45fb21461057f578063906e9dd014610594578063956354fe146105b457806395d89b4114610240578063a457c2d7146105c957600080fd5b8063715018a6146104c657806383918605146104db57806385af175e146104f057806388f82020146105145780638da5cb5b1461054d57600080fd5b8063437823ec116101bc5780635932ead1116101805780635932ead11461043657806366aa56c5146104565780636ae8b6171461046b5780636c1699441461048057806370a08231146104a657600080fd5b8063437823ec146103935780634549b039146103b35780634b9d8413146103d35780635342acb4146103e857806357f79e201461042157600080fd5b806323b872dd1161020357806323b872dd146102fc5780632d8381191461031c578063313ce5671461033c57806336f3709e1461035e578063395093511461037357600080fd5b806306fdde0314610240578063095ea7b3146102805780630c9be46d146102b057806318160ddd146102d257600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506040805180820182526008815267454c455048494e5560c01b602082015290516102779190612695565b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046125db565b610746565b6040519015158152602001610277565b3480156102bc57600080fd5b506102d06102cb366004612527565b61075d565b005b3480156102de57600080fd5b506c0c9f2c9cd04674edea400000005b604051908152602001610277565b34801561030857600080fd5b506102a061031736600461259a565b610849565b34801561032857600080fd5b506102ee610337366004612622565b6108b2565b34801561034857600080fd5b5060125b60405160ff9091168152602001610277565b34801561036a57600080fd5b506102d0610923565b34801561037f57600080fd5b506102a061038e3660046125db565b610962565b34801561039f57600080fd5b506102d06103ae366004612527565b610998565b3480156103bf57600080fd5b506102ee6103ce36600461263b565b6109e6565b3480156103df57600080fd5b506010546102ee565b3480156103f457600080fd5b506102a0610403366004612527565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561042d57600080fd5b506012546102ee565b34801561044257600080fd5b506102d0610451366004612607565b610a7e565b34801561046257600080fd5b506102d0610ac6565b34801561047757600080fd5b506102d0610b05565b34801561048c57600080fd5b5060135461034c9068010000000000000000900460ff1681565b3480156104b257600080fd5b506102ee6104c1366004612527565b610ce8565b3480156104d257600080fd5b506102d0610d47565b3480156104e757600080fd5b50600f546102ee565b3480156104fc57600080fd5b5060135461034c906601000000000000900460ff1681565b34801561052057600080fd5b506102a061052f366004612527565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561055957600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610277565b34801561058b57600080fd5b506102d0610dbb565b3480156105a057600080fd5b506102d06105af366004612527565b610df4565b3480156105c057600080fd5b506102d0610f00565b3480156105d557600080fd5b506102a06105e43660046125db565b610f39565b3480156105f557600080fd5b50600d54610567906001600160a01b031681565b34801561061557600080fd5b506102a06106243660046125db565b610f88565b34801561063557600080fd5b50600e54610567906001600160a01b031681565b34801561065557600080fd5b506102d0610f95565b34801561066a57600080fd5b506011546102ee565b34801561067f57600080fd5b5060135461034c90670100000000000000900460ff1681565b3480156106a457600080fd5b506102ee6106b3366004612561565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156106ea57600080fd5b5060135461034c906901000000000000000000900460ff1681565b34801561071157600080fd5b5060135461034c90600160501b900460ff1681565b34801561073257600080fd5b506102d0610741366004612527565b610fd4565b60006107533384846110c3565b5060015b92915050565b6000546001600160a01b031633146107905760405162461bcd60e51b8152600401610787906126ea565b60405180910390fd5b6001600160a01b0381166107f45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610787565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa6632906020015b60405180910390a150565b60006108568484846111d0565b6108a884336108a385604051806060016040528060288152602001612895602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906116d5565b6110c3565b5060019392505050565b60006008548211156109065760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610787565b6000610910611701565b905061091c8382611724565b9392505050565b6000546001600160a01b0316331461094d5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60c01b1916600160c01b179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916107539185906108a39086611730565b6000546001600160a01b031633146109c25760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006c0c9f2c9cd04674edea40000000831115610a455760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610787565b81610a64576000610a558461173c565b50939550610757945050505050565b6000610a6f8461173c565b50929550610757945050505050565b6000546001600160a01b03163314610aa85760405162461bcd60e51b8152600401610787906126ea565b600c8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314610af05760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60b81b1916600160b81b179055565b6000546001600160a01b03163314610b2f5760405162461bcd60e51b8152600401610787906126ea565b600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015610b8f57600080fd5b505afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190612544565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610c0f57600080fd5b505afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612544565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610c8d57600080fd5b505afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc59190612544565b600c80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b03811660009081526006602052604081205460ff1615610d2557506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610757906108b2565b6000546001600160a01b03163314610d715760405162461bcd60e51b8152600401610787906126ea565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610de55760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60a81b19169055565b6000546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b038116610e825760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610787565b600d80546001600160a01b039081166000908152600560209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9910161083e565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60c01b19169055565b600061075333846108a3856040518060600160405280602581526020016128bd602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906116d5565b60006107533384846111d0565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b8152600401610787906126ea565b600c805460ff60a81b1916600160a81b179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b8152600401610787906126ea565b6001600160a01b0381166110685760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610787565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111195760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610787565b6001600160a01b03821661116f5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610787565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112305760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610787565b6001600160a01b0382166112865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610787565b600081116112e85760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610787565b600c54600160c01b900460ff16151560011415611373576b019d971e4fe8401e740000008111156113735760405162461bcd60e51b815260206004820152602f60248201527f416d6f756e74206d757374206265206c6f776572207468656e20302e3035252060448201526e6f6620746f74616c20737570706c7960881b6064820152608401610787565b600c546001600160a01b03848116911614801561139e5750600b546001600160a01b03838116911614155b80156113c357506001600160a01b03821660009081526005602052604090205460ff16155b80156113d85750600c54600160b01b900460ff165b15611435576009548111156113ec57600080fd5b6001600160a01b038216600090815260046020526040902054421161141057600080fd5b61141b42601e6127a0565b6001600160a01b0383166000908152600460205260409020555b600c54600160b81b900460ff1615156001141561161757600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b1580156114ac57600080fd5b505afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190612544565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561152c57600080fd5b505afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190612544565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156115aa57600080fd5b505afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190612544565b600c8054600160c01b6001600160a01b0393909316600164ff0000000160a01b0319909116179190911760ff60b81b19169055505b600061162230610ce8565b600c54909150600160a01b900460ff1615801561164c5750600c546001600160a01b038481169116145b80156116615750600c54600160a81b900460ff165b156116775760125481106116775761167761178b565b6001600160a01b03841660009081526005602052604090205460019060ff16806116b957506001600160a01b03841660009081526005602052604090205460ff165b156116c2575060005b6116ce858585846119e6565b5050505050565b600081848411156116f95760405162461bcd60e51b81526004016107879190612695565b505050900390565b600080600061170e611ba7565b909250905061171d8282611724565b9250505090565b600061091c82846127dd565b600061091c82846127a0565b60008060008060008060008060006117538a611d53565b92509250925060008060006117718d868661176c611701565b611d8f565b919f909e50909c50959a5093985091965092945050505050565b600c805460ff60a01b1916600160a01b17905560006117a930610ce8565b90506000601154601054600f546117c091906127a0565b6117ca91906127a0565b905060006117e46002600f5461172490919063ffffffff16565b905060006117f28483611ddf565b9050476117fe82611deb565b600061180a4783611ddf565b9050600061182d8661182760105485611f5d90919063ffffffff16565b90611724565b9050600061184a8761182760115486611f5d90919063ffffffff16565b905060006118628261185c8686611ddf565b90611ddf565b6000600f81905560108190556011819055600d5460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146118c4576040519150601f19603f3d011682016040523d82523d6000602084013e6118c9565b606091505b5050600e546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b50508091505061192e8883611f69565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a147156119cd57600d546040516001600160a01b03909116904790600081818185875af1925050503d80600081146119c2576040519150601f19603f3d011682016040523d82523d6000602084013e6119c7565b606091505b50909150505b5050600c805460ff60a01b191690555050505050505050565b806119f3576119f361205a565b6001600160a01b03841660009081526006602052604090205460ff168015611a3457506001600160a01b03831660009081526006602052604090205460ff16155b15611a4957611a44848484612102565b611b47565b6001600160a01b03841660009081526006602052604090205460ff16158015611a8a57506001600160a01b03831660009081526006602052604090205460ff165b15611a9a57611a44848484612228565b6001600160a01b03841660009081526006602052604090205460ff16158015611adc57506001600160a01b03831660009081526006602052604090205460ff16155b15611aec57611a448484846122d1565b6001600160a01b03841660009081526006602052604090205460ff168015611b2c57506001600160a01b03831660009081526006602052604090205460ff165b15611b3c57611a44848484612315565b611b478484846122d1565b80611ba1576013805464ff000000001962ff00ff198216610100830460ff908116918217630100000060ff199095169290921793909304831662010000021790811665010000000000909104909116640100000000021790555b50505050565b60085460009081906c0c9f2c9cd04674edea40000000825b600754811015611d0e57826001600060078481548110611be157611be1612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611c4c5750816002600060078481548110611c2557611c25612866565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611c6c575050600854936c0c9f2c9cd04674edea400000009350915050565b611cb26001600060078481548110611c8657611c86612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611ddf565b9250611cfa6002600060078481548110611cce57611cce612866565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611ddf565b915080611d0681612835565b915050611bbf565b50600854611d29906c0c9f2c9cd04674edea40000000611724565b821015611d4a575050600854926c0c9f2c9cd04674edea4000000092509050565b90939092509050565b600080600080611d6285612388565b90506000611d6f866123a3565b90506000611d818261185c8986611ddf565b979296509094509092505050565b6000808080611d9e8886611f5d565b90506000611dac8887611f5d565b90506000611dba8888611f5d565b90506000611dcc8261185c8686611ddf565b939b939a50919850919650505050505050565b600061091c828461281e565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2057611e20612866565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e7457600080fd5b505afa158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eac9190612544565b81600181518110611ebf57611ebf612866565b6001600160a01b039283166020918202929092010152600b54611ee591309116846110c3565b600b546001600160a01b031663791ac9478360008430611f074261012c611730565b6040518663ffffffff1660e01b8152600401611f2795949392919061272f565b600060405180830381600087803b158015611f4157600080fd5b505af1158015611f55573d6000803e3d6000fd5b505050505050565b600061091c82846127ff565b600b54611f819030906001600160a01b0316846110c3565b600b546013546001600160a01b039182169163f305d719918491309187916000918291600160581b90910416611fb94261012c611730565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561202157600080fd5b505af1158015612035573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116ce9190612667565b60135460ff16158015612076575060135462010000900460ff16155b801561208d5750601354640100000000900460ff16155b1561209457565b6013805464ff00ff00ff196501000000000064010000000063010000006201000060ff8087166101000261ff0019881681179290920481169290920263ff0000001990911663ff00ff00199096169590951794909417908104909316021665ffff00ff00ff19909116179055565b6000806000806000806121148761173c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506121469088611ddf565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546121759087611ddf565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546121a49086611730565b6001600160a01b0389166000908152600160205260409020556121c6816123db565b6121d084836124ee565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161221591815260200190565b60405180910390a3505050505050505050565b60008060008060008061223a8761173c565b6001600160a01b038f16600090815260016020526040902054959b5093995091975095509350915061226c9087611ddf565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546122a29084611730565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546121a49086611730565b6000806000806000806122e38761173c565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506121759087611ddf565b6000806000806000806123278761173c565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506123599088611ddf565b6001600160a01b038a1660009081526002602090815260408083209390935560019052205461226c9087611ddf565b6013546000906107579060649061182790859060ff16611f5d565b60135460009061075790606490611827906123d19060ff6401000000008204811691620100009004166127b8565b859060ff16611f5d565b60096123e88260026127ff565b6123f291906127dd565b600f600082825461240391906127a0565b90915550600990506124168260056127ff565b61242091906127dd565b6010600082825461243191906127a0565b90915550600990506124448260026127ff565b61244e91906127dd565b6011600082825461245f91906127a0565b909155506000905061246f611701565b9050600061247d8383611f5d565b3060009081526001602052604090205490915061249a9082611730565b3060009081526001602090815260408083209390935560069052205460ff16156124e957306000908152600260205260409020546124d89084611730565b306000908152600260205260409020555b505050565b6008546124fb9083611ddf565b600855600a5461250b9082611730565b600a555050565b8035801515811461252257600080fd5b919050565b60006020828403121561253957600080fd5b813561091c8161287c565b60006020828403121561255657600080fd5b815161091c8161287c565b6000806040838503121561257457600080fd5b823561257f8161287c565b9150602083013561258f8161287c565b809150509250929050565b6000806000606084860312156125af57600080fd5b83356125ba8161287c565b925060208401356125ca8161287c565b929592945050506040919091013590565b600080604083850312156125ee57600080fd5b82356125f98161287c565b946020939093013593505050565b60006020828403121561261957600080fd5b61091c82612512565b60006020828403121561263457600080fd5b5035919050565b6000806040838503121561264e57600080fd5b8235915061265e60208401612512565b90509250929050565b60008060006060848603121561267c57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156126c2578581018301518582016040015282016126a6565b818111156126d4576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561277f5784516001600160a01b03168352938301939183019160010161275a565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156127b3576127b3612850565b500190565b600060ff821660ff84168060ff038211156127d5576127d5612850565b019392505050565b6000826127fa57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561281957612819612850565b500290565b60008282101561283057612830612850565b500390565b600060001982141561284957612849612850565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461289157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220be4209130bb88765174e55735afb47aaca2804549e9225e2fded2ea2f4c1a91864736f6c63430008070033

Deployed Bytecode Sourcemap

14063:19797:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17098:100;;;;;;;;;;-1:-1:-1;17177:13:0;;;;;;;;;;;-1:-1:-1;;;17177:13:0;;;;17098:100;;;;17177:13;17098:100;:::i;:::-;;;;;;;;18528:161;;;;;;;;;;-1:-1:-1;18528:161:0;;;;;:::i;:::-;;:::i;:::-;;;4523:14:1;;4516:22;4498:41;;4486:2;4471:18;18528:161:0;4358:187:1;29210:273:0;;;;;;;;;;-1:-1:-1;29210:273:0;;;;;:::i;:::-;;:::i;:::-;;17404:95;;;;;;;;;;-1:-1:-1;14610:13:0;17404:95;;;9952:25:1;;;9940:2;9925:18;17404:95:0;9806:177:1;18695:329:0;;;;;;;;;;-1:-1:-1;18695:329:0;;;;;:::i;:::-;;:::i;20264:241::-;;;;;;;;;;-1:-1:-1;20264:241:0;;;;;:::i;:::-;;:::i;17306:92::-;;;;;;;;;;-1:-1:-1;16068:2:0;17306:92;;;11469:4:1;11457:17;;;11439:36;;11427:2;11412:18;17306:92:0;11297:184:1;29759:78:0;;;;;;;;;;;;;:::i;19030:218::-;;;;;;;;;;-1:-1:-1;19030:218:0;;;;;:::i;:::-;;:::i;24188:111::-;;;;;;;;;;-1:-1:-1;24188:111:0;;;;;:::i;:::-;;:::i;19814:444::-;;;;;;;;;;-1:-1:-1;19814:444:0;;;;;:::i;:::-;;:::i;18079:121::-;;;;;;;;;;-1:-1:-1;18168:24:0;;18079:121;;24305:124;;;;;;;;;;-1:-1:-1;24305:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;24394:27:0;24370:4;24394:27;;;:18;:27;;;;;;;;;24305:124;17709:114;;;;;;;;;;-1:-1:-1;17796:19:0;;17709:114;;19705:103;;;;;;;;;;-1:-1:-1;19705:103:0;;;;;:::i;:::-;;:::i;29489:74::-;;;;;;;;;;;;;:::i;20511:304::-;;;;;;;;;;;;;:::i;15765:27::-;;;;;;;;;;-1:-1:-1;15765:27:0;;;;;;;;;;;17505:198;;;;;;;;;;-1:-1:-1;17505:198:0;;;;;:::i;:::-;;:::i;13575:148::-;;;;;;;;;;;;;:::i;17829:121::-;;;;;;;;;;-1:-1:-1;17918:24:0;;17829:121;;15691:31;;;;;;;;;;-1:-1:-1;15691:31:0;;;;;;;;;;;19579:120;;;;;;;;;;-1:-1:-1;19579:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19671:20:0;19647:4;19671:20;;;:11;:20;;;;;;;;;19579:120;13347:87;;;;;;;;;;-1:-1:-1;13393:7:0;13420:6;-1:-1:-1;;;;;13420:6:0;13347:87;;;-1:-1:-1;;;;;3169:32:1;;;3151:51;;3139:2;3124:18;13347:87:0;3005:203:1;29663:90:0;;;;;;;;;;;;;:::i;28806:398::-;;;;;;;;;;-1:-1:-1;28806:398:0;;;;;:::i;:::-;;:::i;29843:80::-;;;;;;;;;;;;;:::i;19254:319::-;;;;;;;;;;-1:-1:-1;19254:319:0;;;;;:::i;:::-;;:::i;15039:39::-;;;;;;;;;;-1:-1:-1;15039:39:0;;;;-1:-1:-1;;;;;15039:39:0;;;18206:167;;;;;;;;;;-1:-1:-1;18206:167:0;;;;;:::i;:::-;;:::i;15085:37::-;;;;;;;;;;-1:-1:-1;15085:37:0;;;;-1:-1:-1;;;;;15085:37:0;;;29569:88;;;;;;;;;;;;;:::i;17956:117::-;;;;;;;;;;-1:-1:-1;18043:22:0;;17956:117;;15729:29;;;;;;;;;;-1:-1:-1;15729:29:0;;;;;;;;;;;18379:143;;;;;;;;;;-1:-1:-1;18379:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18487:18:0;;;18460:7;18487:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18379:143;15799:29;;;;;;;;;;-1:-1:-1;15799:29:0;;;;;;;;;;;15835:81;;;;;;;;;;-1:-1:-1;15835:81:0;;;;-1:-1:-1;;;15835:81:0;;;;;;13731:249;;;;;;;;;;-1:-1:-1;13731:249:0;;;;;:::i;:::-;;:::i;18528:161::-;18603:4;18620:39;12920:10;18643:7;18652:6;18620:8;:39::i;:::-;-1:-1:-1;18677:4:0;18528:161;;;;;:::o;29210:273::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;29298:29:0;::::1;29290:79;;;::::0;-1:-1:-1;;;29290:79:0;;7248:2:1;29290:79:0::1;::::0;::::1;7230:21:1::0;7287:2;7267:18;;;7260:30;7326:34;7306:18;;;7299:62;-1:-1:-1;;;7377:18:1;;;7370:35;7422:19;;29290:79:0::1;7046:401:1::0;29290:79:0::1;29380:14;:41:::0;;-1:-1:-1;;;;;;29380:41:0::1;-1:-1:-1::0;;;;;29380:41:0;::::1;::::0;;::::1;::::0;;;29437:38:::1;::::0;3151:51:1;;;29437:38:0::1;::::0;3139:2:1;3124:18;29437:38:0::1;;;;;;;;29210:273:::0;:::o;18695:329::-;18791:4;18808:36;18818:6;18826:9;18837:6;18808:9;:36::i;:::-;18855:139;18864:6;12920:10;18894:89;18932:6;18894:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18894:19:0;;;;;;:11;:19;;;;;;;;12920:10;18894:33;;;;;;;;;;:37;:89::i;:::-;18855:8;:139::i;:::-;-1:-1:-1;19012:4:0;18695:329;;;;;:::o;20264:241::-;20331:7;20370;;20359;:18;;20351:61;;;;-1:-1:-1;;;20351:61:0;;7654:2:1;20351:61:0;;;7636:21:1;7693:2;7673:18;;;7666:30;7732:32;7712:18;;;7705:60;7782:18;;20351:61:0;7452:354:1;20351:61:0;20423:19;20445:10;:8;:10::i;:::-;20423:32;-1:-1:-1;20473:24:0;:7;20423:32;20473:11;:24::i;:::-;20466:31;20264:241;-1:-1:-1;;;20264:241:0:o;29759:78::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;29812:10:::1;:17:::0;;-1:-1:-1;;;;29812:17:0::1;-1:-1:-1::0;;;29812:17:0::1;::::0;;29759:78::o;19030:218::-;12920:10;19118:4;19167:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19167:34:0;;;;;;;;;;19118:4;;19135:83;;19158:7;;19167:50;;19206:10;19167:38;:50::i;24188:111::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24257:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24257:34:0::1;24287:4;24257:34;::::0;;24188:111::o;19814:444::-;19905:7;14610:13;19933:7;:18;;19925:59;;;;-1:-1:-1;;;19925:59:0;;5713:2:1;19925:59:0;;;5695:21:1;5752:2;5732:18;;;5725:30;5791;5771:18;;;5764:58;5839:18;;19925:59:0;5511:352:1;19925:59:0;20000:17;19995:256;;20035:15;20064:19;20075:7;20064:10;:19::i;:::-;-1:-1:-1;20034:49:0;;-1:-1:-1;20098:14:0;;-1:-1:-1;;;;;20098:14:0;19995:256;20148:23;20183:19;20194:7;20183:10;:19::i;:::-;-1:-1:-1;20145:57:0;;-1:-1:-1;20217:22:0;;-1:-1:-1;;;;;20217:22:0;19705:103;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;19777:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;19777:23:0::1;-1:-1:-1::0;;;;19777:23:0;;::::1;::::0;;;::::1;::::0;;19705:103::o;29489:74::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;29539:9:::1;:16:::0;;-1:-1:-1;;;;29539:16:0::1;-1:-1:-1::0;;;29539:16:0::1;::::0;;29489:74::o;20511:304::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;20673:11:::1;:26:::0;;-1:-1:-1;;;;;;20673:26:0::1;20619:42;20673:26:::0;;::::1;::::0;;;20740:22:::1;::::0;;-1:-1:-1;;;20740:22:0;;;;20619:42;;20740:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;20619:42;20740:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20722:49:0::1;;20780:4;20787:12;-1:-1:-1::0;;;;;20787:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20722:85;::::0;-1:-1:-1;;;;;;20722:85:0::1;::::0;;;;;;-1:-1:-1;;;;;3667:15:1;;;20722:85:0::1;::::0;::::1;3649:34:1::0;3719:15;;3699:18;;;3692:43;3584:18;;20722:85:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20710:9;:97:::0;;-1:-1:-1;;;;;;20710:97:0::1;-1:-1:-1::0;;;;;20710:97:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;20511:304:0:o;17505:198::-;-1:-1:-1;;;;;17595:20:0;;17571:7;17595:20;;;:11;:20;;;;;;;;17591:49;;;-1:-1:-1;;;;;;17624:16:0;;;;;:7;:16;;;;;;;17505:198::o;17591:49::-;-1:-1:-1;;;;;17678:16:0;;;;;;:7;:16;;;;;;17658:37;;:19;:37::i;13575:148::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;13682:1:::1;13666:6:::0;;13645:40:::1;::::0;-1:-1:-1;;;;;13666:6:0;;::::1;::::0;13645:40:::1;::::0;13682:1;;13645:40:::1;13713:1;13696:19:::0;;-1:-1:-1;;;;;;13696:19:0::1;::::0;;13575:148::o;29663:90::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;29716:21:::1;:29:::0;;-1:-1:-1;;;;29716:29:0::1;::::0;;29663:90::o;28806:398::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28900:31:0;::::1;28892:81;;;::::0;-1:-1:-1;;;28892:81:0;;8013:2:1;28892:81:0::1;::::0;::::1;7995:21:1::0;8052:2;8032:18;;;8025:30;8091:34;8071:18;;;8064:62;-1:-1:-1;;;8142:18:1;;;8135:35;8187:19;;28892:81:0::1;7811:401:1::0;28892:81:0::1;29003:16;::::0;;-1:-1:-1;;;;;29003:16:0;;::::1;29023:5;28984:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;28984:44:0;;::::1;::::0;;;29039:45;;-1:-1:-1;;;;;;29039:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;29095:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;29095:43:0::1;::::0;;;29154:42;3151:51:1;;;29154:42:0::1;::::0;3124:18:1;29154:42:0::1;3005:203:1::0;29843:80:0;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;29897:10:::1;:18:::0;;-1:-1:-1;;;;29897:18:0::1;::::0;;29843:80::o;19254:319::-;19347:4;19364:179;12920:10;19414:7;19436:96;19475:15;19436:96;;;;;;;;;;;;;;;;;12920:10;19436:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19436:34:0;;;;;;;;;;;;:38;:96::i;18206:167::-;18284:4;18301:42;12920:10;18325:9;18336:6;18301:9;:42::i;29569:88::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;29621:21:::1;:28:::0;;-1:-1:-1;;;;29621:28:0::1;-1:-1:-1::0;;;29621:28:0::1;::::0;;29569:88::o;13731:249::-;13393:7;13420:6;-1:-1:-1;;;;;13420:6:0;12920:10;13482:23;13474:73;;;;-1:-1:-1;;;13474:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13820:22:0;::::1;13812:78;;;::::0;-1:-1:-1;;;13812:78:0;;8419:2:1;13812:78:0::1;::::0;::::1;8401:21:1::0;8458:2;8438:18;;;8431:30;8497:34;8477:18;;;8470:62;-1:-1:-1;;;8548:18:1;;;8541:41;8599:19;;13812:78:0::1;8217:407:1::0;13812:78:0::1;13927:6;::::0;;13906:38:::1;::::0;-1:-1:-1;;;;;13906:38:0;;::::1;::::0;13927:6;::::1;::::0;13906:38:::1;::::0;::::1;13955:6;:17:::0;;-1:-1:-1;;;;;;13955:17:0::1;-1:-1:-1::0;;;;;13955:17:0;;;::::1;::::0;;;::::1;::::0;;13731:249::o;24435:325::-;-1:-1:-1;;;;;24526:19:0;;24518:64;;;;-1:-1:-1;;;24518:64:0;;9647:2:1;24518:64:0;;;9629:21:1;;;9666:18;;;9659:30;9725:34;9705:18;;;9698:62;9777:18;;24518:64:0;9445:356:1;24518:64:0;-1:-1:-1;;;;;24601:21:0;;24593:64;;;;-1:-1:-1;;;24593:64:0;;5354:2:1;24593:64:0;;;5336:21:1;5393:2;5373:18;;;5366:30;5432:32;5412:18;;;5405:60;5482:18;;24593:64:0;5152:354:1;24593:64:0;-1:-1:-1;;;;;24668:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24720:32;;9952:25:1;;;24720:32:0;;9925:18:1;24720:32:0;;;;;;;24435:325;;;:::o;24766:1574::-;-1:-1:-1;;;;;24852:18:0;;24844:64;;;;-1:-1:-1;;;24844:64:0;;6070:2:1;24844:64:0;;;6052:21:1;6109:2;6089:18;;;6082:30;6148:34;6128:18;;;6121:62;-1:-1:-1;;;6199:18:1;;;6192:31;6240:19;;24844:64:0;5868:397:1;24844:64:0;-1:-1:-1;;;;;24927:16:0;;24919:60;;;;-1:-1:-1;;;24919:60:0;;6888:2:1;24919:60:0;;;6870:21:1;6927:2;6907:18;;;6900:30;6966:33;6946:18;;;6939:61;7017:18;;24919:60:0;6686:355:1;24919:60:0;25007:1;24998:6;:10;24990:64;;;;-1:-1:-1;;;24990:64:0;;9237:2:1;24990:64:0;;;9219:21:1;9276:2;9256:18;;;9249:30;9315:34;9295:18;;;9288:62;-1:-1:-1;;;9366:18:1;;;9359:39;9415:19;;24990:64:0;9035:405:1;24990:64:0;25069:10;;-1:-1:-1;;;25069:10:0;;;;:18;;25083:4;25069:18;25065:139;;;25122:18;25112:6;:28;;25104:88;;;;-1:-1:-1;;;25104:88:0;;6472:2:1;25104:88:0;;;6454:21:1;6511:2;6491:18;;;6484:30;6550:34;6530:18;;;6523:62;-1:-1:-1;;;6601:18:1;;;6594:45;6656:19;;25104:88:0;6270:411:1;25104:88:0;25226:9;;-1:-1:-1;;;;;25218:17:0;;;25226:9;;25218:17;:47;;;;-1:-1:-1;25253:11:0;;-1:-1:-1;;;;;25239:26:0;;;25253:11;;25239:26;;25218:47;:75;;;;-1:-1:-1;;;;;;25271:22:0;;;;;;:18;:22;;;;;;;;25269:24;25218:75;:94;;;;-1:-1:-1;25297:15:0;;-1:-1:-1;;;25297:15:0;;;;25218:94;25214:296;;;25351:12;;25341:6;:22;;25333:31;;;;;;-1:-1:-1;;;;;25391:16:0;;;;;;:12;:16;;;;;;25410:15;-1:-1:-1;25383:43:0;;;;;;25464:30;:15;25483:10;25464:30;:::i;:::-;-1:-1:-1;;;;;25445:16:0;;;;;;:12;:16;;;;;:49;25214:296;25523:9;;-1:-1:-1;;;25523:9:0;;;;:17;;25536:4;25523:17;25520:362;;;25668:11;:26;;-1:-1:-1;;;;;;25668:26:0;25610:42;25668:26;;;;;;25739:22;;;-1:-1:-1;;;25739:22:0;;;;25610:42;;25739:20;;:22;;;;;;;;;;;;;;25610:42;25739:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25721:49:0;;25779:4;25786:12;-1:-1:-1;;;;;25786:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25721:85;;-1:-1:-1;;;;;;25721:85:0;;;;;;;-1:-1:-1;;;;;3667:15:1;;;25721:85:0;;;3649:34:1;3719:15;;3699:18;;;3692:43;3584:18;;25721:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25709:9;:97;;-1:-1:-1;;;;;;;;25709:97:0;;;;-1:-1:-1;;;;;;25821:17:0;;;;;;;;-1:-1:-1;;;;25853:17:0;;;-1:-1:-1;25520:362:0;25892:28;25923:24;25941:4;25923:9;:24::i;:::-;25963:16;;25892:55;;-1:-1:-1;;;;25963:16:0;;;;25962:17;:36;;;;-1:-1:-1;25989:9:0;;-1:-1:-1;;;;;25983:15:0;;;25989:9;;25983:15;25962:36;:61;;;;-1:-1:-1;26002:21:0;;-1:-1:-1;;;26002:21:0;;;;25962:61;25958:185;;;26068:19;;26044:20;:43;26040:92;;26108:8;:6;:8::i;:::-;-1:-1:-1;;;;;26187:24:0;;26153:12;26187:24;;;:18;:24;;;;;;26168:4;;26187:24;;;:50;;-1:-1:-1;;;;;;26215:22:0;;;;;;:18;:22;;;;;;;;26187:50;26183:98;;;-1:-1:-1;26264:5:0;26183:98;26291:41;26306:4;26312:2;26316:6;26324:7;26291:14;:41::i;:::-;24833:1507;;24766:1574;;;:::o;6646:206::-;6732:7;6793:12;6785:6;;;;6777:29;;;;-1:-1:-1;;;6777:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6828:5:0;;;6646:206::o;22157:164::-;22199:7;22220:15;22237;22256:19;:17;:19::i;:::-;22219:56;;-1:-1:-1;22219:56:0;-1:-1:-1;22293:20:0;22219:56;;22293:11;:20::i;:::-;22286:27;;;;22157:164;:::o;5504:98::-;5562:7;5589:5;5593:1;5589;:5;:::i;4367:98::-;4425:7;4452:5;4456:1;4452;:5;:::i;20974:414::-;21033:7;21041;21049;21057;21065;21073;21094:23;21119:12;21133:18;21155:20;21167:7;21155:11;:20::i;:::-;21093:82;;;;;;21187:15;21204:23;21229:12;21245:50;21257:7;21266:4;21272:10;21284;:8;:10::i;:::-;21245:11;:50::i;:::-;21186:109;;;;-1:-1:-1;21186:109:0;;-1:-1:-1;21346:15:0;;-1:-1:-1;21363:4:0;;-1:-1:-1;21369:10:0;;-1:-1:-1;20974:414:0;;-1:-1:-1;;;;;20974:414:0:o;26346:1534::-;16489:16;:23;;-1:-1:-1;;;;16489:23:0;-1:-1:-1;;;16489:23:0;;;;26421:24:::1;26439:4;26421:9;:24::i;:::-;26395:50;;26456:25;26538:22;;26511:24;;26484;;:51;;;;:::i;:::-;:76;;;;:::i;:::-;26456:104;;26571:26;26600:31;26629:1;26600:24;;:28;;:31;;;;:::i;:::-;26571:60:::0;-1:-1:-1;26681:26:0::1;26710:39;:15:::0;26571:60;26710:19:::1;:39::i;:::-;26681:68:::0;-1:-1:-1;26788:21:0::1;26820:36;26681:68:::0;26820:16:::1;:36::i;:::-;26868:18;26889:44;:21;26915:17:::0;26889:25:::1;:44::i;:::-;26868:65;;26944:23;26970:63;27015:17;26970:40;26985:24;;26970:10;:14;;:40;;;;:::i;:::-;:44:::0;::::1;:63::i;:::-;26944:89;;27044:21;27068:61;27111:17;27068:38;27083:22;;27068:10;:14;;:38;;;;:::i;:61::-;27044:85:::0;-1:-1:-1;27140:23:0::1;27166:50;27044:85:::0;27166:31:::1;:10:::0;27181:15;27166:14:::1;:31::i;:::-;:35:::0;::::1;:50::i;:::-;27254:1;27227:24;:28:::0;;;27266:24:::1;:28:::0;;;27305:22:::1;:26:::0;;;27368:16:::1;::::0;27360:58:::1;::::0;27140:76;;-1:-1:-1;27254:1:0;;-1:-1:-1;;;;;27368:16:0;;::::1;::::0;27398:15;;27254:1;27360:58;27254:1;27360:58;27398:15;27368:16;27360:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27450:14:0::1;::::0;27442:54:::1;::::0;27342:76;;-1:-1:-1;;;;;;27450:14:0::1;::::0;27478:13;;27442:54:::1;::::0;;;27478:13;27450:14;27442:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27429:67;;;;;27507:49;27520:18;27540:15;27507:12;:49::i;:::-;27572:71;::::0;;11175:25:1;;;11231:2;11216:18;;11209:34;;;11259:18;;;11252:34;;;27572:71:0::1;::::0;11163:2:1;11148:18;27572:71:0::1;;;;;;;27734:21;:34:::0;27731:142:::1;;27805:16;::::0;27797:64:::1;::::0;-1:-1:-1;;;;;27805:16:0;;::::1;::::0;27835:21:::1;::::0;27797:64:::1;::::0;;;27835:21;27805:16;27797:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27784:77:0;;-1:-1:-1;;27731:142:0::1;-1:-1:-1::0;;16535:16:0;:24;;-1:-1:-1;;;;16535:24:0;;;-1:-1:-1;;;;;;;;26346:1534:0:o;29929:788::-;30039:7;30034:28;;30048:14;:12;:14::i;:::-;-1:-1:-1;;;;;30077:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;30101:22:0;;;;;;:11;:22;;;;;;;;30100:23;30077:46;30073:597;;;30140:48;30162:6;30170:9;30181:6;30140:21;:48::i;:::-;30073:597;;;-1:-1:-1;;;;;30211:19:0;;;;;;:11;:19;;;;;;;;30210:20;:46;;;;-1:-1:-1;;;;;;30234:22:0;;;;;;:11;:22;;;;;;;;30210:46;30206:464;;;30273:46;30293:6;30301:9;30312:6;30273:19;:46::i;30206:464::-;-1:-1:-1;;;;;30342:19:0;;;;;;:11;:19;;;;;;;;30341:20;:47;;;;-1:-1:-1;;;;;;30366:22:0;;;;;;:11;:22;;;;;;;;30365:23;30341:47;30337:333;;;30405:44;30423:6;30431:9;30442:6;30405:17;:44::i;30337:333::-;-1:-1:-1;;;;;30471:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;30494:22:0;;;;;;:11;:22;;;;;;;;30471:45;30467:203;;;30533:48;30555:6;30563:9;30574:6;30533:21;:48::i;30467:203::-;30614:44;30632:6;30640:9;30651:6;30614:17;:44::i;:::-;30685:7;30680:29;;24087:15;;;-1:-1:-1;;;;24113:25:0;;24087:15;;;;;;;24113:25;;;24123:15;-1:-1:-1;;24077:25:0;;;;;;;24123:15;;;;;;24113:25;;;24149;;;24159:15;;;;;;;24149:25;;;;;30694:15;29929:788;;;;:::o;22327:556::-;22425:7;;22378;;;;14610:13;22378:7;22479:289;22503:9;:16;22499:20;;22479:289;;;22569:7;22545;:21;22553:9;22563:1;22553:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22553:12:0;22545:21;;;;;;;;;;;;;:31;;:66;;;22604:7;22580;:21;22588:9;22598:1;22588:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22588:12:0;22580:21;;;;;;;;;;;;;:31;22545:66;22541:97;;;-1:-1:-1;;22621:7:0;;;14610:13;;-1:-1:-1;22327:556:0;-1:-1:-1;;22327:556:0:o;22541:97::-;22663:34;22675:7;:21;22683:9;22693:1;22683:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22683:12:0;22675:21;;;;;;;;;;;;;22663:7;;:11;:34::i;:::-;22653:44;;22722:34;22734:7;:21;22742:9;22752:1;22742:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22742:12:0;22734:21;;;;;;;;;;;;;22722:7;;:11;:34::i;:::-;22712:44;-1:-1:-1;22521:3:0;;;;:::i;:::-;;;;22479:289;;;-1:-1:-1;22792:7:0;;:20;;14610:13;22792:11;:20::i;:::-;22782:7;:30;22778:61;;;-1:-1:-1;;22822:7:0;;;14610:13;;-1:-1:-1;22327:556:0;-1:-1:-1;22327:556:0:o;22778:61::-;22858:7;;22867;;-1:-1:-1;22327:556:0;-1:-1:-1;22327:556:0:o;21394:327::-;21453:7;21461;21469;21489:12;21504:24;21520:7;21504:15;:24::i;:::-;21489:39;;21539:18;21560:30;21582:7;21560:21;:30::i;:::-;21539:51;-1:-1:-1;21601:23:0;21627:33;21539:51;21627:17;:7;21639:4;21627:11;:17::i;:33::-;21601:59;21696:4;;-1:-1:-1;21702:10:0;;-1:-1:-1;21394:327:0;;-1:-1:-1;;;21394:327:0:o;21727:424::-;21839:7;;;;21893:24;:7;21905:11;21893;:24::i;:::-;21875:42;-1:-1:-1;21928:12:0;21943:21;:4;21952:11;21943:8;:21::i;:::-;21928:36;-1:-1:-1;21975:18:0;21996:27;:10;22011:11;21996:14;:27::i;:::-;21975:48;-1:-1:-1;22034:23:0;22060:33;21975:48;22060:17;:7;22072:4;22060:11;:17::i;:33::-;22112:7;;;;-1:-1:-1;22138:4:0;;-1:-1:-1;21727:424:0;;-1:-1:-1;;;;;;;21727:424:0:o;4748:98::-;4806:7;4833:5;4837:1;4833;:5;:::i;27886:496::-;27976:16;;;27990:1;27976:16;;;;;;;;27952:21;;27976:16;;;;;;;;;;-1:-1:-1;27976:16:0;27952:40;;28021:4;28003;28008:1;28003:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28003:23:0;;;:7;;;;;;;;;;:23;;;;28047:11;;:18;;;-1:-1:-1;;;28047:18:0;;;;:11;;;;;:16;;:18;;;;;28003:7;;28047:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28037:4;28042:1;28037:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28037:28:0;;;:7;;;;;;;;;:28;28108:11;;28076:58;;28093:4;;28108:11;28122;28076:8;:58::i;:::-;28145:11;;-1:-1:-1;;;;;28145:11:0;:62;28222:11;28145;28292:4;28319;28339:24;:15;28359:3;28339:19;:24::i;:::-;28145:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27941:441;27886:496;:::o;5105:98::-;5163:7;5190:5;5194:1;5190;:5;:::i;28388:412::-;28501:11;;28469:58;;28486:4;;-1:-1:-1;;;;;28501:11:0;28515;28469:8;:58::i;:::-;28538:11;;28738:4;;-1:-1:-1;;;;;28538:11:0;;;;:27;;28573:9;;28606:4;;28626:11;;28538;;;;-1:-1:-1;;;28738:4:0;;;;28757:24;:15;28777:3;28757:19;:24::i;:::-;28538:254;;;;;;-1:-1:-1;;;;;;28538:254:0;;;-1:-1:-1;;;;;4105:15:1;;;28538:254:0;;;4087:34:1;4137:18;;;4130:34;;;;4180:18;;;4173:34;;;;4223:18;;;4216:34;;;;4287:15;;;4266:19;;;4259:44;4319:19;;;4312:35;;;;4021:19;;28538:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23742:285::-;23789:7;;;;:12;:28;;;;-1:-1:-1;23805:7:0;;;;;;;:12;23789:28;:44;;;;-1:-1:-1;23821:7:0;;;;;;;:12;23789:44;23785:57;;;23742:285::o;23785:57::-;23872:7;;;-1:-1:-1;;23926:25:0;23944:7;23890:25;23908:7;23872;;;;;23854:25;-1:-1:-1;;23854:25:0;;;;23908:7;;;;;;23890:25;;;;-1:-1:-1;;23890:25:0;;;-1:-1:-1;;23890:25:0;;;;;;;;;;;23944:7;;;;;;23926:25;24008:11;-1:-1:-1;;24008:11:0;;;;;;23742:285::o;31986:650::-;32101:15;32131:23;32169:12;32196:23;32234:12;32261:18;32293:19;32304:7;32293:10;:19::i;:::-;-1:-1:-1;;;;;32341:15:0;;;;;;:7;:15;;;;;;32086:226;;-1:-1:-1;32086:226:0;;-1:-1:-1;32086:226:0;;-1:-1:-1;32086:226:0;-1:-1:-1;32086:226:0;-1:-1:-1;32086:226:0;-1:-1:-1;32341:28:0;;32361:7;32341:19;:28::i;:::-;-1:-1:-1;;;;;32323:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32398:7;:15;;;;:28;;32418:7;32398:19;:28::i;:::-;-1:-1:-1;;;;;32380:15:0;;;;;;;:7;:15;;;;;;:46;;;;32458:18;;;;;;;:39;;32481:15;32458:22;:39::i;:::-;-1:-1:-1;;;;;32437:18:0;;;;;;:7;:18;;;;;:60;32508:26;32523:10;32508:14;:26::i;:::-;32545:23;32557:4;32563;32545:11;:23::i;:::-;32601:9;-1:-1:-1;;;;;32584:44:0;32593:6;-1:-1:-1;;;;;32584:44:0;;32612:15;32584:44;;;;9952:25:1;;9940:2;9925:18;;9806:177;32584:44:0;;;;;;;;32075:561;;;;;;31986:650;;;:::o;31318:662::-;31431:15;31461:23;31499:12;31526:23;31564:12;31591:18;31623:19;31634:7;31623:10;:19::i;:::-;-1:-1:-1;;;;;31671:15:0;;;;;;:7;:15;;;;;;31416:226;;-1:-1:-1;31416:226:0;;-1:-1:-1;31416:226:0;;-1:-1:-1;31416:226:0;-1:-1:-1;31416:226:0;-1:-1:-1;31416:226:0;-1:-1:-1;31671:28:0;;31416:226;31671:19;:28::i;:::-;-1:-1:-1;;;;;31653:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31731:18;;;;;:7;:18;;;;;:39;;31754:15;31731:22;:39::i;:::-;-1:-1:-1;;;;;31710:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31802:7;:18;;;;:39;;31825:15;31802:22;:39::i;30723:589::-;30834:15;30864:23;30902:12;30929:23;30967:12;30994:18;31026:19;31037:7;31026:10;:19::i;:::-;-1:-1:-1;;;;;31074:15:0;;;;;;:7;:15;;;;;;30819:226;;-1:-1:-1;30819:226:0;;-1:-1:-1;30819:226:0;;-1:-1:-1;30819:226:0;-1:-1:-1;30819:226:0;-1:-1:-1;30819:226:0;-1:-1:-1;31074:28:0;;30819:226;31074:19;:28::i;32642:721::-;32757:15;32787:23;32825:12;32852:23;32890:12;32917:18;32949:19;32960:7;32949:10;:19::i;:::-;-1:-1:-1;;;;;32997:15:0;;;;;;:7;:15;;;;;;32742:226;;-1:-1:-1;32742:226:0;;-1:-1:-1;32742:226:0;;-1:-1:-1;32742:226:0;-1:-1:-1;32742:226:0;-1:-1:-1;32742:226:0;-1:-1:-1;32997:28:0;;33017:7;32997:19;:28::i;:::-;-1:-1:-1;;;;;32979:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33054:7;:15;;;;:28;;33074:7;33054:19;:28::i;23454:130::-;23557:7;;23518;;23545:31;;23570:5;;23545:20;;:7;;23557;;23545:11;:20::i;23590:146::-;23709:7;;23660;;23687:41;;23722:5;;23687:30;;23699:17;;23709:7;;;;;;;23699;;;;:17;:::i;:::-;23687:7;;:30;;:11;:30::i;22889:559::-;22997:1;22980:14;:10;22993:1;22980:14;:::i;:::-;:18;;;;:::i;:::-;22952:24;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;23102:1:0;;-1:-1:-1;23085:14:0;:10;23098:1;23085:14;:::i;:::-;:18;;;;:::i;:::-;23057:24;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;23157:1:0;;-1:-1:-1;23140:14:0;:10;23153:1;23140:14;:::i;:::-;:18;;;;:::i;:::-;23114:22;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;23169:19:0;;-1:-1:-1;23191:10:0;:8;:10::i;:::-;23169:32;-1:-1:-1;23212:18:0;23233:27;:10;23169:32;23233:14;:27::i;:::-;23312:4;23296:22;;;;:7;:22;;;;;;23212:48;;-1:-1:-1;23296:38:0;;23212:48;23296:26;:38::i;:::-;23287:4;23271:22;;;;:7;:22;;;;;;;;:63;;;;23349:11;:26;;;;;;23345:95;;;23418:4;23402:22;;;;:7;:22;;;;;;:38;;23429:10;23402:26;:38::i;:::-;23393:4;23377:22;;;;:7;:22;;;;;:63;23345:95;22941:507;;22889:559;:::o;20821:147::-;20899:7;;:17;;20911:4;20899:11;:17::i;:::-;20889:7;:27;20940:10;;:20;;20955:4;20940:14;:20::i;:::-;20927:10;:33;-1:-1:-1;;20821:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1609:6;1617;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1725:9;1712:23;1744:31;1769:5;1744:31;:::i;:::-;1794:5;1846:2;1831:18;;;;1818:32;;-1:-1:-1;;;1541:315:1:o;1861:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:26;2025:9;2009:26;:::i;2046:180::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;-1:-1:-1;2197:23:1;;2046:180;-1:-1:-1;2046:180:1:o;2231:248::-;2296:6;2304;2357:2;2345:9;2336:7;2332:23;2328:32;2325:52;;;2373:1;2370;2363:12;2325:52;2409:9;2396:23;2386:33;;2438:35;2469:2;2458:9;2454:18;2438:35;:::i;:::-;2428:45;;2231:248;;;;;:::o;2484:306::-;2572:6;2580;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2686:9;2680:16;2670:26;;2736:2;2725:9;2721:18;2715:25;2705:35;;2780:2;2769:9;2765:18;2759:25;2749:35;;2484:306;;;;;:::o;4550:597::-;4662:4;4691:2;4720;4709:9;4702:21;4752:6;4746:13;4795:6;4790:2;4779:9;4775:18;4768:34;4820:1;4830:140;4844:6;4841:1;4838:13;4830:140;;;4939:14;;;4935:23;;4929:30;4905:17;;;4924:2;4901:26;4894:66;4859:10;;4830:140;;;4988:6;4985:1;4982:13;4979:91;;;5058:1;5053:2;5044:6;5033:9;5029:22;5025:31;5018:42;4979:91;-1:-1:-1;5131:2:1;5110:15;-1:-1:-1;;5106:29:1;5091:45;;;;5138:2;5087:54;;4550:597;-1:-1:-1;;;4550:597:1:o;8629:401::-;8831:2;8813:21;;;8870:2;8850:18;;;8843:30;8909:34;8904:2;8889:18;;8882:62;-1:-1:-1;;;8975:2:1;8960:18;;8953:35;9020:3;9005:19;;8629:401::o;9988:980::-;10250:4;10298:3;10287:9;10283:19;10329:6;10318:9;10311:25;10355:2;10393:6;10388:2;10377:9;10373:18;10366:34;10436:3;10431:2;10420:9;10416:18;10409:31;10460:6;10495;10489:13;10526:6;10518;10511:22;10564:3;10553:9;10549:19;10542:26;;10603:2;10595:6;10591:15;10577:29;;10624:1;10634:195;10648:6;10645:1;10642:13;10634:195;;;10713:13;;-1:-1:-1;;;;;10709:39:1;10697:52;;10804:15;;;;10769:12;;;;10745:1;10663:9;10634:195;;;-1:-1:-1;;;;;;;10885:32:1;;;;10880:2;10865:18;;10858:60;-1:-1:-1;;;10949:3:1;10934:19;10927:35;10846:3;9988:980;-1:-1:-1;;;9988:980:1:o;11486:128::-;11526:3;11557:1;11553:6;11550:1;11547:13;11544:39;;;11563:18;;:::i;:::-;-1:-1:-1;11599:9:1;;11486:128::o;11619:204::-;11657:3;11693:4;11690:1;11686:12;11725:4;11722:1;11718:12;11760:3;11754:4;11750:14;11745:3;11742:23;11739:49;;;11768:18;;:::i;:::-;11804:13;;11619:204;-1:-1:-1;;;11619:204:1:o;11828:217::-;11868:1;11894;11884:132;;11938:10;11933:3;11929:20;11926:1;11919:31;11973:4;11970:1;11963:15;12001:4;11998:1;11991:15;11884:132;-1:-1:-1;12030:9:1;;11828:217::o;12050:168::-;12090:7;12156:1;12152;12148:6;12144:14;12141:1;12138:21;12133:1;12126:9;12119:17;12115:45;12112:71;;;12163:18;;:::i;:::-;-1:-1:-1;12203:9:1;;12050:168::o;12223:125::-;12263:4;12291:1;12288;12285:8;12282:34;;;12296:18;;:::i;:::-;-1:-1:-1;12333:9:1;;12223:125::o;12353:135::-;12392:3;-1:-1:-1;;12413:17:1;;12410:43;;;12433:18;;:::i;:::-;-1:-1:-1;12480:1:1;12469:13;;12353:135::o;12493:127::-;12554:10;12549:3;12545:20;12542:1;12535:31;12585:4;12582:1;12575:15;12609:4;12606:1;12599:15;12625:127;12686:10;12681:3;12677:20;12674:1;12667:31;12717:4;12714:1;12707:15;12741:4;12738:1;12731:15;12889:131;-1:-1:-1;;;;;12964:31:1;;12954:42;;12944:70;;13010:1;13007;13000:12;12944:70;12889:131;:::o

Swarm Source

ipfs://be4209130bb88765174e55735afb47aaca2804549e9225e2fded2ea2f4c1a918

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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