Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 509 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 22659145 | 3 hrs ago | IN | 0 ETH | 0.00012852 | ||||
Transfer | 22659142 | 3 hrs ago | IN | 0 ETH | 0.00030762 | ||||
Approve | 22659116 | 3 hrs ago | IN | 0 ETH | 0.00144081 | ||||
Approve | 22658914 | 3 hrs ago | IN | 0 ETH | 0.00001254 | ||||
Approve | 22658910 | 3 hrs ago | IN | 0 ETH | 0.00002066 | ||||
Approve | 22657868 | 7 hrs ago | IN | 0 ETH | 0.00020484 | ||||
Approve | 22657227 | 9 hrs ago | IN | 0 ETH | 0.00004892 | ||||
Approve | 22656686 | 11 hrs ago | IN | 0 ETH | 0.00001835 | ||||
Approve | 22656677 | 11 hrs ago | IN | 0 ETH | 0.00003197 | ||||
Approve | 22656263 | 12 hrs ago | IN | 0 ETH | 0.00005017 | ||||
Approve | 22653106 | 23 hrs ago | IN | 0 ETH | 0.00032416 | ||||
Approve | 22650573 | 31 hrs ago | IN | 0 ETH | 0.00007151 | ||||
Approve | 22650275 | 32 hrs ago | IN | 0 ETH | 0.00017462 | ||||
Approve | 22649048 | 36 hrs ago | IN | 0 ETH | 0.00011492 | ||||
Approve | 22648981 | 37 hrs ago | IN | 0 ETH | 0.00010834 | ||||
Approve | 22648663 | 38 hrs ago | IN | 0 ETH | 0.00018751 | ||||
Approve | 22648449 | 38 hrs ago | IN | 0 ETH | 0.00027344 | ||||
Approve | 22648346 | 39 hrs ago | IN | 0 ETH | 0.00011363 | ||||
Approve | 22648296 | 39 hrs ago | IN | 0 ETH | 0.00020728 | ||||
Approve | 22648141 | 39 hrs ago | IN | 0 ETH | 0.00007734 | ||||
Transfer | 22648097 | 40 hrs ago | IN | 0 ETH | 0.00026612 | ||||
Approve | 22648013 | 40 hrs ago | IN | 0 ETH | 0.00023265 | ||||
Transfer | 22647947 | 40 hrs ago | IN | 0 ETH | 0.00017591 | ||||
Approve | 22647461 | 42 hrs ago | IN | 0 ETH | 0.00149704 | ||||
Approve | 22647359 | 42 hrs ago | IN | 0 ETH | 0.00014358 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 22659142 | 3 hrs ago | 0.04240609 ETH | ||||
Transfer | 22659142 | 3 hrs ago | 0.04240609 ETH | ||||
Transfer | 22659142 | 3 hrs ago | 0.08481219 ETH | ||||
Transfer | 22658928 | 3 hrs ago | 0.02674036 ETH | ||||
Transfer | 22658928 | 3 hrs ago | 0.02674036 ETH | ||||
Transfer | 22658928 | 3 hrs ago | 0.05348072 ETH | ||||
Transfer | 22656100 | 13 hrs ago | 0.04326454 ETH | ||||
Transfer | 22656100 | 13 hrs ago | 0.04326454 ETH | ||||
Transfer | 22656100 | 13 hrs ago | 0.08652909 ETH | ||||
Transfer | 22652934 | 23 hrs ago | 0.03533242 ETH | ||||
Transfer | 22652934 | 23 hrs ago | 0.03533242 ETH | ||||
Transfer | 22652934 | 23 hrs ago | 0.07066485 ETH | ||||
Transfer | 22648802 | 37 hrs ago | 0.03429572 ETH | ||||
Transfer | 22648802 | 37 hrs ago | 0.03429572 ETH | ||||
Transfer | 22648802 | 37 hrs ago | 0.06859144 ETH | ||||
Transfer | 22648185 | 39 hrs ago | 0.05095861 ETH | ||||
Transfer | 22648185 | 39 hrs ago | 0.05095861 ETH | ||||
Transfer | 22648185 | 39 hrs ago | 0.10191722 ETH | ||||
Transfer | 22647925 | 40 hrs ago | 0.04878873 ETH | ||||
Transfer | 22647925 | 40 hrs ago | 0.04878873 ETH | ||||
Transfer | 22647925 | 40 hrs ago | 0.09757746 ETH | ||||
Transfer | 22647465 | 42 hrs ago | 0.03247483 ETH | ||||
Transfer | 22647465 | 42 hrs ago | 0.03247483 ETH | ||||
Transfer | 22647465 | 42 hrs ago | 0.06494967 ETH | ||||
Transfer | 22647359 | 42 hrs ago | 0.02315201 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CloakToken
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-05-13 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.28; // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); } // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ 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); } // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance( address sender, uint256 balance, uint256 needed ); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`'s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance( address spender, uint256 allowance, uint256 needed ); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`'s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance( address sender, uint256 balance, uint256 needed, uint256 tokenId ); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`'s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) /** * @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}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { 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}. * * 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 default value returned by this function, unless * it's 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 value ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom( address from, address to, uint256 value ) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve( address owner, address spender, uint256 value, bool emitEvent ) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 value ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance( spender, currentAllowance, value ); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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); } } interface IUniswapV2Factory { function createPair( address tokenA, address tokenB ) external returns (address pair); } interface IUniswapV2Router { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity ^0.8.0; contract CloakToken is Ownable, ERC20 { IUniswapV2Router public immutable swapRouter; address public constant ZERO_ADDRESS = address(0); address public constant BURN_ADDRESS = address(0xdEaD); address public immutable swapPair; address public taxWallet; address public devWallet; bool public limitsEnabled; bool public feesEnabled; bool private inSwapProcess; bool public isActivated; uint256 public activationBlock; uint256 public activationTime; uint256 private lastSwapBlock; uint256 public constant MAX_TOTAL_FEE = 35; uint256 public maxBuyLimit; uint256 public maxSellLimit; uint256 public maxWalletLimit; uint256 public tokensForSwap; uint256 public buyTax; uint256 public sellTax; uint256 public transferTax; mapping(address => bool) public excludedFromFees; mapping(address => bool) public excludedFromLimits; mapping(address => bool) public marketPairs; event Activation(); event TaxWalletUpdated(address newWallet, address oldWallet); event DevWalletUpdated(address newWallet, address oldWallet); event LimitsStatusChanged(bool status); event FeesStatusChanged(bool status); event MaxBuyLimitUpdated(uint256 amount); event MaxSellLimitUpdated(uint256 amount); event MaxWalletLimitUpdated(uint256 amount); event TokensForSwapUpdated(uint256 newValue, uint256 oldValue); event BuyTaxUpdated(uint256 newValue, uint256 oldValue); event SellTaxUpdated(uint256 newValue, uint256 oldValue); event TransferTaxUpdated(uint256 newValue, uint256 oldValue); event ExcludedFromFees(address account, bool isExcluded); event ExcludedFromLimits(address account, bool isExcluded); event MarketPairStatusUpdated(address pair, bool value); event StuckTokensWithdrawn(address token, uint256 amount); error AlreadyActivated(); error InvalidAddress(); error AmountTooSmall(); error AmountTooLarge(); error FeeTooHigh(); error PairAlreadySet(); error NoETHToWithdraw(); error NoTokensToWithdraw(); error ETHWithdrawalFailed(); error ExceedsMaxBuyLimit(); error ExceedsMaxSellLimit(); error ExceedsMaxWalletLimit(); error NotActivated(); modifier lockSwapProcess() { inSwapProcess = true; _; inSwapProcess = false; } constructor() Ownable(msg.sender) ERC20("CLOAK", "CLOAK") { address owner = msg.sender; _mint(owner, 100_000_000 ether); uint256 totalSupplyTokens = totalSupply(); // Set wallet addresses taxWallet = 0x01957900Bd3D9788682bc590D5a38248BAc656dd; devWallet = 0x64B7FaBdd619B9020859a19f1151a86A9c867bcA; maxBuyLimit = (totalSupplyTokens * 155) / 10000; maxSellLimit = (totalSupplyTokens * 155) / 10000; maxWalletLimit = (totalSupplyTokens * 155) / 10000; tokensForSwap = (totalSupplyTokens * 5) / 10000; limitsEnabled = true; feesEnabled = true; buyTax = 25; sellTax = 25; transferTax = 0; swapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); swapPair = IUniswapV2Factory(swapRouter.factory()).createPair( address(this), swapRouter.WETH() ); SetMarketPair(swapPair, true); _approve(address(this), address(swapRouter), type(uint256).max); _excludeFromFees(address(this), true); _excludeFromFees(BURN_ADDRESS, true); _excludeFromFees(owner, true); _excludeFromFees(taxWallet, true); _excludeFromFees(devWallet, true); ExcludeFromLimits(address(this), true); ExcludeFromLimits(BURN_ADDRESS, true); ExcludeFromLimits(owner, true); ExcludeFromLimits(taxWallet, true); ExcludeFromLimits(devWallet, true); } receive() external payable {} fallback() external payable {} function _transferOwnership(address newOwner) internal override { address oldOwner = owner(); if (oldOwner != ZERO_ADDRESS) { _excludeFromFees(oldOwner, false); ExcludeFromLimits(oldOwner, false); } _excludeFromFees(newOwner, true); ExcludeFromLimits(newOwner, true); super._transferOwnership(newOwner); } function enableTrading() external onlyOwner { require(!isActivated, AlreadyActivated()); isActivated = true; activationBlock = block.number; activationTime = block.timestamp; emit Activation(); } function updateTaxWallet(address _taxWallet) external onlyOwner { require(_taxWallet != ZERO_ADDRESS, InvalidAddress()); address oldWallet = taxWallet; taxWallet = _taxWallet; emit TaxWalletUpdated(taxWallet, oldWallet); } function updateDevWallet(address _devWallet) external onlyOwner { require(_devWallet != ZERO_ADDRESS, InvalidAddress()); address oldWallet = devWallet; devWallet = _devWallet; emit DevWalletUpdated(devWallet, oldWallet); } function changeLimitsEnabled(bool value) external onlyOwner { limitsEnabled = value; emit LimitsStatusChanged(value); } function setFeesEnabled(bool value) external onlyOwner { feesEnabled = value; emit FeesStatusChanged(value); } function setMaxBuyLimit(uint256 amount) external onlyOwner { require(amount >= ((totalSupply() * 2) / 1000), AmountTooSmall()); maxBuyLimit = amount; emit MaxBuyLimitUpdated(maxBuyLimit); } function setMaxSellLimit(uint256 amount) external onlyOwner { require(amount >= ((totalSupply() * 2) / 1000), AmountTooSmall()); maxSellLimit = amount; emit MaxSellLimitUpdated(maxSellLimit); } function setMaxWalletLimit(uint256 amount) external onlyOwner { require(amount >= ((totalSupply() * 3) / 1000), AmountTooSmall()); maxWalletLimit = amount; emit MaxWalletLimitUpdated(maxWalletLimit); } function setTokensForSwap(uint256 amount) external onlyOwner { uint256 totalSupplyTokens = totalSupply(); require(amount >= (totalSupplyTokens * 1) / 1000000, AmountTooSmall()); require(amount <= (totalSupplyTokens * 5) / 1000, AmountTooLarge()); uint256 oldValue = tokensForSwap; tokensForSwap = amount; emit TokensForSwapUpdated(amount, oldValue); } function setTax(uint256 _buyTax, uint256 _sellTax) external onlyOwner { require(_buyTax <= MAX_TOTAL_FEE, FeeTooHigh()); require(_sellTax <= MAX_TOTAL_FEE, FeeTooHigh()); buyTax = _buyTax; sellTax = _sellTax; } function changeTransferTax(uint256 _transferTax) external onlyOwner { require(_transferTax <= MAX_TOTAL_FEE, FeeTooHigh()); uint256 oldValue = transferTax; transferTax = _transferTax; emit TransferTaxUpdated(_transferTax, oldValue); } function excludeFromFees( address[] calldata accounts, bool value ) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _excludeFromFees(accounts[i], value); } } function excludeFromLimits( address[] calldata accounts, bool value ) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { ExcludeFromLimits(accounts[i], value); } } function setMarketPair(address pair, bool value) external onlyOwner { require(!marketPairs[pair], PairAlreadySet()); SetMarketPair(pair, value); } function clearStuckTokens(address _token) external onlyOwner { address owner = msg.sender; uint256 amount; if (_token == ZERO_ADDRESS) { bool success; amount = address(this).balance; require(amount > 0, NoETHToWithdraw()); (success, ) = address(owner).call{value: amount}(""); require(success, ETHWithdrawalFailed()); } else { amount = IERC20(_token).balanceOf(address(this)); require(amount > 0, NoTokensToWithdraw()); IERC20(_token).transfer(msg.sender, amount); } emit StuckTokensWithdrawn(_token, amount); } function _update( address from, address to, uint256 amount ) internal virtual override { require( isActivated || excludedFromLimits[from] || excludedFromLimits[to], NotActivated() ); bool applyLimits = limitsEnabled && !inSwapProcess && !(excludedFromLimits[from] || excludedFromLimits[to]); if (applyLimits) { if ( from != owner() && to != owner() && to != ZERO_ADDRESS && to != BURN_ADDRESS ) { if (marketPairs[from] && !excludedFromLimits[to]) { require(amount <= maxBuyLimit, ExceedsMaxBuyLimit()); require( amount + balanceOf(to) <= maxWalletLimit, ExceedsMaxWalletLimit() ); } else if (marketPairs[to] && !excludedFromLimits[from]) { require(amount <= maxSellLimit, ExceedsMaxSellLimit()); } else if (!excludedFromLimits[to]) { require( amount + balanceOf(to) <= maxWalletLimit, ExceedsMaxWalletLimit() ); } } } bool applyFee = feesEnabled && !inSwapProcess && !(excludedFromFees[from] || excludedFromFees[to]); if (applyFee) { uint256 feeAmount = 0; if (marketPairs[to] && sellTax > 0) { feeAmount = (amount * sellTax) / 100; } else if (marketPairs[from] && buyTax > 0) { feeAmount = (amount * buyTax) / 100; } else if ( !marketPairs[to] && !marketPairs[from] && transferTax > 0 ) { feeAmount = (amount * transferTax) / 100; } if (feeAmount > 0) { amount -= feeAmount; super._update(from, address(this), feeAmount); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= tokensForSwap; if (applyFee && !marketPairs[from] && canSwap) { if (block.number > lastSwapBlock && block.number > activationBlock) { _swapTokens(contractTokenBalance); lastSwapBlock = block.number; } } super._update(from, to, amount); } function _swapTokens(uint256 tokenAmount) internal virtual lockSwapProcess { bool success; address[] memory path = new address[](2); path[0] = address(this); path[1] = swapRouter.WETH(); uint256 maxSwapAmount = tokensForSwap * 20; if (tokenAmount > maxSwapAmount) { tokenAmount = maxSwapAmount; } swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); uint256 ethBalance = address(this).balance; uint256 ethForRevenue = ethBalance / 2; uint256 ethForDevelopment = ethBalance - ethForRevenue; (success, ) = address(taxWallet).call{value: ethForRevenue}(""); (success, ) = address(devWallet).call{value: ethForDevelopment}(""); } function _excludeFromFees(address account, bool value) internal virtual { excludedFromFees[account] = value; emit ExcludedFromFees(account, value); } function ExcludeFromLimits(address account, bool value) internal virtual { excludedFromLimits[account] = value; emit ExcludedFromLimits(account, value); } function SetMarketPair(address pair, bool value) internal virtual { marketPairs[pair] = value; emit MarketPairStatusUpdated(pair, value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyActivated","type":"error"},{"inputs":[],"name":"AmountTooLarge","type":"error"},{"inputs":[],"name":"AmountTooSmall","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ETHWithdrawalFailed","type":"error"},{"inputs":[],"name":"ExceedsMaxBuyLimit","type":"error"},{"inputs":[],"name":"ExceedsMaxSellLimit","type":"error"},{"inputs":[],"name":"ExceedsMaxWalletLimit","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NoETHToWithdraw","type":"error"},{"inputs":[],"name":"NoTokensToWithdraw","type":"error"},{"inputs":[],"name":"NotActivated","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PairAlreadySet","type":"error"},{"anonymous":false,"inputs":[],"name":"Activation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitsStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"MarketPairStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxBuyLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxSellLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StuckTokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TokensForSwapUpdated","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":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TransferTaxUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"changeLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTax","type":"uint256"}],"name":"changeTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTokensForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"updateTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561000f575f5ffd5b506040518060400160405280600581526020017f434c4f414b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f434c4f414b000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ed575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100e49190611ac9565b60405180910390fd5b6100fc8161061560201b60201c565b50816004908161010c9190611d1f565b50806005908161011c9190611d1f565b5050505f33905061013e816a52b7d2dcc80cd2e40000006106af60201b60201c565b5f61014d61073460201b60201c565b90507301957900bd3d9788682bc590d5a38248bac656dd60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507364b7fabdd619b9020859a19f1151a86a9c867bca60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710609b826102079190611e1b565b6102119190611e89565b600b81905550612710609b826102279190611e1b565b6102319190611e89565b600c81905550612710609b826102479190611e1b565b6102519190611e89565b600d819055506127106005826102679190611e1b565b6102719190611e89565b600e819055506001600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506019600f8190555060196010819055505f601181905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610357573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037b9190611ee7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104069190611ee7565b6040518363ffffffff1660e01b8152600401610423929190611f12565b6020604051808303815f875af115801561043f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104639190611ee7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506104a960a051600161073d60201b60201c565b6104dc306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107ce60201b60201c565b6104ed3060016107e660201b60201c565b61050061dead60016107e660201b60201c565b6105118260016107e660201b60201c565b61054360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016107e660201b60201c565b61057560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016107e660201b60201c565b61058630600161087760201b60201c565b61059961dead600161087760201b60201c565b6105aa82600161087760201b60201c565b6105dc60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087760201b60201c565b61060e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161087760201b60201c565b50506121f3565b5f61062461090860201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067a57610669815f6107e660201b60201c565b610679815f61087760201b60201c565b5b61068b8260016107e660201b60201c565b61069c82600161087760201b60201c565b6106ab8261092f60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361071f575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107169190611ac9565b60405180910390fd5b6107305f83836109f060201b60201c565b5050565b5f600354905090565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc4242182826040516107c2929190611f53565b60405180910390a15050565b6107e183838360016112fd60201b60201c565b505050565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb828260405161086b929190611f53565b60405180910390a15050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e0687082826040516108fc929190611f53565b60405180910390a15050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760179054906101000a900460ff1680610a51575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80610aa2575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610ad8576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600760149054906101000a900460ff168015610b025750600760169054906101000a900460ff16155b8015610ba6575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610ba4575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015610f6a57610bbc61090860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610c305750610c0061090860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610c6857505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610ca2575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610f695760145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610d44575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610ddf57600b54821115610d85576040517f89be121e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d54610d97846114cc60201b60201c565b83610da29190611f7a565b1115610dda576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f68565b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610e7c575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610ec257600c54821115610ebd576040517fa8e28e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f67565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f6657600d54610f22846114cc60201b60201c565b83610f2d9190611f7a565b1115610f65576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5b5b5f600760159054906101000a900460ff168015610f945750600760169054906101000a900460ff16155b8015611038575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611036575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015611237575f5f905060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561109b57505f601054115b156110c1576064601054856110b09190611e1b565b6110ba9190611e89565b905061120d565b60145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561111857505f600f54115b1561113e576064600f548561112d9190611e1b565b6111379190611e89565b905061120c565b60145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156111dc575060145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156111e957505f601154115b1561120b576064601154856111fe9190611e1b565b6112089190611e89565b90505b5b5b5f8111156112355780846112219190611fad565b935061123486308361151260201b60201c565b5b505b5f611247306114cc60201b60201c565b90505f600e5482101590508280156112a6575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156112af5750805b156112e357600a54431180156112c6575060085443115b156112e2576112da8261172e60201b60201c565b43600a819055505b5b6112f487878761151260201b60201c565b50505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361136d575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016113649190611ac9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dd575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113d49190611ac9565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156114c6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516114bd9190611fef565b60405180910390a35b50505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611562578060035f8282546115569190611f7a565b92505081905550611632565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156115ec578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016115e393929190612008565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611679578060035f82825403925050819055506116c4565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117219190611fef565b60405180910390a3505050565b6001600760166101000a81548160ff0219169083151502179055505f5f600267ffffffffffffffff81111561176657611765611aec565b5b6040519080825280602002602001820160405280156117945781602001602082028036833780820191505090505b50905030815f815181106117ab576117aa61203d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611830573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190611ee7565b816001815181106118685761186761203d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600e546118b29190611e1b565b9050808411156118c0578093505b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b815260040161190395949392919061215a565b5f604051808303815f87803b15801561191a575f5ffd5b505af115801561192c573d5f5f3e3d5ffd5b505050505f4790505f6002826119429190611e89565b90505f81836119519190611fad565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611998906121df565b5f6040518083038185875af1925050503d805f81146119d2576040519150601f19603f3d011682016040523d82523d5f602084013e6119d7565b606091505b50508096505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051611a22906121df565b5f6040518083038185875af1925050503d805f8114611a5c576040519150601f19603f3d011682016040523d82523d5f602084013e611a61565b606091505b5050809650505050505050505f600760166101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ab382611a8a565b9050919050565b611ac381611aa9565b82525050565b5f602082019050611adc5f830184611aba565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b5d57607f821691505b602082108103611b7057611b6f611b19565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611bd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611b97565b611bdc8683611b97565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f611c20611c1b611c1684611bf4565b611bfd565b611bf4565b9050919050565b5f819050919050565b611c3983611c06565b611c4d611c4582611c27565b848454611ba3565b825550505050565b5f5f905090565b611c64611c55565b611c6f818484611c30565b505050565b5b81811015611c9257611c875f82611c5c565b600181019050611c75565b5050565b601f821115611cd757611ca881611b76565b611cb184611b88565b81016020851015611cc0578190505b611cd4611ccc85611b88565b830182611c74565b50505b505050565b5f82821c905092915050565b5f611cf75f1984600802611cdc565b1980831691505092915050565b5f611d0f8383611ce8565b9150826002028217905092915050565b611d2882611ae2565b67ffffffffffffffff811115611d4157611d40611aec565b5b611d4b8254611b46565b611d56828285611c96565b5f60209050601f831160018114611d87575f8415611d75578287015190505b611d7f8582611d04565b865550611de6565b601f198416611d9586611b76565b5f5b82811015611dbc57848901518255600182019150602085019450602081019050611d97565b86831015611dd95784890151611dd5601f891682611ce8565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e2582611bf4565b9150611e3083611bf4565b9250828202611e3e81611bf4565b91508282048414831517611e5557611e54611dee565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e9382611bf4565b9150611e9e83611bf4565b925082611eae57611ead611e5c565b5b828204905092915050565b5f5ffd5b611ec681611aa9565b8114611ed0575f5ffd5b50565b5f81519050611ee181611ebd565b92915050565b5f60208284031215611efc57611efb611eb9565b5b5f611f0984828501611ed3565b91505092915050565b5f604082019050611f255f830185611aba565b611f326020830184611aba565b9392505050565b5f8115159050919050565b611f4d81611f39565b82525050565b5f604082019050611f665f830185611aba565b611f736020830184611f44565b9392505050565b5f611f8482611bf4565b9150611f8f83611bf4565b9250828201905080821115611fa757611fa6611dee565b5b92915050565b5f611fb782611bf4565b9150611fc283611bf4565b9250828203905081811115611fda57611fd9611dee565b5b92915050565b611fe981611bf4565b82525050565b5f6020820190506120025f830184611fe0565b92915050565b5f60608201905061201b5f830186611aba565b6120286020830185611fe0565b6120356040830184611fe0565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61208d6120886120838461206a565b611bfd565b611bf4565b9050919050565b61209d81612073565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6120d581611aa9565b82525050565b5f6120e683836120cc565b60208301905092915050565b5f602082019050919050565b5f612108826120a3565b61211281856120ad565b935061211d836120bd565b805f5b8381101561214d57815161213488826120db565b975061213f836120f2565b925050600181019050612120565b5085935050505092915050565b5f60a08201905061216d5f830188611fe0565b61217a6020830187612094565b818103604083015261218c81866120fe565b905061219b6060830185611aba565b6121a86080830184611fe0565b9695505050505050565b5f81905092915050565b50565b5f6121ca5f836121b2565b91506121d5826121bc565b5f82019050919050565b5f6121e9826121bf565b9150819050919050565b60805160a051613ae96122225f395f610d8501525f818161190701528181612dd40152612ecd0152613ae95ff3fe6080604052600436106102b1575f3560e01c8063757765f811610174578063a9059cbb116100db578063ce657cce11610094578063dbe66ca01161006e578063dbe66ca014610a3e578063dd62ed3e14610a7a578063f2fde38b14610ab6578063fccc281314610ade576102b2565b8063ce657cce146109c4578063da0103bd146109ec578063da4493f614610a14576102b2565b8063a9059cbb146108a8578063ad29ffde146108e4578063b4b11b951461090c578063c16dd4a414610948578063c31c9c0714610970578063cc1776d31461099a576102b2565b80638da5cb5b1161012d5780638da5cb5b146107b05780638ea5220f146107da57806395d89b4114610804578063a49a910f1461082e578063a64e4f8a14610856578063a901dd9214610880576102b2565b8063757765f8146106b85780637b812b41146106e05780637f635cc01461071c57806380faa3d2146107465780638124f7ac146107705780638a8c523c1461079a576102b2565b806336884b6e1161021857806366a88d96116101d157806366a88d96146105c25780636aa5b37f146105ec57806370a0823114610616578063715018a614610652578063728d41c91461066857806374c9f60314610690576102b2565b806336884b6e146104ca5780634a8c1fb4146104f25780634f7041a51461051c578063538ba4f914610546578063652e2f0414610570578063667f65261461059a576102b2565b806323b872dd1161026a57806323b872dd146103be57806326991cc8146103fa5780632dc0562d14610424578063313ce5671461044e578063346cc7be146104785780633582ad23146104a0576102b2565b806306fdde03146102b4578063095ea7b3146102de578063106a5a8f1461031a57806318160ddd146103425780631816467f1461036c5780631ecd7d6e14610394576102b2565b5b005b3480156102bf575f5ffd5b506102c8610b08565b6040516102d59190613123565b60405180910390f35b3480156102e9575f5ffd5b5061030460048036038101906102ff91906131d8565b610b98565b6040516103119190613230565b60405180910390f35b348015610325575f5ffd5b50610340600480360381019061033b91906132d4565b610bba565b005b34801561034d575f5ffd5b50610356610c16565b6040516103639190613340565b60405180910390f35b348015610377575f5ffd5b50610392600480360381019061038d9190613359565b610c1f565b005b34801561039f575f5ffd5b506103a8610d4f565b6040516103b59190613340565b60405180910390f35b3480156103c9575f5ffd5b506103e460048036038101906103df9190613384565b610d55565b6040516103f19190613230565b60405180910390f35b348015610405575f5ffd5b5061040e610d83565b60405161041b91906133e3565b60405180910390f35b34801561042f575f5ffd5b50610438610da7565b60405161044591906133e3565b60405180910390f35b348015610459575f5ffd5b50610462610dcc565b60405161046f9190613417565b60405180910390f35b348015610483575f5ffd5b5061049e60048036038101906104999190613359565b610dd4565b005b3480156104ab575f5ffd5b506104b4611065565b6040516104c19190613230565b60405180910390f35b3480156104d5575f5ffd5b506104f060048036038101906104eb9190613430565b611078565b005b3480156104fd575f5ffd5b5061050661111d565b6040516105139190613230565b60405180910390f35b348015610527575f5ffd5b50610530611130565b60405161053d9190613340565b60405180910390f35b348015610551575f5ffd5b5061055a611136565b60405161056791906133e3565b60405180910390f35b34801561057b575f5ffd5b5061058461113a565b6040516105919190613340565b60405180910390f35b3480156105a5575f5ffd5b506105c060048036038101906105bb919061345b565b611140565b005b3480156105cd575f5ffd5b506105d66111d0565b6040516105e39190613340565b60405180910390f35b3480156105f7575f5ffd5b506106006111d6565b60405161060d9190613340565b60405180910390f35b348015610621575f5ffd5b5061063c60048036038101906106379190613359565b6111dc565b6040516106499190613340565b60405180910390f35b34801561065d575f5ffd5b50610666611222565b005b348015610673575f5ffd5b5061068e60048036038101906106899190613430565b611235565b005b34801561069b575f5ffd5b506106b660048036038101906106b19190613359565b6112da565b005b3480156106c3575f5ffd5b506106de60048036038101906106d99190613430565b61140a565b005b3480156106eb575f5ffd5b5061070660048036038101906107019190613359565b6114af565b6040516107139190613230565b60405180910390f35b348015610727575f5ffd5b506107306114cc565b60405161073d9190613340565b60405180910390f35b348015610751575f5ffd5b5061075a6114d1565b6040516107679190613340565b60405180910390f35b34801561077b575f5ffd5b506107846114d7565b6040516107919190613340565b60405180910390f35b3480156107a5575f5ffd5b506107ae6114dd565b005b3480156107bb575f5ffd5b506107c4611583565b6040516107d191906133e3565b60405180910390f35b3480156107e5575f5ffd5b506107ee6115aa565b6040516107fb91906133e3565b60405180910390f35b34801561080f575f5ffd5b506108186115cf565b6040516108259190613123565b60405180910390f35b348015610839575f5ffd5b50610854600480360381019061084f9190613430565b61165f565b005b348015610861575f5ffd5b5061086a611764565b6040516108779190613230565b60405180910390f35b34801561088b575f5ffd5b506108a660048036038101906108a19190613499565b611777565b005b3480156108b3575f5ffd5b506108ce60048036038101906108c991906131d8565b6117d3565b6040516108db9190613230565b60405180910390f35b3480156108ef575f5ffd5b5061090a600480360381019061090591906132d4565b6117f5565b005b348015610917575f5ffd5b50610932600480360381019061092d9190613359565b611851565b60405161093f9190613230565b60405180910390f35b348015610953575f5ffd5b5061096e600480360381019061096991906134c4565b61186e565b005b34801561097b575f5ffd5b50610984611905565b604051610991919061355d565b60405180910390f35b3480156109a5575f5ffd5b506109ae611929565b6040516109bb9190613340565b60405180910390f35b3480156109cf575f5ffd5b506109ea60048036038101906109e59190613499565b61192f565b005b3480156109f7575f5ffd5b50610a126004803603810190610a0d9190613430565b61198b565b005b348015610a1f575f5ffd5b50610a28611a18565b604051610a359190613340565b60405180910390f35b348015610a49575f5ffd5b50610a646004803603810190610a5f9190613359565b611a1e565b604051610a719190613230565b60405180910390f35b348015610a85575f5ffd5b50610aa06004803603810190610a9b9190613576565b611a3b565b604051610aad9190613340565b60405180910390f35b348015610ac1575f5ffd5b50610adc6004803603810190610ad79190613359565b611abd565b005b348015610ae9575f5ffd5b50610af2611b41565b604051610aff91906133e3565b60405180910390f35b606060048054610b17906135e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b43906135e1565b8015610b8e5780601f10610b6557610100808354040283529160200191610b8e565b820191905f5260205f20905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b5f5f610ba2611b47565b9050610baf818585611b4e565b600191505092915050565b610bc2611b60565b5f5f90505b83839050811015610c1057610c03848483818110610be857610be7613611565b5b9050602002016020810190610bfd9190613359565b83611be7565b8080600101915050610bc7565b50505050565b5f600354905090565b610c27611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c8c576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610d4392919061363e565b60405180910390a15050565b600e5481565b5f5f610d5f611b47565b9050610d6c858285611c78565b610d77858585611d0a565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610ddc611b60565b5f3390505f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ef7575f4791505f8211610e51576040517fcff858f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1682604051610e7590613692565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b50508091505080610ef1576040517f81102ece00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50611027565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3091906133e3565b602060405180830381865afa158015610f4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6f91906136ba565b90505f8111610faa576040517ffba5154e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610fe59291906136e5565b6020604051808303815f875af1158015611001573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110259190613720565b505b7f7aba7eca7d870d5f2f93298379a43957082ef15cdcf64db1f7c731c6b3a2fa4983826040516110589291906136e5565b60405180910390a1505050565b600760149054906101000a900460ff1681565b611080611b60565b6103e8600261108d610c16565b6110979190613778565b6110a191906137e6565b8110156110da576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c819055507f1f41d239159181ddefb13e99853e0e4998e0556aa1f2281281c783e309281062600c546040516111129190613340565b60405180910390a150565b600760179054906101000a900460ff1681565b600f5481565b5f81565b600c5481565b611148611b60565b6023821115611183576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60238111156111be576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600f81905550806010819055505050565b600d5481565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61122a611b60565b6112335f611dfa565b565b61123d611b60565b6103e8600361124a610c16565b6112549190613778565b61125e91906137e6565b811015611297576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d819055507fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c600d546040516112cf9190613340565b60405180910390a150565b6112e2611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611347576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516113fe92919061363e565b60405180910390a15050565b611412611b60565b6103e8600261141f610c16565b6114299190613778565b61143391906137e6565b81101561146c576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b819055507f85668e92bc538f5c140067d68e3375c65b9e4545d2822ec8d807c6782f747d62600b546040516114a49190613340565b60405180910390a150565b6013602052805f5260405f205f915054906101000a900460ff1681565b602381565b60085481565b60115481565b6114e5611b60565b600760179054906101000a900460ff161561152c576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600760176101000a81548160ff02191690831515021790555043600881905550426009819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600580546115de906135e1565b80601f016020809104026020016040519081016040528092919081815260200182805461160a906135e1565b80156116555780601f1061162c57610100808354040283529160200191611655565b820191905f5260205f20905b81548152906001019060200180831161163857829003601f168201915b5050505050905090565b611667611b60565b5f611670610c16565b9050620f42406001826116839190613778565b61168d91906137e6565b8210156116c6576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826116d69190613778565b6116e091906137e6565b821115611719576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600e54905082600e819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611757929190613816565b60405180910390a1505050565b600760159054906101000a900460ff1681565b61177f611b60565b80600760156101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516117c89190613230565b60405180910390a150565b5f5f6117dd611b47565b90506117ea818585611d0a565b600191505092915050565b6117fd611b60565b5f5f90505b8383905081101561184b5761183e84848381811061182357611822613611565b5b90506020020160208101906118389190613359565b83611e70565b8080600101915050611802565b50505050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611876611b60565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118f7576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119018282611f01565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105481565b611937611b60565b80600760146101000a81548160ff0219169083151502179055507f1da197dc3cab4eceaefd5d0c34df2ed3a08f20a207fb1910c0eceb361e2c965c816040516119809190613230565b60405180910390a150565b611993611b60565b60238111156119ce576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6011549050816011819055507f6a7b998a4adc393cb692c67fcd563e7971e2ea6f3fe7c9b8fb6dd53cf5b627d08282604051611a0c929190613816565b60405180910390a15050565b60095481565b6012602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ac5611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b35575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611b2c91906133e3565b60405180910390fd5b611b3e81611dfa565b50565b61dead81565b5f33905090565b611b5b8383836001611f92565b505050565b611b68611b47565b73ffffffffffffffffffffffffffffffffffffffff16611b86611583565b73ffffffffffffffffffffffffffffffffffffffff1614611be557611ba9611b47565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611bdc91906133e3565b60405180910390fd5b565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e068708282604051611c6c92919061383d565b60405180910390a15050565b5f611c838484611a3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d045781811015611cf5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611cec93929190613864565b60405180910390fd5b611d0384848484035f611f92565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611d7191906133e3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dea575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611de191906133e3565b60405180910390fd5b611df5838383612161565b505050565b5f611e03611583565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e4d57611e42815f611e70565b611e4c815f611be7565b5b611e58826001611e70565b611e63826001611be7565b611e6c82612a3e565b5050565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611ef592919061383d565b60405180910390a15050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611f8692919061383d565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612002575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611ff991906133e3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161206991906133e3565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516121529190613340565b60405180910390a35b50505050565b600760179054906101000a900460ff16806121c2575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612213575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612249576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600760149054906101000a900460ff1680156122735750600760169054906101000a900460ff16155b8015612317575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612315575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b905080156126c357612327611583565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123955750612365611583565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123cd57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612407575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126c25760145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124a9575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561253e57600b548211156124ea576040517f89be121e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d546124f6846111dc565b836125019190613899565b1115612539576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126c1565b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125db575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561262157600c5482111561261c576040517fa8e28e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126c0565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126bf57600d5461267b846111dc565b836126869190613899565b11156126be576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5b5b5f600760159054906101000a900460ff1680156126ed5750600760169054906101000a900460ff16155b8015612791575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061278f575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b9050801561298a575f5f905060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127f457505f601054115b1561281a576064601054856128099190613778565b61281391906137e6565b9050612966565b60145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561287157505f600f54115b15612897576064600f54856128869190613778565b61289091906137e6565b9050612965565b60145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612935575060145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561294257505f601154115b15612964576064601154856129579190613778565b61296191906137e6565b90505b5b5b5f81111561298857808461297a91906138cc565b9350612987863083612aff565b5b505b5f612994306111dc565b90505f600e5482101590508280156129f3575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129fc5750805b15612a2a57600a5443118015612a13575060085443115b15612a2957612a2182612d1b565b43600a819055505b5b612a35878787612aff565b50505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b4f578060035f828254612b439190613899565b92505081905550612c1f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612bd9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612bd093929190613864565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c66578060035f8282540392505081905550612cb1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d0e9190613340565b60405180910390a3505050565b6001600760166101000a81548160ff0219169083151502179055505f5f600267ffffffffffffffff811115612d5357612d526138ff565b5b604051908082528060200260200182016040528015612d815781602001602082028036833780820191505090505b50905030815f81518110612d9857612d97613611565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5f9190613940565b81600181518110612e7357612e72613611565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600e54612ebd9190613778565b905080841115612ecb578093505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b8152600401612f2c959493929190613a5b565b5f604051808303815f87803b158015612f43575f5ffd5b505af1158015612f55573d5f5f3e3d5ffd5b505050505f4790505f600282612f6b91906137e6565b90505f8183612f7a91906138cc565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612fc190613692565b5f6040518083038185875af1925050503d805f8114612ffb576040519150601f19603f3d011682016040523d82523d5f602084013e613000565b606091505b50508096505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161304b90613692565b5f6040518083038185875af1925050503d805f8114613085576040519150601f19603f3d011682016040523d82523d5f602084013e61308a565b606091505b5050809650505050505050505f600760166101000a81548160ff02191690831515021790555050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6130f5826130b3565b6130ff81856130bd565b935061310f8185602086016130cd565b613118816130db565b840191505092915050565b5f6020820190508181035f83015261313b81846130eb565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131748261314b565b9050919050565b6131848161316a565b811461318e575f5ffd5b50565b5f8135905061319f8161317b565b92915050565b5f819050919050565b6131b7816131a5565b81146131c1575f5ffd5b50565b5f813590506131d2816131ae565b92915050565b5f5f604083850312156131ee576131ed613143565b5b5f6131fb85828601613191565b925050602061320c858286016131c4565b9150509250929050565b5f8115159050919050565b61322a81613216565b82525050565b5f6020820190506132435f830184613221565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261326a57613269613249565b5b8235905067ffffffffffffffff8111156132875761328661324d565b5b6020830191508360208202830111156132a3576132a2613251565b5b9250929050565b6132b381613216565b81146132bd575f5ffd5b50565b5f813590506132ce816132aa565b92915050565b5f5f5f604084860312156132eb576132ea613143565b5b5f84013567ffffffffffffffff81111561330857613307613147565b5b61331486828701613255565b93509350506020613327868287016132c0565b9150509250925092565b61333a816131a5565b82525050565b5f6020820190506133535f830184613331565b92915050565b5f6020828403121561336e5761336d613143565b5b5f61337b84828501613191565b91505092915050565b5f5f5f6060848603121561339b5761339a613143565b5b5f6133a886828701613191565b93505060206133b986828701613191565b92505060406133ca868287016131c4565b9150509250925092565b6133dd8161316a565b82525050565b5f6020820190506133f65f8301846133d4565b92915050565b5f60ff82169050919050565b613411816133fc565b82525050565b5f60208201905061342a5f830184613408565b92915050565b5f6020828403121561344557613444613143565b5b5f613452848285016131c4565b91505092915050565b5f5f6040838503121561347157613470613143565b5b5f61347e858286016131c4565b925050602061348f858286016131c4565b9150509250929050565b5f602082840312156134ae576134ad613143565b5b5f6134bb848285016132c0565b91505092915050565b5f5f604083850312156134da576134d9613143565b5b5f6134e785828601613191565b92505060206134f8858286016132c0565b9150509250929050565b5f819050919050565b5f61352561352061351b8461314b565b613502565b61314b565b9050919050565b5f6135368261350b565b9050919050565b5f6135478261352c565b9050919050565b6135578161353d565b82525050565b5f6020820190506135705f83018461354e565b92915050565b5f5f6040838503121561358c5761358b613143565b5b5f61359985828601613191565b92505060206135aa85828601613191565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135f857607f821691505b60208210810361360b5761360a6135b4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506136515f8301856133d4565b61365e60208301846133d4565b9392505050565b5f81905092915050565b50565b5f61367d5f83613665565b91506136888261366f565b5f82019050919050565b5f61369c82613672565b9150819050919050565b5f815190506136b4816131ae565b92915050565b5f602082840312156136cf576136ce613143565b5b5f6136dc848285016136a6565b91505092915050565b5f6040820190506136f85f8301856133d4565b6137056020830184613331565b9392505050565b5f8151905061371a816132aa565b92915050565b5f6020828403121561373557613734613143565b5b5f6137428482850161370c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613782826131a5565b915061378d836131a5565b925082820261379b816131a5565b915082820484148315176137b2576137b161374b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6137f0826131a5565b91506137fb836131a5565b92508261380b5761380a6137b9565b5b828204905092915050565b5f6040820190506138295f830185613331565b6138366020830184613331565b9392505050565b5f6040820190506138505f8301856133d4565b61385d6020830184613221565b9392505050565b5f6060820190506138775f8301866133d4565b6138846020830185613331565b6138916040830184613331565b949350505050565b5f6138a3826131a5565b91506138ae836131a5565b92508282019050808211156138c6576138c561374b565b5b92915050565b5f6138d6826131a5565b91506138e1836131a5565b92508282039050818111156138f9576138f861374b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061393a8161317b565b92915050565b5f6020828403121561395557613954613143565b5b5f6139628482850161392c565b91505092915050565b5f819050919050565b5f61398e6139896139848461396b565b613502565b6131a5565b9050919050565b61399e81613974565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6139d68161316a565b82525050565b5f6139e783836139cd565b60208301905092915050565b5f602082019050919050565b5f613a09826139a4565b613a1381856139ae565b9350613a1e836139be565b805f5b83811015613a4e578151613a3588826139dc565b9750613a40836139f3565b925050600181019050613a21565b5085935050505092915050565b5f60a082019050613a6e5f830188613331565b613a7b6020830187613995565b8181036040830152613a8d81866139ff565b9050613a9c60608301856133d4565b613aa96080830184613331565b969550505050505056fea26469706673582212208016a8c71a30017efbd469d58592fc1eb7f133f96db5f4e56d89484b30f5312c64736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106102b1575f3560e01c8063757765f811610174578063a9059cbb116100db578063ce657cce11610094578063dbe66ca01161006e578063dbe66ca014610a3e578063dd62ed3e14610a7a578063f2fde38b14610ab6578063fccc281314610ade576102b2565b8063ce657cce146109c4578063da0103bd146109ec578063da4493f614610a14576102b2565b8063a9059cbb146108a8578063ad29ffde146108e4578063b4b11b951461090c578063c16dd4a414610948578063c31c9c0714610970578063cc1776d31461099a576102b2565b80638da5cb5b1161012d5780638da5cb5b146107b05780638ea5220f146107da57806395d89b4114610804578063a49a910f1461082e578063a64e4f8a14610856578063a901dd9214610880576102b2565b8063757765f8146106b85780637b812b41146106e05780637f635cc01461071c57806380faa3d2146107465780638124f7ac146107705780638a8c523c1461079a576102b2565b806336884b6e1161021857806366a88d96116101d157806366a88d96146105c25780636aa5b37f146105ec57806370a0823114610616578063715018a614610652578063728d41c91461066857806374c9f60314610690576102b2565b806336884b6e146104ca5780634a8c1fb4146104f25780634f7041a51461051c578063538ba4f914610546578063652e2f0414610570578063667f65261461059a576102b2565b806323b872dd1161026a57806323b872dd146103be57806326991cc8146103fa5780632dc0562d14610424578063313ce5671461044e578063346cc7be146104785780633582ad23146104a0576102b2565b806306fdde03146102b4578063095ea7b3146102de578063106a5a8f1461031a57806318160ddd146103425780631816467f1461036c5780631ecd7d6e14610394576102b2565b5b005b3480156102bf575f5ffd5b506102c8610b08565b6040516102d59190613123565b60405180910390f35b3480156102e9575f5ffd5b5061030460048036038101906102ff91906131d8565b610b98565b6040516103119190613230565b60405180910390f35b348015610325575f5ffd5b50610340600480360381019061033b91906132d4565b610bba565b005b34801561034d575f5ffd5b50610356610c16565b6040516103639190613340565b60405180910390f35b348015610377575f5ffd5b50610392600480360381019061038d9190613359565b610c1f565b005b34801561039f575f5ffd5b506103a8610d4f565b6040516103b59190613340565b60405180910390f35b3480156103c9575f5ffd5b506103e460048036038101906103df9190613384565b610d55565b6040516103f19190613230565b60405180910390f35b348015610405575f5ffd5b5061040e610d83565b60405161041b91906133e3565b60405180910390f35b34801561042f575f5ffd5b50610438610da7565b60405161044591906133e3565b60405180910390f35b348015610459575f5ffd5b50610462610dcc565b60405161046f9190613417565b60405180910390f35b348015610483575f5ffd5b5061049e60048036038101906104999190613359565b610dd4565b005b3480156104ab575f5ffd5b506104b4611065565b6040516104c19190613230565b60405180910390f35b3480156104d5575f5ffd5b506104f060048036038101906104eb9190613430565b611078565b005b3480156104fd575f5ffd5b5061050661111d565b6040516105139190613230565b60405180910390f35b348015610527575f5ffd5b50610530611130565b60405161053d9190613340565b60405180910390f35b348015610551575f5ffd5b5061055a611136565b60405161056791906133e3565b60405180910390f35b34801561057b575f5ffd5b5061058461113a565b6040516105919190613340565b60405180910390f35b3480156105a5575f5ffd5b506105c060048036038101906105bb919061345b565b611140565b005b3480156105cd575f5ffd5b506105d66111d0565b6040516105e39190613340565b60405180910390f35b3480156105f7575f5ffd5b506106006111d6565b60405161060d9190613340565b60405180910390f35b348015610621575f5ffd5b5061063c60048036038101906106379190613359565b6111dc565b6040516106499190613340565b60405180910390f35b34801561065d575f5ffd5b50610666611222565b005b348015610673575f5ffd5b5061068e60048036038101906106899190613430565b611235565b005b34801561069b575f5ffd5b506106b660048036038101906106b19190613359565b6112da565b005b3480156106c3575f5ffd5b506106de60048036038101906106d99190613430565b61140a565b005b3480156106eb575f5ffd5b5061070660048036038101906107019190613359565b6114af565b6040516107139190613230565b60405180910390f35b348015610727575f5ffd5b506107306114cc565b60405161073d9190613340565b60405180910390f35b348015610751575f5ffd5b5061075a6114d1565b6040516107679190613340565b60405180910390f35b34801561077b575f5ffd5b506107846114d7565b6040516107919190613340565b60405180910390f35b3480156107a5575f5ffd5b506107ae6114dd565b005b3480156107bb575f5ffd5b506107c4611583565b6040516107d191906133e3565b60405180910390f35b3480156107e5575f5ffd5b506107ee6115aa565b6040516107fb91906133e3565b60405180910390f35b34801561080f575f5ffd5b506108186115cf565b6040516108259190613123565b60405180910390f35b348015610839575f5ffd5b50610854600480360381019061084f9190613430565b61165f565b005b348015610861575f5ffd5b5061086a611764565b6040516108779190613230565b60405180910390f35b34801561088b575f5ffd5b506108a660048036038101906108a19190613499565b611777565b005b3480156108b3575f5ffd5b506108ce60048036038101906108c991906131d8565b6117d3565b6040516108db9190613230565b60405180910390f35b3480156108ef575f5ffd5b5061090a600480360381019061090591906132d4565b6117f5565b005b348015610917575f5ffd5b50610932600480360381019061092d9190613359565b611851565b60405161093f9190613230565b60405180910390f35b348015610953575f5ffd5b5061096e600480360381019061096991906134c4565b61186e565b005b34801561097b575f5ffd5b50610984611905565b604051610991919061355d565b60405180910390f35b3480156109a5575f5ffd5b506109ae611929565b6040516109bb9190613340565b60405180910390f35b3480156109cf575f5ffd5b506109ea60048036038101906109e59190613499565b61192f565b005b3480156109f7575f5ffd5b50610a126004803603810190610a0d9190613430565b61198b565b005b348015610a1f575f5ffd5b50610a28611a18565b604051610a359190613340565b60405180910390f35b348015610a49575f5ffd5b50610a646004803603810190610a5f9190613359565b611a1e565b604051610a719190613230565b60405180910390f35b348015610a85575f5ffd5b50610aa06004803603810190610a9b9190613576565b611a3b565b604051610aad9190613340565b60405180910390f35b348015610ac1575f5ffd5b50610adc6004803603810190610ad79190613359565b611abd565b005b348015610ae9575f5ffd5b50610af2611b41565b604051610aff91906133e3565b60405180910390f35b606060048054610b17906135e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b43906135e1565b8015610b8e5780601f10610b6557610100808354040283529160200191610b8e565b820191905f5260205f20905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b5f5f610ba2611b47565b9050610baf818585611b4e565b600191505092915050565b610bc2611b60565b5f5f90505b83839050811015610c1057610c03848483818110610be857610be7613611565b5b9050602002016020810190610bfd9190613359565b83611be7565b8080600101915050610bc7565b50505050565b5f600354905090565b610c27611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c8c576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610d4392919061363e565b60405180910390a15050565b600e5481565b5f5f610d5f611b47565b9050610d6c858285611c78565b610d77858585611d0a565b60019150509392505050565b7f000000000000000000000000b0a4e09d34bfb127de042a0b252841eddc8f946881565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b610ddc611b60565b5f3390505f5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ef7575f4791505f8211610e51576040517fcff858f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1682604051610e7590613692565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b50508091505080610ef1576040517f81102ece00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50611027565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f3091906133e3565b602060405180830381865afa158015610f4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6f91906136ba565b90505f8111610faa576040517ffba5154e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610fe59291906136e5565b6020604051808303815f875af1158015611001573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110259190613720565b505b7f7aba7eca7d870d5f2f93298379a43957082ef15cdcf64db1f7c731c6b3a2fa4983826040516110589291906136e5565b60405180910390a1505050565b600760149054906101000a900460ff1681565b611080611b60565b6103e8600261108d610c16565b6110979190613778565b6110a191906137e6565b8110156110da576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c819055507f1f41d239159181ddefb13e99853e0e4998e0556aa1f2281281c783e309281062600c546040516111129190613340565b60405180910390a150565b600760179054906101000a900460ff1681565b600f5481565b5f81565b600c5481565b611148611b60565b6023821115611183576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60238111156111be576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600f81905550806010819055505050565b600d5481565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61122a611b60565b6112335f611dfa565b565b61123d611b60565b6103e8600361124a610c16565b6112549190613778565b61125e91906137e6565b811015611297576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d819055507fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c600d546040516112cf9190613340565b60405180910390a150565b6112e2611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611347576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516113fe92919061363e565b60405180910390a15050565b611412611b60565b6103e8600261141f610c16565b6114299190613778565b61143391906137e6565b81101561146c576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b819055507f85668e92bc538f5c140067d68e3375c65b9e4545d2822ec8d807c6782f747d62600b546040516114a49190613340565b60405180910390a150565b6013602052805f5260405f205f915054906101000a900460ff1681565b602381565b60085481565b60115481565b6114e5611b60565b600760179054906101000a900460ff161561152c576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600760176101000a81548160ff02191690831515021790555043600881905550426009819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600580546115de906135e1565b80601f016020809104026020016040519081016040528092919081815260200182805461160a906135e1565b80156116555780601f1061162c57610100808354040283529160200191611655565b820191905f5260205f20905b81548152906001019060200180831161163857829003601f168201915b5050505050905090565b611667611b60565b5f611670610c16565b9050620f42406001826116839190613778565b61168d91906137e6565b8210156116c6576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826116d69190613778565b6116e091906137e6565b821115611719576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600e54905082600e819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611757929190613816565b60405180910390a1505050565b600760159054906101000a900460ff1681565b61177f611b60565b80600760156101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516117c89190613230565b60405180910390a150565b5f5f6117dd611b47565b90506117ea818585611d0a565b600191505092915050565b6117fd611b60565b5f5f90505b8383905081101561184b5761183e84848381811061182357611822613611565b5b90506020020160208101906118389190613359565b83611e70565b8080600101915050611802565b50505050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611876611b60565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118f7576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119018282611f01565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60105481565b611937611b60565b80600760146101000a81548160ff0219169083151502179055507f1da197dc3cab4eceaefd5d0c34df2ed3a08f20a207fb1910c0eceb361e2c965c816040516119809190613230565b60405180910390a150565b611993611b60565b60238111156119ce576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6011549050816011819055507f6a7b998a4adc393cb692c67fcd563e7971e2ea6f3fe7c9b8fb6dd53cf5b627d08282604051611a0c929190613816565b60405180910390a15050565b60095481565b6012602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ac5611b60565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b35575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611b2c91906133e3565b60405180910390fd5b611b3e81611dfa565b50565b61dead81565b5f33905090565b611b5b8383836001611f92565b505050565b611b68611b47565b73ffffffffffffffffffffffffffffffffffffffff16611b86611583565b73ffffffffffffffffffffffffffffffffffffffff1614611be557611ba9611b47565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611bdc91906133e3565b60405180910390fd5b565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e068708282604051611c6c92919061383d565b60405180910390a15050565b5f611c838484611a3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d045781811015611cf5578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611cec93929190613864565b60405180910390fd5b611d0384848484035f611f92565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d7a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611d7191906133e3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dea575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611de191906133e3565b60405180910390fd5b611df5838383612161565b505050565b5f611e03611583565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e4d57611e42815f611e70565b611e4c815f611be7565b5b611e58826001611e70565b611e63826001611be7565b611e6c82612a3e565b5050565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611ef592919061383d565b60405180910390a15050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611f8692919061383d565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612002575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611ff991906133e3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612072575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161206991906133e3565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516121529190613340565b60405180910390a35b50505050565b600760179054906101000a900460ff16806121c2575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612213575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612249576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600760149054906101000a900460ff1680156122735750600760169054906101000a900460ff16155b8015612317575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612315575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b905080156126c357612327611583565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156123955750612365611583565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123cd57505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612407575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126c25760145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124a9575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561253e57600b548211156124ea576040517f89be121e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d546124f6846111dc565b836125019190613899565b1115612539576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126c1565b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125db575060135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561262157600c5482111561261c576040517fa8e28e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126c0565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126bf57600d5461267b846111dc565b836126869190613899565b11156126be576040517f76c7c05200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5b5b5f600760159054906101000a900460ff1680156126ed5750600760169054906101000a900460ff16155b8015612791575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061278f575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b9050801561298a575f5f905060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127f457505f601054115b1561281a576064601054856128099190613778565b61281391906137e6565b9050612966565b60145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561287157505f600f54115b15612897576064600f54856128869190613778565b61289091906137e6565b9050612965565b60145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612935575060145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561294257505f601154115b15612964576064601154856129579190613778565b61296191906137e6565b90505b5b5b5f81111561298857808461297a91906138cc565b9350612987863083612aff565b5b505b5f612994306111dc565b90505f600e5482101590508280156129f3575060145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156129fc5750805b15612a2a57600a5443118015612a13575060085443115b15612a2957612a2182612d1b565b43600a819055505b5b612a35878787612aff565b50505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b4f578060035f828254612b439190613899565b92505081905550612c1f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612bd9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401612bd093929190613864565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c66578060035f8282540392505081905550612cb1565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d0e9190613340565b60405180910390a3505050565b6001600760166101000a81548160ff0219169083151502179055505f5f600267ffffffffffffffff811115612d5357612d526138ff565b5b604051908082528060200260200182016040528015612d815781602001602082028036833780820191505090505b50905030815f81518110612d9857612d97613611565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5f9190613940565b81600181518110612e7357612e72613611565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600e54612ebd9190613778565b905080841115612ecb578093505b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b8152600401612f2c959493929190613a5b565b5f604051808303815f87803b158015612f43575f5ffd5b505af1158015612f55573d5f5f3e3d5ffd5b505050505f4790505f600282612f6b91906137e6565b90505f8183612f7a91906138cc565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612fc190613692565b5f6040518083038185875af1925050503d805f8114612ffb576040519150601f19603f3d011682016040523d82523d5f602084013e613000565b606091505b50508096505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161304b90613692565b5f6040518083038185875af1925050503d805f8114613085576040519150601f19603f3d011682016040523d82523d5f602084013e61308a565b606091505b5050809650505050505050505f600760166101000a81548160ff02191690831515021790555050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6130f5826130b3565b6130ff81856130bd565b935061310f8185602086016130cd565b613118816130db565b840191505092915050565b5f6020820190508181035f83015261313b81846130eb565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131748261314b565b9050919050565b6131848161316a565b811461318e575f5ffd5b50565b5f8135905061319f8161317b565b92915050565b5f819050919050565b6131b7816131a5565b81146131c1575f5ffd5b50565b5f813590506131d2816131ae565b92915050565b5f5f604083850312156131ee576131ed613143565b5b5f6131fb85828601613191565b925050602061320c858286016131c4565b9150509250929050565b5f8115159050919050565b61322a81613216565b82525050565b5f6020820190506132435f830184613221565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261326a57613269613249565b5b8235905067ffffffffffffffff8111156132875761328661324d565b5b6020830191508360208202830111156132a3576132a2613251565b5b9250929050565b6132b381613216565b81146132bd575f5ffd5b50565b5f813590506132ce816132aa565b92915050565b5f5f5f604084860312156132eb576132ea613143565b5b5f84013567ffffffffffffffff81111561330857613307613147565b5b61331486828701613255565b93509350506020613327868287016132c0565b9150509250925092565b61333a816131a5565b82525050565b5f6020820190506133535f830184613331565b92915050565b5f6020828403121561336e5761336d613143565b5b5f61337b84828501613191565b91505092915050565b5f5f5f6060848603121561339b5761339a613143565b5b5f6133a886828701613191565b93505060206133b986828701613191565b92505060406133ca868287016131c4565b9150509250925092565b6133dd8161316a565b82525050565b5f6020820190506133f65f8301846133d4565b92915050565b5f60ff82169050919050565b613411816133fc565b82525050565b5f60208201905061342a5f830184613408565b92915050565b5f6020828403121561344557613444613143565b5b5f613452848285016131c4565b91505092915050565b5f5f6040838503121561347157613470613143565b5b5f61347e858286016131c4565b925050602061348f858286016131c4565b9150509250929050565b5f602082840312156134ae576134ad613143565b5b5f6134bb848285016132c0565b91505092915050565b5f5f604083850312156134da576134d9613143565b5b5f6134e785828601613191565b92505060206134f8858286016132c0565b9150509250929050565b5f819050919050565b5f61352561352061351b8461314b565b613502565b61314b565b9050919050565b5f6135368261350b565b9050919050565b5f6135478261352c565b9050919050565b6135578161353d565b82525050565b5f6020820190506135705f83018461354e565b92915050565b5f5f6040838503121561358c5761358b613143565b5b5f61359985828601613191565b92505060206135aa85828601613191565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135f857607f821691505b60208210810361360b5761360a6135b4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506136515f8301856133d4565b61365e60208301846133d4565b9392505050565b5f81905092915050565b50565b5f61367d5f83613665565b91506136888261366f565b5f82019050919050565b5f61369c82613672565b9150819050919050565b5f815190506136b4816131ae565b92915050565b5f602082840312156136cf576136ce613143565b5b5f6136dc848285016136a6565b91505092915050565b5f6040820190506136f85f8301856133d4565b6137056020830184613331565b9392505050565b5f8151905061371a816132aa565b92915050565b5f6020828403121561373557613734613143565b5b5f6137428482850161370c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613782826131a5565b915061378d836131a5565b925082820261379b816131a5565b915082820484148315176137b2576137b161374b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6137f0826131a5565b91506137fb836131a5565b92508261380b5761380a6137b9565b5b828204905092915050565b5f6040820190506138295f830185613331565b6138366020830184613331565b9392505050565b5f6040820190506138505f8301856133d4565b61385d6020830184613221565b9392505050565b5f6060820190506138775f8301866133d4565b6138846020830185613331565b6138916040830184613331565b949350505050565b5f6138a3826131a5565b91506138ae836131a5565b92508282019050808211156138c6576138c561374b565b5b92915050565b5f6138d6826131a5565b91506138e1836131a5565b92508282039050818111156138f9576138f861374b565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061393a8161317b565b92915050565b5f6020828403121561395557613954613143565b5b5f6139628482850161392c565b91505092915050565b5f819050919050565b5f61398e6139896139848461396b565b613502565b6131a5565b9050919050565b61399e81613974565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6139d68161316a565b82525050565b5f6139e783836139cd565b60208301905092915050565b5f602082019050919050565b5f613a09826139a4565b613a1381856139ae565b9350613a1e836139be565b805f5b83811015613a4e578151613a3588826139dc565b9750613a40836139f3565b925050600181019050613a21565b5085935050505092915050565b5f60a082019050613a6e5f830188613331565b613a7b6020830187613995565b8181036040830152613a8d81866139ff565b9050613a9c60608301856133d4565b613aa96080830184613331565b969550505050505056fea26469706673582212208016a8c71a30017efbd469d58592fc1eb7f133f96db5f4e56d89484b30f5312c64736f6c634300081c0033
Deployed Bytecode Sourcemap
26193:12590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12951:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15269:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33637:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14053:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31165:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26910:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16062:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26410:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26450:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13904:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34062:674;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26514:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31956:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26609:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26945:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26291:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26838:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32848:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26872:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26805:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14215:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24807:103;;;;;;;;;;;;;:::i;:::-;;32189:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30894:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31727:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27092:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26754:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26641:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27002:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30641:245;;;;;;;;;;;;;:::i;:::-;;24132:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13161:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32430:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26546:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31586:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14538:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33392:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27149:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33885:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26238:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26973:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31436:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33109:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26678:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27037:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14783:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25065:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26347:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12951:91;12996:13;13029:5;13022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12951:91;:::o;15269:215::-;15367:4;15384:13;15400:12;:10;:12::i;:::-;15384:28;;15423:31;15432:5;15439:7;15448:5;15423:8;:31::i;:::-;15472:4;15465:11;;;15269:215;;;;:::o;33637:240::-;24018:13;:11;:13::i;:::-;33765:9:::1;33777:1;33765:13;;33760:110;33784:8;;:15;;33780:1;:19;33760:110;;;33821:37;33839:8;;33848:1;33839:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33852:5;33821:17;:37::i;:::-;33801:3;;;;;;;33760:110;;;;33637:240:::0;;;:::o;14053:99::-;14105:7;14132:12;;14125:19;;14053:99;:::o;31165:263::-;24018:13;:11;:13::i;:::-;26338:1:::1;31248:26;;:10;:26;;::::0;31240:53:::1;;;;;;;;;;;;;;;;;31304:17;31324:9;;;;;;;;;;;31304:29;;31356:10;31344:9;;:22;;;;;;;;;;;;;;;;;;31382:38;31399:9;;;;;;;;;;;31410;31382:38;;;;;;;:::i;:::-;;;;;;;;31229:199;31165:263:::0;:::o;26910:28::-;;;;:::o;16062:283::-;16183:4;16200:15;16218:12;:10;:12::i;:::-;16200:30;;16241:37;16257:4;16263:7;16272:5;16241:15;:37::i;:::-;16289:26;16299:4;16305:2;16309:5;16289:9;:26::i;:::-;16333:4;16326:11;;;16062:283;;;;;:::o;26410:33::-;;;:::o;26450:24::-;;;;;;;;;;;;;:::o;13904:84::-;13953:5;13978:2;13971:9;;13904:84;:::o;34062:674::-;24018:13;:11;:13::i;:::-;34134::::1;34150:10;34134:26;;34171:14;26338:1;34200:22;;:6;:22;;::::0;34196:481:::1;;34239:12;34275:21;34266:30;;34328:1;34319:6;:10;34311:38;;;;;;;;;;;;;;;;;34386:5;34378:19;;34405:6;34378:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34364:52;;;;;34439:7;34431:39;;;;;;;;;;;;;;;;;34224:258;34196:481;;;34519:6;34512:24;;;34545:4;34512:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34503:48;;34583:1;34574:6;:10;34566:41;;;;;;;;;;;;;;;;;34629:6;34622:23;;;34646:10;34658:6;34622:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34196:481;34692:36;34713:6;34721;34692:36;;;;;;;:::i;:::-;;;;;;;;34123:613;;34062:674:::0;:::o;26514:25::-;;;;;;;;;;;;;:::o;31956:225::-;24018:13;:11;:13::i;:::-;32068:4:::1;32063:1;32047:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32046:26;;;;:::i;:::-;32035:6;:38;;32027:65;;;;;;;;;;;;;;;;;32118:6;32103:12;:21;;;;32140:33;32160:12;;32140:33;;;;;;:::i;:::-;;;;;;;;31956:225:::0;:::o;26609:23::-;;;;;;;;;;;;;:::o;26945:21::-;;;;:::o;26291:49::-;26338:1;26291:49;:::o;26838:27::-;;;;:::o;32848:253::-;24018:13;:11;:13::i;:::-;26794:2:::1;32937:7;:24;;32929:47;;;;;;;;;;;;;;;;;26794:2;32995:8;:25;;32987:48;;;;;;;;;;;;;;;;;33057:7;33048:6;:16;;;;33085:8;33075:7;:18;;;;32848:253:::0;;:::o;26872:29::-;;;;:::o;26805:26::-;;;;:::o;14215:118::-;14280:7;14307:9;:18;14317:7;14307:18;;;;;;;;;;;;;;;;14300:25;;14215:118;;;:::o;24807:103::-;24018:13;:11;:13::i;:::-;24872:30:::1;24899:1;24872:18;:30::i;:::-;24807:103::o:0;32189:233::-;24018:13;:11;:13::i;:::-;32303:4:::1;32298:1;32282:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32281:26;;;;:::i;:::-;32270:6;:38;;32262:65;;;;;;;;;;;;;;;;;32355:6;32338:14;:23;;;;32377:37;32399:14;;32377:37;;;;;;:::i;:::-;;;;;;;;32189:233:::0;:::o;30894:263::-;24018:13;:11;:13::i;:::-;26338:1:::1;30977:26;;:10;:26;;::::0;30969:53:::1;;;;;;;;;;;;;;;;;31033:17;31053:9;;;;;;;;;;;31033:29;;31085:10;31073:9;;:22;;;;;;;;;;;;;;;;;;31111:38;31128:9;;;;;;;;;;;31139;31111:38;;;;;;;:::i;:::-;;;;;;;;30958:199;30894:263:::0;:::o;31727:221::-;24018:13;:11;:13::i;:::-;31838:4:::1;31833:1;31817:13;:11;:13::i;:::-;:17;;;;:::i;:::-;31816:26;;;;:::i;:::-;31805:6;:38;;31797:65;;;;;;;;;;;;;;;;;31887:6;31873:11;:20;;;;31909:31;31928:11;;31909:31;;;;;;:::i;:::-;;;;;;;;31727:221:::0;:::o;27092:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;26754:42::-;26794:2;26754:42;:::o;26641:30::-;;;;:::o;27002:26::-;;;;:::o;30641:245::-;24018:13;:11;:13::i;:::-;30705:11:::1;;;;;;;;;;;30704:12;30696:41;;;;;;;;;;;;;;;;;30762:4;30748:11;;:18;;;;;;;;;;;;;;;;;;30795:12;30777:15;:30;;;;30835:15;30818:14;:32;;;;30866:12;;;;;;;;;;30641:245::o:0;24132:87::-;24178:7;24205:6;;;;;;;;;;;24198:13;;24132:87;:::o;26481:24::-;;;;;;;;;;;;;:::o;13161:95::-;13208:13;13241:7;13234:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13161:95;:::o;32430:410::-;24018:13;:11;:13::i;:::-;32502:25:::1;32530:13;:11;:13::i;:::-;32502:41;;32598:7;32593:1;32573:17;:21;;;;:::i;:::-;32572:33;;;;:::i;:::-;32562:6;:43;;32554:70;;;;;;;;;;;;;;;;;32679:4;32674:1;32654:17;:21;;;;:::i;:::-;32653:30;;;;:::i;:::-;32643:6;:40;;32635:67;;;;;;;;;;;;;;;;;32713:16;32732:13;;32713:32;;32772:6;32756:13;:22;;;;32794:38;32815:6;32823:8;32794:38;;;;;;;:::i;:::-;;;;;;;;32491:349;;32430:410:::0;:::o;26546:23::-;;;;;;;;;;;;;:::o;31586:133::-;24018:13;:11;:13::i;:::-;31666:5:::1;31652:11;;:19;;;;;;;;;;;;;;;;;;31687:24;31705:5;31687:24;;;;;;:::i;:::-;;;;;;;;31586:133:::0;:::o;14538:182::-;14607:4;14624:13;14640:12;:10;:12::i;:::-;14624:28;;14663:27;14673:5;14680:2;14684:5;14663:9;:27::i;:::-;14708:4;14701:11;;;14538:182;;;;:::o;33392:237::-;24018:13;:11;:13::i;:::-;33518:9:::1;33530:1;33518:13;;33513:109;33537:8;;:15;;33533:1;:19;33513:109;;;33574:36;33591:8;;33600:1;33591:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33604:5;33574:16;:36::i;:::-;33554:3;;;;;;;33513:109;;;;33392:237:::0;;;:::o;27149:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;33885:169::-;24018:13;:11;:13::i;:::-;33973:11:::1;:17;33985:4;33973:17;;;;;;;;;;;;;;;;;;;;;;;;;33972:18;33964:45;;;;;;;;;;;;;;;;;34020:26;34034:4;34040:5;34020:13;:26::i;:::-;33885:169:::0;;:::o;26238:44::-;;;:::o;26973:22::-;;;;:::o;31436:142::-;24018:13;:11;:13::i;:::-;31523:5:::1;31507:13;;:21;;;;;;;;;;;;;;;;;;31544:26;31564:5;31544:26;;;;;;:::i;:::-;;;;;;;;31436:142:::0;:::o;33109:275::-;24018:13;:11;:13::i;:::-;26794:2:::1;33196:12;:29;;33188:52;;;;;;;;;;;;;;;;;33251:16;33270:11;;33251:30;;33306:12;33292:11;:26;;;;33334:42;33353:12;33367:8;33334:42;;;;;;;:::i;:::-;;;;;;;;33177:207;33109:275:::0;:::o;26678:29::-;;;;:::o;27037:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;14783:167::-;14888:7;14915:11;:18;14927:5;14915:18;;;;;;;;;;;;;;;:27;14934:7;14915:27;;;;;;;;;;;;;;;;14908:34;;14783:167;;;;:::o;25065:220::-;24018:13;:11;:13::i;:::-;25170:1:::1;25150:22;;:8;:22;;::::0;25146:93:::1;;25224:1;25196:31;;;;;;;;;;;:::i;:::-;;;;;;;;25146:93;25249:28;25268:8;25249:18;:28::i;:::-;25065:220:::0;:::o;26347:54::-;26394:6;26347:54;:::o;4172:98::-;4225:7;4252:10;4245:17;;4172:98;:::o;20155:130::-;20240:37;20249:5;20256:7;20265:5;20272:4;20240:8;:37::i;:::-;20155:130;;;:::o;24297:166::-;24368:12;:10;:12::i;:::-;24357:23;;:7;:5;:7::i;:::-;:23;;;24353:103;;24431:12;:10;:12::i;:::-;24404:40;;;;;;;;;;;:::i;:::-;;;;;;;;24353:103;24297:166::o;38433:177::-;38547:5;38517:18;:27;38536:7;38517:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38568:34;38587:7;38596:5;38568:34;;;;;;;:::i;:::-;;;;;;;;38433:177;;:::o;21914:603::-;22048:24;22075:25;22085:5;22092:7;22075:9;:25::i;:::-;22048:52;;22135:17;22115:16;:37;22111:399;;22192:5;22173:16;:24;22169:214;;;22274:7;22304:16;22343:5;22225:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;22169:214;22426:57;22435:5;22442:7;22470:5;22451:16;:24;22477:5;22426:8;:57::i;:::-;22111:399;22037:480;21914:603;;;:::o;16730:308::-;16830:1;16814:18;;:4;:18;;;16810:88;;16883:1;16856:30;;;;;;;;;;;:::i;:::-;;;;;;;;16810:88;16926:1;16912:16;;:2;:16;;;16908:88;;16981:1;16952:32;;;;;;;;;;;:::i;:::-;;;;;;;;16908:88;17006:24;17014:4;17020:2;17024:5;17006:7;:24::i;:::-;16730:308;;;:::o;30243:390::-;30318:16;30337:7;:5;:7::i;:::-;30318:26;;26338:1;30359:24;;:8;:24;;;30355:139;;30400:33;30417:8;30427:5;30400:16;:33::i;:::-;30448:34;30466:8;30476:5;30448:17;:34::i;:::-;30355:139;30504:32;30521:8;30531:4;30504:16;:32::i;:::-;30547:33;30565:8;30575:4;30547:17;:33::i;:::-;30591:34;30616:8;30591:24;:34::i;:::-;30307:326;30243:390;:::o;38253:172::-;38364:5;38336:16;:25;38353:7;38336:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;38385:32;38402:7;38411:5;38385:32;;;;;;;:::i;:::-;;;;;;;;38253:172;;:::o;38618:162::-;38715:5;38695:11;:17;38707:4;38695:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;38736:36;38760:4;38766:5;38736:36;;;;;;;:::i;:::-;;;;;;;;38618:162;;:::o;21136:486::-;21309:1;21292:19;;:5;:19;;;21288:91;;21364:1;21335:32;;;;;;;;;;;:::i;:::-;;;;;;;;21288:91;21412:1;21393:21;;:7;:21;;;21389:92;;21466:1;21438:31;;;;;;;;;;;:::i;:::-;;;;;;;;21389:92;21521:5;21491:11;:18;21503:5;21491:18;;;;;;;;;;;;;;;:27;21510:7;21491:27;;;;;;;;;;;;;;;:35;;;;21541:9;21537:78;;;21588:7;21572:31;;21581:5;21572:31;;;21597:5;21572:31;;;;;;:::i;:::-;;;;;;;;21537:78;21136:486;;;;:::o;34744:2581::-;34896:11;;;;;;;;;;;:39;;;;34911:18;:24;34930:4;34911:24;;;;;;;;;;;;;;;;;;;;;;;;;34896:39;:65;;;;34939:18;:22;34958:2;34939:22;;;;;;;;;;;;;;;;;;;;;;;;;34896:65;34874:127;;;;;;;;;;;;;;;;;35014:16;35033:13;;;;;;;;;;;:44;;;;;35064:13;;;;;;;;;;;35063:14;35033:44;:114;;;;;35096:18;:24;35115:4;35096:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35124:18;:22;35143:2;35124:22;;;;;;;;;;;;;;;;;;;;;;;;;35096:50;35094:53;35033:114;35014:133;;35172:11;35168:935;;;35230:7;:5;:7::i;:::-;35222:15;;:4;:15;;;;:49;;;;;35264:7;:5;:7::i;:::-;35258:13;;:2;:13;;;;35222:49;:88;;;;;26338:1;35292:18;;:2;:18;;;;35222:88;:127;;;;;26394:6;35331:18;;:2;:18;;;;35222:127;35200:892;;;35388:11;:17;35400:4;35388:17;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;35410:18;:22;35429:2;35410:22;;;;;;;;;;;;;;;;;;;;;;;;;35409:23;35388:44;35384:693;;;35475:11;;35465:6;:21;;35457:52;;;;;;;;;;;;;;;;;35592:14;;35575:13;35585:2;35575:9;:13::i;:::-;35566:6;:22;;;;:::i;:::-;:40;;35532:147;;;;;;;;;;;;;;;;;35384:693;;;35709:11;:15;35721:2;35709:15;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;35729:18;:24;35748:4;35729:24;;;;;;;;;;;;;;;;;;;;;;;;;35728:25;35709:44;35705:372;;;35796:12;;35786:6;:22;;35778:54;;;;;;;;;;;;;;;;;35705:372;;;35863:18;:22;35882:2;35863:22;;;;;;;;;;;;;;;;;;;;;;;;;35858:219;;35970:14;;35953:13;35963:2;35953:9;:13::i;:::-;35944:6;:22;;;;:::i;:::-;:40;;35910:147;;;;;;;;;;;;;;;;;35858:219;35705:372;35384:693;35200:892;35168:935;36115:13;36131:11;;;;;;;;;;;:42;;;;;36160:13;;;;;;;;;;;36159:14;36131:42;:108;;;;;36192:16;:22;36209:4;36192:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;36218:16;:20;36235:2;36218:20;;;;;;;;;;;;;;;;;;;;;;;;;36192:46;36190:49;36131:108;36115:124;;36256:8;36252:625;;;36281:17;36301:1;36281:21;;36321:11;:15;36333:2;36321:15;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;36350:1;36340:7;;:11;36321:30;36317:396;;;36405:3;36394:7;;36385:6;:16;;;;:::i;:::-;36384:24;;;;:::i;:::-;36372:36;;36317:396;;;36434:11;:17;36446:4;36434:17;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;;36464:1;36455:6;;:10;36434:31;36430:283;;;36518:3;36508:6;;36499;:15;;;;:::i;:::-;36498:23;;;;:::i;:::-;36486:35;;36430:283;;;36566:11;:15;36578:2;36566:15;;;;;;;;;;;;;;;;;;;;;;;;;36565:16;:38;;;;;36586:11;:17;36598:4;36586:17;;;;;;;;;;;;;;;;;;;;;;;;;36585:18;36565:38;:57;;;;;36621:1;36607:11;;:15;36565:57;36543:170;;;36694:3;36679:11;;36670:6;:20;;;;:::i;:::-;36669:28;;;;:::i;:::-;36657:40;;36543:170;36430:283;36317:396;36745:1;36733:9;:13;36729:137;;;36777:9;36767:19;;;;;:::i;:::-;;;36805:45;36819:4;36833;36840:9;36805:13;:45::i;:::-;36729:137;36266:611;36252:625;36889:28;36920:24;36938:4;36920:9;:24::i;:::-;36889:55;;36955:12;36994:13;;36970:20;:37;;36955:52;;37022:8;:30;;;;;37035:11;:17;37047:4;37035:17;;;;;;;;;;;;;;;;;;;;;;;;;37034:18;37022:30;:41;;;;;37056:7;37022:41;37018:256;;;37099:13;;37084:12;:28;:62;;;;;37131:15;;37116:12;:30;37084:62;37080:183;;;37167:33;37179:20;37167:11;:33::i;:::-;37235:12;37219:13;:28;;;;37080:183;37018:256;37286:31;37300:4;37306:2;37310:6;37286:13;:31::i;:::-;34863:2462;;;;34744:2581;;;:::o;25445:191::-;25519:16;25538:6;;;;;;;;;;;25519:25;;25564:8;25555:6;;:17;;;;;;;;;;;;;;;;;;25619:8;25588:40;;25609:8;25588:40;;;;;;;;;;;;25508:128;25445:191;:::o;17362:1135::-;17468:1;17452:18;;:4;:18;;;17448:552;;17606:5;17590:12;;:21;;;;;;;:::i;:::-;;;;;;;;17448:552;;;17644:19;17666:9;:15;17676:4;17666:15;;;;;;;;;;;;;;;;17644:37;;17714:5;17700:11;:19;17696:117;;;17772:4;17778:11;17791:5;17747:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17696:117;17968:5;17954:11;:19;17936:9;:15;17946:4;17936:15;;;;;;;;;;;;;;;:37;;;;17629:371;17448:552;18030:1;18016:16;;:2;:16;;;18012:435;;18198:5;18182:12;;:21;;;;;;;;;;;18012:435;;;18415:5;18398:9;:13;18408:2;18398:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18012:435;18479:2;18464:25;;18473:4;18464:25;;;18483:5;18464:25;;;;;;:::i;:::-;;;;;;;;17362:1135;;;:::o;37333:912::-;28565:4;28549:13;;:20;;;;;;;;;;;;;;;;;;37419:12:::1;37442:21;37480:1;37466:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37442:40;;37511:4;37493;37498:1;37493:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37537:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37527:4;37532:1;37527:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;::::0;::::1;37567:21;37607:2;37591:13;;:18;;;;:::i;:::-;37567:42;;37640:13;37626:11;:27;37622:87;;;37684:13;37670:27;;37622:87;37721:10;:61;;;37797:11;37823:1;37839:4;37866;37886:15;37721:191;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37925:18;37946:21;37925:42;;37980:21;38017:1;38004:10;:14;;;;:::i;:::-;37980:38;;38029:25;38070:13;38057:10;:26;;;;:::i;:::-;38029:54;;38118:9;;;;;;;;;;;38110:23;;38141:13;38110:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38096:63;;;;;38192:9;;;;;;;;;;;38184:23;;38215:17;38184:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38170:67;;;;;37408:837;;;;;;28608:5:::0;28592:13;;:21;;;;;;;;;;;;;;;;;;37333:912;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:117::-;3448:1;3445;3438:12;3462:117;3571:1;3568;3561:12;3585:117;3694:1;3691;3684:12;3725:568;3798:8;3808:6;3858:3;3851:4;3843:6;3839:17;3835:27;3825:122;;3866:79;;:::i;:::-;3825:122;3979:6;3966:20;3956:30;;4009:18;4001:6;3998:30;3995:117;;;4031:79;;:::i;:::-;3995:117;4145:4;4137:6;4133:17;4121:29;;4199:3;4191:4;4183:6;4179:17;4169:8;4165:32;4162:41;4159:128;;;4206:79;;:::i;:::-;4159:128;3725:568;;;;;:::o;4299:116::-;4369:21;4384:5;4369:21;:::i;:::-;4362:5;4359:32;4349:60;;4405:1;4402;4395:12;4349:60;4299:116;:::o;4421:133::-;4464:5;4502:6;4489:20;4480:29;;4518:30;4542:5;4518:30;:::i;:::-;4421:133;;;;:::o;4560:698::-;4652:6;4660;4668;4717:2;4705:9;4696:7;4692:23;4688:32;4685:119;;;4723:79;;:::i;:::-;4685:119;4871:1;4860:9;4856:17;4843:31;4901:18;4893:6;4890:30;4887:117;;;4923:79;;:::i;:::-;4887:117;5036:80;5108:7;5099:6;5088:9;5084:22;5036:80;:::i;:::-;5018:98;;;;4814:312;5165:2;5191:50;5233:7;5224:6;5213:9;5209:22;5191:50;:::i;:::-;5181:60;;5136:115;4560:698;;;;;:::o;5264:118::-;5351:24;5369:5;5351:24;:::i;:::-;5346:3;5339:37;5264:118;;:::o;5388:222::-;5481:4;5519:2;5508:9;5504:18;5496:26;;5532:71;5600:1;5589:9;5585:17;5576:6;5532:71;:::i;:::-;5388:222;;;;:::o;5616:329::-;5675:6;5724:2;5712:9;5703:7;5699:23;5695:32;5692:119;;;5730:79;;:::i;:::-;5692:119;5850:1;5875:53;5920:7;5911:6;5900:9;5896:22;5875:53;:::i;:::-;5865:63;;5821:117;5616:329;;;;:::o;5951:619::-;6028:6;6036;6044;6093:2;6081:9;6072:7;6068:23;6064:32;6061:119;;;6099:79;;:::i;:::-;6061:119;6219:1;6244:53;6289:7;6280:6;6269:9;6265:22;6244:53;:::i;:::-;6234:63;;6190:117;6346:2;6372:53;6417:7;6408:6;6397:9;6393:22;6372:53;:::i;:::-;6362:63;;6317:118;6474:2;6500:53;6545:7;6536:6;6525:9;6521:22;6500:53;:::i;:::-;6490:63;;6445:118;5951:619;;;;;:::o;6576:118::-;6663:24;6681:5;6663:24;:::i;:::-;6658:3;6651:37;6576:118;;:::o;6700:222::-;6793:4;6831:2;6820:9;6816:18;6808:26;;6844:71;6912:1;6901:9;6897:17;6888:6;6844:71;:::i;:::-;6700:222;;;;:::o;6928:86::-;6963:7;7003:4;6996:5;6992:16;6981:27;;6928:86;;;:::o;7020:112::-;7103:22;7119:5;7103:22;:::i;:::-;7098:3;7091:35;7020:112;;:::o;7138:214::-;7227:4;7265:2;7254:9;7250:18;7242:26;;7278:67;7342:1;7331:9;7327:17;7318:6;7278:67;:::i;:::-;7138:214;;;;:::o;7358:329::-;7417:6;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7358:329;;;;:::o;7693:474::-;7761:6;7769;7818:2;7806:9;7797:7;7793:23;7789:32;7786:119;;;7824:79;;:::i;:::-;7786:119;7944:1;7969:53;8014:7;8005:6;7994:9;7990:22;7969:53;:::i;:::-;7959:63;;7915:117;8071:2;8097:53;8142:7;8133:6;8122:9;8118:22;8097:53;:::i;:::-;8087:63;;8042:118;7693:474;;;;;:::o;8173:323::-;8229:6;8278:2;8266:9;8257:7;8253:23;8249:32;8246:119;;;8284:79;;:::i;:::-;8246:119;8404:1;8429:50;8471:7;8462:6;8451:9;8447:22;8429:50;:::i;:::-;8419:60;;8375:114;8173:323;;;;:::o;8502:468::-;8567:6;8575;8624:2;8612:9;8603:7;8599:23;8595:32;8592:119;;;8630:79;;:::i;:::-;8592:119;8750:1;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8721:117;8877:2;8903:50;8945:7;8936:6;8925:9;8921:22;8903:50;:::i;:::-;8893:60;;8848:115;8502:468;;;;;:::o;8976:60::-;9004:3;9025:5;9018:12;;8976:60;;;:::o;9042:142::-;9092:9;9125:53;9143:34;9152:24;9170:5;9152:24;:::i;:::-;9143:34;:::i;:::-;9125:53;:::i;:::-;9112:66;;9042:142;;;:::o;9190:126::-;9240:9;9273:37;9304:5;9273:37;:::i;:::-;9260:50;;9190:126;;;:::o;9322:150::-;9396:9;9429:37;9460:5;9429:37;:::i;:::-;9416:50;;9322:150;;;:::o;9478:179::-;9589:61;9644:5;9589:61;:::i;:::-;9584:3;9577:74;9478:179;;:::o;9663:270::-;9780:4;9818:2;9807:9;9803:18;9795:26;;9831:95;9923:1;9912:9;9908:17;9899:6;9831:95;:::i;:::-;9663:270;;;;:::o;9939:474::-;10007:6;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10190:1;10215:53;10260:7;10251:6;10240:9;10236:22;10215:53;:::i;:::-;10205:63;;10161:117;10317:2;10343:53;10388:7;10379:6;10368:9;10364:22;10343:53;:::i;:::-;10333:63;;10288:118;9939:474;;;;;:::o;10419:180::-;10467:77;10464:1;10457:88;10564:4;10561:1;10554:15;10588:4;10585:1;10578:15;10605:320;10649:6;10686:1;10680:4;10676:12;10666:22;;10733:1;10727:4;10723:12;10754:18;10744:81;;10810:4;10802:6;10798:17;10788:27;;10744:81;10872:2;10864:6;10861:14;10841:18;10838:38;10835:84;;10891:18;;:::i;:::-;10835:84;10656:269;10605:320;;;:::o;10931:180::-;10979:77;10976:1;10969:88;11076:4;11073:1;11066:15;11100:4;11097:1;11090:15;11117:332;11238:4;11276:2;11265:9;11261:18;11253:26;;11289:71;11357:1;11346:9;11342:17;11333:6;11289:71;:::i;:::-;11370:72;11438:2;11427:9;11423:18;11414:6;11370:72;:::i;:::-;11117:332;;;;;:::o;11455:147::-;11556:11;11593:3;11578:18;;11455:147;;;;:::o;11608:114::-;;:::o;11728:398::-;11887:3;11908:83;11989:1;11984:3;11908:83;:::i;:::-;11901:90;;12000:93;12089:3;12000:93;:::i;:::-;12118:1;12113:3;12109:11;12102:18;;11728:398;;;:::o;12132:379::-;12316:3;12338:147;12481:3;12338:147;:::i;:::-;12331:154;;12502:3;12495:10;;12132:379;;;:::o;12517:143::-;12574:5;12605:6;12599:13;12590:22;;12621:33;12648:5;12621:33;:::i;:::-;12517:143;;;;:::o;12666:351::-;12736:6;12785:2;12773:9;12764:7;12760:23;12756:32;12753:119;;;12791:79;;:::i;:::-;12753:119;12911:1;12936:64;12992:7;12983:6;12972:9;12968:22;12936:64;:::i;:::-;12926:74;;12882:128;12666:351;;;;:::o;13023:332::-;13144:4;13182:2;13171:9;13167:18;13159:26;;13195:71;13263:1;13252:9;13248:17;13239:6;13195:71;:::i;:::-;13276:72;13344:2;13333:9;13329:18;13320:6;13276:72;:::i;:::-;13023:332;;;;;:::o;13361:137::-;13415:5;13446:6;13440:13;13431:22;;13462:30;13486:5;13462:30;:::i;:::-;13361:137;;;;:::o;13504:345::-;13571:6;13620:2;13608:9;13599:7;13595:23;13591:32;13588:119;;;13626:79;;:::i;:::-;13588:119;13746:1;13771:61;13824:7;13815:6;13804:9;13800:22;13771:61;:::i;:::-;13761:71;;13717:125;13504:345;;;;:::o;13855:180::-;13903:77;13900:1;13893:88;14000:4;13997:1;13990:15;14024:4;14021:1;14014:15;14041:410;14081:7;14104:20;14122:1;14104:20;:::i;:::-;14099:25;;14138:20;14156:1;14138:20;:::i;:::-;14133:25;;14193:1;14190;14186:9;14215:30;14233:11;14215:30;:::i;:::-;14204:41;;14394:1;14385:7;14381:15;14378:1;14375:22;14355:1;14348:9;14328:83;14305:139;;14424:18;;:::i;:::-;14305:139;14089:362;14041:410;;;;:::o;14457:180::-;14505:77;14502:1;14495:88;14602:4;14599:1;14592:15;14626:4;14623:1;14616:15;14643:185;14683:1;14700:20;14718:1;14700:20;:::i;:::-;14695:25;;14734:20;14752:1;14734:20;:::i;:::-;14729:25;;14773:1;14763:35;;14778:18;;:::i;:::-;14763:35;14820:1;14817;14813:9;14808:14;;14643:185;;;;:::o;14834:332::-;14955:4;14993:2;14982:9;14978:18;14970:26;;15006:71;15074:1;15063:9;15059:17;15050:6;15006:71;:::i;:::-;15087:72;15155:2;15144:9;15140:18;15131:6;15087:72;:::i;:::-;14834:332;;;;;:::o;15172:320::-;15287:4;15325:2;15314:9;15310:18;15302:26;;15338:71;15406:1;15395:9;15391:17;15382:6;15338:71;:::i;:::-;15419:66;15481:2;15470:9;15466:18;15457:6;15419:66;:::i;:::-;15172:320;;;;;:::o;15498:442::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15698:71;15766:1;15755:9;15751:17;15742:6;15698:71;:::i;:::-;15779:72;15847:2;15836:9;15832:18;15823:6;15779:72;:::i;:::-;15861;15929:2;15918:9;15914:18;15905:6;15861:72;:::i;:::-;15498:442;;;;;;:::o;15946:191::-;15986:3;16005:20;16023:1;16005:20;:::i;:::-;16000:25;;16039:20;16057:1;16039:20;:::i;:::-;16034:25;;16082:1;16079;16075:9;16068:16;;16103:3;16100:1;16097:10;16094:36;;;16110:18;;:::i;:::-;16094:36;15946:191;;;;:::o;16143:194::-;16183:4;16203:20;16221:1;16203:20;:::i;:::-;16198:25;;16237:20;16255:1;16237:20;:::i;:::-;16232:25;;16281:1;16278;16274:9;16266:17;;16305:1;16299:4;16296:11;16293:37;;;16310:18;;:::i;:::-;16293:37;16143:194;;;;:::o;16343:180::-;16391:77;16388:1;16381:88;16488:4;16485:1;16478:15;16512:4;16509:1;16502:15;16529:143;16586:5;16617:6;16611:13;16602:22;;16633:33;16660:5;16633:33;:::i;:::-;16529:143;;;;:::o;16678:351::-;16748:6;16797:2;16785:9;16776:7;16772:23;16768:32;16765:119;;;16803:79;;:::i;:::-;16765:119;16923:1;16948:64;17004:7;16995:6;16984:9;16980:22;16948:64;:::i;:::-;16938:74;;16894:128;16678:351;;;;:::o;17035:85::-;17080:7;17109:5;17098:16;;17035:85;;;:::o;17126:158::-;17184:9;17217:61;17235:42;17244:32;17270:5;17244:32;:::i;:::-;17235:42;:::i;:::-;17217:61;:::i;:::-;17204:74;;17126:158;;;:::o;17290:147::-;17385:45;17424:5;17385:45;:::i;:::-;17380:3;17373:58;17290:147;;:::o;17443:114::-;17510:6;17544:5;17538:12;17528:22;;17443:114;;;:::o;17563:184::-;17662:11;17696:6;17691:3;17684:19;17736:4;17731:3;17727:14;17712:29;;17563:184;;;;:::o;17753:132::-;17820:4;17843:3;17835:11;;17873:4;17868:3;17864:14;17856:22;;17753:132;;;:::o;17891:108::-;17968:24;17986:5;17968:24;:::i;:::-;17963:3;17956:37;17891:108;;:::o;18005:179::-;18074:10;18095:46;18137:3;18129:6;18095:46;:::i;:::-;18173:4;18168:3;18164:14;18150:28;;18005:179;;;;:::o;18190:113::-;18260:4;18292;18287:3;18283:14;18275:22;;18190:113;;;:::o;18339:732::-;18458:3;18487:54;18535:5;18487:54;:::i;:::-;18557:86;18636:6;18631:3;18557:86;:::i;:::-;18550:93;;18667:56;18717:5;18667:56;:::i;:::-;18746:7;18777:1;18762:284;18787:6;18784:1;18781:13;18762:284;;;18863:6;18857:13;18890:63;18949:3;18934:13;18890:63;:::i;:::-;18883:70;;18976:60;19029:6;18976:60;:::i;:::-;18966:70;;18822:224;18809:1;18806;18802:9;18797:14;;18762:284;;;18766:14;19062:3;19055:10;;18463:608;;;18339:732;;;;:::o;19077:831::-;19340:4;19378:3;19367:9;19363:19;19355:27;;19392:71;19460:1;19449:9;19445:17;19436:6;19392:71;:::i;:::-;19473:80;19549:2;19538:9;19534:18;19525:6;19473:80;:::i;:::-;19600:9;19594:4;19590:20;19585:2;19574:9;19570:18;19563:48;19628:108;19731:4;19722:6;19628:108;:::i;:::-;19620:116;;19746:72;19814:2;19803:9;19799:18;19790:6;19746:72;:::i;:::-;19828:73;19896:3;19885:9;19881:19;19872:6;19828:73;:::i;:::-;19077:831;;;;;;;;:::o
Swarm Source
ipfs://8016a8c71a30017efbd469d58592fc1eb7f133f96db5f4e56d89484b30f5312c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.