Contract 0x0088947C06094D9ddFAcFfA93e1AbA8f63c8221a 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3b291d7b417244d732c10c772cb4e7aa9716422081fc89a2c448fedfbbc477f2Approve132275822021-12-05 22:37:492 days 14 hrs ago0xc64e6fe4139c3b72521b97a5d4f9cbbcfba532c1 IN  French Digital Reserve: wFDR Token0 BNB0.000222635
0xbf8fafe4e46b5090a40dc2a79bacba66f924ffe544ccc83465b0a3062f4f69daRelay Mint132220162021-12-05 17:58:292 days 19 hrs ago0xc64e6fe4139c3b72521b97a5d4f9cbbcfba532c1 IN  French Digital Reserve: wFDR Token0 BNB0.00041251
0x83035b0878ab065ede552d9548186eba97d11b301ceb5dd65c698690d229cf20Relay Mint129409112021-11-25 9:15:5213 days 4 hrs ago0x7b79f68cee467ef2bb1967ee68bb32ba8246cd01 IN  French Digital Reserve: wFDR Token0 BNB0.00041255
0x9a219134cbfc1884e36b39209b24afdff8cf55c13148e10ad2a0cc6ccdf04013Burn126473232021-11-14 17:16:5023 days 20 hrs ago0xd4e5edb2e17cdcf05855eac049faae0c903302bd IN  French Digital Reserve: wFDR Token0 BNB0.00020042
0xa772ab1cd048dc1078ed964c2c2e6710647e80ee301465f77e5ade4c2b393bb4Relay Mint126473012021-11-14 17:15:4423 days 20 hrs ago0xd4e5edb2e17cdcf05855eac049faae0c903302bd IN  French Digital Reserve: wFDR Token0 BNB0.00048743
0x6fcc0a343fe45ea93639f80b5c40741374ed0a3abb363d9470333f8cd930b4cbTransfer Ownersh...126223232021-11-13 19:54:1124 days 17 hrs agoFrench Digital 1 IN  French Digital Reserve: wFDR Token0 BNB0.000150905
0x4cef55de2f0a4797f025c5eda60450422b9ec71d56ffbdf93e15e702ad4384180x60806040126222622021-11-13 19:51:0824 days 17 hrs agoFrench Digital 1 IN  Contract Creation0 BNB0.029810985
[ Download CSV Export 

OVERVIEW

The Wrapped FDR or wFDR is a 1:1 swap of the original FDR

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WFDR

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-11-13
*/

/**
 *Submitted for verification at BscScan.com on 2021-11-09
*/

/**
 *Submitted for verification at BscScan.com on 2021-11-09
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

// IUniswapV2Factory interface taken from: https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Factory.sol
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// IUniswapV2Pair interface taken from: https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Pair.sol
interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// IUniswapV2Router01 interface taken from: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol
interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

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

// IUniswapV2Router02 interface taken from: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// Context from OpenZeppelin
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}

// Ownable from OpenZeppelin
contract Ownable is Context {
    address public owner;

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

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

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

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

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

// SafeMath Library
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;
    }
}

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `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
    );
}

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature)
        internal
        pure
        returns (address)
    {
        // Check the signature length
        if (signature.length != 65) {
            revert("ECDSA: invalid sig length");
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (
            uint256(s) >
            0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0
        ) {
            revert("ECDSA: invalid sig 's' value");
        }

        if (v != 27 && v != 28) {
            revert("ECDSA: invalid sig 'v' value");
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid sig");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * replicates the behavior of the
     * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]
     * JSON-RPC method.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
            );
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
abstract contract ERC20Basic {
    function totalSupply() public view virtual returns (uint256);

    function balanceOf(address _who) public view virtual returns (uint256);

    function transfer(address _to, uint256 _value)
        public
        virtual
        returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
abstract contract BasicToken is ERC20Basic {
    using SafeMath for uint256;

    mapping(address => uint256) internal balances;

    uint256 internal totalSupply_;

    /**
     * @dev Total number of tokens in existence
     */
    function totalSupply() public view override returns (uint256) {
        return totalSupply_;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param _owner The address to query the the balance of.
     * @return An uint256 representing the amount owned by the passed address.
     */
    function balanceOf(address _owner) public view override returns (uint256) {
        return balances[_owner];
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
abstract contract ERC20 is ERC20Basic {
    function allowance(address _owner, address _spender)
        public
        view
        virtual
        returns (uint256);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) public virtual returns (bool);

    function approve(address _spender, uint256 _value)
        public
        virtual
        returns (bool);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File: openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/issues/20
 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
abstract contract StandardToken is ERC20, BasicToken {
    using SafeMath for uint256;

    mapping(address => mapping(address => uint256)) internal allowed;

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address _owner, address _spender)
        public
        view
        override
        returns (uint256)
    {
        return allowed[_owner][_spender];
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint256 _addedValue)
        public
        virtual
        returns (bool)
    {
        allowed[msg.sender][_spender] = (
            allowed[msg.sender][_spender].add(_addedValue)
        );
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint256 _subtractedValue)
        public
        returns (bool)
    {
        uint256 oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue >= oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol

/**
 * @title DetailedERC20 token
 * @dev The decimals are only for visualization purposes.
 * All the operations are done using the smallest and indivisible token unit,
 * just as on Ethereum all the operations are done in wei.
 */
abstract contract DetailedERC20 is ERC20 {
    string public name;
    string public symbol;
    uint8 public decimals;

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol

/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */
abstract contract MintableToken is StandardToken, Ownable {
    using ECDSA for bytes32;
    using SafeMath for uint256;

    event Mint(address indexed to, uint256 amount, bytes32 trans);

    bytes32 public lastTrans;
    mapping(bytes32 => bool) internal transactions;

    modifier hasMintPermission() {
        require(_msgSender() == owner);
        _;
    }

    /**
     * @dev Function to mint tokens
     * @param _to The address that will receive the minted tokens.
     * @param _amount The amount of tokens to mint.
     * @param _trans The transaction id of the bis transfer.
     * @return A boolean that indicates if the operation was successful.
     */
    function mint(
        address _to,
        uint256 _amount,
        bytes32 _trans
    ) public hasMintPermission returns (bool) {
        return _mint(_to, _amount, _trans);
    }

    /**
     * @dev Function to mint tokens
     * @param _to The address that will receive the minted tokens.
     * @param _amount The amount of tokens to mint.
     * @param _trans The transaction id of the bis transfer.
     * @param approvalData The sign data by owner.
     * @return A boolean that indicates if the operation was successful.
     */
    function relayMint(
        address _to,
        uint256 _amount,
        bytes32 _trans,
        bytes memory approvalData
    ) public returns (bool) {
        bytes memory blob = abi.encodePacked(_to, _amount, _trans);
        address who = keccak256(blob).toEthSignedMessageHash().recover(
            approvalData
        );
        require(who == owner, "Wrong signer");
        return _mint(_to, _amount, _trans);
    }

    function whoMint(
        address _to,
        uint256 _amount,
        bytes32 _trans,
        bytes memory approvalData
    ) public pure returns (address) {
        bytes memory blob = abi.encodePacked(_to, _amount, _trans);
        //address who = keccak256(blob).toEthSignedMessageHash().recover(approvalData);
        bytes32 kec = keccak256(blob);
        bytes32 mesg = kec.toEthSignedMessageHash();
        address who = mesg.recover(approvalData);
        return who;
    }

    function msgMint(
        address _to,
        uint256 _amount,
        bytes32 _trans
    ) public pure returns (bytes32) {
        bytes memory blob = abi.encodePacked(_to, _amount, _trans);
        bytes32 kec = keccak256(blob);
        bytes32 mesg = kec.toEthSignedMessageHash();
        return mesg;
    }

    function _mint(
        address _to,
        uint256 _amount,
        bytes32 _trans
    ) internal returns (bool) {
        require(_trans != bytes32(0), "Empty tx");
        require(!transactions[_trans], "Existing tx");
        transactions[_trans] = true;
        totalSupply_ = totalSupply_.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        emit Mint(_to, _amount, _trans);
        emit Transfer(address(0), _to, _amount);
        return true;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/BurnableToken.sol

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
abstract contract BurnableToken is BasicToken {
    using SafeMath for uint256;

    event Burn(address indexed burner, uint256 value, bytes addr);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     * @param _addr bis address.
     */
    function burn(uint256 _value, bytes memory _addr) public virtual {
        _burn(msg.sender, _value, _addr);
    }

    function _burn(
        address _who,
        uint256 _value,
        bytes memory _addr
    ) internal {
        // require(_value <= balances[_who], "Low balance"); // Asserted by .sub
        require(_addr.length <= 112, "Bad Addr format");
        // no need to require value <= totalSupply, since that would imply the
        // sender's balance is greater than the totalSupply, which *should* be an assertion failure

        balances[_who] = balances[_who].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit Burn(_who, _value, _addr);
        emit Transfer(_who, address(0), _value);
    }
}

// File: openzeppelin-solidity/contracts/ownership/Claimable.sol

/**
 * @title Claimable
 * @dev Extension for the Ownable contract, where the ownership needs to be claimed.
 * This allows the new owner to accept the transfer.
 */
contract Claimable is Ownable {
    address public pendingOwner;

    /**
     * @dev Modifier throws if called by any account other than the pendingOwner.
     */
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner);
        _;
    }

    /**
     * @dev Allows the current owner to set the pendingOwner address.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public override onlyOwner {
        pendingOwner = newOwner;
    }

    /**
     * @dev Allows the pendingOwner address to finalize the transfer.
     */
    function claimOwnership() public onlyPendingOwner {
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}

contract WFDR is
    StandardToken,
    DetailedERC20("Wrapped FDR", "wFDR", 8),
    MintableToken,
    BurnableToken
{
    using SafeMath for uint256;

    // Pancackeswap info
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    // BUSD token on BSC
    address public constant BUSD =
        address(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    address payable public _walletFees =    
        payable(0x0097B52C75e224780e88cd91EF547DD8754827Da); // Wallet fees to receive 7% of transcation fees when price impact > 2%

    uint256 public sellFees = 7;
    uint256 public priceImpact = 2;
    bool    public tradingEnabled;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 BusdReceived);
    event Test(string msg, uint256 amount, bool isTaxed);
    
    constructor() {
        // Mint the total reflection balance to the deployer of this contract (owner)
        balances[owner] = totalSupply_;
    
        // PancakeSwap router v2
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x10ED43C718714eb63d5aA57B78B54704E256024E
        );

        // Create a uniswap pair for this new token (NOSTA/BUSD)
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), BUSD);

        // initialise Pair and Router
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // add new Pair to automatedMarketMakerPairs
        automatedMarketMakerPairs[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), totalSupply_);
    }

    /// @notice Required to recieve BNB from PancakeSwap V2 Router when swaping
    receive() external payable {}

    /// @notice required to withdraw BNB from this smart contract, only Owner can call this function
    /// @param amount number of BNB to be transfered
    function withdrawBNB(uint256 amount) public onlyOwner {
        if (amount == 0) payable(owner).transfer(address(this).balance);
        else payable(owner).transfer(amount);
    }

    /// @notice required to transfer BNB from this smart contract to recipient, only Owner can call this function
    /// @param recipient of BNB
    /// @param amount number of tokens to be transfered
    function transferBNBToAddress(address payable recipient, uint256 amount)
        public
        onlyOwner
    {
        recipient.transfer(amount);
    }

    /// @notice required to withdraw foreign tokens from this smart contract, only Owner can call this function
    /// @param token address of the token to withdraw
    function withdrawForeignToken(address token) public onlyOwner {
        require(
            address(this) != address(token),
            "Cannot withdraw native token"
        );
        IBEP20(address(token)).transfer(
            msg.sender,
            IBEP20(token).balanceOf(address(this))
        );
    }

    /// @notice required to withdraw Nosta tokens from this smart contract, only Owner can call this function
    function withdrawTokens() public onlyOwner {
        _approve(address(this), owner, balanceOf(address(this)));
        transferFrom(address(this), owner, balanceOf(address(this)));
    }

    /// @notice set Automated Market Maker Pair to add or remove a pair, only Owner can call this function
    /// @param pair address for Pancackeswap
    /// @param value (true or false)
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /// @notice set trading, only Owner can call this function
    /// @param _enabled (true or false)
    function setTrading(bool _enabled) public onlyOwner {
        tradingEnabled = _enabled;
    }

    function renounceOwnership() public view override onlyOwner {
        revert("Renouncing own. blocked");
    }

    /// @notice set price impact only from owner
    function setSellFees(uint256 _sellFees) external onlyOwner {
        sellFees = _sellFees;
    }

    /// @notice set price impact only from owner
    function setPriceImpact(uint256 _percent) external onlyOwner {
        priceImpact = _percent;
    }

    function calculPriceImpactLimit() internal view returns (uint256) {
        return ((uint256(100).sub(priceImpact)).mul(10**18)).div(100);
    }

    /// @notice transfer  moves `amount` tokens from the caller's account to `recipient`.
    /// @param amount number of tokens to transfer
    /// @param recipient address where to send amount
    /// @return a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /// @notice sets `amount` as the allowance of `spender` over the caller's tokens.
    /// @param amount number of tokens to be spent
    /// @param spender the spender which will be allowed to spend
    /// @return a boolean value indicating whether the operation succeeded. Emits an {Approval} event.
    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of token to be burned.
     * @param addr bis address.
     */
    function burn(uint256 value, bytes memory addr) public override {
        super.burn(value, addr);
    }

    /// @notice sets `amount` as the allowance of `spender` over the caller's tokens.
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "TOKEN20: approve from the zero address");
        require(spender != address(0), "TOKEN20: approve to the zero address");

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

    /// @notice moves `amount` tokens from  `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.
    /// @param sender the owner of tokens to send
    /// @param recipient address where to send amount
    /// @param amount number of tokens to transfer
    /// @return a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            allowed[sender][_msgSender()].sub(
                amount,
                "Transfer amount exceeds allowance"
            )
        );
        return true;
    }

    /// @notice swap and liquify Nosta tokens, only Owner can swap and liquify
    function swapAndLiquify() public onlyOwner {
        // swap the fees tokens to BUSD
        uint256 initialBUSDBalance = IBEP20(BUSD).balanceOf(address(this));
        uint256 tokensToSwap = balanceOf(address(this));

        swapTokensForBUSD(tokensToSwap);

        uint256 newBalance = (IBEP20(BUSD).balanceOf(address(this))).sub(
            initialBUSDBalance
        );

        IBEP20(BUSD).approve(address(this), newBalance);

        bool success = IBEP20(BUSD).transferFrom(
            address(this),
            _walletFees,
            newBalance
        );
        if (success) emit SwapAndLiquify(tokensToSwap, newBalance);
    }

    /// @notice Swaps tokens for BUSD and immedietely burns them
    function swapTokensForBUSD(uint256 tokenAmount) internal {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = BUSD;

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    /// @notice handles the before and after of a token transfer, such as taking fees and firing off a swap and liquify event
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer amount must be greater than zero");
        if (from != owner) {
            require(tradingEnabled, "Is trading Disabled.");
        }

        bool isTaxed = false;

        // if sell
        if (automatedMarketMakerPairs[to] && from != owner) {
            if (_priceImpactTax(amount)) {
                isTaxed = true;
            }
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, isTaxed);
    }

    /// @notice takes all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool isTaxed
    ) internal {
        if (isTaxed) {
            // Calculate the values required to execute a transfer
            uint256 tFee = tAmount.mul(sellFees).div(100);
            uint256 tTransferAmount = tAmount.sub(tFee);

            // taxed fees to _algo wallet
            balances[address(this)] = balances[address(this)].add(tFee);
            emit Transfer(sender, address(this), tFee);

            balances[sender] = balances[sender].sub(tTransferAmount);
            balances[recipient] = balances[recipient].add(tTransferAmount);
            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            balances[sender] = balances[sender].sub(tAmount);
            balances[recipient] = balances[recipient].add(tAmount);
            emit Transfer(sender, recipient, tAmount);
        }
    }

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB)
        internal
        pure
        returns (address token0, address token1)
    {
        require(tokenA != tokenB, "UniswapV2Library: IDENTICAL_ADDRESSES");
        (token0, token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), "UniswapV2Library: ZERO_ADDRESS");
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address tokenA, address tokenB)
        public
        view
        returns (uint256 reserveA, uint256 reserveB)
    {
        (address token0, ) = sortTokens(tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(uniswapV2Pair)
            .getReserves();
        (reserveA, reserveB) = tokenA == token0
            ? (reserve0, reserve1)
            : (reserve1, reserve0);
    }

    // Check for price impact before doing transfer
    function _priceImpactTax(uint256 _amountA) internal view returns (bool) {
        (uint256 _reserveA, uint256 _reserveB, ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        uint256 _amountA_converted = _amountA.mul(10**10);
        uint256 _reserveA_converted = _reserveA.mul(10**10);
        uint256 _constant = (IUniswapV2Pair(uniswapV2Pair).kLast()).mul(10**10);

        uint256 _market_price = _reserveA_converted.div(_reserveB);
        
        if (_reserveA == 0 && _reserveB == 0) {
            return false;
        } else {
            if (_amountA >= _reserveA) return false;
            uint256 _reserveA_new = _reserveA_converted.sub(_amountA_converted);
            uint256 _reserveB_new = _constant.div(_reserveA_new);
            
            if (_reserveB >= _reserveB_new) return false;
            uint256 receivedBUSD = _reserveB_new.sub(_reserveB);

            uint256 _new_price = (_amountA_converted.div(receivedBUSD)).mul(10**18);
            uint256 _delta_price = _new_price.div(_market_price);
            uint256 _priceImpact = calculPriceImpactLimit();

            return (_delta_price < _priceImpact);
        }
    }
}

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":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"addr","type":"bytes"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"trans","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"BusdReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"msg","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isTaxed","type":"bool"}],"name":"Test","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletFees","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"addr","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTrans","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_trans","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_trans","type":"bytes32"}],"name":"msgMint","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":"priceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_trans","type":"bytes32"},{"internalType":"bytes","name":"approvalData","type":"bytes"}],"name":"relayMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFees","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBNBToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_trans","type":"bytes32"},{"internalType":"bytes","name":"approvalData","type":"bytes"}],"name":"whoMint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b80546001600160a01b0319167297b52c75e224780e88cd91ef547dd8754827da1790556007600c556002600d553480156200004057600080fd5b50604080518082018252600b81526a2bb930b83832b21023222960a91b6020808301918252835180850190945260048452633ba3222960e11b90840152815191929160089162000094916003919062000348565b508151620000aa90600490602085019062000348565b506005805460ff191660ff9290921691909117905550620000ca90503390565b600580546001600160a01b039290921661010002610100600160a81b031990921691909117905562000103620000fd3390565b620002ee565b60015460055461010090046001600160a01b031660009081526020818152604080832093909355825163c45a015560e01b815292517310ed43c718714eb63d5aa57b78b54704e256024e93849263c45a015592600480840193829003018186803b1580156200017157600080fd5b505afa15801562000186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ac9190620003ee565b6040516364e329cb60e11b815230600482015273e9e7cea3dedca5984780bafc599bd69add087d5660248201526001600160a01b03919091169063c9c6539690604401602060405180830381600087803b1580156200020a57600080fd5b505af11580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002459190620003ee565b600880546001600160a01b038086166001600160a01b0319928316179092556009805492841692909116821790556000908152600a60205260409020805460ff191660011790559050620002963390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620002de91815260200190565b60405180910390a350506200045d565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620003569062000420565b90600052602060002090601f0160209004810192826200037a5760008555620003c5565b82601f106200039557805160ff1916838001178555620003c5565b82800160010185558215620003c5579182015b82811115620003c5578251825591602001919060010190620003a8565b50620003d3929150620003d7565b5090565b5b80821115620003d35760008155600101620003d8565b6000602082840312156200040157600080fd5b81516001600160a01b03811681146200041957600080fd5b9392505050565b600181811c908216806200043557607f821691505b602082108114156200045757634e487b7160e01b600052602260045260246000fd5b50919050565b612cc5806200046d6000396000f3fe6080604052600436106102295760003560e01c8063715018a611610123578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e146106a1578063e0f3ccf5146106e7578063e18f965e146106fd578063f2fde38b14610713578063fe9d93031461073357600080fd5b8063a9059cbb146105e7578063b29ad50a14610607578063b62496f51461061c578063d52bb6f41461064c578063d73dd6231461068157600080fd5b80638da5cb5b116100f25780638da5cb5b1461054d5780638f70ccf71461057257806395927c251461059257806395d89b41146105b25780639a7a23d6146105c757600080fd5b8063715018a6146104ed5780637d0b11df14610502578063885a4cd0146105185780638d8f2adb1461053857600080fd5b80632a50d278116101b15780634ada218b116101755780634ada218b1461043d578063515fbf891461045757806366188463146104775780636df526c81461049757806370a08231146104b757600080fd5b80632a50d278146103895780632b929aa8146103a9578063313ce567146103c9578063484f4ea9146103f557806349bd5a5e1461041d57600080fd5b8063127f4b2e116101f8578063127f4b2e146102e85780631694505e1461030a57806318160ddd1461032a5780631e458bee1461034957806323b872dd1461036957600080fd5b806306fdde0314610235578063086258a414610260578063095ea7b314610298578063116d33ad146102c857600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024a610753565b60405161025791906126f0565b60405180910390f35b34801561026c57600080fd5b50600b54610280906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156102a457600080fd5b506102b86102b3366004612718565b6107e1565b6040519015158152602001610257565b3480156102d457600080fd5b506102b86102e33660046127e7565b6107f8565b3480156102f457600080fd5b5061030861030336600461284a565b6108ac565b005b34801561031657600080fd5b50600854610280906001600160a01b031681565b34801561033657600080fd5b506001545b604051908152602001610257565b34801561035557600080fd5b506102b8610364366004612863565b610966565b34801561037557600080fd5b506102b8610384366004612898565b6109a1565b34801561039557600080fd5b506103086103a4366004612718565b610a0a565b3480156103b557600080fd5b506103086103c436600461284a565b610a75565b3480156103d557600080fd5b506005546103e39060ff1681565b60405160ff9091168152602001610257565b34801561040157600080fd5b5061028073e9e7cea3dedca5984780bafc599bd69add087d5681565b34801561042957600080fd5b50600954610280906001600160a01b031681565b34801561044957600080fd5b50600e546102b89060ff1681565b34801561046357600080fd5b506102806104723660046127e7565b610aaa565b34801561048357600080fd5b506102b8610492366004612718565b610b02565b3480156104a357600080fd5b5061033b6104b2366004612863565b610be9565b3480156104c357600080fd5b5061033b6104d23660046128d9565b6001600160a01b031660009081526020819052604090205490565b3480156104f957600080fd5b50610308610c26565b34801561050e57600080fd5b5061033b600d5481565b34801561052457600080fd5b506103086105333660046128d9565b610c9e565b34801561054457600080fd5b50610308610e26565b34801561055957600080fd5b506005546102809061010090046001600160a01b031681565b34801561057e57600080fd5b5061030861058d366004612904565b610eac565b34801561059e57600080fd5b506103086105ad36600461284a565b610eef565b3480156105be57600080fd5b5061024a610f24565b3480156105d357600080fd5b506103086105e2366004612921565b610f31565b3480156105f357600080fd5b506102b8610602366004612718565b610ffd565b34801561061357600080fd5b5061030861100a565b34801561062857600080fd5b506102b86106373660046128d9565b600a6020526000908152604090205460ff1681565b34801561065857600080fd5b5061066c61066736600461295a565b6112e4565b60408051928352602083019190915201610257565b34801561068d57600080fd5b506102b861069c366004612718565b6113c7565b3480156106ad57600080fd5b5061033b6106bc36600461295a565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106f357600080fd5b5061033b600c5481565b34801561070957600080fd5b5061033b60065481565b34801561071f57600080fd5b5061030861072e3660046128d9565b611458565b34801561073f57600080fd5b5061030861074e366004612988565b6114f6565b60038054610760906129cf565b80601f016020809104026020016040519081016040528092919081815260200182805461078c906129cf565b80156107d95780601f106107ae576101008083540402835291602001916107d9565b820191906000526020600020905b8154815290600101906020018083116107bc57829003601f168201915b505050505081565b60006107ee338484611500565b5060015b92915050565b60008085858560405160200161081093929190612a0a565b6040516020818303038152906040529050600061083d846108378480519060200120611629565b9061167c565b6005549091506001600160a01b0380831661010090920416146108965760405162461bcd60e51b815260206004820152600c60248201526b2bb937b7339039b4b3b732b960a11b60448201526064015b60405180910390fd5b6108a187878761186c565b979650505050505050565b6005546001600160a01b036101009091041633146108dc5760405162461bcd60e51b815260040161088d90612a34565b80610925576005546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015610921573d6000803e3d6000fd5b5050565b6005546040516101009091046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015610921573d6000803e3d6000fd5b50565b60055460009061010090046001600160a01b0316336001600160a01b03161461098e57600080fd5b61099984848461186c565b949350505050565b60006109ae8484846119cf565b610a0084336109fb85604051806060016040528060218152602001612c4f602191396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611bbf565b611500565b5060019392505050565b6005546001600160a01b03610100909104163314610a3a5760405162461bcd60e51b815260040161088d90612a34565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610a70573d6000803e3d6000fd5b505050565b6005546001600160a01b03610100909104163314610aa55760405162461bcd60e51b815260040161088d90612a34565b600d55565b600080858585604051602001610ac293929190612a0a565b60408051601f19818403018152919052805160208201209091506000610ae782611629565b90506000610af5828761167c565b9998505050505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054808310610b56573360009081526002602090815260408083206001600160a01b0388168452909152812055610b85565b610b608184611bf9565b3360009081526002602090815260408083206001600160a01b03891684529091529020555b3360008181526002602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b600080848484604051602001610c0193929190612a0a565b60408051601f198184030181529190528051602082012090915060006108a182611629565b6005546001600160a01b03610100909104163314610c565760405162461bcd60e51b815260040161088d90612a34565b60405162461bcd60e51b815260206004820152601760248201527f52656e6f756e63696e67206f776e2e20626c6f636b6564000000000000000000604482015260640161088d565b6005546001600160a01b03610100909104163314610cce5760405162461bcd60e51b815260040161088d90612a34565b306001600160a01b0382161415610d275760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e00000000604482015260640161088d565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da89190612a69565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109219190612a82565b6005546001600160a01b03610100909104163314610e565760405162461bcd60e51b815260040161088d90612a34565b60055430600081815260208190526040902054610e819261010090046001600160a01b031690611500565b600554306000818152602081905260409020546109639261010090046001600160a01b0316906109a1565b6005546001600160a01b03610100909104163314610edc5760405162461bcd60e51b815260040161088d90612a34565b600e805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610f1f5760405162461bcd60e51b815260040161088d90612a34565b600c55565b60048054610760906129cf565b6005546001600160a01b03610100909104163314610f615760405162461bcd60e51b815260040161088d90612a34565b6009546001600160a01b0383811691161415610ff35760405162461bcd60e51b815260206004820152604560248201527f5468652050616e63616b655377617020706169722063616e6e6f74206265207260448201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572606482015264506169727360d81b608482015260a40161088d565b6109218282611c42565b60006107ee3384846119cf565b6005546001600160a01b0361010090910416331461103a5760405162461bcd60e51b815260040161088d90612a34565b6040516370a0823160e01b815230600482015260009073e9e7cea3dedca5984780bafc599bd69add087d56906370a082319060240160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190612a69565b306000908152602081905260409020549091506110db81611d2b565b6040516370a0823160e01b815230600482015260009061116c90849073e9e7cea3dedca5984780bafc599bd69add087d56906370a082319060240160206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190612a69565b90611bf9565b60405163095ea7b360e01b81523060048201526024810182905290915073e9e7cea3dedca5984780bafc599bd69add087d569063095ea7b390604401602060405180830381600087803b1580156111c257600080fd5b505af11580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a82565b50600b546040516323b872dd60e01b81523060048201526001600160a01b0390911660248201526044810182905260009073e9e7cea3dedca5984780bafc599bd69add087d56906323b872dd90606401602060405180830381600087803b15801561126457600080fd5b505af1158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190612a82565b905080156112de5760408051848152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b50505050565b60008060006112f38585611ede565b509050600080600960009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190612abb565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146113b65780826113b9565b81815b909890975095505050505050565b3360009081526002602090815260408083206001600160a01b03861684529091528120546113f59083611fd6565b3360008181526002602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6005546001600160a01b036101009091041633146114885760405162461bcd60e51b815260040161088d90612a34565b6001600160a01b0381166114ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088d565b61096381612035565b610921828261208f565b6001600160a01b0383166115655760405162461bcd60e51b815260206004820152602660248201527f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161088d565b6001600160a01b0382166115c75760405162461bcd60e51b8152602060048201526024808201527f544f4b454e32303a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b606482015260840161088d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b600081516041146116cf5760405162461bcd60e51b815260206004820152601960248201527f45434453413a20696e76616c696420736967206c656e67746800000000000000604482015260640161088d565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156117515760405162461bcd60e51b815260206004820152601c60248201527f45434453413a20696e76616c696420736967202773272076616c756500000000604482015260640161088d565b8060ff16601b1415801561176957508060ff16601c14155b156117b65760405162461bcd60e51b815260206004820152601c60248201527f45434453413a20696e76616c696420736967202776272076616c756500000000604482015260640161088d565b6040805160008082526020820180845289905260ff841692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561180a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118625760405162461bcd60e51b815260206004820152601260248201527145434453413a20696e76616c69642073696760701b604482015260640161088d565b9695505050505050565b6000816118a65760405162461bcd60e51b815260206004820152600860248201526708adae0e8f240e8f60c31b604482015260640161088d565b60008281526007602052604090205460ff16156118f35760405162461bcd60e51b815260206004820152600b60248201526a08af0d2e6e8d2dcce40e8f60ab1b604482015260640161088d565b6000828152600760205260409020805460ff191660019081179091555461191a9084611fd6565b6001556001600160a01b0384166000908152602081905260409020546119409084611fd6565b6001600160a01b0385166000818152602081815260409182902093909355805186815292830185905290917f3dec94b8abc8f801eaade1616d3aadd3114b556a284267905e0a053b2df39892910160405180910390a26040518381526001600160a01b03851690600090600080516020612c708339815191529060200160405180910390a35060019392505050565b6001600160a01b038316611a335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161088d565b6001600160a01b038216611a955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161088d565b60008111611afe5760405162461bcd60e51b815260206004820152603060248201527f45524332303a207472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b606482015260840161088d565b6005546001600160a01b038481166101009092041614611b6157600e5460ff16611b615760405162461bcd60e51b815260206004820152601460248201527324b9903a3930b234b733902234b9b0b13632b21760611b604482015260640161088d565b6001600160a01b0382166000908152600a602052604081205460ff168015611b9c57506005546001600160a01b038581166101009092041614155b15611bb357611baa8261209a565b15611bb3575060015b6112de848484846122be565b60008184841115611be35760405162461bcd60e51b815260040161088d91906126f0565b506000611bf08486612b21565b95945050505050565b6000611c3b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bbf565b9392505050565b6001600160a01b0382166000908152600a602052604090205460ff1615158115151415611cd75760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161088d565b6001600160a01b0382166000818152600a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110611d6257611d62612b38565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dee9190612b4e565b81600181518110611e0157611e01612b38565b60200260200101906001600160a01b031690816001600160a01b03168152505073e9e7cea3dedca5984780bafc599bd69add087d5681600281518110611e4957611e49612b38565b6001600160a01b039283166020918202929092010152600854611e6f9130911684611500565b600854604051635c11d79560e01b81526001600160a01b0390911690635c11d79590611ea8908590600090869030904290600401612b6b565b600060405180830381600087803b158015611ec257600080fd5b505af1158015611ed6573d6000803e3d6000fd5b505050505050565b600080826001600160a01b0316846001600160a01b03161415611f515760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840161088d565b826001600160a01b0316846001600160a01b031610611f71578284611f74565b83835b90925090506001600160a01b038216611fcf5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640161088d565b9250929050565b600080611fe38385612bdc565b905083811015611c3b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161088d565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610921338383612485565b6000806000600960009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156120ed57600080fd5b505afa158015612101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121259190612abb565b506001600160701b0391821693501690506000612147856402540be400612586565b9050600061215a846402540be400612586565b905060006121f36402540be400600960009054906101000a90046001600160a01b03166001600160a01b0316637464fc3d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b557600080fd5b505afa1580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed9190612a69565b90612586565b905060006122018386612605565b90508515801561220f575084155b1561222257506000979650505050505050565b85881061223757506000979650505050505050565b60006122438486611bf9565b905060006122518483612605565b905080871061226a575060009998505050505050505050565b60006122768289611bf9565b90506000612290670de0b6b3a76400006121ed8a85612605565b9050600061229e8287612605565b905060006122aa612647565b9091109d9c50505050505050505050505050565b80156123eb5760006122e660646122e0600c548661258690919063ffffffff16565b90612605565b905060006122f48483611bf9565b306000908152602081905260409020549091506123119083611fd6565b3060008181526020818152604091829020939093555184815290916001600160a01b03891691600080516020612c70833981519152910160405180910390a36001600160a01b0386166000908152602081905260409020546123739082611bf9565b6001600160a01b0380881660009081526020819052604080822093909355908716815220546123a29082611fd6565b6001600160a01b03868116600081815260208181526040918290209490945551848152909291891691600080516020612c70833981519152910160405180910390a350506112de565b6001600160a01b03841660009081526020819052604090205461240e9083611bf9565b6001600160a01b03808616600090815260208190526040808220939093559085168152205461243d9083611fd6565b6001600160a01b03848116600081815260208181526040918290209490945551858152909291871691600080516020612c70833981519152910160405180910390a350505050565b6070815111156124c95760405162461bcd60e51b815260206004820152600f60248201526e109859081059191c88199bdc9b585d608a1b604482015260640161088d565b6001600160a01b0383166000908152602081905260409020546124ec9083611bf9565b6001600160a01b0384166000908152602081905260409020556001546125129083611bf9565b6001556040516001600160a01b038416907f8d38f5a0c1764ff1cca876ce8fe136163fddfce925659e6ad05437cfff6fd392906125529085908590612bf4565b60405180910390a26040518281526000906001600160a01b03851690600080516020612c708339815191529060200161161c565b600082612595575060006107f2565b60006125a18385612c0d565b9050826125ae8583612c2c565b14611c3b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161088d565b6000611c3b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612675565b600061267060646122e0670de0b6b3a76400006121ed600d546064611bf990919063ffffffff16565b905090565b600081836126965760405162461bcd60e51b815260040161088d91906126f0565b506000611bf08486612c2c565b6000815180845260005b818110156126c9576020818501810151868301820152016126ad565b818111156126db576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611c3b60208301846126a3565b6001600160a01b038116811461096357600080fd5b6000806040838503121561272b57600080fd5b823561273681612703565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261276b57600080fd5b813567ffffffffffffffff8082111561278657612786612744565b604051601f8301601f19908116603f011681019082821181831017156127ae576127ae612744565b816040528381528660208588010111156127c757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156127fd57600080fd5b843561280881612703565b93506020850135925060408501359150606085013567ffffffffffffffff81111561283257600080fd5b61283e8782880161275a565b91505092959194509250565b60006020828403121561285c57600080fd5b5035919050565b60008060006060848603121561287857600080fd5b833561288381612703565b95602085013595506040909401359392505050565b6000806000606084860312156128ad57600080fd5b83356128b881612703565b925060208401356128c881612703565b929592945050506040919091013590565b6000602082840312156128eb57600080fd5b8135611c3b81612703565b801515811461096357600080fd5b60006020828403121561291657600080fd5b8135611c3b816128f6565b6000806040838503121561293457600080fd5b823561293f81612703565b9150602083013561294f816128f6565b809150509250929050565b6000806040838503121561296d57600080fd5b823561297881612703565b9150602083013561294f81612703565b6000806040838503121561299b57600080fd5b82359150602083013567ffffffffffffffff8111156129b957600080fd5b6129c58582860161275a565b9150509250929050565b600181811c908216806129e357607f821691505b60208210811415612a0457634e487b7160e01b600052602260045260246000fd5b50919050565b60609390931b6bffffffffffffffffffffffff191683526014830191909152603482015260540190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612a7b57600080fd5b5051919050565b600060208284031215612a9457600080fd5b8151611c3b816128f6565b80516001600160701b0381168114612ab657600080fd5b919050565b600080600060608486031215612ad057600080fd5b612ad984612a9f565b9250612ae760208501612a9f565b9150604084015163ffffffff81168114612b0057600080fd5b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b600082821015612b3357612b33612b0b565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b6057600080fd5b8151611c3b81612703565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612bbb5784516001600160a01b031683529383019391830191600101612b96565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612bef57612bef612b0b565b500190565b82815260406020820152600061099960408301846126a3565b6000816000190483118215151615612c2757612c27612b0b565b500290565b600082612c4957634e487b7160e01b600052601260045260246000fd5b50049056fe5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122075b9849c972aa2b79eb11fc55c5d7d45b3dc0ea0daedefd3af6958831aa42d3d64736f6c63430008090033

Deployed ByteCode Sourcemap

35046:13439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29126:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35661:101;;;;;;;;;;-1:-1:-1;35661:101:0;;;;-1:-1:-1;;;;;35661:101:0;;;;;;-1:-1:-1;;;;;896:32:1;;;878:51;;866:2;851:18;35661:101:0;716:219:1;41133:193:0;;;;;;;;;;-1:-1:-1;41133:193:0;;;;;:::i;:::-;;:::i;:::-;;;1561:14:1;;1554:22;1536:41;;1524:2;1509:18;41133:193:0;1396:187:1;30957:438:0;;;;;;;;;;-1:-1:-1;30957:438:0;;;;;:::i;:::-;;:::i;37280:183::-;;;;;;;;;;-1:-1:-1;37280:183:0;;;;;:::i;:::-;;:::i;:::-;;35237:41;;;;;;;;;;-1:-1:-1;35237:41:0;;;;-1:-1:-1;;;;;35237:41:0;;;24775:100;;;;;;;;;;-1:-1:-1;24855:12:0;;24775:100;;;3605:25:1;;;3593:2;3578:18;24775:100:0;3459:177:1;30398:187:0;;;;;;;;;;-1:-1:-1;30398:187:0;;;;;:::i;:::-;;:::i;42484:435::-;;;;;;;;;;-1:-1:-1;42484:435:0;;;;;:::i;:::-;;:::i;37676:158::-;;;;;;;;;;-1:-1:-1;37676:158:0;;;;;:::i;:::-;;:::i;40051:102::-;;;;;;;;;;-1:-1:-1;40051:102:0;;;;;:::i;:::-;;:::i;29178:21::-;;;;;;;;;;-1:-1:-1;29178:21:0;;;;;;;;;;;4990:4:1;4978:17;;;4960:36;;4948:2;4933:18;29178:21:0;4818:184:1;35563:91:0;;;;;;;;;;;;35611:42;35563:91;;35285:28;;;;;;;;;;-1:-1:-1;35285:28:0;;;;-1:-1:-1;;;;;35285:28:0;;;35914:29;;;;;;;;;;-1:-1:-1;35914:29:0;;;;;;;;31403:495;;;;;;;;;;-1:-1:-1;31403:495:0;;;;;:::i;:::-;;:::i;28278:480::-;;;;;;;;;;-1:-1:-1;28278:480:0;;;;;:::i;:::-;;:::i;31906:320::-;;;;;;;;;;-1:-1:-1;31906:320:0;;;;;:::i;:::-;;:::i;25100:116::-;;;;;;;;;;-1:-1:-1;25100:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;25192:16:0;25165:7;25192:16;;;;;;;;;;;;25100:116;39725:112;;;;;;;;;;;;;:::i;35877:30::-;;;;;;;;;;;;;;;;38010:321;;;;;;;;;;-1:-1:-1;38010:321:0;;;;;:::i;:::-;;:::i;38450:189::-;;;;;;;;;;;;;:::i;10609:20::-;;;;;;;;;;-1:-1:-1;10609:20:0;;;;;;;-1:-1:-1;;;;;10609:20:0;;;39621:96;;;;;;;;;;-1:-1:-1;39621:96:0;;;;;:::i;:::-;;:::i;39895:98::-;;;;;;;;;;-1:-1:-1;39895:98:0;;;;;:::i;:::-;;:::i;29151:20::-;;;;;;;;;;;;;:::i;38839:316::-;;;;;;;;;;-1:-1:-1;38839:316:0;;;;;:::i;:::-;;:::i;40616:199::-;;;;;;;;;;-1:-1:-1;40616:199:0;;;;;:::i;:::-;;:::i;43007:664::-;;;;;;;;;;;;;:::i;35471:57::-;;;;;;;;;;-1:-1:-1;35471:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46803:439;;;;;;;;;;-1:-1:-1;46803:439:0;;;;;:::i;:::-;;:::i;:::-;;;;6972:25:1;;;7028:2;7013:18;;7006:34;;;;6945:18;46803:439:0;6798:248:1;27441:349:0;;;;;;;;;;-1:-1:-1;27441:349:0;;;;;:::i;:::-;;:::i;26774:184::-;;;;;;;;;;-1:-1:-1;26774:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26925:15:0;;;26893:7;26925:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;26774:184;35843:27;;;;;;;;;;;;;;;;29902:24;;;;;;;;;;;;;;;;11770:238;;;;;;;;;;-1:-1:-1;11770:238:0;;;;;:::i;:::-;;:::i;41488:106::-;;;;;;;;;;-1:-1:-1;41488:106:0;;;;;:::i;:::-;;:::i;29126:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41133:193::-;41235:4;41257:39;10277:10;41280:7;41289:6;41257:8;:39::i;:::-;-1:-1:-1;41314:4:0;41133:193;;;;;:::o;30957:438::-;31108:4;31125:17;31162:3;31167:7;31176:6;31145:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31125:58;;31194:11;31208:86;31271:12;31208:40;31218:4;31208:15;;;;;;:38;:40::i;:::-;:48;;:86::i;:::-;31320:5;;31194:100;;-1:-1:-1;;;;;;31313:12:0;;;31320:5;;;;;31313:12;31305:37;;;;-1:-1:-1;;;31305:37:0;;8395:2:1;31305:37:0;;;8377:21:1;8434:2;8414:18;;;8407:30;-1:-1:-1;;;8453:18:1;;;8446:42;8505:18;;31305:37:0;;;;;;;;;31360:27;31366:3;31371:7;31380:6;31360:5;:27::i;:::-;31353:34;30957:438;-1:-1:-1;;;;;;;30957:438:0:o;37280:183::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;37349:11;37345:110:::1;;37370:5;::::0;37362:46:::1;::::0;-1:-1:-1;;;;;37370:5:0::1;::::0;;::::1;::::0;;;::::1;::::0;37386:21:::1;37362:46:::0;::::1;;;::::0;::::1;::::0;;;37386:21;37370:5;37362:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37280:183:::0;:::o;37345:110::-:1;37432:5;::::0;37424:31:::1;::::0;37432:5:::1;::::0;;::::1;-1:-1:-1::0;;;;;37432:5:0::1;::::0;37424:31:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;37432:5;37424:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;37345:110;37280:183:::0;:::o;30398:187::-;30052:5;;30526:4;;30052:5;;;-1:-1:-1;;;;;30052:5:0;10277:10;-1:-1:-1;;;;;30036:21:0;;30028:30;;;;;;30550:27:::1;30556:3;30561:7;30570:6;30550:5;:27::i;:::-;30543:34:::0;30398:187;-1:-1:-1;;;;30398:187:0:o;42484:435::-;42616:4;42633:36;42643:6;42651:9;42662:6;42633:9;:36::i;:::-;42680:209;42703:6;10277:10;42751:127;42803:6;42751:127;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42751:15:0;;;;;;:7;:15;;;;;;;;10277:10;42751:29;;;;;;;;;;:33;:127::i;:::-;42680:8;:209::i;:::-;-1:-1:-1;42907:4:0;42484:435;;;;;:::o;37676:158::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;37800:26:::1;::::0;-1:-1:-1;;;;;37800:18:0;::::1;::::0;:26;::::1;;;::::0;37819:6;;37800:26:::1;::::0;;;37819:6;37800:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37676:158:::0;;:::o;40051:102::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;40123:11:::1;:22:::0;40051:102::o;31403:495::-;31557:7;31577:17;31614:3;31619:7;31628:6;31597:38;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;31597:38:0;;;;;;;;;31749:15;;31597:38;31749:15;;;31597:38;;-1:-1:-1;31735:11:0;31790:28;31749:15;31790:26;:28::i;:::-;31775:43;-1:-1:-1;31829:11:0;31843:26;31775:43;31856:12;31843;:26::i;:::-;31829:40;31403:495;-1:-1:-1;;;;;;;;;31403:495:0:o;28278:480::-;28431:10;28382:4;28423:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;28423:29:0;;;;;;;;;;28467:28;;;28463:189;;28520:10;28544:1;28512:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;28512:29:0;;;;;;;;;:33;28463:189;;;28610:30;:8;28623:16;28610:12;:30::i;:::-;28586:10;28578:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;28578:29:0;;;;;;;;;:62;28463:189;28676:10;28698:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;28667:61:0;;28698:29;;;;;;;;;;;28667:61;;3605:25:1;;;28667:61:0;;28676:10;28667:61;;3578:18:1;28667:61:0;;;;;;;-1:-1:-1;28746:4:0;;28278:480;-1:-1:-1;;;28278:480:0:o;31906:320::-;32024:7;32044:17;32081:3;32086:7;32095:6;32064:38;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32064:38:0;;;;;;;;;32127:15;;32064:38;32127:15;;;32064:38;;-1:-1:-1;32113:11:0;32168:28;32127:15;32168:26;:28::i;39725:112::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;39796:33:::1;::::0;-1:-1:-1;;;39796:33:0;;9097:2:1;39796:33:0::1;::::0;::::1;9079:21:1::0;9136:2;9116:18;;;9109:30;9175:25;9155:18;;;9148:53;9218:18;;39796:33:0::1;8895:347:1::0;38010:321:0;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;38113:4:::1;-1:-1:-1::0;;;;;38105:31:0;::::1;;;38083:109;;;::::0;-1:-1:-1;;;38083:109:0;;9449:2:1;38083:109:0::1;::::0;::::1;9431:21:1::0;9488:2;9468:18;;;9461:30;9527;9507:18;;;9500:58;9575:18;;38083:109:0::1;9247:352:1::0;38083:109:0::1;38274:38;::::0;-1:-1:-1;;;38274:38:0;;38306:4:::1;38274:38;::::0;::::1;878:51:1::0;-1:-1:-1;;;;;38203:31:0;::::1;::::0;::::1;::::0;38249:10:::1;::::0;38203:31;;38274:23:::1;::::0;851:18:1;;38274:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38203:120;::::0;-1:-1:-1;;;;;;38203:120:0::1;::::0;;;;;;-1:-1:-1;;;;;9985:32:1;;;38203:120:0::1;::::0;::::1;9967:51:1::0;10034:18;;;10027:34;9940:18;;38203:120:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38450:189::-:0;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;38528:5:::1;::::0;38521:4:::1;25165:7:::0;25192:16;;;;;;;;;;;38504:56:::1;::::0;38528:5:::1;::::0;::::1;-1:-1:-1::0;;;;;38528:5:0::1;::::0;42680:8;:209::i;38504:56::-:1;38599:5;::::0;38592:4:::1;25165:7:::0;25192:16;;;;;;;;;;;38571:60:::1;::::0;38599:5:::1;::::0;::::1;-1:-1:-1::0;;;;;38599:5:0::1;::::0;42484:435;:::i;39621:96::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;39684:14:::1;:25:::0;;-1:-1:-1;;39684:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39621:96::o;39895:98::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;39965:8:::1;:20:::0;39895:98::o;29151:20::-;;;;;;;:::i;38839:316::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;38983:13:::1;::::0;-1:-1:-1;;;;;38975:21:0;;::::1;38983:13:::0;::::1;38975:21;;38953:140;;;::::0;-1:-1:-1;;;38953:140:0;;10524:2:1;38953:140:0::1;::::0;::::1;10506:21:1::0;10563:2;10543:18;;;10536:30;10602:34;10582:18;;;10575:62;10673:34;10653:18;;;10646:62;-1:-1:-1;;;10724:19:1;;;10717:36;10770:19;;38953:140:0::1;10322:473:1::0;38953:140:0::1;39106:41;39135:4;39141:5;39106:28;:41::i;40616:199::-:0;40721:4;40743:42;10277:10;40767:9;40778:6;40743:9;:42::i;43007:664::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;43131:37:::1;::::0;-1:-1:-1;;;43131:37:0;;43162:4:::1;43131:37;::::0;::::1;878:51:1::0;43102:26:0::1;::::0;35611:42:::1;::::0;43131:22:::1;::::0;851:18:1;;43131:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43220:4;43179:20;25192:16:::0;;;;;;;;;;;43102:66;;-1:-1:-1;43239:31:0::1;25192:16:::0;43239:17:::1;:31::i;:::-;43305:37;::::0;-1:-1:-1;;;43305:37:0;;43336:4:::1;43305:37;::::0;::::1;878:51:1::0;43283:18:0::1;::::0;43304:87:::1;::::0;43362:18;;35611:42:::1;::::0;43305:22:::1;::::0;851:18:1;;43305:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43304:43:::0;::::1;:87::i;:::-;43404:47;::::0;-1:-1:-1;;;43404:47:0;;43433:4:::1;43404:47;::::0;::::1;9967:51:1::0;10034:18;;;10027:34;;;43283:108:0;;-1:-1:-1;35611:42:0::1;::::0;43404:20:::1;::::0;9940:18:1;;43404:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;43547:11:0::1;::::0;43479:115:::1;::::0;-1:-1:-1;;;43479:115:0;;43527:4:::1;43479:115;::::0;::::1;11048:34:1::0;-1:-1:-1;;;;;43547:11:0;;::::1;11098:18:1::0;;;11091:43;11150:18;;;11143:34;;;43464:12:0::1;::::0;35611:42:::1;::::0;43479:25:::1;::::0;10983:18:1;;43479:115:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43464:130;;43609:7;43605:58;;;43623:40;::::0;;6972:25:1;;;7028:2;7013:18;;7006:34;;;43623:40:0::1;::::0;6945:18:1;43623:40:0::1;;;;;;;43605:58;43050:621;;;;43007:664::o:0;46803:439::-;46904:16;46922;46957:14;46977:26;46988:6;46996;46977:10;:26::i;:::-;46956:47;;;47015:16;47033;47070:13;;;;;;;;;-1:-1:-1;;;;;47070:13:0;-1:-1:-1;;;;;47055:55:0;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47014:98;-1:-1:-1;;;;;47014:98:0;;;-1:-1:-1;;;;;47014:98:0;;;47156:6;-1:-1:-1;;;;;47146:16:0;:6;-1:-1:-1;;;;;47146:16:0;;:88;;47215:8;47225;47146:88;;;47179:8;47189;47146:88;47123:111;;;;-1:-1:-1;46803:439:0;-1:-1:-1;;;;;;46803:439:0:o;27441:349::-;27634:10;27557:4;27626:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;27626:29:0;;;;;;;;;;:46;;27660:11;27626:33;:46::i;:::-;27587:10;27579:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;27579:29:0;;;;;;;;;;;;:104;;;27699:61;3605:25:1;;;27579:29:0;;27699:61;;3578:18:1;27699:61:0;;;;;;;-1:-1:-1;27778:4:0;27441:349;;;;:::o;11770:238::-;11083:5;;-1:-1:-1;;;;;11083:5:0;;;;;10277:10;11083:21;11075:66;;;;-1:-1:-1;;;11075:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11873:22:0;::::1;11851:110;;;::::0;-1:-1:-1;;;11851:110:0;;12038:2:1;11851:110:0::1;::::0;::::1;12020:21:1::0;12077:2;12057:18;;;12050:30;12116:34;12096:18;;;12089:62;-1:-1:-1;;;12167:18:1;;;12160:36;12213:19;;11851:110:0::1;11836:402:1::0;11851:110:0::1;11972:28;11991:8;11972:18;:28::i;41488:106::-:0;41563:23;41574:5;41581:4;41563:10;:23::i;41689:371::-;-1:-1:-1;;;;;41816:19:0;;41808:70;;;;-1:-1:-1;;;41808:70:0;;12445:2:1;41808:70:0;;;12427:21:1;12484:2;12464:18;;;12457:30;12523:34;12503:18;;;12496:62;-1:-1:-1;;;12574:18:1;;;12567:36;12620:19;;41808:70:0;12243:402:1;41808:70:0;-1:-1:-1;;;;;41897:21:0;;41889:70;;;;-1:-1:-1;;;41889:70:0;;12852:2:1;41889:70:0;;;12834:21:1;12891:2;12871:18;;;12864:30;12930:34;12910:18;;;12903:62;-1:-1:-1;;;12981:18:1;;;12974:34;13025:19;;41889:70:0;12650:400:1;41889:70:0;-1:-1:-1;;;;;41972:14:0;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;:32;;;42020;;3605:25:1;;;42020:32:0;;3578:18:1;42020:32:0;;;;;;;;41689:371;;;:::o;23439:346::-;23704:58;;13297:66:1;23704:58:0;;;13285:79:1;13380:12;;;13373:28;;;23535:7:0;;13417:12:1;;23704:58:0;;;;;;;;;;;;23676:101;;;;;;23656:121;;23439:346;;;:::o;21010:2155::-;21115:7;21183:9;:16;21203:2;21183:22;21179:90;;21222:35;;-1:-1:-1;;;21222:35:0;;13642:2:1;21222:35:0;;;13624:21:1;13681:2;13661:18;;;13654:30;13720:27;13700:18;;;13693:55;13765:18;;21222:35:0;13440:349:1;21179:90:0;21630:4;21615:20;;21609:27;21676:4;21661:20;;21655:27;21730:4;21715:20;;21709:27;21338:9;21701:36;22687:66;22661:92;;22643:187;;;22780:38;;-1:-1:-1;;;22780:38:0;;13996:2:1;22780:38:0;;;13978:21:1;14035:2;14015:18;;;14008:30;14074;14054:18;;;14047:58;14122:18;;22780:38:0;13794:352:1;22643:187:0;22846:1;:7;;22851:2;22846:7;;:18;;;;;22857:1;:7;;22862:2;22857:7;;22846:18;22842:89;;;22881:38;;-1:-1:-1;;;22881:38:0;;14353:2:1;22881:38:0;;;14335:21:1;14392:2;14372:18;;;14365:30;14431;14411:18;;;14404:58;14479:18;;22881:38:0;14151:352:1;22842:89:0;23045:24;;;23028:14;23045:24;;;;;;;;;14735:25:1;;;14808:4;14796:17;;14776:18;;;14769:45;;;;14830:18;;;14823:34;;;14873:18;;;14866:34;;;23045:24:0;;14707:19:1;;23045:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23045:24:0;;-1:-1:-1;;23045:24:0;;;-1:-1:-1;;;;;;;23088:20:0;;23080:51;;;;-1:-1:-1;;;23080:51:0;;15113:2:1;23080:51:0;;;15095:21:1;15152:2;15132:18;;;15125:30;-1:-1:-1;;;15171:18:1;;;15164:48;15229:18;;23080:51:0;14911:342:1;23080:51:0;23151:6;21010:2155;-1:-1:-1;;;;;;21010:2155:0:o;32234:491::-;32347:4;32372:20;32364:41;;;;-1:-1:-1;;;32364:41:0;;15460:2:1;32364:41:0;;;15442:21:1;15499:1;15479:18;;;15472:29;-1:-1:-1;;;15517:18:1;;;15510:38;15565:18;;32364:41:0;15258:331:1;32364:41:0;32425:20;;;;:12;:20;;;;;;;;32424:21;32416:45;;;;-1:-1:-1;;;32416:45:0;;15796:2:1;32416:45:0;;;15778:21:1;15835:2;15815:18;;;15808:30;-1:-1:-1;;;15854:18:1;;;15847:41;15905:18;;32416:45:0;15594:335:1;32416:45:0;32472:20;;;;:12;:20;;;;;:27;;-1:-1:-1;;32472:27:0;32495:4;32472:27;;;;;;32525:12;:25;;32542:7;32525:16;:25::i;:::-;32510:12;:40;-1:-1:-1;;;;;32577:13:0;;:8;:13;;;;;;;;;;;:26;;32595:7;32577:17;:26::i;:::-;-1:-1:-1;;;;;32561:13:0;;:8;:13;;;;;;;;;;;;:42;;;;32619:26;;6972:25:1;;;7013:18;;;7006:34;;;32561:13:0;;32619:26;;6945:18:1;32619:26:0;;;;;;;32661:34;;3605:25:1;;;-1:-1:-1;;;;;32661:34:0;;;32678:1;;-1:-1:-1;;;;;;;;;;;32661:34:0;3593:2:1;3578:18;32661:34:0;;;;;;;-1:-1:-1;32713:4:0;32234:491;;;;;:::o;44411:792::-;-1:-1:-1;;;;;44534:18:0;;44526:68;;;;-1:-1:-1;;;44526:68:0;;16389:2:1;44526:68:0;;;16371:21:1;16428:2;16408:18;;;16401:30;16467:34;16447:18;;;16440:62;-1:-1:-1;;;16518:18:1;;;16511:35;16563:19;;44526:68:0;16187:401:1;44526:68:0;-1:-1:-1;;;;;44613:16:0;;44605:64;;;;-1:-1:-1;;;44605:64:0;;16795:2:1;44605:64:0;;;16777:21:1;16834:2;16814:18;;;16807:30;16873:34;16853:18;;;16846:62;-1:-1:-1;;;16924:18:1;;;16917:33;16967:19;;44605:64:0;16593:399:1;44605:64:0;44697:1;44688:6;:10;44680:71;;;;-1:-1:-1;;;44680:71:0;;17199:2:1;44680:71:0;;;17181:21:1;17238:2;17218:18;;;17211:30;17277:34;17257:18;;;17250:62;-1:-1:-1;;;17328:18:1;;;17321:46;17384:19;;44680:71:0;16997:412:1;44680:71:0;44774:5;;-1:-1:-1;;;;;44766:13:0;;;44774:5;;;;;44766:13;44762:93;;44804:14;;;;44796:47;;;;-1:-1:-1;;;44796:47:0;;17616:2:1;44796:47:0;;;17598:21:1;17655:2;17635:18;;;17628:30;-1:-1:-1;;;17674:18:1;;;17667:50;17734:18;;44796:47:0;17414:344:1;44796:47:0;-1:-1:-1;;;;;44924:29:0;;44867:12;44924:29;;;:25;:29;;;;;;;;:46;;;;-1:-1:-1;44965:5:0;;-1:-1:-1;;;;;44957:13:0;;;44965:5;;;;;44957:13;;44924:46;44920:156;;;44991:23;45007:6;44991:15;:23::i;:::-;44987:78;;;-1:-1:-1;45045:4:0;44987:78;45154:41;45169:4;45175:2;45179:6;45187:7;45154:14;:41::i;13551:226::-;13671:7;13707:12;13699:6;;;;13691:29;;;;-1:-1:-1;;;13691:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13731:9:0;13743:5;13747:1;13743;:5;:::i;:::-;13731:17;13551:226;-1:-1:-1;;;;;13551:226:0:o;13112:136::-;13170:7;13197:43;13201:1;13204;13197:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13190:50;13112:136;-1:-1:-1;;;13112:136:0:o;39163:345::-;-1:-1:-1;;;;;39268:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;39246:146;;;;-1:-1:-1;;;39246:146:0;;18227:2:1;39246:146:0;;;18209:21:1;18266:2;18246:18;;;18239:30;18305:34;18285:18;;;18278:62;18376:26;18356:18;;;18349:54;18420:19;;39246:146:0;18025:420:1;39246:146:0;-1:-1:-1;;;;;39403:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;39403:39:0;;;;;;;;;;39460:40;;39403:39;;:31;39460:40;;;39163:345;;:::o;43745:531::-;43837:16;;;43851:1;43837:16;;;;;;;;;43813:21;;43837:16;;;;;;;;;;-1:-1:-1;43837:16:0;43813:40;;43882:4;43864;43869:1;43864:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43864:23:0;;;:7;;;;;;;;;;:23;;;;43908:15;;:22;;;-1:-1:-1;;;43908:22:0;;;;:15;;;;;:20;;:22;;;;;43864:7;;43908:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43898:4;43903:1;43898:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;43898:32:0;;;-1:-1:-1;;;;;43898:32:0;;;;;35611:42;43941:4;43946:1;43941:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43941:14:0;;;:7;;;;;;;;;:14;44000:15;;43968:62;;43985:4;;44000:15;44018:11;43968:8;:62::i;:::-;44069:15;;:199;;-1:-1:-1;;;44069:199:0;;-1:-1:-1;;;;;44069:15:0;;;;:69;;:199;;44153:11;;44069:15;;44195:4;;44222;;44242:15;;44069:199;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43802:474;43745:531;:::o;46338:407::-;46440:14;46456;46506:6;-1:-1:-1;;;;;46496:16:0;:6;-1:-1:-1;;;;;46496:16:0;;;46488:66;;;;-1:-1:-1;;;46488:66:0;;20025:2:1;46488:66:0;;;20007:21:1;20064:2;20044:18;;;20037:30;20103:34;20083:18;;;20076:62;-1:-1:-1;;;20154:18:1;;;20147:35;20199:19;;46488:66:0;19823:401:1;46488:66:0;46593:6;-1:-1:-1;;;;;46584:15:0;:6;-1:-1:-1;;;;;46584:15:0;;:79;;46648:6;46656;46584:79;;;46616:6;46624;46584:79;46565:98;;-1:-1:-1;46565:98:0;-1:-1:-1;;;;;;46682:20:0;;46674:63;;;;-1:-1:-1;;;46674:63:0;;20431:2:1;46674:63:0;;;20413:21:1;20470:2;20450:18;;;20443:30;20509:32;20489:18;;;20482:60;20559:18;;46674:63:0;20229:354:1;46674:63:0;46338:407;;;;;:::o;12648:181::-;12706:7;;12738:5;12742:1;12738;:5;:::i;:::-;12726:17;;12767:1;12762;:6;;12754:46;;;;-1:-1:-1;;;12754:46:0;;20923:2:1;12754:46:0;;;20905:21:1;20962:2;20942:18;;;20935:30;21001:29;20981:18;;;20974:57;21048:18;;12754:46:0;20721:351:1;12168:189:0;12261:5;;;-1:-1:-1;;;;;12277:16:0;;;12261:5;12277:16;;;-1:-1:-1;;;;;;12277:16:0;;;;;;12309:40;;12261:5;;;;;;;;12309:40;;12242:16;;12309:40;12231:126;12168:189;:::o;33216:116::-;33292:32;33298:10;33310:6;33318:5;33292;:32::i;47303:1179::-;47369:4;47387:17;47406;47444:13;;;;;;;;;-1:-1:-1;;;;;47444:13:0;-1:-1:-1;;;;;47429:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;47386:86:0;;;;-1:-1:-1;47386:86:0;;-1:-1:-1;47483:26:0;47512:20;:8;47525:6;47512:12;:20::i;:::-;47483:49;-1:-1:-1;47543:27:0;47573:21;:9;47587:6;47573:13;:21::i;:::-;47543:51;;47605:17;47625:51;47669:6;47641:13;;;;;;;;;-1:-1:-1;;;;;47641:13:0;-1:-1:-1;;;;;47626:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47625:43;;:51::i;:::-;47605:71;-1:-1:-1;47689:21:0;47713:34;:19;47737:9;47713:23;:34::i;:::-;47689:58;-1:-1:-1;47772:14:0;;:32;;;;-1:-1:-1;47790:14:0;;47772:32;47768:707;;;-1:-1:-1;47828:5:0;;47303:1179;-1:-1:-1;;;;;;;47303:1179:0:o;47768:707::-;47882:9;47870:8;:21;47866:39;;-1:-1:-1;47900:5:0;;47303:1179;-1:-1:-1;;;;;;;47303:1179:0:o;47866:39::-;47920:21;47944:43;:19;47968:18;47944:23;:43::i;:::-;47920:67;-1:-1:-1;48002:21:0;48026:28;:9;47920:67;48026:13;:28::i;:::-;48002:52;;48100:13;48087:9;:26;48083:44;;-1:-1:-1;48122:5:0;;47303:1179;-1:-1:-1;;;;;;;;;47303:1179:0:o;48083:44::-;48142:20;48165:28;:13;48183:9;48165:17;:28::i;:::-;48142:51;-1:-1:-1;48210:18:0;48231:50;48274:6;48232:36;:18;48142:51;48232:22;:36::i;48231:50::-;48210:71;-1:-1:-1;48296:20:0;48319:29;48210:71;48334:13;48319:14;:29::i;:::-;48296:52;;48363:20;48386:24;:22;:24::i;:::-;48435:27;;;;47303:1179;-1:-1:-1;;;;;;;;;;;;;47303:1179:0:o;45262:967::-;45419:7;45415:807;;;45511:12;45526:30;45552:3;45526:21;45538:8;;45526:7;:11;;:21;;;;:::i;:::-;:25;;:30::i;:::-;45511:45;-1:-1:-1;45571:23:0;45597:17;:7;45511:45;45597:11;:17::i;:::-;45717:4;45700:8;:23;;;;;;;;;;;45571:43;;-1:-1:-1;45700:33:0;;45728:4;45700:27;:33::i;:::-;45691:4;45674:8;:23;;;;;;;;;;;;:59;;;;45753:37;3605:25:1;;;45691:4:0;;-1:-1:-1;;;;;45753:37:0;;;-1:-1:-1;;;;;;;;;;;45753:37:0;3578:18:1;45753:37:0;;;;;;;-1:-1:-1;;;;;45826:16:0;;:8;:16;;;;;;;;;;;:37;;45847:15;45826:20;:37::i;:::-;-1:-1:-1;;;;;45807:16:0;;;:8;:16;;;;;;;;;;;:56;;;;45900:19;;;;;;;:40;;45924:15;45900:23;:40::i;:::-;-1:-1:-1;;;;;45878:19:0;;;:8;:19;;;;;;;;;;;;:62;;;;45960:44;3605:25:1;;;45878:19:0;;45960:44;;;;-1:-1:-1;;;;;;;;;;;45960:44:0;3578:18:1;45960:44:0;;;;;;;45428:588;;45415:807;;;-1:-1:-1;;;;;46056:16:0;;:8;:16;;;;;;;;;;;:29;;46077:7;46056:20;:29::i;:::-;-1:-1:-1;;;;;46037:16:0;;;:8;:16;;;;;;;;;;;:48;;;;46122:19;;;;;;;:32;;46146:7;46122:23;:32::i;:::-;-1:-1:-1;;;;;46100:19:0;;;:8;:19;;;;;;;;;;;;:54;;;;46174:36;3605:25:1;;;46100:19:0;;46174:36;;;;-1:-1:-1;;;;;;;;;;;46174:36:0;3578:18:1;46174:36:0;;;;;;;45262:967;;;;:::o;33340:634::-;33565:3;33549:5;:12;:19;;33541:47;;;;-1:-1:-1;;;33541:47:0;;21279:2:1;33541:47:0;;;21261:21:1;21318:2;21298:18;;;21291:30;-1:-1:-1;;;21337:18:1;;;21330:45;21392:18;;33541:47:0;21077:339:1;33541:47:0;-1:-1:-1;;;;;33799:14:0;;:8;:14;;;;;;;;;;;:26;;33818:6;33799:18;:26::i;:::-;-1:-1:-1;;;;;33782:14:0;;:8;:14;;;;;;;;;;:43;33851:12;;:24;;33868:6;33851:16;:24::i;:::-;33836:12;:39;33891:25;;-1:-1:-1;;;;;33891:25:0;;;;;;;33902:6;;33910:5;;33891:25;:::i;:::-;;;;;;;;33932:34;;3605:25:1;;;33955:1:0;;-1:-1:-1;;;;;33932:34:0;;;-1:-1:-1;;;;;;;;;;;33932:34:0;3593:2:1;3578:18;33932:34:0;3459:177:1;14036:471:0;14094:7;14339:6;14335:47;;-1:-1:-1;14369:1:0;14362:8;;14335:47;14394:9;14406:5;14410:1;14406;:5;:::i;:::-;14394:17;-1:-1:-1;14439:1:0;14430:5;14434:1;14394:17;14430:5;:::i;:::-;:10;14422:56;;;;-1:-1:-1;;;14422:56:0;;22312:2:1;14422:56:0;;;22294:21:1;22351:2;22331:18;;;22324:30;22390:34;22370:18;;;22363:62;-1:-1:-1;;;22441:18:1;;;22434:31;22482:19;;14422:56:0;22110:397:1;14983:132:0;15041:7;15068:39;15072:1;15075;15068:39;;;;;;;;;;;;;;;;;:3;:39::i;40161:146::-;40218:7;40245:54;40295:3;40246:43;40282:6;40247:29;40264:11;;40255:3;40247:16;;:29;;;;:::i;40245:54::-;40238:61;;40161:146;:::o;15611:312::-;15731:7;15766:12;15759:5;15751:28;;;;-1:-1:-1;;;15751:28:0;;;;;;;;:::i;:::-;-1:-1:-1;15790:9:0;15802:5;15806:1;15802;:5;:::i;14:472:1:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;468:2:1;447:15;-1:-1:-1;;443:29:1;434:39;;;;475:4;430:50;;14:472;-1:-1:-1;;14:472:1:o;491:220::-;640:2;629:9;622:21;603:4;660:45;701:2;690:9;686:18;678:6;660:45;:::i;940:131::-;-1:-1:-1;;;;;1015:31:1;;1005:42;;995:70;;1061:1;1058;1051:12;1076:315;1144:6;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1260:9;1247:23;1279:31;1304:5;1279:31;:::i;:::-;1329:5;1381:2;1366:18;;;;1353:32;;-1:-1:-1;;;1076:315:1:o;1588:127::-;1649:10;1644:3;1640:20;1637:1;1630:31;1680:4;1677:1;1670:15;1704:4;1701:1;1694:15;1720:718;1762:5;1815:3;1808:4;1800:6;1796:17;1792:27;1782:55;;1833:1;1830;1823:12;1782:55;1869:6;1856:20;1895:18;1932:2;1928;1925:10;1922:36;;;1938:18;;:::i;:::-;2013:2;2007:9;1981:2;2067:13;;-1:-1:-1;;2063:22:1;;;2087:2;2059:31;2055:40;2043:53;;;2111:18;;;2131:22;;;2108:46;2105:72;;;2157:18;;:::i;:::-;2197:10;2193:2;2186:22;2232:2;2224:6;2217:18;2278:3;2271:4;2266:2;2258:6;2254:15;2250:26;2247:35;2244:55;;;2295:1;2292;2285:12;2244:55;2359:2;2352:4;2344:6;2340:17;2333:4;2325:6;2321:17;2308:54;2406:1;2399:4;2394:2;2386:6;2382:15;2378:26;2371:37;2426:6;2417:15;;;;;;1720:718;;;;:::o;2443:592::-;2538:6;2546;2554;2562;2615:3;2603:9;2594:7;2590:23;2586:33;2583:53;;;2632:1;2629;2622:12;2583:53;2671:9;2658:23;2690:31;2715:5;2690:31;:::i;:::-;2740:5;-1:-1:-1;2792:2:1;2777:18;;2764:32;;-1:-1:-1;2843:2:1;2828:18;;2815:32;;-1:-1:-1;2898:2:1;2883:18;;2870:32;2925:18;2914:30;;2911:50;;;2957:1;2954;2947:12;2911:50;2980:49;3021:7;3012:6;3001:9;2997:22;2980:49;:::i;:::-;2970:59;;;2443:592;;;;;;;:::o;3040:180::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;-1:-1:-1;3191:23:1;;3040:180;-1:-1:-1;3040:180:1:o;3641:383::-;3718:6;3726;3734;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3842:9;3829:23;3861:31;3886:5;3861:31;:::i;:::-;3911:5;3963:2;3948:18;;3935:32;;-1:-1:-1;4014:2:1;3999:18;;;3986:32;;3641:383;-1:-1:-1;;;3641:383:1:o;4029:456::-;4106:6;4114;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4029:456;;4421:7;;-1:-1:-1;;;4475:2:1;4460:18;;;;4447:32;;4029:456::o;5397:247::-;5456:6;5509:2;5497:9;5488:7;5484:23;5480:32;5477:52;;;5525:1;5522;5515:12;5477:52;5564:9;5551:23;5583:31;5608:5;5583:31;:::i;5649:118::-;5735:5;5728:13;5721:21;5714:5;5711:32;5701:60;;5757:1;5754;5747:12;5772:241;5828:6;5881:2;5869:9;5860:7;5856:23;5852:32;5849:52;;;5897:1;5894;5887:12;5849:52;5936:9;5923:23;5955:28;5977:5;5955:28;:::i;6018:382::-;6083:6;6091;6144:2;6132:9;6123:7;6119:23;6115:32;6112:52;;;6160:1;6157;6150:12;6112:52;6199:9;6186:23;6218:31;6243:5;6218:31;:::i;:::-;6268:5;-1:-1:-1;6325:2:1;6310:18;;6297:32;6338:30;6297:32;6338:30;:::i;:::-;6387:7;6377:17;;;6018:382;;;;;:::o;6405:388::-;6473:6;6481;6534:2;6522:9;6513:7;6509:23;6505:32;6502:52;;;6550:1;6547;6540:12;6502:52;6589:9;6576:23;6608:31;6633:5;6608:31;:::i;:::-;6658:5;-1:-1:-1;6715:2:1;6700:18;;6687:32;6728:33;6687:32;6728:33;:::i;7051:388::-;7128:6;7136;7189:2;7177:9;7168:7;7164:23;7160:32;7157:52;;;7205:1;7202;7195:12;7157:52;7241:9;7228:23;7218:33;;7302:2;7291:9;7287:18;7274:32;7329:18;7321:6;7318:30;7315:50;;;7361:1;7358;7351:12;7315:50;7384:49;7425:7;7416:6;7405:9;7401:22;7384:49;:::i;:::-;7374:59;;;7051:388;;;;;:::o;7444:380::-;7523:1;7519:12;;;;7566;;;7587:61;;7641:4;7633:6;7629:17;7619:27;;7587:61;7694:2;7686:6;7683:14;7663:18;7660:38;7657:161;;;7740:10;7735:3;7731:20;7728:1;7721:31;7775:4;7772:1;7765:15;7803:4;7800:1;7793:15;7657:161;;7444:380;;;:::o;7829:359::-;8034:2;8030:15;;;;-1:-1:-1;;8026:53:1;8014:66;;8105:2;8096:12;;8089:28;;;;8142:2;8133:12;;8126:28;8179:2;8170:12;;7829:359::o;8534:356::-;8736:2;8718:21;;;8755:18;;;8748:30;8814:34;8809:2;8794:18;;8787:62;8881:2;8866:18;;8534:356::o;9604:184::-;9674:6;9727:2;9715:9;9706:7;9702:23;9698:32;9695:52;;;9743:1;9740;9733:12;9695:52;-1:-1:-1;9766:16:1;;9604:184;-1:-1:-1;9604:184:1:o;10072:245::-;10139:6;10192:2;10180:9;10171:7;10167:23;10163:32;10160:52;;;10208:1;10205;10198:12;10160:52;10240:9;10234:16;10259:28;10281:5;10259:28;:::i;11188:188::-;11267:13;;-1:-1:-1;;;;;11309:42:1;;11299:53;;11289:81;;11366:1;11363;11356:12;11289:81;11188:188;;;:::o;11381:450::-;11468:6;11476;11484;11537:2;11525:9;11516:7;11512:23;11508:32;11505:52;;;11553:1;11550;11543:12;11505:52;11576:40;11606:9;11576:40;:::i;:::-;11566:50;;11635:49;11680:2;11669:9;11665:18;11635:49;:::i;:::-;11625:59;;11727:2;11716:9;11712:18;11706:25;11771:10;11764:5;11760:22;11753:5;11750:33;11740:61;;11797:1;11794;11787:12;11740:61;11820:5;11810:15;;;11381:450;;;;;:::o;17763:127::-;17824:10;17819:3;17815:20;17812:1;17805:31;17855:4;17852:1;17845:15;17879:4;17876:1;17869:15;17895:125;17935:4;17963:1;17960;17957:8;17954:34;;;17968:18;;:::i;:::-;-1:-1:-1;18005:9:1;;17895:125::o;18450:127::-;18511:10;18506:3;18502:20;18499:1;18492:31;18542:4;18539:1;18532:15;18566:4;18563:1;18556:15;18582:251;18652:6;18705:2;18693:9;18684:7;18680:23;18676:32;18673:52;;;18721:1;18718;18711:12;18673:52;18753:9;18747:16;18772:31;18797:5;18772:31;:::i;18838:980::-;19100:4;19148:3;19137:9;19133:19;19179:6;19168:9;19161:25;19205:2;19243:6;19238:2;19227:9;19223:18;19216:34;19286:3;19281:2;19270:9;19266:18;19259:31;19310:6;19345;19339:13;19376:6;19368;19361:22;19414:3;19403:9;19399:19;19392:26;;19453:2;19445:6;19441:15;19427:29;;19474:1;19484:195;19498:6;19495:1;19492:13;19484:195;;;19563:13;;-1:-1:-1;;;;;19559:39:1;19547:52;;19654:15;;;;19619:12;;;;19595:1;19513:9;19484:195;;;-1:-1:-1;;;;;;;19735:32:1;;;;19730:2;19715:18;;19708:60;-1:-1:-1;;;19799:3:1;19784:19;19777:35;19696:3;18838:980;-1:-1:-1;;;18838:980:1:o;20588:128::-;20628:3;20659:1;20655:6;20652:1;20649:13;20646:39;;;20665:18;;:::i;:::-;-1:-1:-1;20701:9:1;;20588:128::o;21421:289::-;21596:6;21585:9;21578:25;21639:2;21634;21623:9;21619:18;21612:30;21559:4;21659:45;21700:2;21689:9;21685:18;21677:6;21659:45;:::i;21715:168::-;21755:7;21821:1;21817;21813:6;21809:14;21806:1;21803:21;21798:1;21791:9;21784:17;21780:45;21777:71;;;21828:18;;:::i;:::-;-1:-1:-1;21868:9:1;;21715:168::o;21888:217::-;21928:1;21954;21944:132;;21998:10;21993:3;21989:20;21986:1;21979:31;22033:4;22030:1;22023:15;22061:4;22058:1;22051:15;21944:132;-1:-1:-1;22090:9:1;;21888:217::o

Swarm Source

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