ETH Price: $2,408.32 (-0.46%)

Token

PaxGold TRACKER (PaxGoldT)
 

Overview

Max Total Supply

155,850,000,000 PaxGoldT

Holders

173

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
250,000,000 PaxGoldT

Value
$0.00
0x7569daC4C7Df483214EaaD5DEfaAf057a0a2Bff2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DividendTracker

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-16
*/

/**
 *Submitted for verification at Etherscan.io on 2023-05-01
*/

/*
     
     ██████    ████    ██ ███    ██  
    ██        ██  ██   ██ ████   ██  
    ██   ███ ████████  ██ ██ ██  ██  
    ██    ██ ██    ██  ██ ██  ██ ██  
     ██████  ██    ██  ██ ██    ███  

     
GOLD AI NETWORK TOKEN. 

PAXOS Gold airdrops, Personalised trading bots, sustainable fair reward protocol, trading profits buy back and burn $GAIN. 

...

https://www.gaingold.pro
http://t.me/GAIN_PAXG
https://twitter.com/GAIN_PAXG
https://gain.gitbook.io/gain-gold-ai-network/
https://medium.com/@gaingoldpro/introducing-golden-ai-network-gain-token-80de62d7bd88
*/

pragma solidity ^0.8.19;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts);
}


contract PaxGold is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event HolderBuySell(address holder, string actionType, uint256 ethAmount, uint256 ethBalance);
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private botWallets;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromRewards;
    string private _name = "GOLD AI NETWORK TOKEN";
    string private _symbol = "GAIN";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 24_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public ethPriceToSwap = .4 ether;
    uint256 public highSellFeeSwapAmount = 3 ether;
    uint256 public _maxWalletAmount = 480 * 10 ** _decimals;
    address public goldTreasuryAddress = 0xd9C2DCaBb3F5900AF45fF0Aa8929002DE0f9126d;
    address developmentAddress = 0x518ce0A930a46903578c3Ec2146094c773Bf61B7;
    address public deadWallet = address(0xdead);
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    IterableMapping private holderBalanceMap = new IterableMapping();
    
    struct Distribution {
        uint256 goldTreasury;
        uint256 development;
        uint256 paxGoldDividend;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 highSellFee;
    }

    TaxFees public taxFees;
    DividendTracker public dividendTracker;
    Distribution public distribution = Distribution(50,50,0);

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[deadWallet] = true;
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
        taxFees = TaxFees(30, 35, 35);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    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 ethHolderBalance(address account) public view returns (uint) {
        return holderBalanceMap.get(account);
    }
    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns (bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function setHighSellFeeSwapAmount(uint256 ethAmount) external onlyOwner {
        highSellFeeSwapAmount = ethAmount;
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 highSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.highSellFee = highSellFee;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if (doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}

    function getTokenAmountByEthPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    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 the zero address");
        require(spender != address(0), "ERC20: approve to the 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 the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        uint256 taxAmount = 0;
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if (from != owner() && to != owner() && to != deadWallet && from != address(this) && to != address(this)) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");

            if (from == uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) :  0;
                uint ethBuy = getEthValueFromTokens(amount);
                uint newBalance = holderBalanceMap.get(to).add(ethBuy);
                holderBalanceMap.set(to, newBalance);
                emit HolderBuySell(to, "BUY", ethBuy,  newBalance);
            }
            if (from != uniswapV2Pair && to == uniswapV2Pair) {
                taxAmount = takeFees ? amount.mul(taxFees.sellFee).div(100) : 0;
                uint ethSell = getEthValueFromTokens(amount);
                if(taxAmount > 0 && ethSell > highSellFeeSwapAmount) {
                    taxAmount = taxFees.highSellFee;
                }
                int val = int(holderBalanceMap.get(from)) - int(ethSell);
                uint256 newBalance = val <= 0 ? 0 : uint256(val);
                holderBalanceMap.set(from, newBalance);
                emit HolderBuySell(from, "SELL", ethSell,  newBalance);
                swapTokens();
            }
            if (from != uniswapV2Pair && to != uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }

            try dividendTracker.setTokenBalance(from) {} catch{}
            try dividendTracker.setTokenBalance(to) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, amount);
    }

    function airDrops(address[] calldata holders, uint256[] calldata amounts) external onlyOwner {
        require(holders.length == amounts.length, "Holders and amounts must be the same count");
        address from = _msgSender();
        for(uint256 i=0; i < holders.length; i++) {
            address to = holders[i];
            uint256 amount = amounts[i];
            _balances[from] = _balances[from].sub(amount);
            _balances[to] = _balances[to].add(amount);
            emit Transfer(from, to, amount);
        }
    }

    function swapTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                swapTokensForEth(tokenAmount);
                distributeShares();
            }
        }
    }

    function getEthValueFromTokens(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsIn(tokenAmount, path)[0];
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares() private lockTheSwap {
        uint256 ethBalance = address(this).balance;
        uint256 goldTreasury = ethBalance.mul(distribution.goldTreasury).div(100);
        uint256 development = ethBalance.mul(distribution.development).div(100);
        uint256 paxGoldDividend = ethBalance.mul(distribution.paxGoldDividend).div(100);
        
        payable(goldTreasuryAddress).transfer(goldTreasury);
        payable(developmentAddress).transfer(development);
        sendEthDividends(paxGoldDividend);
    }

    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
                distributeShares();
            }
        }
    }

    function setDistribution(uint256 goldTreasury, uint256 development, uint256 paxGoldDividend) external onlyOwner {
        distribution.goldTreasury = goldTreasury;
        distribution.development = development;
        distribution.paxGoldDividend = paxGoldDividend;
    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function removeEthFromContract() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "PaxGold TRACKER";
    string private _symbol = "PaxGoldT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    PaxGold private paxGold;

    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
    IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IERC20 public paxGoldToken = IERC20(0x45804880De22913dAFE09f4980848ECE6EcbAf78); //PaxGold

    struct GoldDividendTiers {
        uint pureGold;
        uint twentytwoKarat;
        uint twentyKarat;
        uint eighteenKarat;
        uint fourteenKarat;
        uint twelveKarat;
        uint tenKarat;
    }
    GoldDividendTiers public goldDividendTiers;
    constructor() {

        goldDividendTiers = GoldDividendTiers(
            8 ether,
            4 ether,
            2 ether,
            1 ether,
            .5 ether,
            .25 ether,
            .1 ether);
    }

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

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

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

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function getGoldTier(uint256 amount) public view returns (uint, string memory) {
        uint tierLevel = 0;
        string memory tier = "Not Eligible";
        if(amount >= goldDividendTiers.tenKarat) {
            tierLevel = .1 ether;
            tier = "10 Karat";
        } 
        if(amount >= goldDividendTiers.twelveKarat) {
            tierLevel = .25 ether;
            tier = "12 Karat";
        } 
        if(amount >= goldDividendTiers.fourteenKarat) {
            tierLevel = .5 ether;
            tier = "14 Karat";
        } 
        if(amount >= goldDividendTiers.eighteenKarat) {
            tierLevel = 1 ether;
            tier = "18 Karat";
        } 
        if(amount >= goldDividendTiers.twentyKarat) {
            tierLevel = 2 ether;
            tier = "20 Karat";
        } 
        if(amount >= goldDividendTiers.twentytwoKarat) {
            tierLevel = 4 ether;
            tier = "22 Karat";
        } 
        if(amount >= goldDividendTiers.pureGold) {
            tierLevel = 8 ether;
            tier = "Pure Gold";
        } 
        return (tierLevel, tier);
    }

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setTokenBalance(address account) public {
        uint256 balance = paxGold.ethHolderBalance(account);
        if (!paxGold.isExcludedFromRewards(account)) {
            (uint tierLevel,) = getGoldTier(balance);
            if (tierLevel > 0) {
                _setBalance(account, tierLevel);
                tokenHoldersMap.set(account, tierLevel);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if (balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function updateTokenBalances(address[] memory accounts) external {
        uint256 index = 0;
        while (index < accounts.length) {
            setTokenBalance(accounts[index]);
            index += 1;
        }
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        paxGold = PaxGold(payable(contractAddr));
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);
        uint256 initialBalance = paxGoldToken.balanceOf(address(this));
        swapEthForPaxGold(msg.value);
        uint256 newBalance = paxGoldToken.balanceOf(address(this)).sub(initialBalance);
        if (newBalance > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (newBalance).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, newBalance);
            totalDividendsDistributed = totalDividendsDistributed.add(newBalance);
        }
    }

    function swapEthForPaxGold(uint256 ethAmount) public {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(paxGoldToken);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(this),
            block.timestamp
        );
    }


    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            paxGoldToken.transfer(user, _withdrawableDividend);
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }


    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }

    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    //This should never be used, but available in case of unforseen issues
    function sendPaxGoldBack() external onlyOwner {
        uint256 paxGoldBalance = paxGoldToken.balanceOf(address(this));
        paxGoldToken.transfer(owner(), paxGoldBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getGoldTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldDividendTiers","outputs":[{"internalType":"uint256","name":"pureGold","type":"uint256"},{"internalType":"uint256","name":"twentytwoKarat","type":"uint256"},{"internalType":"uint256","name":"twentyKarat","type":"uint256"},{"internalType":"uint256","name":"eighteenKarat","type":"uint256"},{"internalType":"uint256","name":"fourteenKarat","type":"uint256"},{"internalType":"uint256","name":"twelveKarat","type":"uint256"},{"internalType":"uint256","name":"tenKarat","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paxGoldToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEthBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendPaxGoldBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setERC20Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"swapEthForPaxGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalDividendClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"updateTokenBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600f81526020017f506178476f6c6420545241434b45520000000000000000000000000000000000815250600890816200004a9190620005d4565b506040518060400160405280600881526020017f506178476f6c645400000000000000000000000000000000000000000000000081525060099081620000919190620005d4565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000bc906200034c565b604051809103906000f080158015620000d9573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e10601055737a250d5630b4cf539739df2c5dacb4c659f2488d601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507345804880de22913dafe09f4980848ece6ecbaf78601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001d757600080fd5b506000620001ea6200034460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060e00160405280676f05b59d3b2000008152602001673782dace9d9000008152602001671bc16d674ec800008152602001670de0b6b3a764000081526020016706f05b59d3b2000081526020016703782dace9d90000815260200167016345785d8a00008152506013600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060155905050620006bb565b600033905090565b610b08806200524a83390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003dc57607f821691505b602082108103620003f257620003f162000394565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200045c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200041d565b6200046886836200041d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b5620004af620004a98462000480565b6200048a565b62000480565b9050919050565b6000819050919050565b620004d18362000494565b620004e9620004e082620004bc565b8484546200042a565b825550505050565b600090565b62000500620004f1565b6200050d818484620004c6565b505050565b5b81811015620005355762000529600082620004f6565b60018101905062000513565b5050565b601f82111562000584576200054e81620003f8565b62000559846200040d565b8101602085101562000569578190505b6200058162000578856200040d565b83018262000512565b50505b505050565b600082821c905092915050565b6000620005a96000198460080262000589565b1980831691505092915050565b6000620005c4838362000596565b9150826002028217905092915050565b620005df826200035a565b67ffffffffffffffff811115620005fb57620005fa62000365565b5b620006078254620003c3565b6200061482828562000539565b600060209050601f8311600181146200064c576000841562000637578287015190505b620006438582620005b6565b865550620006b3565b601f1984166200065c86620003f8565b60005b8281101562000686578489015182556001820191506020850194506020810190506200065f565b86831015620006a65784890151620006a2601f89168262000596565b8355505b6001600288020188555050505b505050505050565b614b7f80620006cb6000396000f3fe60806040526004361061024a5760003560e01c8063804974ea11610139578063aafd847a116100b6578063e7841ec01161007a578063e7841ec0146108b2578063e98030c7146108dd578063f2fde38b14610906578063fbcbc0f11461092f578063fcbe5f5a14610973578063ffb2c479146109b157610259565b8063aafd847a146107cf578063cac8d5381461080c578063d202146314610835578063dd62ed3e1461085e578063e0fb0f351461089b57610259565b8063941f915a116100fd578063941f915a146106bc57806395d89b41146106ed578063a457c2d714610718578063a8b9d24014610755578063a9059cbb1461079257610259565b8063804974ea146105c357806385a6b3ae14610600578063897742821461062b5780638da5cb5b1461065457806391b89fba1461067f57610259565b806331e79db0116101c75780636a4740021161018b5780636a474002146105165780636f2789ec1461052d57806370a082311461055857806370ae68f014610595578063715018a6146105ac57610259565b806331e79db014610433578063395093511461045c5780633974d3b1146104995780634b1727ff146104c25780635342251a146104eb57610259565b8063226cfa3d1161020e578063226cfa3d1461032657806323b872dd1461036357806327ce0147146103a05780633009a609146103dd578063313ce5671461040857610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109f0565b005b600080fd5b6102666109f0565b005b34801561027457600080fd5b5061027d610c26565b60405161028a91906138e6565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906139b0565b610cb8565b6040516102c79190613a0b565b60405180910390f35b3480156102dc57600080fd5b506102e5610cd6565b6040516102f29190613a35565b60405180910390f35b34801561030757600080fd5b50610310610d6e565b60405161031d9190613a35565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613a50565b610d78565b60405161035a9190613a35565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613a7d565b610d90565b6040516103979190613a0b565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613a50565b610ddd565b6040516103d49190613a35565b60405180910390f35b3480156103e957600080fd5b506103f2610e80565b6040516103ff9190613a35565b60405180910390f35b34801561041457600080fd5b5061041d610e86565b60405161042a9190613aec565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613a50565b610e9d565b005b34801561046857600080fd5b50610483600480360381019061047e91906139b0565b611010565b6040516104909190613a0b565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613a50565b6110c3565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190613c4f565b611412565b005b3480156104f757600080fd5b50610500611459565b60405161050d9190613cf7565b60405180910390f35b34801561052257600080fd5b5061052b61147f565b005b34801561053957600080fd5b5061054261148b565b60405161054f9190613a35565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190613a50565b611491565b60405161058c9190613a35565b60405180910390f35b3480156105a157600080fd5b506105aa6114da565b005b3480156105b857600080fd5b506105c16116ba565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613a50565b61180d565b6040516105f79190613a35565b60405180910390f35b34801561060c57600080fd5b50610615611856565b6040516106229190613a35565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613d7c565b61185c565b005b34801561066057600080fd5b50610669611900565b6040516106769190613dcb565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613a50565b611929565b6040516106b39190613a35565b60405180910390f35b3480156106c857600080fd5b506106d161193b565b6040516106e49796959493929190613de6565b60405180910390f35b3480156106f957600080fd5b5061070261196b565b60405161070f91906138e6565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906139b0565b6119fd565b60405161074c9190613a0b565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613a50565b611aca565b6040516107899190613a35565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b491906139b0565b611b2d565b6040516107c69190613a0b565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613a50565b611b79565b6040516108039190613a35565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190613a50565b611bc2565b005b34801561084157600080fd5b5061085c60048036038101906108579190613e55565b611c9b565b005b34801561086a57600080fd5b5061088560048036038101906108809190613e82565b611ed2565b6040516108929190613a35565b60405180910390f35b3480156108a757600080fd5b506108b0611f59565b005b3480156108be57600080fd5b506108c7612044565b6040516108d49190613a35565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613e55565b61204e565b005b34801561091257600080fd5b5061092d60048036038101906109289190613a50565b6121b5565b005b34801561093b57600080fd5b5061095660048036038101906109519190613a50565b612376565b60405161096a989796959493929190613edb565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190613e55565b612684565b6040516109a8929190613f59565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613e55565b612900565b6040516109e793929190613f89565b60405180910390f35b60006109fa610d6e565b11610a0457600080fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a619190613dcb565b602060405180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190613fd5565b9050610aad34611c9b565b6000610b5d82601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b0e9190613dcb565b602060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190613fd5565b612bfb90919063ffffffff16565b90506000811115610c2257610bb2610b73610d6e565b610b9770010000000000000000000000000000000084612c4590919063ffffffff16565b610ba19190614060565b600154612cbf90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610bfe9190613a35565b60405180910390a2610c1b81600b54612cbf90919063ffffffff16565b600b819055505b5050565b606060088054610c35906140c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c61906140c0565b8015610cae5780601f10610c8357610100808354040283529160200191610cae565b820191906000526020600020905b815481529060010190602001808311610c9157829003601f168201915b5050505050905090565b6000610ccc610cc5612d1d565b8484612d25565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190613fd5565b905090565b6000600754905090565b600f6020528060005260406000206000915090505481565b600080610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990614163565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610e6f610e6a600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5c610e57610e4688611491565b600154612c4590919063ffffffff16565b612eee565b612f0b90919063ffffffff16565b612f56565b610e799190614060565b9050919050565b600e5481565b6000600a60009054906101000a900460ff16905090565b610ea5612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906141cf565b60405180910390fd5b610f3d816000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610f989190613dcb565b600060405180830381600087803b158015610fb257600080fd5b505af1158015610fc6573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006110b961101d612d1d565b846110b4856006600061102e612d1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b612d25565b6001905092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345487d0836040518263ffffffff1660e01b81526004016111209190613dcb565b602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190613fd5565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016111be9190613dcb565b602060405180830381865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff9190614204565b61135757600061120e82612684565b50905060008111156112b8576112248382612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82884836040518363ffffffff1660e01b8152600401611281929190614231565b600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50505050611351565b6112c3836000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b815260040161131e9190613dcb565b600060405180830381600087803b15801561133857600080fd5b505af115801561134c573d6000803e3d6000fd5b505050505b50611402565b600061136283611491565b111561140157611373826000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113ce9190613dcb565b600060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050505b5b61140d826001612fda565b505050565b60005b8151811015611455576114418282815181106114345761143361425a565b5b60200260200101516110c3565b60018161144e9190614289565b9050611415565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61148833613137565b50565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e2612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611566906141cf565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115cc9190613dcb565b602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190613fd5565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611655611900565b836040518363ffffffff1660e01b8152600401611673929190614231565b6020604051808303816000875af1158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b69190614204565b5050565b6116c2612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906141cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611864612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e8906141cf565b60405180910390fd5b6118fb8282612fda565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061193482611aca565b9050919050565b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60606009805461197a906140c0565b80601f01602080910402602001604051908101604052809291908181526020018280546119a6906140c0565b80156119f35780601f106119c8576101008083540402835291602001916119f3565b820191906000526020600020905b8154815290600101906020018083116119d657829003601f168201915b5050505050905090565b6000611ac0611a0a612d1d565b84611abb85604051806060016040528060258152602001614b256025913960066000611a34612d1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e69092919063ffffffff16565b612d25565b6001905092915050565b6000611b26600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b1884610ddd565b612bfb90919063ffffffff16565b9050919050565b600080611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614163565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bca612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e906141cf565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600267ffffffffffffffff811115611cb857611cb7613b0c565b5b604051908082528060200260200182016040528015611ce65781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7a91906142d2565b81600081518110611d8e57611d8d61425a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611dff57611dfe61425a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401611e9c94939291906143f8565b6000604051808303818588803b158015611eb557600080fd5b505af1158015611ec9573d6000803e3d6000fd5b50505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f61612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141cf565b60405180910390fd5b6000479050611ffb611900565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612040573d6000803e3d6000fd5b5050565b6000600e54905090565b612056612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906141cf565b60405180910390fd5b610e1081101580156120f85750620151808111155b612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906144b6565b60405180910390fd5b601054810361217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290614548565b60405180910390fd5b601054817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060108190555050565b6121bd612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612241906141cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906145da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016123e09190613dcb565b602060405180830381865afa1580156123fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124219190614626565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126125d657600e548711156124745761246d600e548861334a90919063ffffffff16565b95506125d5565b6000600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a9190613fd5565b116125165760006125bc565b6125bb600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad9190613fd5565b612bfb90919063ffffffff16565b5b90506125d18189612f0b90919063ffffffff16565b9650505b5b6125df88611aca565b94506125ea88610ddd565b9350600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161263d576000612653565b61265260105484612cbf90919063ffffffff16565b5b9150428211612663576000612677565b6126764283612bfb90919063ffffffff16565b5b9050919395975091939597565b600060606000806040518060400160405280600c81526020017f4e6f7420456c696769626c650000000000000000000000000000000000000000815250905060136006015485106127135767016345785d8a000091506040518060400160405280600881526020017f3130204b6172617400000000000000000000000000000000000000000000000081525090505b6013600501548510612763576703782dace9d9000091506040518060400160405280600881526020017f3132204b6172617400000000000000000000000000000000000000000000000081525090505b60136004015485106127b3576706f05b59d3b2000091506040518060400160405280600881526020017f3134204b6172617400000000000000000000000000000000000000000000000081525090505b601360030154851061280357670de0b6b3a764000091506040518060400160405280600881526020017f3138204b6172617400000000000000000000000000000000000000000000000081525090505b601360020154851061285357671bc16d674ec8000091506040518060400160405280600881526020017f3230204b6172617400000000000000000000000000000000000000000000000081525090505b60136001015485106128a357673782dace9d90000091506040518060400160405280600881526020017f3232204b6172617400000000000000000000000000000000000000000000000081525090505b60136000015485106128f357676f05b59d3b20000091506040518060400160405280600981526020017f5075726520476f6c64000000000000000000000000000000000000000000000081525090505b8181935093505050915091565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129979190613fd5565b9050600081036129b357600080600e5493509350935050612bf4565b6000600e5490506000805a90506000805b89841080156129d257508582105b15612bdb5784806129e290614653565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a769190613fd5565b8510612a8157600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612ade9190613a35565b602060405180830381865afa158015612afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1f91906142d2565b9050612b69600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613395565b15612b8e57612b79816001612fda565b15612b8d578180612b8990614653565b9250505b5b8280612b9990614653565b93505060005a905080851115612bd157612bce612bbf8287612bfb90919063ffffffff16565b87612cbf90919063ffffffff16565b95505b80945050506129c4565b84600e819055508181600e549850985098505050505050505b9193909250565b6000612c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132e6565b905092915050565b6000808303612c575760009050612cb9565b60008284612c65919061469b565b9050828482612c749190614060565b14612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab9061474f565b60405180910390fd5b809150505b92915050565b6000808284612cce9190614289565b905083811015612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906147bb565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8b9061484d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa906148df565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ee19190613a35565b60405180910390a3505050565b6000808290506000811215612f0257600080fd5b80915050919050565b6000808284612f1a91906148ff565b905060008312158015612f2d5750838112155b80612f435750600083128015612f4257508381125b5b612f4c57600080fd5b8091505092915050565b600080821215612f6557600080fd5b819050919050565b6000612f7883611491565b905080821115612fa9576000612f978284612bfb90919063ffffffff16565b9050612fa384826133c8565b50612fd5565b80821015612fd4576000612fc68383612bfb90919063ffffffff16565b9050612fd28482613602565b505b5b505050565b600080612fe684613137565b9050600081111561312b576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506130488183612cbf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516131189190613a35565b60405180910390a3600192505050613131565b60009150505b92915050565b60008061314383611aca565b905060008111156132db576131a081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516132299190613a35565b60405180910390a2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161328e929190614964565b6020604051808303816000875af11580156132ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d19190614204565b50809150506132e1565b60009150505b919050565b600083831115829061332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332591906138e6565b60405180910390fd5b506000838561333d919061498d565b9050809150509392505050565b600080828461335991906149c1565b90506000831215801561336c5750838113155b80613382575060008312801561338157508381135b5b61338b57600080fd5b8091505092915050565b6000428211156133a857600090506133c3565b6010546133be8342612bfb90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342e90614a50565b60405180910390fd5b61344c81600754612cbf90919063ffffffff16565b6007819055506134a481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135459190613a35565b60405180910390a36135bb61356d61356883600154612c4590919063ffffffff16565b612eee565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366890614ae2565b60405180910390fd5b6136dd81604051806060016040528060228152602001614b0360229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e69092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581600754612bfb90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137999190613a35565b60405180910390a361380f6137c16137bc83600154612c4590919063ffffffff16565b612eee565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613890578082015181840152602081019050613875565b60008484015250505050565b6000601f19601f8301169050919050565b60006138b882613856565b6138c28185613861565b93506138d2818560208601613872565b6138db8161389c565b840191505092915050565b6000602082019050818103600083015261390081846138ad565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139478261391c565b9050919050565b6139578161393c565b811461396257600080fd5b50565b6000813590506139748161394e565b92915050565b6000819050919050565b61398d8161397a565b811461399857600080fd5b50565b6000813590506139aa81613984565b92915050565b600080604083850312156139c7576139c6613912565b5b60006139d585828601613965565b92505060206139e68582860161399b565b9150509250929050565b60008115159050919050565b613a05816139f0565b82525050565b6000602082019050613a2060008301846139fc565b92915050565b613a2f8161397a565b82525050565b6000602082019050613a4a6000830184613a26565b92915050565b600060208284031215613a6657613a65613912565b5b6000613a7484828501613965565b91505092915050565b600080600060608486031215613a9657613a95613912565b5b6000613aa486828701613965565b9350506020613ab586828701613965565b9250506040613ac68682870161399b565b9150509250925092565b600060ff82169050919050565b613ae681613ad0565b82525050565b6000602082019050613b016000830184613add565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b448261389c565b810181811067ffffffffffffffff82111715613b6357613b62613b0c565b5b80604052505050565b6000613b76613908565b9050613b828282613b3b565b919050565b600067ffffffffffffffff821115613ba257613ba1613b0c565b5b602082029050602081019050919050565b600080fd5b6000613bcb613bc684613b87565b613b6c565b90508083825260208201905060208402830185811115613bee57613bed613bb3565b5b835b81811015613c175780613c038882613965565b845260208401935050602081019050613bf0565b5050509392505050565b600082601f830112613c3657613c35613b07565b5b8135613c46848260208601613bb8565b91505092915050565b600060208284031215613c6557613c64613912565b5b600082013567ffffffffffffffff811115613c8357613c82613917565b5b613c8f84828501613c21565b91505092915050565b6000819050919050565b6000613cbd613cb8613cb38461391c565b613c98565b61391c565b9050919050565b6000613ccf82613ca2565b9050919050565b6000613ce182613cc4565b9050919050565b613cf181613cd6565b82525050565b6000602082019050613d0c6000830184613ce8565b92915050565b6000613d1d8261391c565b9050919050565b613d2d81613d12565b8114613d3857600080fd5b50565b600081359050613d4a81613d24565b92915050565b613d59816139f0565b8114613d6457600080fd5b50565b600081359050613d7681613d50565b92915050565b60008060408385031215613d9357613d92613912565b5b6000613da185828601613d3b565b9250506020613db285828601613d67565b9150509250929050565b613dc58161393c565b82525050565b6000602082019050613de06000830184613dbc565b92915050565b600060e082019050613dfb600083018a613a26565b613e086020830189613a26565b613e156040830188613a26565b613e226060830187613a26565b613e2f6080830186613a26565b613e3c60a0830185613a26565b613e4960c0830184613a26565b98975050505050505050565b600060208284031215613e6b57613e6a613912565b5b6000613e798482850161399b565b91505092915050565b60008060408385031215613e9957613e98613912565b5b6000613ea785828601613965565b9250506020613eb885828601613965565b9150509250929050565b6000819050919050565b613ed581613ec2565b82525050565b600061010082019050613ef1600083018b613dbc565b613efe602083018a613ecc565b613f0b6040830189613ecc565b613f186060830188613a26565b613f256080830187613a26565b613f3260a0830186613a26565b613f3f60c0830185613a26565b613f4c60e0830184613a26565b9998505050505050505050565b6000604082019050613f6e6000830185613a26565b8181036020830152613f8081846138ad565b90509392505050565b6000606082019050613f9e6000830186613a26565b613fab6020830185613a26565b613fb86040830184613a26565b949350505050565b600081519050613fcf81613984565b92915050565b600060208284031215613feb57613fea613912565b5b6000613ff984828501613fc0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406b8261397a565b91506140768361397a565b92508261408657614085614002565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140d857607f821691505b6020821081036140eb576140ea614091565b5b50919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b600061414d602883613861565b9150614158826140f1565b604082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141b9602083613861565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b6000815190506141fe81613d50565b92915050565b60006020828403121561421a57614219613912565b5b6000614228848285016141ef565b91505092915050565b60006040820190506142466000830185613dbc565b6142536020830184613a26565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142948261397a565b915061429f8361397a565b92508282019050808211156142b7576142b6614031565b5b92915050565b6000815190506142cc8161394e565b92915050565b6000602082840312156142e8576142e7613912565b5b60006142f6848285016142bd565b91505092915050565b6000819050919050565b600061432461431f61431a846142ff565b613c98565b61397a565b9050919050565b61433481614309565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436f8161393c565b82525050565b60006143818383614366565b60208301905092915050565b6000602082019050919050565b60006143a58261433a565b6143af8185614345565b93506143ba83614356565b8060005b838110156143eb5781516143d28882614375565b97506143dd8361438d565b9250506001810190506143be565b5085935050505092915050565b600060808201905061440d600083018761432b565b818103602083015261441f818661439a565b905061442e6040830185613dbc565b61443b6060830184613a26565b95945050505050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b60006144a0603383613861565b91506144ab82614444565b604082019050919050565b600060208201905081810360008301526144cf81614493565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614532602583613861565b915061453d826144d6565b604082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145c4602683613861565b91506145cf82614568565b604082019050919050565b600060208201905081810360008301526145f3816145b7565b9050919050565b61460381613ec2565b811461460e57600080fd5b50565b600081519050614620816145fa565b92915050565b60006020828403121561463c5761463b613912565b5b600061464a84828501614611565b91505092915050565b600061465e8261397a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146905761468f614031565b5b600182019050919050565b60006146a68261397a565b91506146b18361397a565b92508282026146bf8161397a565b915082820484148315176146d6576146d5614031565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614739602183613861565b9150614744826146dd565b604082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006147a5601b83613861565b91506147b08261476f565b602082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614837602483613861565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148c9602283613861565b91506148d48261486d565b604082019050919050565b600060208201905081810360008301526148f8816148bc565b9050919050565b600061490a82613ec2565b915061491583613ec2565b92508282019050828112156000831216838212600084121516171561493d5761493c614031565b5b92915050565b600061494e82613cc4565b9050919050565b61495e81614943565b82525050565b60006040820190506149796000830185614955565b6149866020830184613a26565b9392505050565b60006149988261397a565b91506149a38361397a565b92508282039050818111156149bb576149ba614031565b5b92915050565b60006149cc82613ec2565b91506149d783613ec2565b92508282039050818112600084121682821360008512151617156149fe576149fd614031565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614a3a601f83613861565b9150614a4582614a04565b602082019050919050565b60006020820190508181036000830152614a6981614a2d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614acc602183613861565b9150614ad782614a70565b604082019050919050565b60006020820190508181036000830152614afb81614abf565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d41fbb9894d4ca2b9130666416221aa27b202e1bacfc1aa40f4e5540aa3cba3e64736f6c63430008130033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f6e9d89eab67759c7f39bb792460c7e183bf328b6de8c893761ece99f8c06c8064736f6c63430008130033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063804974ea11610139578063aafd847a116100b6578063e7841ec01161007a578063e7841ec0146108b2578063e98030c7146108dd578063f2fde38b14610906578063fbcbc0f11461092f578063fcbe5f5a14610973578063ffb2c479146109b157610259565b8063aafd847a146107cf578063cac8d5381461080c578063d202146314610835578063dd62ed3e1461085e578063e0fb0f351461089b57610259565b8063941f915a116100fd578063941f915a146106bc57806395d89b41146106ed578063a457c2d714610718578063a8b9d24014610755578063a9059cbb1461079257610259565b8063804974ea146105c357806385a6b3ae14610600578063897742821461062b5780638da5cb5b1461065457806391b89fba1461067f57610259565b806331e79db0116101c75780636a4740021161018b5780636a474002146105165780636f2789ec1461052d57806370a082311461055857806370ae68f014610595578063715018a6146105ac57610259565b806331e79db014610433578063395093511461045c5780633974d3b1146104995780634b1727ff146104c25780635342251a146104eb57610259565b8063226cfa3d1161020e578063226cfa3d1461032657806323b872dd1461036357806327ce0147146103a05780633009a609146103dd578063313ce5671461040857610259565b806303c833021461025e57806306fdde0314610268578063095ea7b31461029357806309bbedde146102d057806318160ddd146102fb57610259565b36610259576102576109f0565b005b600080fd5b6102666109f0565b005b34801561027457600080fd5b5061027d610c26565b60405161028a91906138e6565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906139b0565b610cb8565b6040516102c79190613a0b565b60405180910390f35b3480156102dc57600080fd5b506102e5610cd6565b6040516102f29190613a35565b60405180910390f35b34801561030757600080fd5b50610310610d6e565b60405161031d9190613a35565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613a50565b610d78565b60405161035a9190613a35565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613a7d565b610d90565b6040516103979190613a0b565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613a50565b610ddd565b6040516103d49190613a35565b60405180910390f35b3480156103e957600080fd5b506103f2610e80565b6040516103ff9190613a35565b60405180910390f35b34801561041457600080fd5b5061041d610e86565b60405161042a9190613aec565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613a50565b610e9d565b005b34801561046857600080fd5b50610483600480360381019061047e91906139b0565b611010565b6040516104909190613a0b565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613a50565b6110c3565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190613c4f565b611412565b005b3480156104f757600080fd5b50610500611459565b60405161050d9190613cf7565b60405180910390f35b34801561052257600080fd5b5061052b61147f565b005b34801561053957600080fd5b5061054261148b565b60405161054f9190613a35565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190613a50565b611491565b60405161058c9190613a35565b60405180910390f35b3480156105a157600080fd5b506105aa6114da565b005b3480156105b857600080fd5b506105c16116ba565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613a50565b61180d565b6040516105f79190613a35565b60405180910390f35b34801561060c57600080fd5b50610615611856565b6040516106229190613a35565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613d7c565b61185c565b005b34801561066057600080fd5b50610669611900565b6040516106769190613dcb565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613a50565b611929565b6040516106b39190613a35565b60405180910390f35b3480156106c857600080fd5b506106d161193b565b6040516106e49796959493929190613de6565b60405180910390f35b3480156106f957600080fd5b5061070261196b565b60405161070f91906138e6565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906139b0565b6119fd565b60405161074c9190613a0b565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613a50565b611aca565b6040516107899190613a35565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b491906139b0565b611b2d565b6040516107c69190613a0b565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613a50565b611b79565b6040516108039190613a35565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190613a50565b611bc2565b005b34801561084157600080fd5b5061085c60048036038101906108579190613e55565b611c9b565b005b34801561086a57600080fd5b5061088560048036038101906108809190613e82565b611ed2565b6040516108929190613a35565b60405180910390f35b3480156108a757600080fd5b506108b0611f59565b005b3480156108be57600080fd5b506108c7612044565b6040516108d49190613a35565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613e55565b61204e565b005b34801561091257600080fd5b5061092d60048036038101906109289190613a50565b6121b5565b005b34801561093b57600080fd5b5061095660048036038101906109519190613a50565b612376565b60405161096a989796959493929190613edb565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190613e55565b612684565b6040516109a8929190613f59565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613e55565b612900565b6040516109e793929190613f89565b60405180910390f35b60006109fa610d6e565b11610a0457600080fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a619190613dcb565b602060405180830381865afa158015610a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa29190613fd5565b9050610aad34611c9b565b6000610b5d82601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b0e9190613dcb565b602060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4f9190613fd5565b612bfb90919063ffffffff16565b90506000811115610c2257610bb2610b73610d6e565b610b9770010000000000000000000000000000000084612c4590919063ffffffff16565b610ba19190614060565b600154612cbf90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610bfe9190613a35565b60405180910390a2610c1b81600b54612cbf90919063ffffffff16565b600b819055505b5050565b606060088054610c35906140c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c61906140c0565b8015610cae5780601f10610c8357610100808354040283529160200191610cae565b820191906000526020600020905b815481529060010190602001808311610c9157829003601f168201915b5050505050905090565b6000610ccc610cc5612d1d565b8484612d25565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190613fd5565b905090565b6000600754905090565b600f6020528060005260406000206000915090505481565b600080610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990614163565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610e6f610e6a600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e5c610e57610e4688611491565b600154612c4590919063ffffffff16565b612eee565b612f0b90919063ffffffff16565b612f56565b610e799190614060565b9050919050565b600e5481565b6000600a60009054906101000a900460ff16905090565b610ea5612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f29906141cf565b60405180910390fd5b610f3d816000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610f989190613dcb565b600060405180830381600087803b158015610fb257600080fd5b505af1158015610fc6573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006110b961101d612d1d565b846110b4856006600061102e612d1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b612d25565b6001905092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345487d0836040518263ffffffff1660e01b81526004016111209190613dcb565b602060405180830381865afa15801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190613fd5565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016111be9190613dcb565b602060405180830381865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff9190614204565b61135757600061120e82612684565b50905060008111156112b8576112248382612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82884836040518363ffffffff1660e01b8152600401611281929190614231565b600060405180830381600087803b15801561129b57600080fd5b505af11580156112af573d6000803e3d6000fd5b50505050611351565b6112c3836000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e846040518263ffffffff1660e01b815260040161131e9190613dcb565b600060405180830381600087803b15801561133857600080fd5b505af115801561134c573d6000803e3d6000fd5b505050505b50611402565b600061136283611491565b111561140157611373826000612f6d565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113ce9190613dcb565b600060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050505b5b61140d826001612fda565b505050565b60005b8151811015611455576114418282815181106114345761143361425a565b5b60200260200101516110c3565b60018161144e9190614289565b9050611415565b5050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61148833613137565b50565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e2612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611566906141cf565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115cc9190613dcb565b602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190613fd5565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611655611900565b836040518363ffffffff1660e01b8152600401611673929190614231565b6020604051808303816000875af1158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b69190614204565b5050565b6116c2612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906141cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611864612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e8906141cf565b60405180910390fd5b6118fb8282612fda565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061193482611aca565b9050919050565b60138060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60606009805461197a906140c0565b80601f01602080910402602001604051908101604052809291908181526020018280546119a6906140c0565b80156119f35780601f106119c8576101008083540402835291602001916119f3565b820191906000526020600020905b8154815290600101906020018083116119d657829003601f168201915b5050505050905090565b6000611ac0611a0a612d1d565b84611abb85604051806060016040528060258152602001614b256025913960066000611a34612d1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e69092919063ffffffff16565b612d25565b6001905092915050565b6000611b26600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b1884610ddd565b612bfb90919063ffffffff16565b9050919050565b600080611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614163565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bca612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e906141cf565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600267ffffffffffffffff811115611cb857611cb7613b0c565b5b604051908082528060200260200182016040528015611ce65781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7a91906142d2565b81600081518110611d8e57611d8d61425a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611dff57611dfe61425a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b8152600401611e9c94939291906143f8565b6000604051808303818588803b158015611eb557600080fd5b505af1158015611ec9573d6000803e3d6000fd5b50505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f61612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141cf565b60405180910390fd5b6000479050611ffb611900565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612040573d6000803e3d6000fd5b5050565b6000600e54905090565b612056612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da906141cf565b60405180910390fd5b610e1081101580156120f85750620151808111155b612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906144b6565b60405180910390fd5b601054810361217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290614548565b60405180910390fd5b601054817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060108190555050565b6121bd612d1d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612241906141cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906145da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016123e09190613dcb565b602060405180830381865afa1580156123fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124219190614626565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126125d657600e548711156124745761246d600e548861334a90919063ffffffff16565b95506125d5565b6000600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a9190613fd5565b116125165760006125bc565b6125bb600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad9190613fd5565b612bfb90919063ffffffff16565b5b90506125d18189612f0b90919063ffffffff16565b9650505b5b6125df88611aca565b94506125ea88610ddd565b9350600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161263d576000612653565b61265260105484612cbf90919063ffffffff16565b5b9150428211612663576000612677565b6126764283612bfb90919063ffffffff16565b5b9050919395975091939597565b600060606000806040518060400160405280600c81526020017f4e6f7420456c696769626c650000000000000000000000000000000000000000815250905060136006015485106127135767016345785d8a000091506040518060400160405280600881526020017f3130204b6172617400000000000000000000000000000000000000000000000081525090505b6013600501548510612763576703782dace9d9000091506040518060400160405280600881526020017f3132204b6172617400000000000000000000000000000000000000000000000081525090505b60136004015485106127b3576706f05b59d3b2000091506040518060400160405280600881526020017f3134204b6172617400000000000000000000000000000000000000000000000081525090505b601360030154851061280357670de0b6b3a764000091506040518060400160405280600881526020017f3138204b6172617400000000000000000000000000000000000000000000000081525090505b601360020154851061285357671bc16d674ec8000091506040518060400160405280600881526020017f3230204b6172617400000000000000000000000000000000000000000000000081525090505b60136001015485106128a357673782dace9d90000091506040518060400160405280600881526020017f3232204b6172617400000000000000000000000000000000000000000000000081525090505b60136000015485106128f357676f05b59d3b20000091506040518060400160405280600981526020017f5075726520476f6c64000000000000000000000000000000000000000000000081525090505b8181935093505050915091565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129979190613fd5565b9050600081036129b357600080600e5493509350935050612bf4565b6000600e5490506000805a90506000805b89841080156129d257508582105b15612bdb5784806129e290614653565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a769190613fd5565b8510612a8157600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612ade9190613a35565b602060405180830381865afa158015612afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1f91906142d2565b9050612b69600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613395565b15612b8e57612b79816001612fda565b15612b8d578180612b8990614653565b9250505b5b8280612b9990614653565b93505060005a905080851115612bd157612bce612bbf8287612bfb90919063ffffffff16565b87612cbf90919063ffffffff16565b95505b80945050506129c4565b84600e819055508181600e549850985098505050505050505b9193909250565b6000612c3d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132e6565b905092915050565b6000808303612c575760009050612cb9565b60008284612c65919061469b565b9050828482612c749190614060565b14612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab9061474f565b60405180910390fd5b809150505b92915050565b6000808284612cce9190614289565b905083811015612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906147bb565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8b9061484d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa906148df565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ee19190613a35565b60405180910390a3505050565b6000808290506000811215612f0257600080fd5b80915050919050565b6000808284612f1a91906148ff565b905060008312158015612f2d5750838112155b80612f435750600083128015612f4257508381125b5b612f4c57600080fd5b8091505092915050565b600080821215612f6557600080fd5b819050919050565b6000612f7883611491565b905080821115612fa9576000612f978284612bfb90919063ffffffff16565b9050612fa384826133c8565b50612fd5565b80821015612fd4576000612fc68383612bfb90919063ffffffff16565b9050612fd28482613602565b505b5b505050565b600080612fe684613137565b9050600081111561312b576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506130488183612cbf90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516131189190613a35565b60405180910390a3600192505050613131565b60009150505b92915050565b60008061314383611aca565b905060008111156132db576131a081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516132299190613a35565b60405180910390a2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161328e929190614964565b6020604051808303816000875af11580156132ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d19190614204565b50809150506132e1565b60009150505b919050565b600083831115829061332e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332591906138e6565b60405180910390fd5b506000838561333d919061498d565b9050809150509392505050565b600080828461335991906149c1565b90506000831215801561336c5750838113155b80613382575060008312801561338157508381135b5b61338b57600080fd5b8091505092915050565b6000428211156133a857600090506133c3565b6010546133be8342612bfb90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342e90614a50565b60405180910390fd5b61344c81600754612cbf90919063ffffffff16565b6007819055506134a481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cbf90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135459190613a35565b60405180910390a36135bb61356d61356883600154612c4590919063ffffffff16565b612eee565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366890614ae2565b60405180910390fd5b6136dd81604051806060016040528060228152602001614b0360229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132e69092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581600754612bfb90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137999190613a35565b60405180910390a361380f6137c16137bc83600154612c4590919063ffffffff16565b612eee565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613890578082015181840152602081019050613875565b60008484015250505050565b6000601f19601f8301169050919050565b60006138b882613856565b6138c28185613861565b93506138d2818560208601613872565b6138db8161389c565b840191505092915050565b6000602082019050818103600083015261390081846138ad565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139478261391c565b9050919050565b6139578161393c565b811461396257600080fd5b50565b6000813590506139748161394e565b92915050565b6000819050919050565b61398d8161397a565b811461399857600080fd5b50565b6000813590506139aa81613984565b92915050565b600080604083850312156139c7576139c6613912565b5b60006139d585828601613965565b92505060206139e68582860161399b565b9150509250929050565b60008115159050919050565b613a05816139f0565b82525050565b6000602082019050613a2060008301846139fc565b92915050565b613a2f8161397a565b82525050565b6000602082019050613a4a6000830184613a26565b92915050565b600060208284031215613a6657613a65613912565b5b6000613a7484828501613965565b91505092915050565b600080600060608486031215613a9657613a95613912565b5b6000613aa486828701613965565b9350506020613ab586828701613965565b9250506040613ac68682870161399b565b9150509250925092565b600060ff82169050919050565b613ae681613ad0565b82525050565b6000602082019050613b016000830184613add565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b448261389c565b810181811067ffffffffffffffff82111715613b6357613b62613b0c565b5b80604052505050565b6000613b76613908565b9050613b828282613b3b565b919050565b600067ffffffffffffffff821115613ba257613ba1613b0c565b5b602082029050602081019050919050565b600080fd5b6000613bcb613bc684613b87565b613b6c565b90508083825260208201905060208402830185811115613bee57613bed613bb3565b5b835b81811015613c175780613c038882613965565b845260208401935050602081019050613bf0565b5050509392505050565b600082601f830112613c3657613c35613b07565b5b8135613c46848260208601613bb8565b91505092915050565b600060208284031215613c6557613c64613912565b5b600082013567ffffffffffffffff811115613c8357613c82613917565b5b613c8f84828501613c21565b91505092915050565b6000819050919050565b6000613cbd613cb8613cb38461391c565b613c98565b61391c565b9050919050565b6000613ccf82613ca2565b9050919050565b6000613ce182613cc4565b9050919050565b613cf181613cd6565b82525050565b6000602082019050613d0c6000830184613ce8565b92915050565b6000613d1d8261391c565b9050919050565b613d2d81613d12565b8114613d3857600080fd5b50565b600081359050613d4a81613d24565b92915050565b613d59816139f0565b8114613d6457600080fd5b50565b600081359050613d7681613d50565b92915050565b60008060408385031215613d9357613d92613912565b5b6000613da185828601613d3b565b9250506020613db285828601613d67565b9150509250929050565b613dc58161393c565b82525050565b6000602082019050613de06000830184613dbc565b92915050565b600060e082019050613dfb600083018a613a26565b613e086020830189613a26565b613e156040830188613a26565b613e226060830187613a26565b613e2f6080830186613a26565b613e3c60a0830185613a26565b613e4960c0830184613a26565b98975050505050505050565b600060208284031215613e6b57613e6a613912565b5b6000613e798482850161399b565b91505092915050565b60008060408385031215613e9957613e98613912565b5b6000613ea785828601613965565b9250506020613eb885828601613965565b9150509250929050565b6000819050919050565b613ed581613ec2565b82525050565b600061010082019050613ef1600083018b613dbc565b613efe602083018a613ecc565b613f0b6040830189613ecc565b613f186060830188613a26565b613f256080830187613a26565b613f3260a0830186613a26565b613f3f60c0830185613a26565b613f4c60e0830184613a26565b9998505050505050505050565b6000604082019050613f6e6000830185613a26565b8181036020830152613f8081846138ad565b90509392505050565b6000606082019050613f9e6000830186613a26565b613fab6020830185613a26565b613fb86040830184613a26565b949350505050565b600081519050613fcf81613984565b92915050565b600060208284031215613feb57613fea613912565b5b6000613ff984828501613fc0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406b8261397a565b91506140768361397a565b92508261408657614085614002565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140d857607f821691505b6020821081036140eb576140ea614091565b5b50919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b600061414d602883613861565b9150614158826140f1565b604082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141b9602083613861565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b6000815190506141fe81613d50565b92915050565b60006020828403121561421a57614219613912565b5b6000614228848285016141ef565b91505092915050565b60006040820190506142466000830185613dbc565b6142536020830184613a26565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142948261397a565b915061429f8361397a565b92508282019050808211156142b7576142b6614031565b5b92915050565b6000815190506142cc8161394e565b92915050565b6000602082840312156142e8576142e7613912565b5b60006142f6848285016142bd565b91505092915050565b6000819050919050565b600061432461431f61431a846142ff565b613c98565b61397a565b9050919050565b61433481614309565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61436f8161393c565b82525050565b60006143818383614366565b60208301905092915050565b6000602082019050919050565b60006143a58261433a565b6143af8185614345565b93506143ba83614356565b8060005b838110156143eb5781516143d28882614375565b97506143dd8361438d565b9250506001810190506143be565b5085935050505092915050565b600060808201905061440d600083018761432b565b818103602083015261441f818661439a565b905061442e6040830185613dbc565b61443b6060830184613a26565b95945050505050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b60006144a0603383613861565b91506144ab82614444565b604082019050919050565b600060208201905081810360008301526144cf81614493565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b6000614532602583613861565b915061453d826144d6565b604082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145c4602683613861565b91506145cf82614568565b604082019050919050565b600060208201905081810360008301526145f3816145b7565b9050919050565b61460381613ec2565b811461460e57600080fd5b50565b600081519050614620816145fa565b92915050565b60006020828403121561463c5761463b613912565b5b600061464a84828501614611565b91505092915050565b600061465e8261397a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146905761468f614031565b5b600182019050919050565b60006146a68261397a565b91506146b18361397a565b92508282026146bf8161397a565b915082820484148315176146d6576146d5614031565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614739602183613861565b9150614744826146dd565b604082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006147a5601b83613861565b91506147b08261476f565b602082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614837602483613861565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148c9602283613861565b91506148d48261486d565b604082019050919050565b600060208201905081810360008301526148f8816148bc565b9050919050565b600061490a82613ec2565b915061491583613ec2565b92508282019050828112156000831216838212600084121516171561493d5761493c614031565b5b92915050565b600061494e82613cc4565b9050919050565b61495e81614943565b82525050565b60006040820190506149796000830185614955565b6149866020830184613a26565b9392505050565b60006149988261397a565b91506149a38361397a565b92508282039050818111156149bb576149ba614031565b5b92915050565b60006149cc82613ec2565b91506149d783613ec2565b92508282039050818112600084121682821360008512151617156149fe576149fd614031565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614a3a601f83613861565b9150614a4582614a04565b602082019050919050565b60006020820190508181036000830152614a6981614a2d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614acc602183613861565b9150614ad782614a70565b604082019050919050565b60006020820190508181036000830152614afb81614abf565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d41fbb9894d4ca2b9130666416221aa27b202e1bacfc1aa40f4e5540aa3cba3e64736f6c63430008130033

Deployed Bytecode Sourcemap

36600:15424:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44000:21;:19;:21::i;:::-;36600:15424;;;;;44374:631;;;:::i;:::-;;38773:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40948:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47354:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39050:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37734:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40605:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46600:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37694:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38959:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44171:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41125:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41973:742;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42723:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38158:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45539:106;;;;;;;;;;;;;:::i;:::-;;37790:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39158:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51835:184;;;;;;;;;;;;;:::i;:::-;;18582:148;;;;;;;;;;;;;:::i;:::-;;50898:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37344:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50743:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17946:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46161:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38485:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;38864:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41351:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46291:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40435:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46465:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44037:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45013:516;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40797:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51600:151;;;;;;;;;;;;;:::i;:::-;;47237:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46857:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18885:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47477:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;39293:1134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;49452:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;44374:631;44455:1;44439:13;:11;:13::i;:::-;:17;44431:26;;;;;;44468:22;44493:12;;;;;;;;;;;:22;;;44524:4;44493:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44468:62;;44541:28;44559:9;44541:17;:28::i;:::-;44580:18;44601:57;44643:14;44601:12;;;;;;;;;;;:22;;;44632:4;44601:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;44580:78;;44686:1;44673:10;:14;44669:329;;;44732:106;44810:13;:11;:13::i;:::-;44780:27;36803:8;44781:10;44780:16;;:27;;;;:::i;:::-;:43;;;;:::i;:::-;44732:25;;:29;;:106;;;;:::i;:::-;44704:25;:134;;;;44879:10;44858:44;;;44891:10;44858:44;;;;;;:::i;:::-;;;;;;;;44945:41;44975:10;44945:25;;:29;;:41;;;;:::i;:::-;44917:25;:69;;;;44669:329;44420:585;;44374:631::o;38773:83::-;38810:13;38843:5;38836:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38773:83;:::o;40948:169::-;41031:4;41048:39;41057:12;:10;:12::i;:::-;41071:7;41080:6;41048:8;:39::i;:::-;41105:4;41098:11;;40948:169;;;;:::o;47354:115::-;47412:7;47439:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47432:29;;47354:115;:::o;39050:100::-;39103:7;39130:12;;39123:19;;39050:100;:::o;37734:49::-;;;;;;;;;;;;;;;;;:::o;40605:184::-;40684:4;40709:5;40701:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40777:4;40770:11;;40605:184;;;;;:::o;46600:247::-;46669:7;36803:8;46696:131;:115;46774:28;:36;46803:6;46774:36;;;;;;;;;;;;;;;;46696:63;:48;46726:17;46736:6;46726:9;:17::i;:::-;46696:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;46689:150;;46600:247;;;:::o;37694:33::-;;;;:::o;38959:83::-;39000:5;39025:9;;;;;;;;;;;39018:16;;38959:83;:::o;44171:195::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44248:23:::1;44260:7;44269:1;44248:11;:23::i;:::-;44282:15;;;;;;;;;;;:22;;;44305:7;44282:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44350:7;44329:29;;;;;;;;;;;;44171:195:::0;:::o;41125:218::-;41213:4;41230:83;41239:12;:10;:12::i;:::-;41253:7;41262:50;41301:10;41262:11;:25;41274:12;:10;:12::i;:::-;41262:25;;;;;;;;;;;;;;;:34;41288:7;41262:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;41230:8;:83::i;:::-;41331:4;41324:11;;41125:218;;;;:::o;41973:742::-;42033:15;42051:7;;;;;;;;;;;:24;;;42076:7;42051:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42033:51;;42100:7;;;;;;;;;;;:29;;;42130:7;42100:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42095:564;;42156:14;42175:20;42187:7;42175:11;:20::i;:::-;42155:40;;;42226:1;42214:9;:13;42210:270;;;42248:31;42260:7;42269:9;42248:11;:31::i;:::-;42298:15;;;;;;;;;;;:19;;;42318:7;42327:9;42298:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42210:270;;;42391:23;42403:7;42412:1;42391:11;:23::i;:::-;42433:15;;;;;;;;;;;:22;;;42456:7;42433:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42210:270;42140:351;42095:564;;;42537:1;42516:18;42526:7;42516:9;:18::i;:::-;:22;42512:136;;;42559:23;42571:7;42580:1;42559:11;:23::i;:::-;42601:15;;;;;;;;;;;:22;;;42624:7;42601:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42512:136;42095:564;42669:38;42692:7;42702:4;42669:14;:38::i;:::-;;42022:693;41973:742;:::o;42723:227::-;42799:13;42827:116;42842:8;:15;42834:5;:23;42827:116;;;42874:32;42890:8;42899:5;42890:15;;;;;;;;:::i;:::-;;;;;;;;42874;:32::i;:::-;42930:1;42921:10;;;;;:::i;:::-;;;42827:116;;;42788:162;42723:227;:::o;38158:79::-;;;;;;;;;;;;;:::o;45539:106::-;45593:44;45625:10;45593:23;:44::i;:::-;;45539:106::o;37790:31::-;;;;:::o;39158:127::-;39232:7;39259:9;:18;39269:7;39259:18;;;;;;;;;;;;;;;;39252:25;;39158:127;;;:::o;51835:184::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51892:22:::1;51917:12;;;;;;;;;;;:22;;;51948:4;51917:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51892:62;;51965:12;;;;;;;;;;;:21;;;51987:7;:5;:7::i;:::-;51996:14;51965:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51881:138;51835:184::o:0;18582:148::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18689:1:::1;18652:40;;18673:6;::::0;::::1;;;;;;;;18652:40;;;;;;;;;;;;18720:1;18703:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18582:148::o:0;50898:128::-;50966:7;50993:16;:25;51010:7;50993:25;;;;;;;;;;;;;;;;50986:32;;50898:128;;;:::o;37344:40::-;;;;:::o;50743:147::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50848:34:::1;50863:7;50872:9;50848:14;:34::i;:::-;;50743:147:::0;;:::o;17946:79::-;17984:7;18011:6;;;;;;;;;;;18004:13;;17946:79;:::o;46161:122::-;46218:7;46245:30;46268:6;46245:22;:30::i;:::-;46238:37;;46161:122;;;:::o;38485:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38864:87::-;38903:13;38936:7;38929:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38864:87;:::o;41351:269::-;41444:4;41461:129;41470:12;:10;:12::i;:::-;41484:7;41493:96;41532:15;41493:96;;;;;;;;;;;;;;;;;:11;:25;41505:12;:10;:12::i;:::-;41493:25;;;;;;;;;;;;;;;:34;41519:7;41493:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;41461:8;:129::i;:::-;41608:4;41601:11;;41351:269;;;;:::o;46291:166::-;46360:7;46387:62;46422:18;:26;46441:6;46422:26;;;;;;;;;;;;;;;;46387:30;46410:6;46387:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;46380:69;;46291:166;;;:::o;40435:162::-;40492:4;40517:5;40509:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40585:4;40578:11;;40435:162;;;;:::o;46465:127::-;46531:7;46558:18;:26;46577:6;46558:26;;;;;;;;;;;;;;;;46551:33;;46465:127;;;:::o;44037:126::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44141:12:::1;44115:7;;:40;;;;;;;;;;;;;;;;;;44037:126:::0;:::o;45013:516::-;45135:21;45173:1;45159:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45135:40;;45196:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45186:4;45191:1;45186:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45247:12;;;;;;;;;;;45229:4;45234:1;45229:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;45299:15;;;;;;;;;;;:66;;;45374:9;45399:1;45448:4;45475;45495:15;45299:222;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45066:463;45013:516;:::o;40797:143::-;40878:7;40905:11;:18;40917:5;40905:18;;;;;;;;;;;;;;;:27;40924:7;40905:27;;;;;;;;;;;;;;;;40898:34;;40797:143;;;;:::o;51600:151::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51653:18:::1;51674:21;51653:42;;51714:7;:5;:7::i;:::-;51706:25;;:37;51732:10;51706:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51642:109;51600:151::o:0;47237:109::-;47293:7;47320:18;;47313:25;;47237:109;:::o;46857:372::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46958:4:::1;46942:12;:20;;:45;;;;;46982:5;46966:12;:21;;46942:45;46934:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;47078:9;;47062:12;:25:::0;47054:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47176:9;;47162:12;47145:41;;;;;;;;;;47209:12;47197:9;:24;;;;46857:372:::0;:::o;18885:244::-;18168:12;:10;:12::i;:::-;18158:22;;:6;;;;;;;;;;:22;;;18150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18994:1:::1;18974:22;;:8;:22;;::::0;18966:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19084:8;19055:38;;19076:6;::::0;::::1;;;;;;;;19055:38;;;;;;;;;;;;19113:8;19104:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18885:244:::0;:::o;47477:1270::-;47536:15;47553:12;47567:31;47609:29;47640:22;47664:21;47696;47719:38;47780:8;47770:18;;47807:15;;;;;;;;;;;:29;;;47837:7;47807:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47799:46;;47883:3;47856:30;;47910:1;47901:5;:10;47897:473;;47949:18;;47940:5;47932:35;47928:431;;;48015:37;48032:18;;48015:5;:9;;:37;;;;:::i;:::-;47988:64;;47928:431;;;48106:32;48166:18;;48141:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;48253:1;48141:113;;;48204:46;48231:18;;48204:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;48141:113;48106:148;;48300:43;48317:24;48300:5;:9;;:43;;;;:::i;:::-;48273:70;;48087:272;47928:431;47897:473;48404:31;48427:7;48404:22;:31::i;:::-;48380:55;;48463:31;48486:7;48463:22;:31::i;:::-;48446:48;;48521:14;:23;48536:7;48521:23;;;;;;;;;;;;;;;;48505:39;;48587:1;48571:13;:17;:52;;48622:1;48571:52;;;48591:28;48609:9;;48591:13;:17;;:28;;;;:::i;:::-;48571:52;48555:68;;48683:15;48667:13;:31;:72;;48738:1;48667:72;;;48701:34;48719:15;48701:13;:17;;:34;;;;:::i;:::-;48667:72;48634:105;;47477:1270;;;;;;;;;:::o;39293:1134::-;39351:4;39357:13;39383:14;39412:18;:35;;;;;;;;;;;;;;;;;;;39471:17;:26;;;39461:6;:36;39458:120;;39526:8;39514:20;;39549:17;;;;;;;;;;;;;;;;;;;39458:120;39602:17;:29;;;39592:6;:39;39589:124;;39660:9;39648:21;;39684:17;;;;;;;;;;;;;;;;;;;39589:124;39737:17;:31;;;39727:6;:41;39724:125;;39797:8;39785:20;;39820:17;;;;;;;;;;;;;;;;;;;39724:125;39873:17;:31;;;39863:6;:41;39860:124;;39933:7;39921:19;;39955:17;;;;;;;;;;;;;;;;;;;39860:124;40008:17;:29;;;39998:6;:39;39995:122;;40066:7;40054:19;;40088:17;;;;;;;;;;;;;;;;;;;39995:122;40141:17;:32;;;40131:6;:42;40128:125;;40202:7;40190:19;;40224:17;;;;;;;;;;;;;;;;;;;40128:125;40277:17;:26;;;40267:6;:36;40264:120;;40332:7;40320:19;;40354:18;;;;;;;;;;;;;;;;;;;40264:120;40403:9;40414:4;40395:24;;;;;;39293:1134;;;:::o;49452:1283::-;49498:7;49507;49516;49536:28;49567:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49536:53;;49630:1;49606:20;:25;49602:91;;49656:1;49659;49662:18;;49648:33;;;;;;;;;49602:91;49703:27;49733:18;;49703:48;;49762:15;49792;49810:9;49792:27;;49830:18;49863:14;49892:727;49909:3;49899:7;:13;:50;;;;;49929:20;49916:10;:33;49899:50;49892:727;;;49966:21;;;;;:::i;:::-;;;;50029:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50006:19;:45;50002:109;;50094:1;50072:23;;50002:109;50125:15;50143;;;;;;;;;;;:29;;;50173:19;50143:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50125:68;;50212:37;50225:14;:23;50240:7;50225:23;;;;;;;;;;;;;;;;50212:12;:37::i;:::-;50208:172;;;50274:38;50297:7;50307:4;50274:14;:38::i;:::-;50270:95;;;50337:8;;;;;:::i;:::-;;;;50270:95;50208:172;50394:12;;;;;:::i;:::-;;;;50421:18;50442:9;50421:30;;50480:10;50470:7;:20;50466:107;;;50521:36;50533:23;50545:10;50533:7;:11;;:23;;;;:::i;:::-;50521:7;:11;;:36;;;;:::i;:::-;50511:46;;50466:107;50597:10;50587:20;;49951:668;;49892:727;;;50650:19;50629:18;:40;;;;50688:10;50700:6;50708:18;;50680:47;;;;;;;;;;;;49452:1283;;;;;;:::o;6326:136::-;6384:7;6411:43;6415:1;6418;6411:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6404:50;;6326:136;;;;:::o;7216:471::-;7274:7;7524:1;7519;:6;7515:47;;7549:1;7542:8;;;;7515:47;7574:9;7590:1;7586;:5;;;;:::i;:::-;7574:17;;7619:1;7614;7610;:5;;;;:::i;:::-;:10;7602:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7678:1;7671:8;;;7216:471;;;;;:::o;5862:181::-;5920:7;5940:9;5956:1;5952;:5;;;;:::i;:::-;5940:17;;5981:1;5976;:6;;5968:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6034:1;6027:8;;;5862:181;;;;:::o;10434:98::-;10487:7;10514:10;10507:17;;10434:98;:::o;41628:337::-;41738:1;41721:19;;:5;:19;;;41713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41819:1;41800:21;;:7;:21;;;41792:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41903:6;41873:11;:18;41885:5;41873:18;;;;;;;;;;;;;;;:27;41892:7;41873:27;;;;;;;;;;;;;;;:36;;;;41941:7;41925:32;;41934:5;41925:32;;;41950:6;41925:32;;;;;;:::i;:::-;;;;;;;;41628:337;;;:::o;4867:148::-;4923:6;4942:8;4960:1;4942:20;;4986:1;4981;:6;;4973:15;;;;;;5006:1;4999:8;;;4867:148;;;:::o;4383:176::-;4439:6;4458:8;4473:1;4469;:5;;;;:::i;:::-;4458:16;;4499:1;4494;:6;;:16;;;;;4509:1;4504;:6;;4494:16;4493:38;;;;4520:1;4516;:5;:14;;;;;4529:1;4525;:5;4516:14;4493:38;4485:47;;;;;;4550:1;4543:8;;;4383:176;;;;:::o;4705:127::-;4761:7;4794:1;4789;:6;;4781:15;;;;;;4822:1;4807:17;;4705:127;;;:::o;48995:449::-;49073:22;49098:18;49108:7;49098:9;:18::i;:::-;49073:43;;49144:14;49131:10;:27;49127:310;;;49175:18;49196:30;49211:14;49196:10;:14;;:30;;;;:::i;:::-;49175:51;;49241:26;49247:7;49256:10;49241:5;:26::i;:::-;49160:119;49127:310;;;49302:14;49289:10;:27;49285:152;;;49333:18;49354:30;49373:10;49354:14;:18;;:30;;;;:::i;:::-;49333:51;;49399:26;49405:7;49414:10;49399:5;:26::i;:::-;49318:119;49285:152;49127:310;49062:382;48995:449;;:::o;51034:482::-;51116:4;51133:14;51150:32;51174:7;51150:23;:32::i;:::-;51133:49;;51206:1;51197:6;:10;51193:293;;;51224:20;51247:16;:25;51264:7;51247:25;;;;;;;;;;;;;;;;51224:48;;51315:24;51326:12;51315:6;:10;;:24;;;;:::i;:::-;51287:16;:25;51304:7;51287:25;;;;;;;;;;;;;;;:52;;;;51380:15;51354:14;:23;51369:7;51354:23;;;;;;;;;;;;;;;:41;;;;51438:9;51415:33;;51421:7;51415:33;;;51430:6;51415:33;;;;;;:::i;:::-;;;;;;;;51470:4;51463:11;;;;;;51193:293;51503:5;51496:12;;;51034:482;;;;;:::o;45653:500::-;45726:7;45746:29;45778:28;45801:4;45778:22;:28::i;:::-;45746:60;;45845:1;45821:21;:25;45817:310;;;45890:51;45919:21;45890:18;:24;45909:4;45890:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;45863:18;:24;45882:4;45863:24;;;;;;;;;;;;;;;:78;;;;45979:4;45961:46;;;45985:21;45961:46;;;;;;:::i;:::-;;;;;;;;46022:12;;;;;;;;;;;:21;;;46044:4;46050:21;46022:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46094:21;46087:28;;;;;45817:310;46144:1;46137:8;;;45653:500;;;;:::o;6765:192::-;6851:7;6884:1;6879;:6;;6887:12;6871:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6911:9;6927:1;6923;:5;;;;:::i;:::-;6911:17;;6948:1;6941:8;;;6765:192;;;;;:::o;4199:176::-;4255:6;4274:8;4289:1;4285;:5;;;;:::i;:::-;4274:16;;4315:1;4310;:6;;:16;;;;;4325:1;4320;:6;;4310:16;4309:38;;;;4336:1;4332;:5;:14;;;;;4345:1;4341;:5;4332:14;4309:38;4301:47;;;;;;4366:1;4359:8;;;4199:176;;;;:::o;48755:232::-;48822:4;48859:15;48843:13;:31;48839:76;;;48898:5;48891:12;;;;48839:76;48970:9;;48932:34;48952:13;48932:15;:19;;:34;;;;:::i;:::-;:47;;48925:54;;48755:232;;;;:::o;42958:472::-;43061:1;43042:21;;:7;:21;;;43034:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43125:24;43142:6;43125:12;;:16;;:24;;;;:::i;:::-;43110:12;:39;;;;43181:30;43204:6;43181:9;:18;43191:7;43181:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;43160:9;:18;43170:7;43160:18;;;;;;;;;;;;;;;:51;;;;43248:7;43227:37;;43244:1;43227:37;;;43257:6;43227:37;;;;;;:::i;:::-;;;;;;;;43315:107;43367:54;43368:37;43398:6;43368:25;;:29;;:37;;;;:::i;:::-;43367:52;:54::i;:::-;43315:28;:37;43344:7;43315:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;43275:28;:37;43304:7;43275:37;;;;;;;;;;;;;;;:147;;;;42958:472;;:::o;43438:516::-;43541:1;43522:21;;:7;:21;;;43514:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43615:68;43638:6;43615:68;;;;;;;;;;;;;;;;;:9;:18;43625:7;43615:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;43594:9;:18;43604:7;43594:18;;;;;;;;;;;;;;;:89;;;;43709:24;43726:6;43709:12;;:16;;:24;;;;:::i;:::-;43694:12;:39;;;;43775:1;43749:37;;43758:7;43749:37;;;43779:6;43749:37;;;;;;:::i;:::-;;;;;;;;43839:107;43891:54;43892:37;43922:6;43892:25;;:29;;:37;;;;:::i;:::-;43891:52;:54::i;:::-;43839:28;:37;43868:7;43839:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;43799:28;:37;43828:7;43799:37;;;;;;;;;;;;;;;:147;;;;43438:516;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:539::-;7569:6;7618:2;7606:9;7597:7;7593:23;7589:32;7586:119;;;7624:79;;:::i;:::-;7586:119;7772:1;7761:9;7757:17;7744:31;7802:18;7794:6;7791:30;7788:117;;;7824:79;;:::i;:::-;7788:117;7929:78;7999:7;7990:6;7979:9;7975:22;7929:78;:::i;:::-;7919:88;;7715:302;7485:539;;;;:::o;8030:60::-;8058:3;8079:5;8072:12;;8030:60;;;:::o;8096:142::-;8146:9;8179:53;8197:34;8206:24;8224:5;8206:24;:::i;:::-;8197:34;:::i;:::-;8179:53;:::i;:::-;8166:66;;8096:142;;;:::o;8244:126::-;8294:9;8327:37;8358:5;8327:37;:::i;:::-;8314:50;;8244:126;;;:::o;8376:139::-;8439:9;8472:37;8503:5;8472:37;:::i;:::-;8459:50;;8376:139;;;:::o;8521:157::-;8621:50;8665:5;8621:50;:::i;:::-;8616:3;8609:63;8521:157;;:::o;8684:248::-;8790:4;8828:2;8817:9;8813:18;8805:26;;8841:84;8922:1;8911:9;8907:17;8898:6;8841:84;:::i;:::-;8684:248;;;;:::o;8938:104::-;8983:7;9012:24;9030:5;9012:24;:::i;:::-;9001:35;;8938:104;;;:::o;9048:138::-;9129:32;9155:5;9129:32;:::i;:::-;9122:5;9119:43;9109:71;;9176:1;9173;9166:12;9109:71;9048:138;:::o;9192:155::-;9246:5;9284:6;9271:20;9262:29;;9300:41;9335:5;9300:41;:::i;:::-;9192:155;;;;:::o;9353:116::-;9423:21;9438:5;9423:21;:::i;:::-;9416:5;9413:32;9403:60;;9459:1;9456;9449:12;9403:60;9353:116;:::o;9475:133::-;9518:5;9556:6;9543:20;9534:29;;9572:30;9596:5;9572:30;:::i;:::-;9475:133;;;;:::o;9614:484::-;9687:6;9695;9744:2;9732:9;9723:7;9719:23;9715:32;9712:119;;;9750:79;;:::i;:::-;9712:119;9870:1;9895:61;9948:7;9939:6;9928:9;9924:22;9895:61;:::i;:::-;9885:71;;9841:125;10005:2;10031:50;10073:7;10064:6;10053:9;10049:22;10031:50;:::i;:::-;10021:60;;9976:115;9614:484;;;;;:::o;10104:118::-;10191:24;10209:5;10191:24;:::i;:::-;10186:3;10179:37;10104:118;;:::o;10228:222::-;10321:4;10359:2;10348:9;10344:18;10336:26;;10372:71;10440:1;10429:9;10425:17;10416:6;10372:71;:::i;:::-;10228:222;;;;:::o;10456:886::-;10717:4;10755:3;10744:9;10740:19;10732:27;;10769:71;10837:1;10826:9;10822:17;10813:6;10769:71;:::i;:::-;10850:72;10918:2;10907:9;10903:18;10894:6;10850:72;:::i;:::-;10932;11000:2;10989:9;10985:18;10976:6;10932:72;:::i;:::-;11014;11082:2;11071:9;11067:18;11058:6;11014:72;:::i;:::-;11096:73;11164:3;11153:9;11149:19;11140:6;11096:73;:::i;:::-;11179;11247:3;11236:9;11232:19;11223:6;11179:73;:::i;:::-;11262;11330:3;11319:9;11315:19;11306:6;11262:73;:::i;:::-;10456:886;;;;;;;;;;:::o;11348:329::-;11407:6;11456:2;11444:9;11435:7;11431:23;11427:32;11424:119;;;11462:79;;:::i;:::-;11424:119;11582:1;11607:53;11652:7;11643:6;11632:9;11628:22;11607:53;:::i;:::-;11597:63;;11553:117;11348:329;;;;:::o;11683:474::-;11751:6;11759;11808:2;11796:9;11787:7;11783:23;11779:32;11776:119;;;11814:79;;:::i;:::-;11776:119;11934:1;11959:53;12004:7;11995:6;11984:9;11980:22;11959:53;:::i;:::-;11949:63;;11905:117;12061:2;12087:53;12132:7;12123:6;12112:9;12108:22;12087:53;:::i;:::-;12077:63;;12032:118;11683:474;;;;;:::o;12163:76::-;12199:7;12228:5;12217:16;;12163:76;;;:::o;12245:115::-;12330:23;12347:5;12330:23;:::i;:::-;12325:3;12318:36;12245:115;;:::o;12366:989::-;12651:4;12689:3;12678:9;12674:19;12666:27;;12703:71;12771:1;12760:9;12756:17;12747:6;12703:71;:::i;:::-;12784:70;12850:2;12839:9;12835:18;12826:6;12784:70;:::i;:::-;12864;12930:2;12919:9;12915:18;12906:6;12864:70;:::i;:::-;12944:72;13012:2;13001:9;12997:18;12988:6;12944:72;:::i;:::-;13026:73;13094:3;13083:9;13079:19;13070:6;13026:73;:::i;:::-;13109;13177:3;13166:9;13162:19;13153:6;13109:73;:::i;:::-;13192;13260:3;13249:9;13245:19;13236:6;13192:73;:::i;:::-;13275;13343:3;13332:9;13328:19;13319:6;13275:73;:::i;:::-;12366:989;;;;;;;;;;;:::o;13361:423::-;13502:4;13540:2;13529:9;13525:18;13517:26;;13553:71;13621:1;13610:9;13606:17;13597:6;13553:71;:::i;:::-;13671:9;13665:4;13661:20;13656:2;13645:9;13641:18;13634:48;13699:78;13772:4;13763:6;13699:78;:::i;:::-;13691:86;;13361:423;;;;;:::o;13790:442::-;13939:4;13977:2;13966:9;13962:18;13954:26;;13990:71;14058:1;14047:9;14043:17;14034:6;13990:71;:::i;:::-;14071:72;14139:2;14128:9;14124:18;14115:6;14071:72;:::i;:::-;14153;14221:2;14210:9;14206:18;14197:6;14153:72;:::i;:::-;13790:442;;;;;;:::o;14238:143::-;14295:5;14326:6;14320:13;14311:22;;14342:33;14369:5;14342:33;:::i;:::-;14238:143;;;;:::o;14387:351::-;14457:6;14506:2;14494:9;14485:7;14481:23;14477:32;14474:119;;;14512:79;;:::i;:::-;14474:119;14632:1;14657:64;14713:7;14704:6;14693:9;14689:22;14657:64;:::i;:::-;14647:74;;14603:128;14387:351;;;;:::o;14744:180::-;14792:77;14789:1;14782:88;14889:4;14886:1;14879:15;14913:4;14910:1;14903:15;14930:180;14978:77;14975:1;14968:88;15075:4;15072:1;15065:15;15099:4;15096:1;15089:15;15116:185;15156:1;15173:20;15191:1;15173:20;:::i;:::-;15168:25;;15207:20;15225:1;15207:20;:::i;:::-;15202:25;;15246:1;15236:35;;15251:18;;:::i;:::-;15236:35;15293:1;15290;15286:9;15281:14;;15116:185;;;;:::o;15307:180::-;15355:77;15352:1;15345:88;15452:4;15449:1;15442:15;15476:4;15473:1;15466:15;15493:320;15537:6;15574:1;15568:4;15564:12;15554:22;;15621:1;15615:4;15611:12;15642:18;15632:81;;15698:4;15690:6;15686:17;15676:27;;15632:81;15760:2;15752:6;15749:14;15729:18;15726:38;15723:84;;15779:18;;:::i;:::-;15723:84;15544:269;15493:320;;;:::o;15819:227::-;15959:34;15955:1;15947:6;15943:14;15936:58;16028:10;16023:2;16015:6;16011:15;16004:35;15819:227;:::o;16052:366::-;16194:3;16215:67;16279:2;16274:3;16215:67;:::i;:::-;16208:74;;16291:93;16380:3;16291:93;:::i;:::-;16409:2;16404:3;16400:12;16393:19;;16052:366;;;:::o;16424:419::-;16590:4;16628:2;16617:9;16613:18;16605:26;;16677:9;16671:4;16667:20;16663:1;16652:9;16648:17;16641:47;16705:131;16831:4;16705:131;:::i;:::-;16697:139;;16424:419;;;:::o;16849:182::-;16989:34;16985:1;16977:6;16973:14;16966:58;16849:182;:::o;17037:366::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:419::-;17575:4;17613:2;17602:9;17598:18;17590:26;;17662:9;17656:4;17652:20;17648:1;17637:9;17633:17;17626:47;17690:131;17816:4;17690:131;:::i;:::-;17682:139;;17409:419;;;:::o;17834:137::-;17888:5;17919:6;17913:13;17904:22;;17935:30;17959:5;17935:30;:::i;:::-;17834:137;;;;:::o;17977:345::-;18044:6;18093:2;18081:9;18072:7;18068:23;18064:32;18061:119;;;18099:79;;:::i;:::-;18061:119;18219:1;18244:61;18297:7;18288:6;18277:9;18273:22;18244:61;:::i;:::-;18234:71;;18190:125;17977:345;;;;:::o;18328:332::-;18449:4;18487:2;18476:9;18472:18;18464:26;;18500:71;18568:1;18557:9;18553:17;18544:6;18500:71;:::i;:::-;18581:72;18649:2;18638:9;18634:18;18625:6;18581:72;:::i;:::-;18328:332;;;;;:::o;18666:180::-;18714:77;18711:1;18704:88;18811:4;18808:1;18801:15;18835:4;18832:1;18825:15;18852:191;18892:3;18911:20;18929:1;18911:20;:::i;:::-;18906:25;;18945:20;18963:1;18945:20;:::i;:::-;18940:25;;18988:1;18985;18981:9;18974:16;;19009:3;19006:1;19003:10;19000:36;;;19016:18;;:::i;:::-;19000:36;18852:191;;;;:::o;19049:143::-;19106:5;19137:6;19131:13;19122:22;;19153:33;19180:5;19153:33;:::i;:::-;19049:143;;;;:::o;19198:351::-;19268:6;19317:2;19305:9;19296:7;19292:23;19288:32;19285:119;;;19323:79;;:::i;:::-;19285:119;19443:1;19468:64;19524:7;19515:6;19504:9;19500:22;19468:64;:::i;:::-;19458:74;;19414:128;19198:351;;;;:::o;19555:85::-;19600:7;19629:5;19618:16;;19555:85;;;:::o;19646:158::-;19704:9;19737:61;19755:42;19764:32;19790:5;19764:32;:::i;:::-;19755:42;:::i;:::-;19737:61;:::i;:::-;19724:74;;19646:158;;;:::o;19810:147::-;19905:45;19944:5;19905:45;:::i;:::-;19900:3;19893:58;19810:147;;:::o;19963:114::-;20030:6;20064:5;20058:12;20048:22;;19963:114;;;:::o;20083:184::-;20182:11;20216:6;20211:3;20204:19;20256:4;20251:3;20247:14;20232:29;;20083:184;;;;:::o;20273:132::-;20340:4;20363:3;20355:11;;20393:4;20388:3;20384:14;20376:22;;20273:132;;;:::o;20411:108::-;20488:24;20506:5;20488:24;:::i;:::-;20483:3;20476:37;20411:108;;:::o;20525:179::-;20594:10;20615:46;20657:3;20649:6;20615:46;:::i;:::-;20693:4;20688:3;20684:14;20670:28;;20525:179;;;;:::o;20710:113::-;20780:4;20812;20807:3;20803:14;20795:22;;20710:113;;;:::o;20859:732::-;20978:3;21007:54;21055:5;21007:54;:::i;:::-;21077:86;21156:6;21151:3;21077:86;:::i;:::-;21070:93;;21187:56;21237:5;21187:56;:::i;:::-;21266:7;21297:1;21282:284;21307:6;21304:1;21301:13;21282:284;;;21383:6;21377:13;21410:63;21469:3;21454:13;21410:63;:::i;:::-;21403:70;;21496:60;21549:6;21496:60;:::i;:::-;21486:70;;21342:224;21329:1;21326;21322:9;21317:14;;21282:284;;;21286:14;21582:3;21575:10;;20983:608;;;20859:732;;;;:::o;21597:720::-;21832:4;21870:3;21859:9;21855:19;21847:27;;21884:79;21960:1;21949:9;21945:17;21936:6;21884:79;:::i;:::-;22010:9;22004:4;22000:20;21995:2;21984:9;21980:18;21973:48;22038:108;22141:4;22132:6;22038:108;:::i;:::-;22030:116;;22156:72;22224:2;22213:9;22209:18;22200:6;22156:72;:::i;:::-;22238;22306:2;22295:9;22291:18;22282:6;22238:72;:::i;:::-;21597:720;;;;;;;:::o;22323:238::-;22463:34;22459:1;22451:6;22447:14;22440:58;22532:21;22527:2;22519:6;22515:15;22508:46;22323:238;:::o;22567:366::-;22709:3;22730:67;22794:2;22789:3;22730:67;:::i;:::-;22723:74;;22806:93;22895:3;22806:93;:::i;:::-;22924:2;22919:3;22915:12;22908:19;;22567:366;;;:::o;22939:419::-;23105:4;23143:2;23132:9;23128:18;23120:26;;23192:9;23186:4;23182:20;23178:1;23167:9;23163:17;23156:47;23220:131;23346:4;23220:131;:::i;:::-;23212:139;;22939:419;;;:::o;23364:224::-;23504:34;23500:1;23492:6;23488:14;23481:58;23573:7;23568:2;23560:6;23556:15;23549:32;23364:224;:::o;23594:366::-;23736:3;23757:67;23821:2;23816:3;23757:67;:::i;:::-;23750:74;;23833:93;23922:3;23833:93;:::i;:::-;23951:2;23946:3;23942:12;23935:19;;23594:366;;;:::o;23966:419::-;24132:4;24170:2;24159:9;24155:18;24147:26;;24219:9;24213:4;24209:20;24205:1;24194:9;24190:17;24183:47;24247:131;24373:4;24247:131;:::i;:::-;24239:139;;23966:419;;;:::o;24391:225::-;24531:34;24527:1;24519:6;24515:14;24508:58;24600:8;24595:2;24587:6;24583:15;24576:33;24391:225;:::o;24622:366::-;24764:3;24785:67;24849:2;24844:3;24785:67;:::i;:::-;24778:74;;24861:93;24950:3;24861:93;:::i;:::-;24979:2;24974:3;24970:12;24963:19;;24622:366;;;:::o;24994:419::-;25160:4;25198:2;25187:9;25183:18;25175:26;;25247:9;25241:4;25237:20;25233:1;25222:9;25218:17;25211:47;25275:131;25401:4;25275:131;:::i;:::-;25267:139;;24994:419;;;:::o;25419:120::-;25491:23;25508:5;25491:23;:::i;:::-;25484:5;25481:34;25471:62;;25529:1;25526;25519:12;25471:62;25419:120;:::o;25545:141::-;25601:5;25632:6;25626:13;25617:22;;25648:32;25674:5;25648:32;:::i;:::-;25545:141;;;;:::o;25692:349::-;25761:6;25810:2;25798:9;25789:7;25785:23;25781:32;25778:119;;;25816:79;;:::i;:::-;25778:119;25936:1;25961:63;26016:7;26007:6;25996:9;25992:22;25961:63;:::i;:::-;25951:73;;25907:127;25692:349;;;;:::o;26047:233::-;26086:3;26109:24;26127:5;26109:24;:::i;:::-;26100:33;;26155:66;26148:5;26145:77;26142:103;;26225:18;;:::i;:::-;26142:103;26272:1;26265:5;26261:13;26254:20;;26047:233;;;:::o;26286:410::-;26326:7;26349:20;26367:1;26349:20;:::i;:::-;26344:25;;26383:20;26401:1;26383:20;:::i;:::-;26378:25;;26438:1;26435;26431:9;26460:30;26478:11;26460:30;:::i;:::-;26449:41;;26639:1;26630:7;26626:15;26623:1;26620:22;26600:1;26593:9;26573:83;26550:139;;26669:18;;:::i;:::-;26550:139;26334:362;26286:410;;;;:::o;26702:220::-;26842:34;26838:1;26830:6;26826:14;26819:58;26911:3;26906:2;26898:6;26894:15;26887:28;26702:220;:::o;26928:366::-;27070:3;27091:67;27155:2;27150:3;27091:67;:::i;:::-;27084:74;;27167:93;27256:3;27167:93;:::i;:::-;27285:2;27280:3;27276:12;27269:19;;26928:366;;;:::o;27300:419::-;27466:4;27504:2;27493:9;27489:18;27481:26;;27553:9;27547:4;27543:20;27539:1;27528:9;27524:17;27517:47;27581:131;27707:4;27581:131;:::i;:::-;27573:139;;27300:419;;;:::o;27725:177::-;27865:29;27861:1;27853:6;27849:14;27842:53;27725:177;:::o;27908:366::-;28050:3;28071:67;28135:2;28130:3;28071:67;:::i;:::-;28064:74;;28147:93;28236:3;28147:93;:::i;:::-;28265:2;28260:3;28256:12;28249:19;;27908:366;;;:::o;28280:419::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:223::-;28845:34;28841:1;28833:6;28829:14;28822:58;28914:6;28909:2;28901:6;28897:15;28890:31;28705:223;:::o;28934:366::-;29076:3;29097:67;29161:2;29156:3;29097:67;:::i;:::-;29090:74;;29173:93;29262:3;29173:93;:::i;:::-;29291:2;29286:3;29282:12;29275:19;;28934:366;;;:::o;29306:419::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:221::-;29871:34;29867:1;29859:6;29855:14;29848:58;29940:4;29935:2;29927:6;29923:15;29916:29;29731:221;:::o;29958:366::-;30100:3;30121:67;30185:2;30180:3;30121:67;:::i;:::-;30114:74;;30197:93;30286:3;30197:93;:::i;:::-;30315:2;30310:3;30306:12;30299:19;;29958:366;;;:::o;30330:419::-;30496:4;30534:2;30523:9;30519:18;30511:26;;30583:9;30577:4;30573:20;30569:1;30558:9;30554:17;30547:47;30611:131;30737:4;30611:131;:::i;:::-;30603:139;;30330:419;;;:::o;30755:375::-;30794:3;30813:19;30830:1;30813:19;:::i;:::-;30808:24;;30846:19;30863:1;30846:19;:::i;:::-;30841:24;;30888:1;30885;30881:9;30874:16;;31086:1;31081:3;31077:11;31070:19;31066:1;31063;31059:9;31055:35;31038:1;31033:3;31029:11;31024:1;31021;31017:9;31010:17;31006:35;30990:110;30987:136;;;31103:18;;:::i;:::-;30987:136;30755:375;;;;:::o;31136:134::-;31194:9;31227:37;31258:5;31227:37;:::i;:::-;31214:50;;31136:134;;;:::o;31276:147::-;31371:45;31410:5;31371:45;:::i;:::-;31366:3;31359:58;31276:147;;:::o;31429:348::-;31558:4;31596:2;31585:9;31581:18;31573:26;;31609:79;31685:1;31674:9;31670:17;31661:6;31609:79;:::i;:::-;31698:72;31766:2;31755:9;31751:18;31742:6;31698:72;:::i;:::-;31429:348;;;;;:::o;31783:194::-;31823:4;31843:20;31861:1;31843:20;:::i;:::-;31838:25;;31877:20;31895:1;31877:20;:::i;:::-;31872:25;;31921:1;31918;31914:9;31906:17;;31945:1;31939:4;31936:11;31933:37;;;31950:18;;:::i;:::-;31933:37;31783:194;;;;:::o;31983:372::-;32022:4;32042:19;32059:1;32042:19;:::i;:::-;32037:24;;32075:19;32092:1;32075:19;:::i;:::-;32070:24;;32118:1;32115;32111:9;32103:17;;32312:1;32306:4;32302:12;32298:1;32295;32291:9;32287:28;32270:1;32264:4;32260:12;32255:1;32252;32248:9;32241:17;32237:36;32221:104;32218:130;;;32328:18;;:::i;:::-;32218:130;31983:372;;;;:::o;32361:181::-;32501:33;32497:1;32489:6;32485:14;32478:57;32361:181;:::o;32548:366::-;32690:3;32711:67;32775:2;32770:3;32711:67;:::i;:::-;32704:74;;32787:93;32876:3;32787:93;:::i;:::-;32905:2;32900:3;32896:12;32889:19;;32548:366;;;:::o;32920:419::-;33086:4;33124:2;33113:9;33109:18;33101:26;;33173:9;33167:4;33163:20;33159:1;33148:9;33144:17;33137:47;33201:131;33327:4;33201:131;:::i;:::-;33193:139;;32920:419;;;:::o;33345:220::-;33485:34;33481:1;33473:6;33469:14;33462:58;33554:3;33549:2;33541:6;33537:15;33530:28;33345:220;:::o;33571:366::-;33713:3;33734:67;33798:2;33793:3;33734:67;:::i;:::-;33727:74;;33810:93;33899:3;33810:93;:::i;:::-;33928:2;33923:3;33919:12;33912:19;;33571:366;;;:::o;33943:419::-;34109:4;34147:2;34136:9;34132:18;34124:26;;34196:9;34190:4;34186:20;34182:1;34171:9;34167:17;34160:47;34224:131;34350:4;34224:131;:::i;:::-;34216:139;;33943:419;;;:::o

Swarm Source

ipfs://f6e9d89eab67759c7f39bb792460c7e183bf328b6de8c893761ece99f8c06c80
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.