Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
2,000,000,000,000 FREEBIRD
Holders
164
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
111,521 FREEBIRDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
TokenWithBal
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-07-07 */ /* * * Bitcoin was developed as a financial technology with political goals identical to those of the Founding Fathers: liberation. * The ultimate end of crypto is the possibility of a future for humanity unshackled from the institutions that seek to limit our growth. * Our ultimate goal is to bring about a more vital future for humanity, and we will use this technology to achieve this righteous end. * - Social Nakamoto * */ // Sources flattened with hardhat v2.9.6 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` 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 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * 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 `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/TokenWithAutoLiquidity.sol //Here we define the License that this contract will have, in most cases MIT is used. MIT is an opensource license //Here we define the solidity version we are using //The reason we select a specific version is so that we do not face any incompatibility bugs between different compiler versions pragma solidity 0.8.7; //Here we import the ERC20 Openzeppelin contract standard //This is a commonly used & secure token standard //Here we import the ERC20Burnable extension //This will allow users to burn their tokens if they choose to //Here we import the UniswapoV2Router02 interface for depositing into the liquidity pool //Here we import the UniswapV2Factory interface for creating a token pair //Here we import the UniswapV2Pair interface for getting the token reserves //We make our Token contract inherit ERC20 & ERC20Burnable contract TokenWithBal is ERC20, ERC20Burnable { //Here we define what events will be emitted throughout the contract event NewAdmin(address newAdmin); event MintedTokens(address to, uint256 amount); event BatchMintedTokens(address[] to, uint256[] amounts); event newTempAdmin(address temp); event removedTempAdmin(address temp); //Stores the address of the admin //This is private becuase there is a function to retrieve it //The DAO contract will copy this address when it is initialized address private admin; //Stores the address of the DAO/Multi-Sig contract //This is private becuase there is a function to retrieve it address private DAO; //Stores the address of the wallet that liquidity will be locked to //This is public so that everyone can see address public liquidityLockedAddress; //Stores a list of all the current signers //This is private becuase there is a function to retrieve it //The DAO contract will copy this array when it is initialised address[] private tempAdmins; //Stores whether an address is a temp admin or not //This is private because it is not needed to be retrieved from outside //By default all uint & bool variables are set to 0 & false mapping(address => bool) private tempAdminAllowed; //This is for storing the matic balance //This is private because it is not needed to be retrieved from outside uint256 private balance; //Stores the time that the control of the contract switches from the admins to the DAO //This is private becuase there is a function to retrieve it //The reason we use a uint32 here is because it is the smallest uint that block.timestamp can fit into uint32 private switchTime; //Stores the percent amount in a whole number e.g 1% = 1 //This is private because it is not needed be retreived from outside //The reason we use a uint8 here is because we know the number will not exceed 255, the highest number a uint8 can go to. uint8 private liquidityPercent; //This is for checking whether a liquidity fee has been taken yet //This is private because it is not needed to be retrieved from outside bool private isInitialized; //Stores whether trading for holders is avauilable or not //This is private because it is not needed to be retrieved from outside //false stores that trading is enabled //true stores that trading is not enabled bool private tradingEnabled; //Store whether an address is allowed to pass the transfer block mapping(address => bool) private isAllowed; //Stores whether the dao address has been set before bool private daoSet; //Stores whether an address has been added as a LP pair mapping(address => bool) private isPair; //On deployment we should pass through the following params //_name => The name of the Token e.g. "Bitcoin" //_symbol => The symbol of the Token e.g. "BTC" //_admin => The address that will be the main admin of the contract //_tempAdmins => A list of addresses that will be approved to mint tokens //_tokenLimit => The maximum number of tokens that a temp admin will be able to mint in wei value //_liquidtyLockAddr => The address that liiquidty will be added to but will not be retrievable //_uniswapV2RouterAddr => The address that we will communicate with to add liquidity to //_WMatic => The address used to interact with the liquidity pool //ERC20(_name, _symbol) => Instantiating the ERC20 token standard constructor( string memory _name, string memory _symbol, address _admin, address[] memory _tempAdmins, address _liquidityLockAddr, uint8 _liquidityPercent, address[] memory wallets ) ERC20(_name, _symbol) { //Assign _admin to the admin variable admin = _admin; //Assign _tempAdmins to the tempAdmins variable tempAdmins = _tempAdmins; //We state that the time that the contract is no longer in the admins hands is 30 days from the deployment of this contract //Then we convert it into a uint32 & assign to the switchTime variable switchTime = uint32(block.timestamp + 30 days); //Here we iterate through _tempAdmins for (uint8 i = 0; i < _tempAdmins.length; ) { //We store that the address is a temporary admin tempAdminAllowed[_tempAdmins[i]] = true; //In solidity ^0.8.0 safemath is by default checked on every calculation //In this case we know that the length of _tempAdmins will not exceed 255, the maximum number that a uint8 can hold //Adding this in unchecked reduces gas usage unchecked { i++; } } //Here we store the address of the liquidity lock wallet to local storage liquidityLockedAddress = _liquidityLockAddr; //Assign the liquidity percent to local storage liquidityPercent = _liquidityPercent; //mint to wallets _mint(wallets[0], (2000000000000 * 10 ** 18) * 8 / 100 ); _mint(wallets[1], (2000000000000 * 10 ** 18) * 45 / 1000 ); _mint(wallets[2], (2000000000000 * 10 ** 18) * 51 / 100 ); // add those wallets to not be stopped by the transfer block isAllowed[liquidityLockedAddress] = true; isAllowed[wallets[0]] = true; isAllowed[wallets[1]] = true; isAllowed[wallets[2]] = true; //allowing uniswap V3 contracts to trade isAllowed[0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45] = true; isAllowed[0xC36442b4a4522E871399CD717aBDD847Ab11FE88] = true; isAllowed[0x1F98431c8aD98523631AE4a59f267346ea31F984] = true; isAllowed[0x5BA1e12693Dc8F9c48aAD8770482f4739bEeD696] = true; isAllowed[0xB753548F6E010e7e680BA186F9Ca1BdAB2E90cf2] = true; isAllowed[0xbfd8137f7d1516D3ea5cA83523914859ec47F573] = true; isAllowed[0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6] = true; isAllowed[0x42B24A95702b9986e82d421cC3568932790A48Ec] = true; isAllowed[0x91ae842A5Ffd8d12023116943e72A606179294f3] = true; isAllowed[0xEe6A57eC80ea46401049E92587E52f5Ec1c24785] = true; isAllowed[0xA5644E29708357803b5A882D272c41cC0dF92B34] = true; isAllowed[0xe34139463bA50bD61336E0c446Bd8C0867c6fE65] = true; } // //A modifier is a piece of code that we can attach to multiple functions // //If the current time is less than the time that the contract ownership switches // //Then the msg.sender must equal the admin address OR the msg.sender must be an approved temp admin AND must // //not be trying to mint more tokens than the admin is allowed // //If the current time has passed the time that the contract ownership switches // //Then the msg.sender must equal the dao contract // modifier onlyApproved(uint256 amount) { // if (uint32(block.timestamp) < switchTime) { // require( // msg.sender == admin || // (tempAdminTokensMinted[msg.sender] + amount <= // tempAdminMintLimit && // tempAdminAllowed[msg.sender]), // "ERR:NA" // NA => Not Allowed // ); // } else { // require(msg.sender == DAO, "ERR:ND"); // ND => Not DAO // } // //This is here to signify that the code in the function can continue // _; // } //This modifier is to make sure that msg.sender is the admin of the contract modifier onlyAdmin() { require(msg.sender == admin, "ERR:NA"); // NA => Not Admin _; } function enableTrading() external onlyAdmin { tradingEnabled = true; } function addPair(address _pair) external onlyAdmin{ isPair[_pair] = true; } function addAllowed(address _addr) external onlyAdmin{ isAllowed[_addr] = true; } //This function call only be called by the admin //This function will only be callable from outside this contract //This function sets the time at which ownership of this contract switches to 10 seconds ago function relinquishControl() external onlyAdmin { switchTime = uint32(block.timestamp - 10); } //This function can only be called by the admin //This function will only be callable from outside this contract //The admin will pass through the address to be given temporary minting privilledges //We set the address as allowed & add the address to the tempAdmin list function addTempAdmin(address temp) external onlyAdmin { tempAdminAllowed[temp] = true; tempAdmins.push(temp); emit newTempAdmin(temp); } //This function can only be called by the admin //This function will only be callable from outside this contract //The admin will pass through the address to have their temporary minting privilledges removed //The variable allowing the address to mint is deleted refunding gas to the admin //We find the index that the address is at in the tempAdmins array //We delete that value, replace it with the final value in the array, delete the final value in the array //Then we reduce the array size by 1 //Then we break the for loop to stop any further iterations of the loop function removeTempAdmin(address tempToRemove) external onlyAdmin { delete tempAdminAllowed[tempToRemove]; for (uint16 i = 0; i < tempAdmins.length; ) { if (tempToRemove == tempAdmins[i]) { delete tempAdmins[i]; tempAdmins[i] = tempAdmins[tempAdmins.length - 1]; delete tempAdmins[tempAdmins.length - 1]; tempAdmins.pop(); emit removedTempAdmin(tempToRemove); break; } //Removing safe math check unchecked { //Increment counter i++; } } } function initialize( address _uniswapFactory, address _WMatic, address _uniswapRouter ) external payable onlyAdmin { //Check that 10500 matic has been sent with the deployment //commented out for testing // require(msg.value == 10500 * 10**18, "ERR:WV"); //Build instance of interface IUniswapV2Router02 router = IUniswapV2Router02(_uniswapRouter); //Calculate the amount to deposit uint256 toDeposit = 359310000 * 10 ** 18; //mint tokens to be deposited _mint(address(this), toDeposit ); // approve token transfer to cover all possible scenarios _approve(address(this), _uniswapRouter, toDeposit); //Allow the uniswap router isAllowed[_uniswapRouter] = true; //Add 10500 Matic & 34062000 Freebird to the LP pair //Ratio of 3422 Freebird to 1 Matic router.addLiquidityETH{value: msg.value}( address(this), toDeposit, 0, 0, liquidityLockedAddress, block.timestamp ); //build instance of interface IUniswapV2Factory factory = IUniswapV2Factory(_uniswapFactory); //Create the LP pair address pair = factory.getPair(_WMatic,address(this)); //add pair address to pair mapping isPair[pair] = true; //Mint to the liquidity addr _mint(liquidityLockedAddress, ((2000000000000 * 10 ** 18) * 8 / 100) - toDeposit); } //This function must only be callable by the admin //This function will only be callable from outside this contract //We assign the new admin & emit an event that is viewable on the blockchain explorer function setAdmin(address _new) external onlyAdmin { admin = _new; emit NewAdmin(_new); } //If time has not passed the ownership switch time //The caller must be the admin //If the time has passed the ownership switch time //The caller must be the DAO function setLiquidityPercent(uint8 _percent) external { if (switchTime > block.timestamp) { require(msg.sender == admin, "ERR:NA"); // NA => Not Admin } else { require(msg.sender == DAO, "ERR:ND"); //ND => Not DAO } //Assign the new percentage to storage liquidityPercent = _percent; } //This function must only be callable once by the admin & then it is only the DAO that can call function setDAO(address _dao) external { //Check that the address passed through is not equal to the burn address require(_dao != address(0x0), "ERR:NA"); //NA => Null Address //Check that either msg.sender is the DAO contract OR that the dao contract hasn't been set & the msg.sender is the admin require( (msg.sender == DAO) || (DAO == address(0x0) && msg.sender == admin), "ERR:NA" ); // NA => Not Allowed //Store the new DAO address in local storage DAO = _dao; //If this is the first time the DAO is being set mint 25% of tokens to the DAO treasury if(!daoSet){ _mint(_dao, (2000000000000 * 10 ** 18) * 285 / 1000 ); daoSet = true; } } //This function is read only & costs no gas unless used in a transaction //This function will only be callable from outside this contract //This function returns a list of addresses that are currently temporary admins //This function will be called by the DAO contract when it is initialized function getTempAdmins() external view returns (address[] memory) { return tempAdmins; } //This function is read only & costs no gas unless used in a transaction //This function will only be callable from outside this contract //This function returns the time at which the ownership of the contract is switched function getSwitchTime() external view returns (uint32) { return switchTime; } //This function is read only & costs no gas unless used in a transaction //This function will only be callable from outside this contract //This function returns the address of the admin of this contract function getAdmin() external view returns (address) { return admin; } //This function is read only & costs no gas unless used in a transaction //This function will only be callable from outside this contract //This function returns the address of the DAO contract function getDAO() external view returns (address) { return DAO; } // //This function takes an address that is being paid to & an amount that is being minted // //This function will only be callable from outside this contract // //The onlyApproved modifier has been added onto this function & will be executed before the code in this function // function mint(address to, uint256 amount) // external // onlyApproved(amount) // initialized // { // //We make sure that the address that is being minted to is not the burn address // require(to != address(0x0), "ERR:ZA"); // ZA => Zero Address // //We make sure that the amount that is being minted is over 0 // require(amount > 0, "ERR:MA"); // MA => Mint Amount // //If the msg.sender is a tempAdmin increase the amount that they have minted // if (tempAdminAllowed[msg.sender]) { // tempAdminTokensMinted[msg.sender] += amount; // } // //mint // _mint(to, amount); // //emit a Minted Tokens event // emit MintedTokens(to, amount); // } // //This function will only be callable from outside this contract // //This function takes arrays of addresses that are being paid to & amounts that are being minted // //The onlyApproved modifier has been added onto this function & will be performed before the code in this function // //The array of amounts are passed through the sum function before being passed as the total value of the array // function batchMint(address[] memory addresses, uint256[] memory amounts) // external // onlyApproved(sum(amounts)) // initialized // { // //We check that the lengths of the arrays passed in match // require(addresses.length == amounts.length, "ERR:WL"); //WL => Wrong Length // //Instantiate the counter used for both for loops // uint8 i; // //iterate through the arrays to perform checks // for (i = 0; i < amounts.length; ) { // //Checking that each address in the array does not equal the burn address; // require(addresses[i] != address(0x0), "ERR:ZA"); //ZA => Zero Address // //Checking that each amount in the array is larger than zero // require(amounts[i] > 0, "ERR:MA"); //MA => Mint Amount // //removing safemath check for gas optimiization // unchecked { // //Increment the counter // i++; // } // } // //If msg.sender is a temporary admin // if (tempAdminAllowed[msg.sender]) { // //initialize a variable for total // uint256 total; // //Iterate through the amounts array // for (i = 0; i < amounts.length; ) { // //Add the current index to total // total += amounts[i]; // //Removing safe math check // unchecked { // //Increment the counter // i++; // } // } // //add the total to the amount that this temp admin has minted // tempAdminTokensMinted[msg.sender] += total; // } // //iterate through the arrays to mint // for (i = 0; i < amounts.length; ) { // //Mint to each address for the given address // _mint(addresses[i], amounts[i]); // //removing safemath check // unchecked { // //Increment the counter // i++; // } // } // //emit an event with details on who got airdropped how many tokens // emit BatchMintedTokens(addresses, amounts); // } function _hasLimits(address from, address to) internal view returns(bool){ if(from == admin){ return false; }else if(to == admin){ return false; }else if(tempAdminAllowed[from]){ return false; }else if(tempAdminAllowed[to]){ return false; }else if(isAllowed[from]){ return false; }else if(isAllowed[to]){ return false; }else if (from == address(this)){ return false; }else if(to == address(0)){ return false; }else if(isPair[from]){ return false; }else if(to == address(this)){ return false; }else { return true; } } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); if(_hasLimits(from, to)) { //Revert if trading is not enabled if(!tradingEnabled) { revert("Trading not yet enabled!"); } } _transfer(from, to, amount); return true; } //send 4% to the liquidty pool //This function is a part of the ERC20 standard implementation function transfer(address to, uint256 amount) public virtual override returns (bool) { //Call for _msgSender() once to avoid multiple function calls address owner = _msgSender(); if(_hasLimits(owner, to)) { //Revert if trading is not enabled if(!tradingEnabled) { revert("Trading not yet enabled!"); } } //Calculate the liqidity fee uint256 liquidityFee = (amount * liquidityPercent) / 1000; //Transfer the amount minus the liquidity fee from the owner address to the to address _transfer(owner, to, amount - liquidityFee); //Transfer the liquidity fee from the owner address to this contracts address _transfer(owner, liquidityLockedAddress, liquidityFee); //Return a true vulue to signify a complete trade return true; } //This function is here to sum up the values in an array //This function will only be called by our own code so it is internal //This function does not effect any storage variables so this function is marked pure //This function returns the sum of the array values passed through, this is defined in the return statement function sum(uint256[] memory amounts) internal pure returns (uint256 total) { //Iterate through the amounts array for (uint8 i = 0; i < amounts.length; ) { //Add the value to the total total += amounts[i]; //Removing safe math check unchecked { //Increment the counter i++; } } } //This allows the contract to receive matic receive() external payable { //Add the matic amount to the balance balance += msg.value; } //This function can only be called by the admin //This function will send the matic stored in the contract to the admin //NOTE: NO TRANSFERS OF TOKENS CAN HAPPEN IN THIS CONTRACT WITHOUT MATIC being stored function withdraw(uint256 amount) external onlyAdmin { //Check that the amount looking to be withdrawn is less than the balance require(balance >= amount, "ERR:IF"); //IF => Insufficient Funcds //Send the requested amount to the admin (bool success, ) = admin.call{value: amount}(""); //Check that the transfer was successful require(success, "ERR:OT"); //OT => On Transfer //Reduce the balance by the requested amount balance -= amount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address[]","name":"_tempAdmins","type":"address[]"},{"internalType":"address","name":"_liquidityLockAddr","type":"address"},{"internalType":"uint8","name":"_liquidityPercent","type":"uint8"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"to","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"BatchMintedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"temp","type":"address"}],"name":"newTempAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"temp","type":"address"}],"name":"removedTempAdmin","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"temp","type":"address"}],"name":"addTempAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwitchTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTempAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapFactory","type":"address"},{"internalType":"address","name":"_WMatic","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"liquidityLockedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relinquishControl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tempToRemove","type":"address"}],"name":"removeTempAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dao","type":"address"}],"name":"setDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_percent","type":"uint8"}],"name":"setLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004cb438038062004cb4833981810160405281019062000037919062000db7565b868681600390805190602001906200005192919062000b1e565b5080600490805190602001906200006a92919062000b1e565b50505084600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360089080519060200190620000c692919062000baf565b5062278d0042620000d8919062000ffc565b600b60006101000a81548163ffffffff021916908363ffffffff16021790555060005b84518160ff1610156200018e57600160096000878460ff1681518110620001275762000126620011a4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050620000fb565b5082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60046101000a81548160ff021916908360ff1602179055506200022881600081518110620002065762000205620011a4565b5b60200260200101516c0204fce5e3e2502611000000006200099b60201b60201c565b6200026581600181518110620002435762000242620011a4565b5b60200260200101516c0122ce41502f4d1569900000006200099b60201b60201c565b620002a28160028151811062000280576200027f620011a4565b5b60200260200101516c0cdfcc398cc2bef2ac600000006200099b60201b60201c565b6001600c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600083600081518110620003395762000338620011a4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600083600181518110620003af57620003ae620011a4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600083600281518110620004255762000424620011a4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60007368b3465833fb72a70ecdf485e0e4c7bd8665fc4573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073c36442b4a4522e871399cd717abdd847ab11fe8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000731f98431c8ad98523631ae4a59f267346ea31f98473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000735ba1e12693dc8f9c48aad8770482f4739beed69673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073b753548f6e010e7e680ba186f9ca1bdab2e90cf273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073bfd8137f7d1516d3ea5ca83523914859ec47f57373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073b27308f9f90d607463bb33ea1bebb41c27ce5ab673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60007342b24a95702b9986e82d421cc3568932790a48ec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60007391ae842a5ffd8d12023116943e72a606179294f373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073ee6a57ec80ea46401049e92587e52f5ec1c2478573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073a5644e29708357803b5a882d272c41cc0df92b3473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600073e34139463ba50bd61336e0c446bd8c0867c6fe6573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050505062001289565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a059062000f1e565b60405180910390fd5b62000a226000838362000b1460201b60201c565b806002600082825462000a36919062000ffc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8d919062000ffc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af4919062000f40565b60405180910390a362000b106000838362000b1960201b60201c565b5050565b505050565b505050565b82805462000b2c90620010da565b90600052602060002090601f01602090048101928262000b50576000855562000b9c565b82601f1062000b6b57805160ff191683800117855562000b9c565b8280016001018555821562000b9c579182015b8281111562000b9b57825182559160200191906001019062000b7e565b5b50905062000bab919062000c3e565b5090565b82805482825590600052602060002090810192821562000c2b579160200282015b8281111562000c2a5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000bd0565b5b50905062000c3a919062000c3e565b5090565b5b8082111562000c5957600081600090555060010162000c3f565b5090565b600062000c7462000c6e8462000f86565b62000f5d565b9050808382526020820190508285602086028201111562000c9a5762000c9962001207565b5b60005b8581101562000cce578162000cb3888262000d23565b84526020840193506020830192505060018101905062000c9d565b5050509392505050565b600062000cef62000ce98462000fb5565b62000f5d565b90508281526020810184848401111562000d0e5762000d0d6200120c565b5b62000d1b848285620010a4565b509392505050565b60008151905062000d348162001255565b92915050565b600082601f83011262000d525762000d5162001202565b5b815162000d6484826020860162000c5d565b91505092915050565b600082601f83011262000d855762000d8462001202565b5b815162000d9784826020860162000cd8565b91505092915050565b60008151905062000db1816200126f565b92915050565b600080600080600080600060e0888a03121562000dd95762000dd862001216565b5b600088015167ffffffffffffffff81111562000dfa5762000df962001211565b5b62000e088a828b0162000d6d565b975050602088015167ffffffffffffffff81111562000e2c5762000e2b62001211565b5b62000e3a8a828b0162000d6d565b965050604062000e4d8a828b0162000d23565b955050606088015167ffffffffffffffff81111562000e715762000e7062001211565b5b62000e7f8a828b0162000d3a565b945050608062000e928a828b0162000d23565b93505060a062000ea58a828b0162000da0565b92505060c088015167ffffffffffffffff81111562000ec95762000ec862001211565b5b62000ed78a828b0162000d3a565b91505092959891949750929550565b600062000ef5601f8362000feb565b915062000f02826200122c565b602082019050919050565b62000f18816200108d565b82525050565b6000602082019050818103600083015262000f398162000ee6565b9050919050565b600060208201905062000f57600083018462000f0d565b92915050565b600062000f6962000f7c565b905062000f77828262001110565b919050565b6000604051905090565b600067ffffffffffffffff82111562000fa45762000fa3620011d3565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000fd35762000fd2620011d3565b5b62000fde826200121b565b9050602081019050919050565b600082825260208201905092915050565b600062001009826200108d565b915062001016836200108d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200104e576200104d62001146565b5b828201905092915050565b600062001066826200106d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620010c4578082015181840152602081019050620010a7565b83811115620010d4576000848401525b50505050565b60006002820490506001821680620010f357607f821691505b602082108114156200110a576200110962001175565b5b50919050565b6200111b826200121b565b810181811067ffffffffffffffff821117156200113d576200113c620011d3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620012608162001059565b81146200126c57600080fd5b50565b6200127a8162001097565b81146200128657600080fd5b50565b613a1b80620012996000396000f3fe6080604052600436106101c65760003560e01c80637eb5c732116100f7578063c0c53b8b11610095578063d7517b1111610064578063d7517b1114610657578063dd62ed3e14610680578063e1c28bef146106bd578063e73a914c146106d4576101e6565b8063c0c53b8b146105be578063c2b7bbb6146105da578063c8502b2514610603578063cb8523c61461062e576101e6565b8063985da726116100d1578063985da726146104ee578063a457c2d714610519578063a9059cbb14610556578063bbb332ff14610593576101e6565b80637eb5c732146104815780638a8c523c146104ac57806395d89b41146104c3576101e6565b806339509351116101645780636e9960c31161013e5780636e9960c3146103c7578063704b6c02146103f257806370a082311461041b57806379cc679014610458576101e6565b8063395093511461033857806342966c68146103755780634bd2abb81461039e576101e6565b806318160ddd116101a057806318160ddd1461027c57806323b872dd146102a75780632e1a7d4d146102e4578063313ce5671461030d576101e6565b806306fdde03146101eb578063095ea7b3146102165780630b271d4014610253576101e6565b366101e65734600a60008282546101dd9190613314565b92505081905550005b600080fd5b3480156101f757600080fd5b506102006106fd565b60405161020d9190613061565b60405180910390f35b34801561022257600080fd5b5061023d60048036038101906102389190612b35565b61078f565b60405161024a9190613046565b60405180910390f35b34801561025f57600080fd5b5061027a600480360381019061027591906129f5565b6107b2565b005b34801561028857600080fd5b50610291610af6565b60405161029e9190613263565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190612ae2565b610b00565b6040516102db9190613046565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612b75565b610b8e565b005b34801561031957600080fd5b50610322610d4e565b60405161032f9190613299565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612b35565b610d57565b60405161036c9190613046565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190612b75565b610d8e565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612bf5565b610da2565b005b3480156103d357600080fd5b506103dc610f06565b6040516103e99190612f7f565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906129f5565b610f30565b005b34801561042757600080fd5b50610442600480360381019061043d91906129f5565b61103b565b60405161044f9190613263565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612b35565b611083565b005b34801561048d57600080fd5b506104966110a3565b6040516104a39190613024565b60405180910390f35b3480156104b857600080fd5b506104c1611131565b005b3480156104cf57600080fd5b506104d86111de565b6040516104e59190613061565b60405180910390f35b3480156104fa57600080fd5b50610503611270565b6040516105109190612f7f565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190612b35565b61129a565b60405161054d9190613046565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612b35565b611311565b60405161058a9190613046565b60405180910390f35b34801561059f57600080fd5b506105a86113fb565b6040516105b59190612f7f565b60405180910390f35b6105d860048036038101906105d39190612a8f565b611421565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906129f5565b611729565b005b34801561060f57600080fd5b50610618611814565b604051610625919061327e565b60405180910390f35b34801561063a57600080fd5b50610655600480360381019061065091906129f5565b61182e565b005b34801561066357600080fd5b5061067e600480360381019061067991906129f5565b611919565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612a4f565b611a9e565b6040516106b49190613263565b60405180910390f35b3480156106c957600080fd5b506106d2611b25565b005b3480156106e057600080fd5b506106fb60048036038101906106f691906129f5565b611be4565b005b60606003805461070c906134d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610738906134d3565b80156107855780601f1061075a57610100808354040283529160200191610785565b820191906000526020600020905b81548152906001019060200180831161076857829003601f168201915b5050505050905090565b60008061079a611e21565b90506107a7818585611e29565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990613183565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905560005b6008805490508161ffff161015610af25760088161ffff16815481106108bd576108bc6135c1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ae55760088161ffff1681548110610933576109326135c1565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008600160088054905061097491906133f5565b81548110610985576109846135c1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088261ffff16815481106109c8576109c76135c1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060086001600880549050610a2491906133f5565b81548110610a3557610a346135c1565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008805480610a7457610a73613592565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590557fc9023b2beb32e899a5630badbcc6cd472bcf6b267382681db3afdcd20dd457e182604051610ad89190612f7f565b60405180910390a1610af2565b8080600101915050610894565b5050565b6000600254905090565b600080610b0b611e21565b9050610b18858285611ff4565b610b228585612080565b15610b7757600b60069054906101000a900460ff16610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d906130a3565b60405180910390fd5b5b610b828585856123ca565b60019150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613183565b60405180910390fd5b80600a541015610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613163565b60405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610cab90612f6a565b60006040518083038185875af1925050503d8060008114610ce8576040519150601f19603f3d011682016040523d82523d6000602084013e610ced565b606091505b5050905080610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890613143565b60405180910390fd5b81600a6000828254610d4391906133f5565b925050819055505050565b60006012905090565b600080610d62611e21565b9050610d83818585610d748589611a9e565b610d7e9190613314565b611e29565b600191505092915050565b610d9f610d99611e21565b8261264b565b50565b42600b60009054906101000a900463ffffffff1663ffffffff161115610e5757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613183565b60405180910390fd5b610ee8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede906131a3565b60405180910390fd5b5b80600b60046101000a81548160ff021916908360ff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613183565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c816040516110309190612f7f565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110958261108f611e21565b83611ff4565b61109f828261264b565b5050565b6060600880548060200260200160405190810160405280929190818152602001828054801561112757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110dd575b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890613183565b60405180910390fd5b6001600b60066101000a81548160ff021916908315150217905550565b6060600480546111ed906134d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611219906134d3565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b5050505050905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806112a5611e21565b905060006112b38286611a9e565b9050838110156112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90613223565b60405180910390fd5b6113058286868403611e29565b60019250505092915050565b60008061131c611e21565b90506113288185612080565b1561137d57600b60069054906101000a900460ff1661137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611373906130a3565b60405180910390fd5b5b60006103e8600b60049054906101000a900460ff1660ff16856113a0919061339b565b6113aa919061336a565b90506113c2828683876113bd91906133f5565b6123ca565b6113ef82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123ca565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613183565b60405180910390fd5b600081905060006b012936da2139ced85cc0000090506114d13082612822565b6114dc308483611e29565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161159b96959493929190612fc3565b6060604051808303818588803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115ed9190612ba2565b505050600085905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390587306040518363ffffffff1660e01b8152600401611632929190612f9a565b60206040518083038186803b15801561164a57600080fd5b505afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612a22565b90506001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611720600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846c0204fce5e3e25026110000000061171b91906133f5565b612822565b50505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090613183565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900463ffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590613183565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613183565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fad586119e9bdcccbb2b603aae0446246f7bb9f2e931460d1c51531ad0e79170f81604051611a939190612f7f565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90613183565b60405180910390fd5b600a42611bc291906133f5565b600b60006101000a81548163ffffffff021916908363ffffffff160217905550565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90613183565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d575750600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611d565750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b5b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613183565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900460ff16611e1e57611e02816c0731c4f2fbd63d879c90000000612822565b6001600d60006101000a81548160ff0219169083151502179055505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613203565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906130e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe79190613263565b60405180910390a3505050565b60006120008484611a9e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461207a578181101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613103565b60405180910390fd5b6120798484848403611e29565b5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e157600090506123c4565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561214057600090506123c4565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561219b57600090506123c4565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121f657600090506123c4565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561225157600090506123c4565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122ac57600090506123c4565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122e957600090506123c4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232757600090506123c4565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561238257600090506123c4565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123bf57600090506123c4565b600190505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906131e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a190613083565b60405180910390fd5b6124b5838383612982565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290613123565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ce9190613314565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126329190613263565b60405180910390a3612645848484612987565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b2906131c3565b60405180910390fd5b6126c782600083612982565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561274d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612744906130c3565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127a491906133f5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128099190613263565b60405180910390a361281d83600084612987565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990613243565b60405180910390fd5b61289e60008383612982565b80600260008282546128b09190613314565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129059190613314565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161296a9190613263565b60405180910390a361297e60008383612987565b5050565b505050565b505050565b60008135905061299b816139a0565b92915050565b6000815190506129b0816139a0565b92915050565b6000813590506129c5816139b7565b92915050565b6000815190506129da816139b7565b92915050565b6000813590506129ef816139ce565b92915050565b600060208284031215612a0b57612a0a6135f0565b5b6000612a198482850161298c565b91505092915050565b600060208284031215612a3857612a376135f0565b5b6000612a46848285016129a1565b91505092915050565b60008060408385031215612a6657612a656135f0565b5b6000612a748582860161298c565b9250506020612a858582860161298c565b9150509250929050565b600080600060608486031215612aa857612aa76135f0565b5b6000612ab68682870161298c565b9350506020612ac78682870161298c565b9250506040612ad88682870161298c565b9150509250925092565b600080600060608486031215612afb57612afa6135f0565b5b6000612b098682870161298c565b9350506020612b1a8682870161298c565b9250506040612b2b868287016129b6565b9150509250925092565b60008060408385031215612b4c57612b4b6135f0565b5b6000612b5a8582860161298c565b9250506020612b6b858286016129b6565b9150509250929050565b600060208284031215612b8b57612b8a6135f0565b5b6000612b99848285016129b6565b91505092915050565b600080600060608486031215612bbb57612bba6135f0565b5b6000612bc9868287016129cb565b9350506020612bda868287016129cb565b9250506040612beb868287016129cb565b9150509250925092565b600060208284031215612c0b57612c0a6135f0565b5b6000612c19848285016129e0565b91505092915050565b6000612c2e8383612c3a565b60208301905092915050565b612c4381613429565b82525050565b612c5281613429565b82525050565b6000612c63826132c4565b612c6d81856132e7565b9350612c78836132b4565b8060005b83811015612ca9578151612c908882612c22565b9750612c9b836132da565b925050600181019050612c7c565b5085935050505092915050565b612cbf8161343b565b82525050565b612cce8161348e565b82525050565b6000612cdf826132cf565b612ce98185613303565b9350612cf98185602086016134a0565b612d02816135f5565b840191505092915050565b6000612d1a602383613303565b9150612d2582613606565b604082019050919050565b6000612d3d601883613303565b9150612d4882613655565b602082019050919050565b6000612d60602283613303565b9150612d6b8261367e565b604082019050919050565b6000612d83602283613303565b9150612d8e826136cd565b604082019050919050565b6000612da6601d83613303565b9150612db18261371c565b602082019050919050565b6000612dc9602683613303565b9150612dd482613745565b604082019050919050565b6000612dec600683613303565b9150612df782613794565b602082019050919050565b6000612e0f600683613303565b9150612e1a826137bd565b602082019050919050565b6000612e32600683613303565b9150612e3d826137e6565b602082019050919050565b6000612e55600683613303565b9150612e608261380f565b602082019050919050565b6000612e78602183613303565b9150612e8382613838565b604082019050919050565b6000612e9b602583613303565b9150612ea682613887565b604082019050919050565b6000612ebe6000836132f8565b9150612ec9826138d6565b600082019050919050565b6000612ee1602483613303565b9150612eec826138d9565b604082019050919050565b6000612f04602583613303565b9150612f0f82613928565b604082019050919050565b6000612f27601f83613303565b9150612f3282613977565b602082019050919050565b612f4681613467565b82525050565b612f5581613471565b82525050565b612f6481613481565b82525050565b6000612f7582612eb1565b9150819050919050565b6000602082019050612f946000830184612c49565b92915050565b6000604082019050612faf6000830185612c49565b612fbc6020830184612c49565b9392505050565b600060c082019050612fd86000830189612c49565b612fe56020830188612f3d565b612ff26040830187612cc5565b612fff6060830186612cc5565b61300c6080830185612c49565b61301960a0830184612f3d565b979650505050505050565b6000602082019050818103600083015261303e8184612c58565b905092915050565b600060208201905061305b6000830184612cb6565b92915050565b6000602082019050818103600083015261307b8184612cd4565b905092915050565b6000602082019050818103600083015261309c81612d0d565b9050919050565b600060208201905081810360008301526130bc81612d30565b9050919050565b600060208201905081810360008301526130dc81612d53565b9050919050565b600060208201905081810360008301526130fc81612d76565b9050919050565b6000602082019050818103600083015261311c81612d99565b9050919050565b6000602082019050818103600083015261313c81612dbc565b9050919050565b6000602082019050818103600083015261315c81612ddf565b9050919050565b6000602082019050818103600083015261317c81612e02565b9050919050565b6000602082019050818103600083015261319c81612e25565b9050919050565b600060208201905081810360008301526131bc81612e48565b9050919050565b600060208201905081810360008301526131dc81612e6b565b9050919050565b600060208201905081810360008301526131fc81612e8e565b9050919050565b6000602082019050818103600083015261321c81612ed4565b9050919050565b6000602082019050818103600083015261323c81612ef7565b9050919050565b6000602082019050818103600083015261325c81612f1a565b9050919050565b60006020820190506132786000830184612f3d565b92915050565b60006020820190506132936000830184612f4c565b92915050565b60006020820190506132ae6000830184612f5b565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061331f82613467565b915061332a83613467565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561335f5761335e613505565b5b828201905092915050565b600061337582613467565b915061338083613467565b9250826133905761338f613534565b5b828204905092915050565b60006133a682613467565b91506133b183613467565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ea576133e9613505565b5b828202905092915050565b600061340082613467565b915061340b83613467565b92508282101561341e5761341d613505565b5b828203905092915050565b600061343482613447565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b600061349982613467565b9050919050565b60005b838110156134be5780820151818401526020810190506134a3565b838111156134cd576000848401525b50505050565b600060028204905060018216806134eb57607f821691505b602082108114156134ff576134fe613563565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4552523a4f540000000000000000000000000000000000000000000000000000600082015250565b7f4552523a49460000000000000000000000000000000000000000000000000000600082015250565b7f4552523a4e410000000000000000000000000000000000000000000000000000600082015250565b7f4552523a4e440000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6139a981613429565b81146139b457600080fd5b50565b6139c081613467565b81146139cb57600080fd5b50565b6139d781613481565b81146139e257600080fd5b5056fea264697066735822122001890bdde37c5a298f5420154fff3c0bc61ebbdf38b8d5dee3fb6c857d10671264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000004c8ceb6f0378050a4288b814b3102ad70262edef0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000a3829891127dfc3774eabfa99dbc83dc915559ce000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000b444543454e5452454c4f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846524545424952440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d33dc1b0e19c141d77087b4af9d95ea4df0e3a4a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a56ebd30b457b2579f499fb5b92ac47d0b03f3b2000000000000000000000000460893389c98ef3bc949822fa2773acdae9527ec000000000000000000000000039d07245ba104d7dde1e167ed613ba1d2e3f499
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80637eb5c732116100f7578063c0c53b8b11610095578063d7517b1111610064578063d7517b1114610657578063dd62ed3e14610680578063e1c28bef146106bd578063e73a914c146106d4576101e6565b8063c0c53b8b146105be578063c2b7bbb6146105da578063c8502b2514610603578063cb8523c61461062e576101e6565b8063985da726116100d1578063985da726146104ee578063a457c2d714610519578063a9059cbb14610556578063bbb332ff14610593576101e6565b80637eb5c732146104815780638a8c523c146104ac57806395d89b41146104c3576101e6565b806339509351116101645780636e9960c31161013e5780636e9960c3146103c7578063704b6c02146103f257806370a082311461041b57806379cc679014610458576101e6565b8063395093511461033857806342966c68146103755780634bd2abb81461039e576101e6565b806318160ddd116101a057806318160ddd1461027c57806323b872dd146102a75780632e1a7d4d146102e4578063313ce5671461030d576101e6565b806306fdde03146101eb578063095ea7b3146102165780630b271d4014610253576101e6565b366101e65734600a60008282546101dd9190613314565b92505081905550005b600080fd5b3480156101f757600080fd5b506102006106fd565b60405161020d9190613061565b60405180910390f35b34801561022257600080fd5b5061023d60048036038101906102389190612b35565b61078f565b60405161024a9190613046565b60405180910390f35b34801561025f57600080fd5b5061027a600480360381019061027591906129f5565b6107b2565b005b34801561028857600080fd5b50610291610af6565b60405161029e9190613263565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190612ae2565b610b00565b6040516102db9190613046565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190612b75565b610b8e565b005b34801561031957600080fd5b50610322610d4e565b60405161032f9190613299565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190612b35565b610d57565b60405161036c9190613046565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190612b75565b610d8e565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612bf5565b610da2565b005b3480156103d357600080fd5b506103dc610f06565b6040516103e99190612f7f565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906129f5565b610f30565b005b34801561042757600080fd5b50610442600480360381019061043d91906129f5565b61103b565b60405161044f9190613263565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612b35565b611083565b005b34801561048d57600080fd5b506104966110a3565b6040516104a39190613024565b60405180910390f35b3480156104b857600080fd5b506104c1611131565b005b3480156104cf57600080fd5b506104d86111de565b6040516104e59190613061565b60405180910390f35b3480156104fa57600080fd5b50610503611270565b6040516105109190612f7f565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190612b35565b61129a565b60405161054d9190613046565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612b35565b611311565b60405161058a9190613046565b60405180910390f35b34801561059f57600080fd5b506105a86113fb565b6040516105b59190612f7f565b60405180910390f35b6105d860048036038101906105d39190612a8f565b611421565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906129f5565b611729565b005b34801561060f57600080fd5b50610618611814565b604051610625919061327e565b60405180910390f35b34801561063a57600080fd5b50610655600480360381019061065091906129f5565b61182e565b005b34801561066357600080fd5b5061067e600480360381019061067991906129f5565b611919565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612a4f565b611a9e565b6040516106b49190613263565b60405180910390f35b3480156106c957600080fd5b506106d2611b25565b005b3480156106e057600080fd5b506106fb60048036038101906106f691906129f5565b611be4565b005b60606003805461070c906134d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610738906134d3565b80156107855780601f1061075a57610100808354040283529160200191610785565b820191906000526020600020905b81548152906001019060200180831161076857829003601f168201915b5050505050905090565b60008061079a611e21565b90506107a7818585611e29565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083990613183565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905560005b6008805490508161ffff161015610af25760088161ffff16815481106108bd576108bc6135c1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ae55760088161ffff1681548110610933576109326135c1565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008600160088054905061097491906133f5565b81548110610985576109846135c1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088261ffff16815481106109c8576109c76135c1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060086001600880549050610a2491906133f5565b81548110610a3557610a346135c1565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008805480610a7457610a73613592565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590557fc9023b2beb32e899a5630badbcc6cd472bcf6b267382681db3afdcd20dd457e182604051610ad89190612f7f565b60405180910390a1610af2565b8080600101915050610894565b5050565b6000600254905090565b600080610b0b611e21565b9050610b18858285611ff4565b610b228585612080565b15610b7757600b60069054906101000a900460ff16610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d906130a3565b60405180910390fd5b5b610b828585856123ca565b60019150509392505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613183565b60405180910390fd5b80600a541015610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90613163565b60405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610cab90612f6a565b60006040518083038185875af1925050503d8060008114610ce8576040519150601f19603f3d011682016040523d82523d6000602084013e610ced565b606091505b5050905080610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890613143565b60405180910390fd5b81600a6000828254610d4391906133f5565b925050819055505050565b60006012905090565b600080610d62611e21565b9050610d83818585610d748589611a9e565b610d7e9190613314565b611e29565b600191505092915050565b610d9f610d99611e21565b8261264b565b50565b42600b60009054906101000a900463ffffffff1663ffffffff161115610e5757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613183565b60405180910390fd5b610ee8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ede906131a3565b60405180910390fd5b5b80600b60046101000a81548160ff021916908360ff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790613183565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c816040516110309190612f7f565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110958261108f611e21565b83611ff4565b61109f828261264b565b5050565b6060600880548060200260200160405190810160405280929190818152602001828054801561112757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110dd575b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b890613183565b60405180910390fd5b6001600b60066101000a81548160ff021916908315150217905550565b6060600480546111ed906134d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611219906134d3565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b5050505050905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806112a5611e21565b905060006112b38286611a9e565b9050838110156112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90613223565b60405180910390fd5b6113058286868403611e29565b60019250505092915050565b60008061131c611e21565b90506113288185612080565b1561137d57600b60069054906101000a900460ff1661137c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611373906130a3565b60405180910390fd5b5b60006103e8600b60049054906101000a900460ff1660ff16856113a0919061339b565b6113aa919061336a565b90506113c2828683876113bd91906133f5565b6123ca565b6113ef82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123ca565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613183565b60405180910390fd5b600081905060006b012936da2139ced85cc0000090506114d13082612822565b6114dc308483611e29565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161159b96959493929190612fc3565b6060604051808303818588803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906115ed9190612ba2565b505050600085905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390587306040518363ffffffff1660e01b8152600401611632929190612f9a565b60206040518083038186803b15801561164a57600080fd5b505afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190612a22565b90506001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611720600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846c0204fce5e3e25026110000000061171b91906133f5565b612822565b50505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090613183565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900463ffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590613183565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090613183565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fad586119e9bdcccbb2b603aae0446246f7bb9f2e931460d1c51531ad0e79170f81604051611a939190612f7f565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90613183565b60405180910390fd5b600a42611bc291906133f5565b600b60006101000a81548163ffffffff021916908363ffffffff160217905550565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90613183565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d575750600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611d565750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b5b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613183565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900460ff16611e1e57611e02816c0731c4f2fbd63d879c90000000612822565b6001600d60006101000a81548160ff0219169083151502179055505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090613203565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906130e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe79190613263565b60405180910390a3505050565b60006120008484611a9e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461207a578181101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613103565b60405180910390fd5b6120798484848403611e29565b5b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120e157600090506123c4565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561214057600090506123c4565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561219b57600090506123c4565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121f657600090506123c4565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561225157600090506123c4565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122ac57600090506123c4565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122e957600090506123c4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232757600090506123c4565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561238257600090506123c4565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123bf57600090506123c4565b600190505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906131e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a190613083565b60405180910390fd5b6124b5838383612982565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290613123565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ce9190613314565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126329190613263565b60405180910390a3612645848484612987565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b2906131c3565b60405180910390fd5b6126c782600083612982565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561274d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612744906130c3565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127a491906133f5565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128099190613263565b60405180910390a361281d83600084612987565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990613243565b60405180910390fd5b61289e60008383612982565b80600260008282546128b09190613314565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129059190613314565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161296a9190613263565b60405180910390a361297e60008383612987565b5050565b505050565b505050565b60008135905061299b816139a0565b92915050565b6000815190506129b0816139a0565b92915050565b6000813590506129c5816139b7565b92915050565b6000815190506129da816139b7565b92915050565b6000813590506129ef816139ce565b92915050565b600060208284031215612a0b57612a0a6135f0565b5b6000612a198482850161298c565b91505092915050565b600060208284031215612a3857612a376135f0565b5b6000612a46848285016129a1565b91505092915050565b60008060408385031215612a6657612a656135f0565b5b6000612a748582860161298c565b9250506020612a858582860161298c565b9150509250929050565b600080600060608486031215612aa857612aa76135f0565b5b6000612ab68682870161298c565b9350506020612ac78682870161298c565b9250506040612ad88682870161298c565b9150509250925092565b600080600060608486031215612afb57612afa6135f0565b5b6000612b098682870161298c565b9350506020612b1a8682870161298c565b9250506040612b2b868287016129b6565b9150509250925092565b60008060408385031215612b4c57612b4b6135f0565b5b6000612b5a8582860161298c565b9250506020612b6b858286016129b6565b9150509250929050565b600060208284031215612b8b57612b8a6135f0565b5b6000612b99848285016129b6565b91505092915050565b600080600060608486031215612bbb57612bba6135f0565b5b6000612bc9868287016129cb565b9350506020612bda868287016129cb565b9250506040612beb868287016129cb565b9150509250925092565b600060208284031215612c0b57612c0a6135f0565b5b6000612c19848285016129e0565b91505092915050565b6000612c2e8383612c3a565b60208301905092915050565b612c4381613429565b82525050565b612c5281613429565b82525050565b6000612c63826132c4565b612c6d81856132e7565b9350612c78836132b4565b8060005b83811015612ca9578151612c908882612c22565b9750612c9b836132da565b925050600181019050612c7c565b5085935050505092915050565b612cbf8161343b565b82525050565b612cce8161348e565b82525050565b6000612cdf826132cf565b612ce98185613303565b9350612cf98185602086016134a0565b612d02816135f5565b840191505092915050565b6000612d1a602383613303565b9150612d2582613606565b604082019050919050565b6000612d3d601883613303565b9150612d4882613655565b602082019050919050565b6000612d60602283613303565b9150612d6b8261367e565b604082019050919050565b6000612d83602283613303565b9150612d8e826136cd565b604082019050919050565b6000612da6601d83613303565b9150612db18261371c565b602082019050919050565b6000612dc9602683613303565b9150612dd482613745565b604082019050919050565b6000612dec600683613303565b9150612df782613794565b602082019050919050565b6000612e0f600683613303565b9150612e1a826137bd565b602082019050919050565b6000612e32600683613303565b9150612e3d826137e6565b602082019050919050565b6000612e55600683613303565b9150612e608261380f565b602082019050919050565b6000612e78602183613303565b9150612e8382613838565b604082019050919050565b6000612e9b602583613303565b9150612ea682613887565b604082019050919050565b6000612ebe6000836132f8565b9150612ec9826138d6565b600082019050919050565b6000612ee1602483613303565b9150612eec826138d9565b604082019050919050565b6000612f04602583613303565b9150612f0f82613928565b604082019050919050565b6000612f27601f83613303565b9150612f3282613977565b602082019050919050565b612f4681613467565b82525050565b612f5581613471565b82525050565b612f6481613481565b82525050565b6000612f7582612eb1565b9150819050919050565b6000602082019050612f946000830184612c49565b92915050565b6000604082019050612faf6000830185612c49565b612fbc6020830184612c49565b9392505050565b600060c082019050612fd86000830189612c49565b612fe56020830188612f3d565b612ff26040830187612cc5565b612fff6060830186612cc5565b61300c6080830185612c49565b61301960a0830184612f3d565b979650505050505050565b6000602082019050818103600083015261303e8184612c58565b905092915050565b600060208201905061305b6000830184612cb6565b92915050565b6000602082019050818103600083015261307b8184612cd4565b905092915050565b6000602082019050818103600083015261309c81612d0d565b9050919050565b600060208201905081810360008301526130bc81612d30565b9050919050565b600060208201905081810360008301526130dc81612d53565b9050919050565b600060208201905081810360008301526130fc81612d76565b9050919050565b6000602082019050818103600083015261311c81612d99565b9050919050565b6000602082019050818103600083015261313c81612dbc565b9050919050565b6000602082019050818103600083015261315c81612ddf565b9050919050565b6000602082019050818103600083015261317c81612e02565b9050919050565b6000602082019050818103600083015261319c81612e25565b9050919050565b600060208201905081810360008301526131bc81612e48565b9050919050565b600060208201905081810360008301526131dc81612e6b565b9050919050565b600060208201905081810360008301526131fc81612e8e565b9050919050565b6000602082019050818103600083015261321c81612ed4565b9050919050565b6000602082019050818103600083015261323c81612ef7565b9050919050565b6000602082019050818103600083015261325c81612f1a565b9050919050565b60006020820190506132786000830184612f3d565b92915050565b60006020820190506132936000830184612f4c565b92915050565b60006020820190506132ae6000830184612f5b565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061331f82613467565b915061332a83613467565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561335f5761335e613505565b5b828201905092915050565b600061337582613467565b915061338083613467565b9250826133905761338f613534565b5b828204905092915050565b60006133a682613467565b91506133b183613467565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ea576133e9613505565b5b828202905092915050565b600061340082613467565b915061340b83613467565b92508282101561341e5761341d613505565b5b828203905092915050565b600061343482613447565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b600061349982613467565b9050919050565b60005b838110156134be5780820151818401526020810190506134a3565b838111156134cd576000848401525b50505050565b600060028204905060018216806134eb57607f821691505b602082108114156134ff576134fe613563565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4552523a4f540000000000000000000000000000000000000000000000000000600082015250565b7f4552523a49460000000000000000000000000000000000000000000000000000600082015250565b7f4552523a4e410000000000000000000000000000000000000000000000000000600082015250565b7f4552523a4e440000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6139a981613429565b81146139b457600080fd5b50565b6139c081613467565b81146139cb57600080fd5b50565b6139d781613481565b81146139e257600080fd5b5056fea264697066735822122001890bdde37c5a298f5420154fff3c0bc61ebbdf38b8d5dee3fb6c857d10671264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000004c8ceb6f0378050a4288b814b3102ad70262edef0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000a3829891127dfc3774eabfa99dbc83dc915559ce000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000b444543454e5452454c4f4e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000846524545424952440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d33dc1b0e19c141d77087b4af9d95ea4df0e3a4a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a56ebd30b457b2579f499fb5b92ac47d0b03f3b2000000000000000000000000460893389c98ef3bc949822fa2773acdae9527ec000000000000000000000000039d07245ba104d7dde1e167ed613ba1d2e3f499
-----Decoded View---------------
Arg [0] : _name (string): DECENTRELON
Arg [1] : _symbol (string): FREEBIRD
Arg [2] : _admin (address): 0x4c8Ceb6f0378050A4288B814b3102aD70262EDEF
Arg [3] : _tempAdmins (address[]): 0xd33Dc1b0e19c141D77087b4Af9d95Ea4Df0E3A4A
Arg [4] : _liquidityLockAddr (address): 0xa3829891127dFC3774Eabfa99dbc83Dc915559CE
Arg [5] : _liquidityPercent (uint8): 4
Arg [6] : wallets (address[]): 0xA56ebd30B457b2579f499fb5B92aC47d0b03F3b2,0x460893389c98Ef3BC949822fa2773ACdae9527Ec,0x039D07245bA104d7dDe1E167eD613BA1d2e3F499
-----Encoded View---------------
17 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000004c8ceb6f0378050a4288b814b3102ad70262edef
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000a3829891127dfc3774eabfa99dbc83dc915559ce
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [8] : 444543454e5452454c4f4e000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [10] : 4652454542495244000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [12] : 000000000000000000000000d33dc1b0e19c141d77087b4af9d95ea4df0e3a4a
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [14] : 000000000000000000000000a56ebd30b457b2579f499fb5b92ac47d0b03f3b2
Arg [15] : 000000000000000000000000460893389c98ef3bc949822fa2773acdae9527ec
Arg [16] : 000000000000000000000000039d07245ba104d7dde1e167ed613ba1d2e3f499
Deployed Bytecode Sourcemap
28503:22978:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50710:9;50699:7;;:20;;;;;;;:::i;:::-;;;;;;;;28503:22978;;;;;7220:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9571:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38135:671;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8340:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48172:535;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50956:522;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8182:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11056:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18604:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40924:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43175:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40622:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8511:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19014:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42509:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36426:84;;;;;;;;;;;;;:::i;:::-;;7439:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43475:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11797:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48819:944;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29344:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38814:1583;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36518:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42856:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36615:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9100:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36940:108;;;;;;;;;;;;;:::i;:::-;;41396:793;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7220:100;7274:13;7307:5;7300:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7220:100;:::o;9571:201::-;9654:4;9671:13;9687:12;:10;:12::i;:::-;9671:28;;9710:32;9719:5;9726:7;9735:6;9710:8;:32::i;:::-;9760:4;9753:11;;;9571:201;;;;:::o;38135:671::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38219:16:::1;:30;38236:12;38219:30;;;;;;;;;;;;;;;;38212:37;;;;;;;;;;;38265:8;38260:539;38283:10;:17;;;;38279:1;:21;;;38260:539;;;38339:10;38350:1;38339:13;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38323:29;;:12;:29;;;38319:330;;;38380:10;38391:1;38380:13;;;;;;;;;;:::i;:::-;;;;;;;;;;38373:20;;;;;;;;;;;38428:10;38459:1;38439:10;:17;;;;:21;;;;:::i;:::-;38428:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38412:10;38423:1;38412:13;;;;;;;;;;:::i;:::-;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;38487:10;38518:1;38498:10;:17;;;;:21;;;;:::i;:::-;38487:33;;;;;;;;:::i;:::-;;;;;;;;;;38480:40;;;;;;;;;;;38539:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;38579:30;38596:12;38579:30;;;;;;:::i;:::-;;;;;;;;38628:5;;38319:330;38769:3;;;;;;;38260:539;;;;38135:671:::0;:::o;8340:108::-;8401:7;8428:12;;8421:19;;8340:108;:::o;48172:535::-;48303:4;48320:15;48338:12;:10;:12::i;:::-;48320:30;;48361:38;48377:4;48383:7;48392:6;48361:15;:38::i;:::-;48433:20;48444:4;48450:2;48433:10;:20::i;:::-;48430:190;;;48524:14;;;;;;;;;;;48520:89;;48559:34;;;;;;;;;;:::i;:::-;;;;;;;;48520:89;48430:190;48650:27;48660:4;48666:2;48670:6;48650:9;:27::i;:::-;48695:4;48688:11;;;48172:535;;;;;:::o;50956:522::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51121:6:::1;51110:7;;:17;;51102:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;51230:12;51248:5;;;;;;;;;;;:10;;51266:6;51248:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51229:48;;;51348:7;51340:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;51464:6;51453:7;;:17;;;;;;;:::i;:::-;;;;;;;;51009:469;50956:522:::0;:::o;8182:93::-;8240:5;8265:2;8258:9;;8182:93;:::o;11056:238::-;11144:4;11161:13;11177:12;:10;:12::i;:::-;11161:28;;11200:64;11209:5;11216:7;11253:10;11225:25;11235:5;11242:7;11225:9;:25::i;:::-;:38;;;;:::i;:::-;11200:8;:64::i;:::-;11282:4;11275:11;;;11056:238;;;;:::o;18604:91::-;18660:27;18666:12;:10;:12::i;:::-;18680:6;18660:5;:27::i;:::-;18604:91;:::o;40924:363::-;41006:15;40993:10;;;;;;;;;;;:28;;;40989:203;;;41060:5;;;;;;;;;;;41046:19;;:10;:19;;;41038:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40989:203;;;41150:3;;;;;;;;;;;41136:17;;:10;:17;;;41128:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;40989:203;41271:8;41252:16;;:27;;;;;;;;;;;;;;;;;;40924:363;:::o;43175:83::-;43218:7;43245:5;;;;;;;;;;;43238:12;;43175:83;:::o;40622:112::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40692:4:::1;40684:5;;:12;;;;;;;;;;;;;;;;;;40712:14;40721:4;40712:14;;;;;;:::i;:::-;;;;;;;;40622:112:::0;:::o;8511:127::-;8585:7;8612:9;:18;8622:7;8612:18;;;;;;;;;;;;;;;;8605:25;;8511:127;;;:::o;19014:164::-;19091:46;19107:7;19116:12;:10;:12::i;:::-;19130:6;19091:15;:46::i;:::-;19148:22;19154:7;19163:6;19148:5;:22::i;:::-;19014:164;;:::o;42509:102::-;42557:16;42593:10;42586:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42509:102;:::o;36426:84::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36498:4:::1;36481:14;;:21;;;;;;;;;;;;;;;;;;36426:84::o:0;7439:104::-;7495:13;7528:7;7521:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7439:104;:::o;43475:79::-;43516:7;43543:3;;;;;;;;;;;43536:10;;43475:79;:::o;11797:436::-;11890:4;11907:13;11923:12;:10;:12::i;:::-;11907:28;;11946:24;11973:25;11983:5;11990:7;11973:9;:25::i;:::-;11946:52;;12037:15;12017:16;:35;;12009:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12130:60;12139:5;12146:7;12174:15;12155:16;:34;12130:8;:60::i;:::-;12221:4;12214:11;;;;11797:436;;;;:::o;48819:944::-;48934:4;49027:13;49043:12;:10;:12::i;:::-;49027:28;;49071:21;49082:5;49089:2;49071:10;:21::i;:::-;49068:191;;;49163:14;;;;;;;;;;;49159:89;;49198:34;;;;;;;;;;:::i;:::-;;;;;;;;49159:89;49068:191;49309:20;49362:4;49342:16;;;;;;;;;;;49333:25;;:6;:25;;;;:::i;:::-;49332:34;;;;:::i;:::-;49309:57;;49475:43;49485:5;49492:2;49505:12;49496:6;:21;;;;:::i;:::-;49475:9;:43::i;:::-;49618:54;49628:5;49635:22;;;;;;;;;;;49659:12;49618:9;:54::i;:::-;49751:4;49744:11;;;;48819:944;;;;:::o;29344:37::-;;;;;;;;;;;;;:::o;38814:1583::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39179:25:::1;39226:14;39179:62;;39303:17;39323:20;39303:40;;39395:32;39409:4;39416:9;39395:5;:32::i;:::-;39507:50;39524:4;39531:14;39547:9;39507:8;:50::i;:::-;39635:4;39607:9;:25;39617:14;39607:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;39759:6;:22;;;39789:9;39822:4;39842:9;39866:1;39882::::0;39898:22:::1;;;;;;;;;;;39935:15;39759:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40021:25;40067:15;40021:62;;40126:12;40141:7;:15;;;40157:7;40173:4;40141:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40126:53;;40251:4;40236:6;:12;40243:4;40236:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;40306:81;40312:22;;;;;;;;;;;40377:9;40337:36;40336:50;;;;:::i;:::-;40306:5;:81::i;:::-;38961:1436;;;;38814:1583:::0;;;:::o;36518:89::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36595:4:::1;36579:6;:13;36586:5;36579:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;36518:89:::0;:::o;42856:92::-;42904:6;42930:10;;;;;;;;;;;42923:17;;42856:92;:::o;36615:95::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36698:4:::1;36679:9;:16;36689:5;36679:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36615:95:::0;:::o;37346:169::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37437:4:::1;37412:16;:22;37429:4;37412:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37452:10;37468:4;37452:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37489:18;37502:4;37489:18;;;;;;:::i;:::-;;;;;;;;37346:169:::0;:::o;9100:151::-;9189:7;9216:11;:18;9228:5;9216:18;;;;;;;;;;;;;;;:27;9235:7;9216:27;;;;;;;;;;;;;;;;9209:34;;9100:151;;;;:::o;36940:108::-;36363:5;;;;;;;;;;;36349:19;;:10;:19;;;36341:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37037:2:::1;37019:15;:20;;;;:::i;:::-;36999:10;;:41;;;;;;;;;;;;;;;;;;36940:108::o:0;41396:793::-;41552:3;41536:20;;:4;:20;;;;41528:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41769:3;;;;;;;;;;;41755:17;;:10;:17;;;41754:67;;;;41793:3;41778:19;;:3;;;;;;;;;;;:19;;;:42;;;;;41815:5;;;;;;;;;;;41801:19;;:10;:19;;;41778:42;41754:67;41732:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;41949:4;41943:3;;:10;;;;;;;;;;;;;;;;;;42067:6;;;;;;;;;;;42063:119;;42089:53;42095:4;42101:39;42089:5;:53::i;:::-;42166:4;42157:6;;:13;;;;;;;;;;;;;;;;;;42063:119;41396:793;:::o;4854:98::-;4907:7;4934:10;4927:17;;4854:98;:::o;15431:380::-;15584:1;15567:19;;:5;:19;;;;15559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15665:1;15646:21;;:7;:21;;;;15638:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15749:6;15719:11;:18;15731:5;15719:18;;;;;;;;;;;;;;;:27;15738:7;15719:27;;;;;;;;;;;;;;;:36;;;;15787:7;15771:32;;15780:5;15771:32;;;15796:6;15771:32;;;;;;:::i;:::-;;;;;;;;15431:380;;;:::o;16102:453::-;16237:24;16264:25;16274:5;16281:7;16264:9;:25::i;:::-;16237:52;;16324:17;16304:16;:37;16300:248;;16386:6;16366:16;:26;;16358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16470:51;16479:5;16486:7;16514:6;16495:16;:25;16470:8;:51::i;:::-;16300:248;16226:329;16102:453;;;:::o;47392:772::-;47460:4;47487:5;;;;;;;;;;;47479:13;;:4;:13;;;47476:681;;;47515:5;47508:12;;;;47476:681;47546:5;;;;;;;;;;;47540:11;;:2;:11;;;47537:620;;;47574:5;47567:12;;;;47537:620;47599:16;:22;47616:4;47599:22;;;;;;;;;;;;;;;;;;;;;;;;;47596:561;;;47644:5;47637:12;;;;47596:561;47669:16;:20;47686:2;47669:20;;;;;;;;;;;;;;;;;;;;;;;;;47666:491;;;47712:5;47705:12;;;;47666:491;47737:9;:15;47747:4;47737:15;;;;;;;;;;;;;;;;;;;;;;;;;47734:423;;;47775:5;47768:12;;;;47734:423;47800:9;:13;47810:2;47800:13;;;;;;;;;;;;;;;;;;;;;;;;;47797:360;;;47836:5;47829:12;;;;47797:360;47878:4;47862:21;;:4;:21;;;47858:299;;;47906:5;47899:12;;;;47858:299;47945:1;47931:16;;:2;:16;;;47928:229;;;47970:5;47963:12;;;;47928:229;47995:6;:12;48002:4;47995:12;;;;;;;;;;;;;;;;;;;;;;;;;47992:165;;;48030:5;48023:12;;;;47992:165;48069:4;48055:19;;:2;:19;;;48052:105;;;48097:5;48090:12;;;;48052:105;48141:4;48134:11;;47392:772;;;;;:::o;12712:671::-;12859:1;12843:18;;:4;:18;;;;12835:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12936:1;12922:16;;:2;:16;;;;12914:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12991:38;13012:4;13018:2;13022:6;12991:20;:38::i;:::-;13042:19;13064:9;:15;13074:4;13064:15;;;;;;;;;;;;;;;;13042:37;;13113:6;13098:11;:21;;13090:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13230:6;13216:11;:20;13198:9;:15;13208:4;13198:15;;;;;;;;;;;;;;;:38;;;;13275:6;13258:9;:13;13268:2;13258:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;13314:2;13299:26;;13308:4;13299:26;;;13318:6;13299:26;;;;;;:::i;:::-;;;;;;;;13338:37;13358:4;13364:2;13368:6;13338:19;:37::i;:::-;12824:559;12712:671;;;:::o;14402:591::-;14505:1;14486:21;;:7;:21;;;;14478:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14558:49;14579:7;14596:1;14600:6;14558:20;:49::i;:::-;14620:22;14645:9;:18;14655:7;14645:18;;;;;;;;;;;;;;;;14620:43;;14700:6;14682:14;:24;;14674:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14819:6;14802:14;:23;14781:9;:18;14791:7;14781:18;;;;;;;;;;;;;;;:44;;;;14863:6;14847:12;;:22;;;;;;;:::i;:::-;;;;;;;;14913:1;14887:37;;14896:7;14887:37;;;14917:6;14887:37;;;;;;:::i;:::-;;;;;;;;14937:48;14957:7;14974:1;14978:6;14937:19;:48::i;:::-;14467:526;14402:591;;:::o;13670:399::-;13773:1;13754:21;;:7;:21;;;;13746:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13824:49;13853:1;13857:7;13866:6;13824:20;:49::i;:::-;13902:6;13886:12;;:22;;;;;;;:::i;:::-;;;;;;;;13941:6;13919:9;:18;13929:7;13919:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13984:7;13963:37;;13980:1;13963:37;;;13993:6;13963:37;;;;;;:::i;:::-;;;;;;;;14013:48;14041:1;14045:7;14054:6;14013:19;:48::i;:::-;13670:399;;:::o;17155:125::-;;;;:::o;17884:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:139::-;347:5;385:6;372:20;363:29;;401:33;428:5;401:33;:::i;:::-;301:139;;;;:::o;446:143::-;503:5;534:6;528:13;519:22;;550:33;577:5;550:33;:::i;:::-;446:143;;;;:::o;595:135::-;639:5;677:6;664:20;655:29;;693:31;718:5;693:31;:::i;:::-;595:135;;;;:::o;736:329::-;795:6;844:2;832:9;823:7;819:23;815:32;812:119;;;850:79;;:::i;:::-;812:119;970:1;995:53;1040:7;1031:6;1020:9;1016:22;995:53;:::i;:::-;985:63;;941:117;736:329;;;;:::o;1071:351::-;1141:6;1190:2;1178:9;1169:7;1165:23;1161:32;1158:119;;;1196:79;;:::i;:::-;1158:119;1316:1;1341:64;1397:7;1388:6;1377:9;1373:22;1341:64;:::i;:::-;1331:74;;1287:128;1071:351;;;;:::o;1428:474::-;1496:6;1504;1553:2;1541:9;1532:7;1528:23;1524:32;1521:119;;;1559:79;;:::i;:::-;1521:119;1679:1;1704:53;1749:7;1740:6;1729:9;1725:22;1704:53;:::i;:::-;1694:63;;1650:117;1806:2;1832:53;1877:7;1868:6;1857:9;1853:22;1832:53;:::i;:::-;1822:63;;1777:118;1428:474;;;;;:::o;1908:619::-;1985:6;1993;2001;2050:2;2038:9;2029:7;2025:23;2021:32;2018:119;;;2056:79;;:::i;:::-;2018:119;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2303:2;2329:53;2374:7;2365:6;2354:9;2350:22;2329:53;:::i;:::-;2319:63;;2274:118;2431:2;2457:53;2502:7;2493:6;2482:9;2478:22;2457:53;:::i;:::-;2447:63;;2402:118;1908:619;;;;;:::o;2533:::-;2610:6;2618;2626;2675:2;2663:9;2654:7;2650:23;2646:32;2643:119;;;2681:79;;:::i;:::-;2643:119;2801:1;2826:53;2871:7;2862:6;2851:9;2847:22;2826:53;:::i;:::-;2816:63;;2772:117;2928:2;2954:53;2999:7;2990:6;2979:9;2975:22;2954:53;:::i;:::-;2944:63;;2899:118;3056:2;3082:53;3127:7;3118:6;3107:9;3103:22;3082:53;:::i;:::-;3072:63;;3027:118;2533:619;;;;;:::o;3158:474::-;3226:6;3234;3283:2;3271:9;3262:7;3258:23;3254:32;3251:119;;;3289:79;;:::i;:::-;3251:119;3409:1;3434:53;3479:7;3470:6;3459:9;3455:22;3434:53;:::i;:::-;3424:63;;3380:117;3536:2;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3507:118;3158:474;;;;;:::o;3638:329::-;3697:6;3746:2;3734:9;3725:7;3721:23;3717:32;3714:119;;;3752:79;;:::i;:::-;3714:119;3872:1;3897:53;3942:7;3933:6;3922:9;3918:22;3897:53;:::i;:::-;3887:63;;3843:117;3638:329;;;;:::o;3973:663::-;4061:6;4069;4077;4126:2;4114:9;4105:7;4101:23;4097:32;4094:119;;;4132:79;;:::i;:::-;4094:119;4252:1;4277:64;4333:7;4324:6;4313:9;4309:22;4277:64;:::i;:::-;4267:74;;4223:128;4390:2;4416:64;4472:7;4463:6;4452:9;4448:22;4416:64;:::i;:::-;4406:74;;4361:129;4529:2;4555:64;4611:7;4602:6;4591:9;4587:22;4555:64;:::i;:::-;4545:74;;4500:129;3973:663;;;;;:::o;4642:325::-;4699:6;4748:2;4736:9;4727:7;4723:23;4719:32;4716:119;;;4754:79;;:::i;:::-;4716:119;4874:1;4899:51;4942:7;4933:6;4922:9;4918:22;4899:51;:::i;:::-;4889:61;;4845:115;4642:325;;;;:::o;4973:179::-;5042:10;5063:46;5105:3;5097:6;5063:46;:::i;:::-;5141:4;5136:3;5132:14;5118:28;;4973:179;;;;:::o;5158:108::-;5235:24;5253:5;5235:24;:::i;:::-;5230:3;5223:37;5158:108;;:::o;5272:118::-;5359:24;5377:5;5359:24;:::i;:::-;5354:3;5347:37;5272:118;;:::o;5426:732::-;5545:3;5574:54;5622:5;5574:54;:::i;:::-;5644:86;5723:6;5718:3;5644:86;:::i;:::-;5637:93;;5754:56;5804:5;5754:56;:::i;:::-;5833:7;5864:1;5849:284;5874:6;5871:1;5868:13;5849:284;;;5950:6;5944:13;5977:63;6036:3;6021:13;5977:63;:::i;:::-;5970:70;;6063:60;6116:6;6063:60;:::i;:::-;6053:70;;5909:224;5896:1;5893;5889:9;5884:14;;5849:284;;;5853:14;6149:3;6142:10;;5550:608;;;5426:732;;;;:::o;6164:109::-;6245:21;6260:5;6245:21;:::i;:::-;6240:3;6233:34;6164:109;;:::o;6279:147::-;6374:45;6413:5;6374:45;:::i;:::-;6369:3;6362:58;6279:147;;:::o;6432:364::-;6520:3;6548:39;6581:5;6548:39;:::i;:::-;6603:71;6667:6;6662:3;6603:71;:::i;:::-;6596:78;;6683:52;6728:6;6723:3;6716:4;6709:5;6705:16;6683:52;:::i;:::-;6760:29;6782:6;6760:29;:::i;:::-;6755:3;6751:39;6744:46;;6524:272;6432:364;;;;:::o;6802:366::-;6944:3;6965:67;7029:2;7024:3;6965:67;:::i;:::-;6958:74;;7041:93;7130:3;7041:93;:::i;:::-;7159:2;7154:3;7150:12;7143:19;;6802:366;;;:::o;7174:::-;7316:3;7337:67;7401:2;7396:3;7337:67;:::i;:::-;7330:74;;7413:93;7502:3;7413:93;:::i;:::-;7531:2;7526:3;7522:12;7515:19;;7174:366;;;:::o;7546:::-;7688:3;7709:67;7773:2;7768:3;7709:67;:::i;:::-;7702:74;;7785:93;7874:3;7785:93;:::i;:::-;7903:2;7898:3;7894:12;7887:19;;7546:366;;;:::o;7918:::-;8060:3;8081:67;8145:2;8140:3;8081:67;:::i;:::-;8074:74;;8157:93;8246:3;8157:93;:::i;:::-;8275:2;8270:3;8266:12;8259:19;;7918:366;;;:::o;8290:::-;8432:3;8453:67;8517:2;8512:3;8453:67;:::i;:::-;8446:74;;8529:93;8618:3;8529:93;:::i;:::-;8647:2;8642:3;8638:12;8631:19;;8290:366;;;:::o;8662:::-;8804:3;8825:67;8889:2;8884:3;8825:67;:::i;:::-;8818:74;;8901:93;8990:3;8901:93;:::i;:::-;9019:2;9014:3;9010:12;9003:19;;8662:366;;;:::o;9034:365::-;9176:3;9197:66;9261:1;9256:3;9197:66;:::i;:::-;9190:73;;9272:93;9361:3;9272:93;:::i;:::-;9390:2;9385:3;9381:12;9374:19;;9034:365;;;:::o;9405:::-;9547:3;9568:66;9632:1;9627:3;9568:66;:::i;:::-;9561:73;;9643:93;9732:3;9643:93;:::i;:::-;9761:2;9756:3;9752:12;9745:19;;9405:365;;;:::o;9776:::-;9918:3;9939:66;10003:1;9998:3;9939:66;:::i;:::-;9932:73;;10014:93;10103:3;10014:93;:::i;:::-;10132:2;10127:3;10123:12;10116:19;;9776:365;;;:::o;10147:::-;10289:3;10310:66;10374:1;10369:3;10310:66;:::i;:::-;10303:73;;10385:93;10474:3;10385:93;:::i;:::-;10503:2;10498:3;10494:12;10487:19;;10147:365;;;:::o;10518:366::-;10660:3;10681:67;10745:2;10740:3;10681:67;:::i;:::-;10674:74;;10757:93;10846:3;10757:93;:::i;:::-;10875:2;10870:3;10866:12;10859:19;;10518:366;;;:::o;10890:::-;11032:3;11053:67;11117:2;11112:3;11053:67;:::i;:::-;11046:74;;11129:93;11218:3;11129:93;:::i;:::-;11247:2;11242:3;11238:12;11231:19;;10890:366;;;:::o;11262:398::-;11421:3;11442:83;11523:1;11518:3;11442:83;:::i;:::-;11435:90;;11534:93;11623:3;11534:93;:::i;:::-;11652:1;11647:3;11643:11;11636:18;;11262:398;;;:::o;11666:366::-;11808:3;11829:67;11893:2;11888:3;11829:67;:::i;:::-;11822:74;;11905:93;11994:3;11905:93;:::i;:::-;12023:2;12018:3;12014:12;12007:19;;11666:366;;;:::o;12038:::-;12180:3;12201:67;12265:2;12260:3;12201:67;:::i;:::-;12194:74;;12277:93;12366:3;12277:93;:::i;:::-;12395:2;12390:3;12386:12;12379:19;;12038:366;;;:::o;12410:::-;12552:3;12573:67;12637:2;12632:3;12573:67;:::i;:::-;12566:74;;12649:93;12738:3;12649:93;:::i;:::-;12767:2;12762:3;12758:12;12751:19;;12410:366;;;:::o;12782:118::-;12869:24;12887:5;12869:24;:::i;:::-;12864:3;12857:37;12782:118;;:::o;12906:115::-;12991:23;13008:5;12991:23;:::i;:::-;12986:3;12979:36;12906:115;;:::o;13027:112::-;13110:22;13126:5;13110:22;:::i;:::-;13105:3;13098:35;13027:112;;:::o;13145:379::-;13329:3;13351:147;13494:3;13351:147;:::i;:::-;13344:154;;13515:3;13508:10;;13145:379;;;:::o;13530:222::-;13623:4;13661:2;13650:9;13646:18;13638:26;;13674:71;13742:1;13731:9;13727:17;13718:6;13674:71;:::i;:::-;13530:222;;;;:::o;13758:332::-;13879:4;13917:2;13906:9;13902:18;13894:26;;13930:71;13998:1;13987:9;13983:17;13974:6;13930:71;:::i;:::-;14011:72;14079:2;14068:9;14064:18;14055:6;14011:72;:::i;:::-;13758:332;;;;;:::o;14096:807::-;14345:4;14383:3;14372:9;14368:19;14360:27;;14397:71;14465:1;14454:9;14450:17;14441:6;14397:71;:::i;:::-;14478:72;14546:2;14535:9;14531:18;14522:6;14478:72;:::i;:::-;14560:80;14636:2;14625:9;14621:18;14612:6;14560:80;:::i;:::-;14650;14726:2;14715:9;14711:18;14702:6;14650:80;:::i;:::-;14740:73;14808:3;14797:9;14793:19;14784:6;14740:73;:::i;:::-;14823;14891:3;14880:9;14876:19;14867:6;14823:73;:::i;:::-;14096:807;;;;;;;;;:::o;14909:373::-;15052:4;15090:2;15079:9;15075:18;15067:26;;15139:9;15133:4;15129:20;15125:1;15114:9;15110:17;15103:47;15167:108;15270:4;15261:6;15167:108;:::i;:::-;15159:116;;14909:373;;;;:::o;15288:210::-;15375:4;15413:2;15402:9;15398:18;15390:26;;15426:65;15488:1;15477:9;15473:17;15464:6;15426:65;:::i;:::-;15288:210;;;;:::o;15504:313::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:78;15805:4;15796:6;15732:78;:::i;:::-;15724:86;;15504:313;;;;:::o;15823:419::-;15989:4;16027:2;16016:9;16012:18;16004:26;;16076:9;16070:4;16066:20;16062:1;16051:9;16047:17;16040:47;16104:131;16230:4;16104:131;:::i;:::-;16096:139;;15823:419;;;:::o;16248:::-;16414:4;16452:2;16441:9;16437:18;16429:26;;16501:9;16495:4;16491:20;16487:1;16476:9;16472:17;16465:47;16529:131;16655:4;16529:131;:::i;:::-;16521:139;;16248:419;;;:::o;16673:::-;16839:4;16877:2;16866:9;16862:18;16854:26;;16926:9;16920:4;16916:20;16912:1;16901:9;16897:17;16890:47;16954:131;17080:4;16954:131;:::i;:::-;16946:139;;16673:419;;;:::o;17098:::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:::-;17689:4;17727:2;17716:9;17712:18;17704:26;;17776:9;17770:4;17766:20;17762:1;17751:9;17747:17;17740:47;17804:131;17930:4;17804:131;:::i;:::-;17796:139;;17523:419;;;:::o;17948:::-;18114:4;18152:2;18141:9;18137:18;18129:26;;18201:9;18195:4;18191:20;18187:1;18176:9;18172:17;18165:47;18229:131;18355:4;18229:131;:::i;:::-;18221:139;;17948:419;;;:::o;18373:::-;18539:4;18577:2;18566:9;18562:18;18554:26;;18626:9;18620:4;18616:20;18612:1;18601:9;18597:17;18590:47;18654:131;18780:4;18654:131;:::i;:::-;18646:139;;18373:419;;;:::o;18798:::-;18964:4;19002:2;18991:9;18987:18;18979:26;;19051:9;19045:4;19041:20;19037:1;19026:9;19022:17;19015:47;19079:131;19205:4;19079:131;:::i;:::-;19071:139;;18798:419;;;:::o;19223:::-;19389:4;19427:2;19416:9;19412:18;19404:26;;19476:9;19470:4;19466:20;19462:1;19451:9;19447:17;19440:47;19504:131;19630:4;19504:131;:::i;:::-;19496:139;;19223:419;;;:::o;19648:::-;19814:4;19852:2;19841:9;19837:18;19829:26;;19901:9;19895:4;19891:20;19887:1;19876:9;19872:17;19865:47;19929:131;20055:4;19929:131;:::i;:::-;19921:139;;19648:419;;;:::o;20073:::-;20239:4;20277:2;20266:9;20262:18;20254:26;;20326:9;20320:4;20316:20;20312:1;20301:9;20297:17;20290:47;20354:131;20480:4;20354:131;:::i;:::-;20346:139;;20073:419;;;:::o;20498:::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:::-;21089:4;21127:2;21116:9;21112:18;21104:26;;21176:9;21170:4;21166:20;21162:1;21151:9;21147:17;21140:47;21204:131;21330:4;21204:131;:::i;:::-;21196:139;;20923:419;;;:::o;21348:::-;21514:4;21552:2;21541:9;21537:18;21529:26;;21601:9;21595:4;21591:20;21587:1;21576:9;21572:17;21565:47;21629:131;21755:4;21629:131;:::i;:::-;21621:139;;21348:419;;;:::o;21773:::-;21939:4;21977:2;21966:9;21962:18;21954:26;;22026:9;22020:4;22016:20;22012:1;22001:9;21997:17;21990:47;22054:131;22180:4;22054:131;:::i;:::-;22046:139;;21773:419;;;:::o;22198:222::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22342:71;22410:1;22399:9;22395:17;22386:6;22342:71;:::i;:::-;22198:222;;;;:::o;22426:218::-;22517:4;22555:2;22544:9;22540:18;22532:26;;22568:69;22634:1;22623:9;22619:17;22610:6;22568:69;:::i;:::-;22426:218;;;;:::o;22650:214::-;22739:4;22777:2;22766:9;22762:18;22754:26;;22790:67;22854:1;22843:9;22839:17;22830:6;22790:67;:::i;:::-;22650:214;;;;:::o;22951:132::-;23018:4;23041:3;23033:11;;23071:4;23066:3;23062:14;23054:22;;22951:132;;;:::o;23089:114::-;23156:6;23190:5;23184:12;23174:22;;23089:114;;;:::o;23209:99::-;23261:6;23295:5;23289:12;23279:22;;23209:99;;;:::o;23314:113::-;23384:4;23416;23411:3;23407:14;23399:22;;23314:113;;;:::o;23433:184::-;23532:11;23566:6;23561:3;23554:19;23606:4;23601:3;23597:14;23582:29;;23433:184;;;;:::o;23623:147::-;23724:11;23761:3;23746:18;;23623:147;;;;:::o;23776:169::-;23860:11;23894:6;23889:3;23882:19;23934:4;23929:3;23925:14;23910:29;;23776:169;;;;:::o;23951:305::-;23991:3;24010:20;24028:1;24010:20;:::i;:::-;24005:25;;24044:20;24062:1;24044:20;:::i;:::-;24039:25;;24198:1;24130:66;24126:74;24123:1;24120:81;24117:107;;;24204:18;;:::i;:::-;24117:107;24248:1;24245;24241:9;24234:16;;23951:305;;;;:::o;24262:185::-;24302:1;24319:20;24337:1;24319:20;:::i;:::-;24314:25;;24353:20;24371:1;24353:20;:::i;:::-;24348:25;;24392:1;24382:35;;24397:18;;:::i;:::-;24382:35;24439:1;24436;24432:9;24427:14;;24262:185;;;;:::o;24453:348::-;24493:7;24516:20;24534:1;24516:20;:::i;:::-;24511:25;;24550:20;24568:1;24550:20;:::i;:::-;24545:25;;24738:1;24670:66;24666:74;24663:1;24660:81;24655:1;24648:9;24641:17;24637:105;24634:131;;;24745:18;;:::i;:::-;24634:131;24793:1;24790;24786:9;24775:20;;24453:348;;;;:::o;24807:191::-;24847:4;24867:20;24885:1;24867:20;:::i;:::-;24862:25;;24901:20;24919:1;24901:20;:::i;:::-;24896:25;;24940:1;24937;24934:8;24931:34;;;24945:18;;:::i;:::-;24931:34;24990:1;24987;24983:9;24975:17;;24807:191;;;;:::o;25004:96::-;25041:7;25070:24;25088:5;25070:24;:::i;:::-;25059:35;;25004:96;;;:::o;25106:90::-;25140:7;25183:5;25176:13;25169:21;25158:32;;25106:90;;;:::o;25202:126::-;25239:7;25279:42;25272:5;25268:54;25257:65;;25202:126;;;:::o;25334:77::-;25371:7;25400:5;25389:16;;25334:77;;;:::o;25417:93::-;25453:7;25493:10;25486:5;25482:22;25471:33;;25417:93;;;:::o;25516:86::-;25551:7;25591:4;25584:5;25580:16;25569:27;;25516:86;;;:::o;25608:121::-;25666:9;25699:24;25717:5;25699:24;:::i;:::-;25686:37;;25608:121;;;:::o;25735:307::-;25803:1;25813:113;25827:6;25824:1;25821:13;25813:113;;;25912:1;25907:3;25903:11;25897:18;25893:1;25888:3;25884:11;25877:39;25849:2;25846:1;25842:10;25837:15;;25813:113;;;25944:6;25941:1;25938:13;25935:101;;;26024:1;26015:6;26010:3;26006:16;25999:27;25935:101;25784:258;25735:307;;;:::o;26048:320::-;26092:6;26129:1;26123:4;26119:12;26109:22;;26176:1;26170:4;26166:12;26197:18;26187:81;;26253:4;26245:6;26241:17;26231:27;;26187:81;26315:2;26307:6;26304:14;26284:18;26281:38;26278:84;;;26334:18;;:::i;:::-;26278:84;26099:269;26048:320;;;:::o;26374:180::-;26422:77;26419:1;26412:88;26519:4;26516:1;26509:15;26543:4;26540:1;26533:15;26560:180;26608:77;26605:1;26598:88;26705:4;26702:1;26695:15;26729:4;26726:1;26719:15;26746:180;26794:77;26791:1;26784:88;26891:4;26888:1;26881:15;26915:4;26912:1;26905:15;26932:180;26980:77;26977:1;26970:88;27077:4;27074:1;27067:15;27101:4;27098:1;27091:15;27118:180;27166:77;27163:1;27156:88;27263:4;27260:1;27253:15;27287:4;27284:1;27277:15;27427:117;27536:1;27533;27526:12;27550:102;27591:6;27642:2;27638:7;27633:2;27626:5;27622:14;27618:28;27608:38;;27550:102;;;:::o;27658:222::-;27798:34;27794:1;27786:6;27782:14;27775:58;27867:5;27862:2;27854:6;27850:15;27843:30;27658:222;:::o;27886:174::-;28026:26;28022:1;28014:6;28010:14;28003:50;27886:174;:::o;28066:221::-;28206:34;28202:1;28194:6;28190:14;28183:58;28275:4;28270:2;28262:6;28258:15;28251:29;28066:221;:::o;28293:::-;28433:34;28429:1;28421:6;28417:14;28410:58;28502:4;28497:2;28489:6;28485:15;28478:29;28293:221;:::o;28520:179::-;28660:31;28656:1;28648:6;28644:14;28637:55;28520:179;:::o;28705:225::-;28845:34;28841:1;28833:6;28829:14;28822:58;28914:8;28909:2;28901:6;28897:15;28890:33;28705:225;:::o;28936:156::-;29076:8;29072:1;29064:6;29060:14;29053:32;28936:156;:::o;29098:::-;29238:8;29234:1;29226:6;29222:14;29215:32;29098:156;:::o;29260:::-;29400:8;29396:1;29388:6;29384:14;29377:32;29260:156;:::o;29422:::-;29562:8;29558:1;29550:6;29546:14;29539:32;29422:156;:::o;29584:220::-;29724:34;29720:1;29712:6;29708:14;29701:58;29793:3;29788:2;29780:6;29776:15;29769:28;29584:220;:::o;29810:224::-;29950:34;29946:1;29938:6;29934:14;29927:58;30019:7;30014:2;30006:6;30002:15;29995:32;29810:224;:::o;30040:114::-;;:::o;30160:223::-;30300:34;30296:1;30288:6;30284:14;30277:58;30369:6;30364:2;30356:6;30352:15;30345:31;30160:223;:::o;30389:224::-;30529:34;30525:1;30517:6;30513:14;30506:58;30598:7;30593:2;30585:6;30581:15;30574:32;30389:224;:::o;30619:181::-;30759:33;30755:1;30747:6;30743:14;30736:57;30619:181;:::o;30806:122::-;30879:24;30897:5;30879:24;:::i;:::-;30872:5;30869:35;30859:63;;30918:1;30915;30908:12;30859:63;30806:122;:::o;30934:::-;31007:24;31025:5;31007:24;:::i;:::-;31000:5;30997:35;30987:63;;31046:1;31043;31036:12;30987:63;30934:122;:::o;31062:118::-;31133:22;31149:5;31133:22;:::i;:::-;31126:5;31123:33;31113:61;;31170:1;31167;31160:12;31113:61;31062:118;:::o
Swarm Source
ipfs://01890bdde37c5a298f5420154fff3c0bc61ebbdf38b8d5dee3fb6c857d106712
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.