Token Proxy

Bridge 
 

Overview ERC-20

Price
$0.18 @ 0.206361 MATIC (-0.54%)
Fully Diluted Market Cap
Total Supply:
5,867,249.158088 PRXY

Holders:
1,624 addresses

Transfers:
-

Contract:
0xab3d689c22a2bb821f50a4ff0f21a7980dcb85910xab3D689C22a2Bb821f50A4Ff0F21A7980dCB8591

Decimals:
18

Official Site:

Social Profiles:

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

BTC Proxy is an institutional Bitcoin bridge for DeFi built on Matic L2 enabling gasless minting, high speeds and PRXY is governance token.

Market

Volume (24H):$40,152.47
Market Capitalization:$0.00
Circulating Supply:0.00 PRXY
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
ProxyTokenV2

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: PRXY.sol


pragma solidity ^0.8.0;





contract ProxyTokenV2 is ERC20Burnable, Ownable, Pausable {
    using SafeERC20 for IERC20;

    mapping(address => bool) public isLocked;
    mapping(address => bool) public whitelist;

    constructor(address _treasuryWallet, uint256 _amount)
        ERC20("Proxy", "PRXY")
    {
        _mint(_treasuryWallet, _amount);
    }

    function mintByWhitelisted(address addr, uint256 amount)
        external
        whenNotPaused
    {
        require(whitelist[_msgSender()], "ProxyCoin_V2: Not whiteslisted");
        _mint(addr, amount);
    }

    function mint(address addr, uint256 amount) external onlyOwner {
        _mint(addr, amount);
    }

    function burnByOwner(address addr, uint256 amount) external onlyOwner {
        _burn(addr, amount);
    }

    function stopMinting() external onlyOwner {
        _pause();
    }

    function startMinting() external onlyOwner {
        _unpause();
    }

    function addToWhitelist(address _address) external onlyOwner {
        whitelist[_address] = true;
    }

    function removeFromWhitelist(address _address) external onlyOwner {
        whitelist[_address] = false;
    }

    function lockTransfer(address _addr) external onlyOwner {
        isLocked[_addr] = true;
    }

    function unLockTransfer(address _addr) external onlyOwner {
        isLocked[_addr] = false;
    }

    function recoverExcessToken(address token, uint256 amount)
        external
        onlyOwner
    {
        IERC20(token).safeTransfer(_msgSender(), amount);
    }

    receive() external payable {
        revert("ProxyCoin_V2: Not allowed");
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(
            !isLocked[from] && !isLocked[to],
            "ProxyCoin_V2: Locked addresses"
        );
        super._beforeTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"lockTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintByWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverExcessToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopMinting","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unLockTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162003bb538038062003bb58339818101604052810190620000379190620005d6565b6040518060400160405280600581526020017f50726f78790000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50525859000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb92919062000481565b508060049080519060200190620000d492919062000481565b505050620000f7620000eb6200012c60201b60201c565b6200013460201b60201c565b6000600560146101000a81548160ff021916908315150217905550620001248282620001fa60201b60201c565b505062000831565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200026d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000264906200067e565b60405180910390fd5b62000281600083836200037360201b60201c565b8060026000828254620002959190620006cf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002ec9190620006cf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035391906200073d565b60405180910390a36200036f600083836200047760201b60201c565b5050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620004185750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6200045a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045190620007aa565b60405180910390fd5b620004728383836200047c60201b620015b21760201c565b505050565b505050565b505050565b8280546200048f90620007fb565b90600052602060002090601f016020900481019282620004b35760008555620004ff565b82601f10620004ce57805160ff1916838001178555620004ff565b82800160010185558215620004ff579182015b82811115620004fe578251825591602001919060010190620004e1565b5b5090506200050e919062000512565b5090565b5b808211156200052d57600081600090555060010162000513565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005638262000536565b9050919050565b620005758162000556565b81146200058157600080fd5b50565b60008151905062000595816200056a565b92915050565b6000819050919050565b620005b0816200059b565b8114620005bc57600080fd5b50565b600081519050620005d081620005a5565b92915050565b60008060408385031215620005f057620005ef62000531565b5b6000620006008582860162000584565b92505060206200061385828601620005bf565b9150509250929050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000666601f836200061d565b915062000673826200062e565b602082019050919050565b60006020820190508181036000830152620006998162000657565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620006dc826200059b565b9150620006e9836200059b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007215762000720620006a0565b5b828201905092915050565b62000737816200059b565b82525050565b60006020820190506200075460008301846200072c565b92915050565b7f50726f7879436f696e5f56323a204c6f636b6564206164647265737365730000600082015250565b600062000792601e836200061d565b91506200079f826200075a565b602082019050919050565b60006020820190508181036000830152620007c58162000783565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081457607f821691505b602082108114156200082b576200082a620007cc565b5b50919050565b61337480620008416000396000f3fe6080604052600436106101c65760003560e01c806379cc6790116100f7578063a457c2d711610095578063dd62ed3e11610064578063dd62ed3e14610682578063e43252d7146106bf578063ebe316da146106e8578063f2fde38b1461071157610206565b8063a457c2d7146105b6578063a9059cbb146105f3578063aa9700c514610630578063cc30a3701461065957610206565b80638da5cb5b116100d15780638da5cb5b1461050c57806395d89b41146105375780639a65ea26146105625780639b19251a1461057957610206565b806379cc67901461049157806381df1002146104ba5780638ab1d681146104e357610206565b80633e3e0b12116101645780634a4fbeec1161013e5780634a4fbeec146103d55780635c975abb1461041257806370a082311461043d578063715018a61461047a57610206565b80633e3e0b121461036c57806340c10f191461038357806342966c68146103ac57610206565b806318160ddd116101a057806318160ddd1461029c57806323b872dd146102c7578063313ce56714610304578063395093511461032f57610206565b806306fdde031461020b578063095ea7b314610236578063111a18d31461027357610206565b36610206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101fd90612395565b60405180910390fd5b600080fd5b34801561021757600080fd5b5061022061073a565b60405161022d919061243d565b60405180910390f35b34801561024257600080fd5b5061025d600480360381019061025891906124f8565b6107cc565b60405161026a9190612553565b60405180910390f35b34801561027f57600080fd5b5061029a600480360381019061029591906124f8565b6107ea565b005b3480156102a857600080fd5b506102b1610874565b6040516102be919061257d565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612598565b61087e565b6040516102fb9190612553565b60405180910390f35b34801561031057600080fd5b50610319610976565b6040516103269190612607565b60405180910390f35b34801561033b57600080fd5b50610356600480360381019061035191906124f8565b61097f565b6040516103639190612553565b60405180910390f35b34801561037857600080fd5b50610381610a2b565b005b34801561038f57600080fd5b506103aa60048036038101906103a591906124f8565b610ab1565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612622565b610b3b565b005b3480156103e157600080fd5b506103fc60048036038101906103f7919061264f565b610b4f565b6040516104099190612553565b60405180910390f35b34801561041e57600080fd5b50610427610b6f565b6040516104349190612553565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f919061264f565b610b86565b604051610471919061257d565b60405180910390f35b34801561048657600080fd5b5061048f610bce565b005b34801561049d57600080fd5b506104b860048036038101906104b391906124f8565b610c56565b005b3480156104c657600080fd5b506104e160048036038101906104dc91906124f8565b610cd1565b005b3480156104ef57600080fd5b5061050a6004803603810190610505919061264f565b610dba565b005b34801561051857600080fd5b50610521610e91565b60405161052e919061268b565b60405180910390f35b34801561054357600080fd5b5061054c610ebb565b604051610559919061243d565b60405180910390f35b34801561056e57600080fd5b50610577610f4d565b005b34801561058557600080fd5b506105a0600480360381019061059b919061264f565b610fd3565b6040516105ad9190612553565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906124f8565b610ff3565b6040516105ea9190612553565b60405180910390f35b3480156105ff57600080fd5b5061061a600480360381019061061591906124f8565b6110de565b6040516106279190612553565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906124f8565b6110fc565b005b34801561066557600080fd5b50610680600480360381019061067b919061264f565b6111ae565b005b34801561068e57600080fd5b506106a960048036038101906106a491906126a6565b611285565b6040516106b6919061257d565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061264f565b61130c565b005b3480156106f457600080fd5b5061070f600480360381019061070a919061264f565b6113e3565b005b34801561071d57600080fd5b506107386004803603810190610733919061264f565b6114ba565b005b60606003805461074990612715565b80601f016020809104026020016040519081016040528092919081815260200182805461077590612715565b80156107c25780601f10610797576101008083540402835291602001916107c2565b820191906000526020600020905b8154815290600101906020018083116107a557829003601f168201915b5050505050905090565b60006107e06107d96115b7565b84846115bf565b6001905092915050565b6107f26115b7565b73ffffffffffffffffffffffffffffffffffffffff16610810610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d90612793565b60405180910390fd5b610870828261178a565b5050565b6000600254905090565b600061088b848484611961565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108d66115b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90612825565b60405180910390fd5b61096a856109626115b7565b8584036115bf565b60019150509392505050565b60006012905090565b6000610a2161098c6115b7565b84846001600061099a6115b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a1c9190612874565b6115bf565b6001905092915050565b610a336115b7565b73ffffffffffffffffffffffffffffffffffffffff16610a51610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612793565b60405180910390fd5b610aaf611be2565b565b610ab96115b7565b73ffffffffffffffffffffffffffffffffffffffff16610ad7610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490612793565b60405180910390fd5b610b378282611c85565b5050565b610b4c610b466115b7565b8261178a565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bd66115b7565b73ffffffffffffffffffffffffffffffffffffffff16610bf4610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612793565b60405180910390fd5b610c546000611de5565b565b6000610c6983610c646115b7565b611285565b905081811015610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca59061293c565b60405180910390fd5b610cc283610cba6115b7565b8484036115bf565b610ccc838361178a565b505050565b610cd9610b6f565b15610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d10906129a8565b60405180910390fd5b60076000610d256115b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390612a14565b60405180910390fd5b610db68282611c85565b5050565b610dc26115b7565b73ffffffffffffffffffffffffffffffffffffffff16610de0610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90612793565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610eca90612715565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690612715565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b5050505050905090565b610f556115b7565b73ffffffffffffffffffffffffffffffffffffffff16610f73610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090612793565b60405180910390fd5b610fd1611eab565b565b60076020528060005260406000206000915054906101000a900460ff1681565b600080600160006110026115b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690612aa6565b60405180910390fd5b6110d36110ca6115b7565b858584036115bf565b600191505092915050565b60006110f26110eb6115b7565b8484611961565b6001905092915050565b6111046115b7565b73ffffffffffffffffffffffffffffffffffffffff16611122610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90612793565b60405180910390fd5b6111aa6111836115b7565b828473ffffffffffffffffffffffffffffffffffffffff16611f4d9092919063ffffffff16565b5050565b6111b66115b7565b73ffffffffffffffffffffffffffffffffffffffff166111d4610e91565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190612793565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113146115b7565b73ffffffffffffffffffffffffffffffffffffffff16611332610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90612793565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6113eb6115b7565b73ffffffffffffffffffffffffffffffffffffffff16611409610e91565b73ffffffffffffffffffffffffffffffffffffffff161461145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690612793565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114c26115b7565b73ffffffffffffffffffffffffffffffffffffffff166114e0610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d90612793565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159d90612b38565b60405180910390fd5b6115af81611de5565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690612bca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690612c5c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161177d919061257d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190612cee565b60405180910390fd5b61180682600083611fd3565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390612d80565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546118e39190612da0565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611948919061257d565b60405180910390a361195c836000846120c6565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890612e46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890612ed8565b60405180910390fd5b611a4c838383611fd3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990612f6a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b659190612874565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bc9919061257d565b60405180910390a3611bdc8484846120c6565b50505050565b611bea610b6f565b15611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906129a8565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c6e6115b7565b604051611c7b919061268b565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90612fd6565b60405180910390fd5b611d0160008383611fd3565b8060026000828254611d139190612874565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d689190612874565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611dcd919061257d565b60405180910390a3611de1600083836120c6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611eb3610b6f565b611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990613042565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611f366115b7565b604051611f43919061268b565b60405180910390a1565b611fce8363a9059cbb60e01b8484604051602401611f6c929190613062565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120cb565b505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120775750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad906130d7565b60405180910390fd5b6120c18383836115b2565b505050565b505050565b600061212d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121929092919063ffffffff16565b905060008151111561218d578080602001905181019061214d9190613123565b61218c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612183906131c2565b60405180910390fd5b5b505050565b60606121a184846000856121aa565b90509392505050565b6060824710156121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690613254565b60405180910390fd5b6121f8856122be565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906132c0565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122609190613327565b60006040518083038185875af1925050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b50915091506122b28282866122d1565b92505050949350505050565b600080823b905060008111915050919050565b606083156122e157829050612331565b6000835111156122f45782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612328919061243d565b60405180910390fd5b9392505050565b600082825260208201905092915050565b7f50726f7879436f696e5f56323a204e6f7420616c6c6f77656400000000000000600082015250565b600061237f601983612338565b915061238a82612349565b602082019050919050565b600060208201905081810360008301526123ae81612372565b9050919050565b600081519050919050565b60005b838110156123de5780820151818401526020810190506123c3565b838111156123ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061240f826123b5565b6124198185612338565b93506124298185602086016123c0565b612432816123f3565b840191505092915050565b600060208201905081810360008301526124578184612404565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061248f82612464565b9050919050565b61249f81612484565b81146124aa57600080fd5b50565b6000813590506124bc81612496565b92915050565b6000819050919050565b6124d5816124c2565b81146124e057600080fd5b50565b6000813590506124f2816124cc565b92915050565b6000806040838503121561250f5761250e61245f565b5b600061251d858286016124ad565b925050602061252e858286016124e3565b9150509250929050565b60008115159050919050565b61254d81612538565b82525050565b60006020820190506125686000830184612544565b92915050565b612577816124c2565b82525050565b6000602082019050612592600083018461256e565b92915050565b6000806000606084860312156125b1576125b061245f565b5b60006125bf868287016124ad565b93505060206125d0868287016124ad565b92505060406125e1868287016124e3565b9150509250925092565b600060ff82169050919050565b612601816125eb565b82525050565b600060208201905061261c60008301846125f8565b92915050565b6000602082840312156126385761263761245f565b5b6000612646848285016124e3565b91505092915050565b6000602082840312156126655761266461245f565b5b6000612673848285016124ad565b91505092915050565b61268581612484565b82525050565b60006020820190506126a0600083018461267c565b92915050565b600080604083850312156126bd576126bc61245f565b5b60006126cb858286016124ad565b92505060206126dc858286016124ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061272d57607f821691505b60208210811415612741576127406126e6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061277d602083612338565b915061278882612747565b602082019050919050565b600060208201905081810360008301526127ac81612770565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061280f602883612338565b915061281a826127b3565b604082019050919050565b6000602082019050818103600083015261283e81612802565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061287f826124c2565b915061288a836124c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128bf576128be612845565b5b828201905092915050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612926602483612338565b9150612931826128ca565b604082019050919050565b6000602082019050818103600083015261295581612919565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612992601083612338565b915061299d8261295c565b602082019050919050565b600060208201905081810360008301526129c181612985565b9050919050565b7f50726f7879436f696e5f56323a204e6f74207768697465736c69737465640000600082015250565b60006129fe601e83612338565b9150612a09826129c8565b602082019050919050565b60006020820190508181036000830152612a2d816129f1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612a90602583612338565b9150612a9b82612a34565b604082019050919050565b60006020820190508181036000830152612abf81612a83565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b22602683612338565b9150612b2d82612ac6565b604082019050919050565b60006020820190508181036000830152612b5181612b15565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612bb4602483612338565b9150612bbf82612b58565b604082019050919050565b60006020820190508181036000830152612be381612ba7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c46602283612338565b9150612c5182612bea565b604082019050919050565b60006020820190508181036000830152612c7581612c39565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cd8602183612338565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d6a602283612338565b9150612d7582612d0e565b604082019050919050565b60006020820190508181036000830152612d9981612d5d565b9050919050565b6000612dab826124c2565b9150612db6836124c2565b925082821015612dc957612dc8612845565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612e30602583612338565b9150612e3b82612dd4565b604082019050919050565b60006020820190508181036000830152612e5f81612e23565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612ec2602383612338565b9150612ecd82612e66565b604082019050919050565b60006020820190508181036000830152612ef181612eb5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612f54602683612338565b9150612f5f82612ef8565b604082019050919050565b60006020820190508181036000830152612f8381612f47565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612fc0601f83612338565b9150612fcb82612f8a565b602082019050919050565b60006020820190508181036000830152612fef81612fb3565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061302c601483612338565b915061303782612ff6565b602082019050919050565b6000602082019050818103600083015261305b8161301f565b9050919050565b6000604082019050613077600083018561267c565b613084602083018461256e565b9392505050565b7f50726f7879436f696e5f56323a204c6f636b6564206164647265737365730000600082015250565b60006130c1601e83612338565b91506130cc8261308b565b602082019050919050565b600060208201905081810360008301526130f0816130b4565b9050919050565b61310081612538565b811461310b57600080fd5b50565b60008151905061311d816130f7565b92915050565b6000602082840312156131395761313861245f565b5b60006131478482850161310e565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006131ac602a83612338565b91506131b782613150565b604082019050919050565b600060208201905081810360008301526131db8161319f565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061323e602683612338565b9150613249826131e2565b604082019050919050565b6000602082019050818103600083015261326d81613231565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006132aa601d83612338565b91506132b582613274565b602082019050919050565b600060208201905081810360008301526132d98161329d565b9050919050565b600081519050919050565b600081905092915050565b6000613301826132e0565b61330b81856132eb565b935061331b8185602086016123c0565b80840191505092915050565b600061333382846132f6565b91508190509291505056fea264697066735822122020781e63dc8d56143737d1614863f796a3289ed57c4cc550219233491aaa4f7e64736f6c634300080a0033000000000000000000000000d1f4ec7ff772bc382c2345cc4f57dc4bf13685a900000000000000000000000000000000000000000001fa505ea6031248600000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d1f4ec7ff772bc382c2345cc4f57dc4bf13685a900000000000000000000000000000000000000000001fa505ea6031248600000

-----Decoded View---------------
Arg [0] : _treasuryWallet (address): 0xd1f4ec7ff772bc382c2345cc4f57dc4bf13685a9
Arg [1] : _amount (uint256): 2391000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d1f4ec7ff772bc382c2345cc4f57dc4bf13685a9
Arg [1] : 00000000000000000000000000000000000000000001fa505ea6031248600000


Deployed ByteCode Sourcemap

35019:1987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36634:35;;;;;;;;;;:::i;:::-;;;;;;;;35019:1987;;;;21117:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23284:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35700:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22237;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23935:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22079:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24836:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35816:69;;;;;;;;;;;;;:::i;:::-;;35591:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31646:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35119:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17800:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22408:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34144:103;;;;;;;;;;;;;:::i;:::-;;32056:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35365:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36087:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33493:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21336:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35893:72;;;;;;;;;;;;;:::i;:::-;;35166:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25554:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22748:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36420:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36207:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22986:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35973:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36312:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34402:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21117:100;21171:13;21204:5;21197:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21117:100;:::o;23284:169::-;23367:4;23384:39;23393:12;:10;:12::i;:::-;23407:7;23416:6;23384:8;:39::i;:::-;23441:4;23434:11;;23284:169;;;;:::o;35700:108::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35781:19:::1;35787:4;35793:6;35781:5;:19::i;:::-;35700:108:::0;;:::o;22237:::-;22298:7;22325:12;;22318:19;;22237:108;:::o;23935:492::-;24075:4;24092:36;24102:6;24110:9;24121:6;24092:9;:36::i;:::-;24141:24;24168:11;:19;24180:6;24168:19;;;;;;;;;;;;;;;:33;24188:12;:10;:12::i;:::-;24168:33;;;;;;;;;;;;;;;;24141:60;;24240:6;24220:16;:26;;24212:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;24327:57;24336:6;24344:12;:10;:12::i;:::-;24377:6;24358:16;:25;24327:8;:57::i;:::-;24415:4;24408:11;;;23935:492;;;;;:::o;22079:93::-;22137:5;22162:2;22155:9;;22079:93;:::o;24836:215::-;24924:4;24941:80;24950:12;:10;:12::i;:::-;24964:7;25010:10;24973:11;:25;24985:12;:10;:12::i;:::-;24973:25;;;;;;;;;;;;;;;:34;24999:7;24973:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;24941:8;:80::i;:::-;25039:4;25032:11;;24836:215;;;;:::o;35816:69::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35869:8:::1;:6;:8::i;:::-;35816:69::o:0;35591:101::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35665:19:::1;35671:4;35677:6;35665:5;:19::i;:::-;35591:101:::0;;:::o;31646:91::-;31702:27;31708:12;:10;:12::i;:::-;31722:6;31702:5;:27::i;:::-;31646:91;:::o;35119:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;17800:86::-;17847:4;17871:7;;;;;;;;;;;17864:14;;17800:86;:::o;22408:127::-;22482:7;22509:9;:18;22519:7;22509:18;;;;;;;;;;;;;;;;22502:25;;22408:127;;;:::o;34144:103::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34209:30:::1;34236:1;34209:18;:30::i;:::-;34144:103::o:0;32056:368::-;32133:24;32160:32;32170:7;32179:12;:10;:12::i;:::-;32160:9;:32::i;:::-;32133:59;;32231:6;32211:16;:26;;32203:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32314:58;32323:7;32332:12;:10;:12::i;:::-;32365:6;32346:16;:25;32314:8;:58::i;:::-;32394:22;32400:7;32409:6;32394:5;:22::i;:::-;32122:302;32056:368;;:::o;35365:218::-;18126:8;:6;:8::i;:::-;18125:9;18117:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35487:9:::1;:23;35497:12;:10;:12::i;:::-;35487:23;;;;;;;;;;;;;;;;;;;;;;;;;35479:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35556:19;35562:4;35568:6;35556:5;:19::i;:::-;35365:218:::0;;:::o;36087:112::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36186:5:::1;36164:9;:19;36174:8;36164:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;36087:112:::0;:::o;33493:87::-;33539:7;33566:6;;;;;;;;;;;33559:13;;33493:87;:::o;21336:104::-;21392:13;21425:7;21418:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21336:104;:::o;35893:72::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35947:10:::1;:8;:10::i;:::-;35893:72::o:0;35166:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;25554:413::-;25647:4;25664:24;25691:11;:25;25703:12;:10;:12::i;:::-;25691:25;;;;;;;;;;;;;;;:34;25717:7;25691:34;;;;;;;;;;;;;;;;25664:61;;25764:15;25744:16;:35;;25736:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25857:67;25866:12;:10;:12::i;:::-;25880:7;25908:15;25889:16;:34;25857:8;:67::i;:::-;25955:4;25948:11;;;25554:413;;;;:::o;22748:175::-;22834:4;22851:42;22861:12;:10;:12::i;:::-;22875:9;22886:6;22851:9;:42::i;:::-;22911:4;22904:11;;22748:175;;;;:::o;36420:168::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36532:48:::1;36559:12;:10;:12::i;:::-;36573:6;36539:5;36532:26;;;;:48;;;;;:::i;:::-;36420:168:::0;;:::o;36207:97::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36292:4:::1;36274:8;:15;36283:5;36274:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36207:97:::0;:::o;22986:151::-;23075:7;23102:11;:18;23114:5;23102:18;;;;;;;;;;;;;;;:27;23121:7;23102:27;;;;;;;;;;;;;;;;23095:34;;22986:151;;;;:::o;35973:106::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36067:4:::1;36045:9;:19;36055:8;36045:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;35973:106:::0;:::o;36312:100::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36399:5:::1;36381:8;:15;36390:5;36381:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36312:100:::0;:::o;34402:201::-;33724:12;:10;:12::i;:::-;33713:23;;:7;:5;:7::i;:::-;:23;;;33705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34511:1:::1;34491:22;;:8;:22;;;;34483:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:28;34586:8;34567:18;:28::i;:::-;34402:201:::0;:::o;30218:125::-;;;;:::o;16454:98::-;16507:7;16534:10;16527:17;;16454:98;:::o;29238:380::-;29391:1;29374:19;;:5;:19;;;;29366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29472:1;29453:21;;:7;:21;;;;29445:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29556:6;29526:11;:18;29538:5;29526:18;;;;;;;;;;;;;;;:27;29545:7;29526:27;;;;;;;;;;;;;;;:36;;;;29594:7;29578:32;;29587:5;29578:32;;;29603:6;29578:32;;;;;;:::i;:::-;;;;;;;;29238:380;;;:::o;28209:591::-;28312:1;28293:21;;:7;:21;;;;28285:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28365:49;28386:7;28403:1;28407:6;28365:20;:49::i;:::-;28427:22;28452:9;:18;28462:7;28452:18;;;;;;;;;;;;;;;;28427:43;;28507:6;28489:14;:24;;28481:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28626:6;28609:14;:23;28588:9;:18;28598:7;28588:18;;;;;;;;;;;;;;;:44;;;;28670:6;28654:12;;:22;;;;;;;:::i;:::-;;;;;;;;28720:1;28694:37;;28703:7;28694:37;;;28724:6;28694:37;;;;;;:::i;:::-;;;;;;;;28744:48;28764:7;28781:1;28785:6;28744:19;:48::i;:::-;28274:526;28209:591;;:::o;26457:733::-;26615:1;26597:20;;:6;:20;;;;26589:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26699:1;26678:23;;:9;:23;;;;26670:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26754:47;26775:6;26783:9;26794:6;26754:20;:47::i;:::-;26814:21;26838:9;:17;26848:6;26838:17;;;;;;;;;;;;;;;;26814:41;;26891:6;26874:13;:23;;26866:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27012:6;26996:13;:22;26976:9;:17;26986:6;26976:17;;;;;;;;;;;;;;;:42;;;;27064:6;27040:9;:20;27050:9;27040:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;27105:9;27088:35;;27097:6;27088:35;;;27116:6;27088:35;;;;;;:::i;:::-;;;;;;;;27136:46;27156:6;27164:9;27175:6;27136:19;:46::i;:::-;26578:612;26457:733;;;:::o;18600:118::-;18126:8;:6;:8::i;:::-;18125:9;18117:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18670:4:::1;18660:7;;:14;;;;;;;;;;;;;;;;;;18690:20;18697:12;:10;:12::i;:::-;18690:20;;;;;;:::i;:::-;;;;;;;;18600:118::o:0;27477:399::-;27580:1;27561:21;;:7;:21;;;;27553:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27631:49;27660:1;27664:7;27673:6;27631:20;:49::i;:::-;27709:6;27693:12;;:22;;;;;;;:::i;:::-;;;;;;;;27748:6;27726:9;:18;27736:7;27726:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;27791:7;27770:37;;27787:1;27770:37;;;27800:6;27770:37;;;;;;:::i;:::-;;;;;;;;27820:48;27848:1;27852:7;27861:6;27820:19;:48::i;:::-;27477:399;;:::o;34763:191::-;34837:16;34856:6;;;;;;;;;;;34837:25;;34882:8;34873:6;;:17;;;;;;;;;;;;;;;;;;34937:8;34906:40;;34927:8;34906:40;;;;;;;;;;;;34826:128;34763:191;:::o;18859:120::-;18403:8;:6;:8::i;:::-;18395:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18928:5:::1;18918:7;;:15;;;;;;;;;;;;;;;;;;18949:22;18958:12;:10;:12::i;:::-;18949:22;;;;;;:::i;:::-;;;;;;;;18859:120::o:0;11744:211::-;11861:86;11881:5;11911:23;;;11936:2;11940:5;11888:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11861:19;:86::i;:::-;11744:211;;;:::o;36685:318::-;36851:8;:14;36860:4;36851:14;;;;;;;;;;;;;;;;;;;;;;;;;36850:15;:32;;;;;36870:8;:12;36879:2;36870:12;;;;;;;;;;;;;;;;;;;;;;;;;36869:13;36850:32;36828:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;36951:44;36978:4;36984:2;36988:6;36951:26;:44::i;:::-;36685:318;;;:::o;30947:124::-;;;;:::o;14317:716::-;14741:23;14767:69;14795:4;14767:69;;;;;;;;;;;;;;;;;14775:5;14767:27;;;;:69;;;;;:::i;:::-;14741:95;;14871:1;14851:10;:17;:21;14847:179;;;14948:10;14937:30;;;;;;;;;;;;:::i;:::-;14929:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14847:179;14387:646;14317:716;;:::o;3626:229::-;3763:12;3795:52;3817:6;3825:4;3831:1;3834:12;3795:21;:52::i;:::-;3788:59;;3626:229;;;;;:::o;4746:510::-;4916:12;4974:5;4949:21;:30;;4941:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5041:18;5052:6;5041:10;:18::i;:::-;5033:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5107:12;5121:23;5148:6;:11;;5167:5;5174:4;5148:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5106:73;;;;5197:51;5214:7;5223:10;5235:12;5197:16;:51::i;:::-;5190:58;;;;4746:510;;;;;;:::o;820:387::-;880:4;1088:12;1155:7;1143:20;1135:28;;1198:1;1191:4;:8;1184:15;;;820:387;;;:::o;7432:712::-;7582:12;7611:7;7607:530;;;7642:10;7635:17;;;;7607:530;7776:1;7756:10;:17;:21;7752:374;;;7954:10;7948:17;8015:15;8002:10;7998:2;7994:19;7987:44;7752:374;8097:12;8090:20;;;;;;;;;;;:::i;:::-;;;;;;;;7432:712;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:175::-;322:27;318:1;310:6;306:14;299:51;182:175;:::o;363:366::-;505:3;526:67;590:2;585:3;526:67;:::i;:::-;519:74;;602:93;691:3;602:93;:::i;:::-;720:2;715:3;711:12;704:19;;363:366;;;:::o;735:419::-;901:4;939:2;928:9;924:18;916:26;;988:9;982:4;978:20;974:1;963:9;959:17;952:47;1016:131;1142:4;1016:131;:::i;:::-;1008:139;;735:419;;;:::o;1160:99::-;1212:6;1246:5;1240:12;1230:22;;1160:99;;;:::o;1265:307::-;1333:1;1343:113;1357:6;1354:1;1351:13;1343:113;;;1442:1;1437:3;1433:11;1427:18;1423:1;1418:3;1414:11;1407:39;1379:2;1376:1;1372:10;1367:15;;1343:113;;;1474:6;1471:1;1468:13;1465:101;;;1554:1;1545:6;1540:3;1536:16;1529:27;1465:101;1314:258;1265:307;;;:::o;1578:102::-;1619:6;1670:2;1666:7;1661:2;1654:5;1650:14;1646:28;1636:38;;1578:102;;;:::o;1686:364::-;1774:3;1802:39;1835:5;1802:39;:::i;:::-;1857:71;1921:6;1916:3;1857:71;:::i;:::-;1850:78;;1937:52;1982:6;1977:3;1970:4;1963:5;1959:16;1937:52;:::i;:::-;2014:29;2036:6;2014:29;:::i;:::-;2009:3;2005:39;1998:46;;1778:272;1686:364;;;;:::o;2056:313::-;2169:4;2207:2;2196:9;2192:18;2184:26;;2256:9;2250:4;2246:20;2242:1;2231:9;2227:17;2220:47;2284:78;2357:4;2348:6;2284:78;:::i;:::-;2276:86;;2056:313;;;;:::o;2456:117::-;2565:1;2562;2555:12;2702:126;2739:7;2779:42;2772:5;2768:54;2757:65;;2702:126;;;:::o;2834:96::-;2871:7;2900:24;2918:5;2900:24;:::i;:::-;2889:35;;2834:96;;;:::o;2936:122::-;3009:24;3027:5;3009:24;:::i;:::-;3002:5;2999:35;2989:63;;3048:1;3045;3038:12;2989:63;2936:122;:::o;3064:139::-;3110:5;3148:6;3135:20;3126:29;;3164:33;3191:5;3164:33;:::i;:::-;3064:139;;;;:::o;3209:77::-;3246:7;3275:5;3264:16;;3209:77;;;:::o;3292:122::-;3365:24;3383:5;3365:24;:::i;:::-;3358:5;3355:35;3345:63;;3404:1;3401;3394:12;3345:63;3292:122;:::o;3420:139::-;3466:5;3504:6;3491:20;3482:29;;3520:33;3547:5;3520:33;:::i;:::-;3420:139;;;;:::o;3565:474::-;3633:6;3641;3690:2;3678:9;3669:7;3665:23;3661:32;3658:119;;;3696:79;;:::i;:::-;3658:119;3816:1;3841:53;3886:7;3877:6;3866:9;3862:22;3841:53;:::i;:::-;3831:63;;3787:117;3943:2;3969:53;4014:7;4005:6;3994:9;3990:22;3969:53;:::i;:::-;3959:63;;3914:118;3565:474;;;;;:::o;4045:90::-;4079:7;4122:5;4115:13;4108:21;4097:32;;4045:90;;;:::o;4141:109::-;4222:21;4237:5;4222:21;:::i;:::-;4217:3;4210:34;4141:109;;:::o;4256:210::-;4343:4;4381:2;4370:9;4366:18;4358:26;;4394:65;4456:1;4445:9;4441:17;4432:6;4394:65;:::i;:::-;4256:210;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:329::-;5938:6;5987:2;5975:9;5966:7;5962:23;5958:32;5955:119;;;5993:79;;:::i;:::-;5955:119;6113:1;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6084:117;5879:329;;;;:::o;6214:::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:474::-;6969:6;6977;7026:2;7014:9;7005:7;7001:23;6997:32;6994:119;;;7032:79;;:::i;:::-;6994:119;7152:1;7177:53;7222:7;7213:6;7202:9;7198:22;7177:53;:::i;:::-;7167:63;;7123:117;7279:2;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7250:118;6901:474;;;;;:::o;7381:180::-;7429:77;7426:1;7419:88;7526:4;7523:1;7516:15;7550:4;7547:1;7540:15;7567:320;7611:6;7648:1;7642:4;7638:12;7628:22;;7695:1;7689:4;7685:12;7716:18;7706:81;;7772:4;7764:6;7760:17;7750:27;;7706:81;7834:2;7826:6;7823:14;7803:18;7800:38;7797:84;;;7853:18;;:::i;:::-;7797:84;7618:269;7567:320;;;:::o;7893:182::-;8033:34;8029:1;8021:6;8017:14;8010:58;7893:182;:::o;8081:366::-;8223:3;8244:67;8308:2;8303:3;8244:67;:::i;:::-;8237:74;;8320:93;8409:3;8320:93;:::i;:::-;8438:2;8433:3;8429:12;8422:19;;8081:366;;;:::o;8453:419::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8706:9;8700:4;8696:20;8692:1;8681:9;8677:17;8670:47;8734:131;8860:4;8734:131;:::i;:::-;8726:139;;8453:419;;;:::o;8878:227::-;9018:34;9014:1;9006:6;9002:14;8995:58;9087:10;9082:2;9074:6;9070:15;9063:35;8878:227;:::o;9111:366::-;9253:3;9274:67;9338:2;9333:3;9274:67;:::i;:::-;9267:74;;9350:93;9439:3;9350:93;:::i;:::-;9468:2;9463:3;9459:12;9452:19;;9111:366;;;:::o;9483:419::-;9649:4;9687:2;9676:9;9672:18;9664:26;;9736:9;9730:4;9726:20;9722:1;9711:9;9707:17;9700:47;9764:131;9890:4;9764:131;:::i;:::-;9756:139;;9483:419;;;:::o;9908:180::-;9956:77;9953:1;9946:88;10053:4;10050:1;10043:15;10077:4;10074:1;10067:15;10094:305;10134:3;10153:20;10171:1;10153:20;:::i;:::-;10148:25;;10187:20;10205:1;10187:20;:::i;:::-;10182:25;;10341:1;10273:66;10269:74;10266:1;10263:81;10260:107;;;10347:18;;:::i;:::-;10260:107;10391:1;10388;10384:9;10377:16;;10094:305;;;;:::o;10405:223::-;10545:34;10541:1;10533:6;10529:14;10522:58;10614:6;10609:2;10601:6;10597:15;10590:31;10405:223;:::o;10634:366::-;10776:3;10797:67;10861:2;10856:3;10797:67;:::i;:::-;10790:74;;10873:93;10962:3;10873:93;:::i;:::-;10991:2;10986:3;10982:12;10975:19;;10634:366;;;:::o;11006:419::-;11172:4;11210:2;11199:9;11195:18;11187:26;;11259:9;11253:4;11249:20;11245:1;11234:9;11230:17;11223:47;11287:131;11413:4;11287:131;:::i;:::-;11279:139;;11006:419;;;:::o;11431:166::-;11571:18;11567:1;11559:6;11555:14;11548:42;11431:166;:::o;11603:366::-;11745:3;11766:67;11830:2;11825:3;11766:67;:::i;:::-;11759:74;;11842:93;11931:3;11842:93;:::i;:::-;11960:2;11955:3;11951:12;11944:19;;11603:366;;;:::o;11975:419::-;12141:4;12179:2;12168:9;12164:18;12156:26;;12228:9;12222:4;12218:20;12214:1;12203:9;12199:17;12192:47;12256:131;12382:4;12256:131;:::i;:::-;12248:139;;11975:419;;;:::o;12400:180::-;12540:32;12536:1;12528:6;12524:14;12517:56;12400:180;:::o;12586:366::-;12728:3;12749:67;12813:2;12808:3;12749:67;:::i;:::-;12742:74;;12825:93;12914:3;12825:93;:::i;:::-;12943:2;12938:3;12934:12;12927:19;;12586:366;;;:::o;12958:419::-;13124:4;13162:2;13151:9;13147:18;13139:26;;13211:9;13205:4;13201:20;13197:1;13186:9;13182:17;13175:47;13239:131;13365:4;13239:131;:::i;:::-;13231:139;;12958:419;;;:::o;13383:224::-;13523:34;13519:1;13511:6;13507:14;13500:58;13592:7;13587:2;13579:6;13575:15;13568:32;13383:224;:::o;13613:366::-;13755:3;13776:67;13840:2;13835:3;13776:67;:::i;:::-;13769:74;;13852:93;13941:3;13852:93;:::i;:::-;13970:2;13965:3;13961:12;13954:19;;13613:366;;;:::o;13985:419::-;14151:4;14189:2;14178:9;14174:18;14166:26;;14238:9;14232:4;14228:20;14224:1;14213:9;14209:17;14202:47;14266:131;14392:4;14266:131;:::i;:::-;14258:139;;13985:419;;;:::o;14410:225::-;14550:34;14546:1;14538:6;14534:14;14527:58;14619:8;14614:2;14606:6;14602:15;14595:33;14410:225;:::o;14641:366::-;14783:3;14804:67;14868:2;14863:3;14804:67;:::i;:::-;14797:74;;14880:93;14969:3;14880:93;:::i;:::-;14998:2;14993:3;14989:12;14982:19;;14641:366;;;:::o;15013:419::-;15179:4;15217:2;15206:9;15202:18;15194:26;;15266:9;15260:4;15256:20;15252:1;15241:9;15237:17;15230:47;15294:131;15420:4;15294:131;:::i;:::-;15286:139;;15013:419;;;:::o;15438:223::-;15578:34;15574:1;15566:6;15562:14;15555:58;15647:6;15642:2;15634:6;15630:15;15623:31;15438:223;:::o;15667:366::-;15809:3;15830:67;15894:2;15889:3;15830:67;:::i;:::-;15823:74;;15906:93;15995:3;15906:93;:::i;:::-;16024:2;16019:3;16015:12;16008:19;;15667:366;;;:::o;16039:419::-;16205:4;16243:2;16232:9;16228:18;16220:26;;16292:9;16286:4;16282:20;16278:1;16267:9;16263:17;16256:47;16320:131;16446:4;16320:131;:::i;:::-;16312:139;;16039:419;;;:::o;16464:221::-;16604:34;16600:1;16592:6;16588:14;16581:58;16673:4;16668:2;16660:6;16656:15;16649:29;16464:221;:::o;16691:366::-;16833:3;16854:67;16918:2;16913:3;16854:67;:::i;:::-;16847:74;;16930:93;17019:3;16930:93;:::i;:::-;17048:2;17043:3;17039:12;17032:19;;16691:366;;;:::o;17063:419::-;17229:4;17267:2;17256:9;17252:18;17244:26;;17316:9;17310:4;17306:20;17302:1;17291:9;17287:17;17280:47;17344:131;17470:4;17344:131;:::i;:::-;17336:139;;17063:419;;;:::o;17488:220::-;17628:34;17624:1;17616:6;17612:14;17605:58;17697:3;17692:2;17684:6;17680:15;17673:28;17488:220;:::o;17714:366::-;17856:3;17877:67;17941:2;17936:3;17877:67;:::i;:::-;17870:74;;17953:93;18042:3;17953:93;:::i;:::-;18071:2;18066:3;18062:12;18055:19;;17714:366;;;:::o;18086:419::-;18252:4;18290:2;18279:9;18275:18;18267:26;;18339:9;18333:4;18329:20;18325:1;18314:9;18310:17;18303:47;18367:131;18493:4;18367:131;:::i;:::-;18359:139;;18086:419;;;:::o;18511:221::-;18651:34;18647:1;18639:6;18635:14;18628:58;18720:4;18715:2;18707:6;18703:15;18696:29;18511:221;:::o;18738:366::-;18880:3;18901:67;18965:2;18960:3;18901:67;:::i;:::-;18894:74;;18977:93;19066:3;18977:93;:::i;:::-;19095:2;19090:3;19086:12;19079:19;;18738:366;;;:::o;19110:419::-;19276:4;19314:2;19303:9;19299:18;19291:26;;19363:9;19357:4;19353:20;19349:1;19338:9;19334:17;19327:47;19391:131;19517:4;19391:131;:::i;:::-;19383:139;;19110:419;;;:::o;19535:191::-;19575:4;19595:20;19613:1;19595:20;:::i;:::-;19590:25;;19629:20;19647:1;19629:20;:::i;:::-;19624:25;;19668:1;19665;19662:8;19659:34;;;19673:18;;:::i;:::-;19659:34;19718:1;19715;19711:9;19703:17;;19535:191;;;;:::o;19732:224::-;19872:34;19868:1;19860:6;19856:14;19849:58;19941:7;19936:2;19928:6;19924:15;19917:32;19732:224;:::o;19962:366::-;20104:3;20125:67;20189:2;20184:3;20125:67;:::i;:::-;20118:74;;20201:93;20290:3;20201:93;:::i;:::-;20319:2;20314:3;20310:12;20303:19;;19962:366;;;:::o;20334:419::-;20500:4;20538:2;20527:9;20523:18;20515:26;;20587:9;20581:4;20577:20;20573:1;20562:9;20558:17;20551:47;20615:131;20741:4;20615:131;:::i;:::-;20607:139;;20334:419;;;:::o;20759:222::-;20899:34;20895:1;20887:6;20883:14;20876:58;20968:5;20963:2;20955:6;20951:15;20944:30;20759:222;:::o;20987:366::-;21129:3;21150:67;21214:2;21209:3;21150:67;:::i;:::-;21143:74;;21226:93;21315:3;21226:93;:::i;:::-;21344:2;21339:3;21335:12;21328:19;;20987:366;;;:::o;21359:419::-;21525:4;21563:2;21552:9;21548:18;21540:26;;21612:9;21606:4;21602:20;21598:1;21587:9;21583:17;21576:47;21640:131;21766:4;21640:131;:::i;:::-;21632:139;;21359:419;;;:::o;21784:225::-;21924:34;21920:1;21912:6;21908:14;21901:58;21993:8;21988:2;21980:6;21976:15;21969:33;21784:225;:::o;22015:366::-;22157:3;22178:67;22242:2;22237:3;22178:67;:::i;:::-;22171:74;;22254:93;22343:3;22254:93;:::i;:::-;22372:2;22367:3;22363:12;22356:19;;22015:366;;;:::o;22387:419::-;22553:4;22591:2;22580:9;22576:18;22568:26;;22640:9;22634:4;22630:20;22626:1;22615:9;22611:17;22604:47;22668:131;22794:4;22668:131;:::i;:::-;22660:139;;22387:419;;;:::o;22812:181::-;22952:33;22948:1;22940:6;22936:14;22929:57;22812:181;:::o;22999:366::-;23141:3;23162:67;23226:2;23221:3;23162:67;:::i;:::-;23155:74;;23238:93;23327:3;23238:93;:::i;:::-;23356:2;23351:3;23347:12;23340:19;;22999:366;;;:::o;23371:419::-;23537:4;23575:2;23564:9;23560:18;23552:26;;23624:9;23618:4;23614:20;23610:1;23599:9;23595:17;23588:47;23652:131;23778:4;23652:131;:::i;:::-;23644:139;;23371:419;;;:::o;23796:170::-;23936:22;23932:1;23924:6;23920:14;23913:46;23796:170;:::o;23972:366::-;24114:3;24135:67;24199:2;24194:3;24135:67;:::i;:::-;24128:74;;24211:93;24300:3;24211:93;:::i;:::-;24329:2;24324:3;24320:12;24313:19;;23972:366;;;:::o;24344:419::-;24510:4;24548:2;24537:9;24533:18;24525:26;;24597:9;24591:4;24587:20;24583:1;24572:9;24568:17;24561:47;24625:131;24751:4;24625:131;:::i;:::-;24617:139;;24344:419;;;:::o;24769:332::-;24890:4;24928:2;24917:9;24913:18;24905:26;;24941:71;25009:1;24998:9;24994:17;24985:6;24941:71;:::i;:::-;25022:72;25090:2;25079:9;25075:18;25066:6;25022:72;:::i;:::-;24769:332;;;;;:::o;25107:180::-;25247:32;25243:1;25235:6;25231:14;25224:56;25107:180;:::o;25293:366::-;25435:3;25456:67;25520:2;25515:3;25456:67;:::i;:::-;25449:74;;25532:93;25621:3;25532:93;:::i;:::-;25650:2;25645:3;25641:12;25634:19;;25293:366;;;:::o;25665:419::-;25831:4;25869:2;25858:9;25854:18;25846:26;;25918:9;25912:4;25908:20;25904:1;25893:9;25889:17;25882:47;25946:131;26072:4;25946:131;:::i;:::-;25938:139;;25665:419;;;:::o;26090:116::-;26160:21;26175:5;26160:21;:::i;:::-;26153:5;26150:32;26140:60;;26196:1;26193;26186:12;26140:60;26090:116;:::o;26212:137::-;26266:5;26297:6;26291:13;26282:22;;26313:30;26337:5;26313:30;:::i;:::-;26212:137;;;;:::o;26355:345::-;26422:6;26471:2;26459:9;26450:7;26446:23;26442:32;26439:119;;;26477:79;;:::i;:::-;26439:119;26597:1;26622:61;26675:7;26666:6;26655:9;26651:22;26622:61;:::i;:::-;26612:71;;26568:125;26355:345;;;;:::o;26706:229::-;26846:34;26842:1;26834:6;26830:14;26823:58;26915:12;26910:2;26902:6;26898:15;26891:37;26706:229;:::o;26941:366::-;27083:3;27104:67;27168:2;27163:3;27104:67;:::i;:::-;27097:74;;27180:93;27269:3;27180:93;:::i;:::-;27298:2;27293:3;27289:12;27282:19;;26941:366;;;:::o;27313:419::-;27479:4;27517:2;27506:9;27502:18;27494:26;;27566:9;27560:4;27556:20;27552:1;27541:9;27537:17;27530:47;27594:131;27720:4;27594:131;:::i;:::-;27586:139;;27313:419;;;:::o;27738:225::-;27878:34;27874:1;27866:6;27862:14;27855:58;27947:8;27942:2;27934:6;27930:15;27923:33;27738:225;:::o;27969:366::-;28111:3;28132:67;28196:2;28191:3;28132:67;:::i;:::-;28125:74;;28208:93;28297:3;28208:93;:::i;:::-;28326:2;28321:3;28317:12;28310:19;;27969:366;;;:::o;28341:419::-;28507:4;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28341:419;;;:::o;28766:179::-;28906:31;28902:1;28894:6;28890:14;28883:55;28766:179;:::o;28951:366::-;29093:3;29114:67;29178:2;29173:3;29114:67;:::i;:::-;29107:74;;29190:93;29279:3;29190:93;:::i;:::-;29308:2;29303:3;29299:12;29292:19;;28951:366;;;:::o;29323:419::-;29489:4;29527:2;29516:9;29512:18;29504:26;;29576:9;29570:4;29566:20;29562:1;29551:9;29547:17;29540:47;29604:131;29730:4;29604:131;:::i;:::-;29596:139;;29323:419;;;:::o;29748:98::-;29799:6;29833:5;29827:12;29817:22;;29748:98;;;:::o;29852:147::-;29953:11;29990:3;29975:18;;29852:147;;;;:::o;30005:373::-;30109:3;30137:38;30169:5;30137:38;:::i;:::-;30191:88;30272:6;30267:3;30191:88;:::i;:::-;30184:95;;30288:52;30333:6;30328:3;30321:4;30314:5;30310:16;30288:52;:::i;:::-;30365:6;30360:3;30356:16;30349:23;;30113:265;30005:373;;;;:::o;30384:271::-;30514:3;30536:93;30625:3;30616:6;30536:93;:::i;:::-;30529:100;;30646:3;30639:10;;30384:271;;;;:::o

Swarm Source

ipfs://20781e63dc8d56143737d1614863f796a3289ed57c4cc550219233491aaa4f7e
Loading