Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000 SHIN
Holders
308
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,137.033864158129947538 SHINValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ShinsekaiToken
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface IUniswapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapRouter02 is IUniswapRouter01 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } 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); } 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) { _transfer(msg.sender, 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) { _approve(msg.sender, 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) { _approve( msg.sender, spender, allowance(msg.sender, spender) + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = allowance(msg.sender, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(msg.sender, 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 {} } interface IUniswapV2Pair { function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); } contract ShinsekaiToken is ERC20, Ownable { address payable public marketingFeesAddress; address payable public devFeesAddress1; address payable public devFeesAddress2; mapping(address => bool) public isExcludedFromFee; mapping(address => bool) public limited; uint16 public buyLpTax = 200; // 100 = 1% uint16 public buyMarketingTax = 200; uint16 public buyDevTax1 = 150; uint16 public buyDevTax2 = 50; uint16 public sellLiquidityTax = 200; uint16 public sellMarketingTax = 200; uint16 public sellDevTax1 = 150; uint16 public sellDevTax2 = 50; uint256 private _liquidityTokensToSwap; uint256 private _marketingFeeTokensToSwap; uint256 private _devFeeTokens; mapping(address => bool) public automatedMarketMakerPairs; uint256 public swappingThreshold; IUniswapRouter02 public immutable uniswapRouter; address public immutable uniswapPair; bool inSwapAndLiquify; address deployer; uint256 public maxWallet; bool public isTradeOpen; mapping(address => bool) bot; modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyDeployer() { require(msg.sender == deployer, "Only deployer"); _; } constructor() ERC20("Shinsekai", "SHIN") { deployer = msg.sender; uint256 startingSupply = 1e7 * 10**decimals(); // 10m _mint(msg.sender, startingSupply); maxWallet = startingSupply / 100; // 1% max wallet marketingFeesAddress = payable( 0xE1DBfF87Dfc873CA24099653D399Bc97EF7c97A6 ); devFeesAddress1 = payable(0x44a309C6eFdC8906d625C712bA4BfA9548E45e02); devFeesAddress2 = payable(0xea4d9462977361f95f697Cc89DfC3350399315be); swappingThreshold = 100; address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; uniswapRouter = IUniswapRouter02(payable(routerAddress)); uniswapPair = IFactory(uniswapRouter.factory()).createPair( address(this), uniswapRouter.WETH() ); isExcludedFromFee[msg.sender] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[marketingFeesAddress] = true; isExcludedFromFee[devFeesAddress1] = true; isExcludedFromFee[devFeesAddress2] = true; isExcludedFromFee[routerAddress] = true; limit = 0.3 ether; limitPeriod = 1 days; _approve(msg.sender, routerAddress, ~uint256(0)); _setAutomatedMarketMakerPair(uniswapPair, true); _approve(address(this), address(uniswapRouter), type(uint256).max); } function flipTradeOpen() external onlyOwner { isTradeOpen = !isTradeOpen; if (start == 0) { start = block.number; } } function setMaxWallet(uint256 maxWallet_) external onlyOwner { maxWallet = maxWallet_; } function setSwappingThreshold(uint256 swappingThreshold_) external onlyOwner { swappingThreshold = swappingThreshold_; } function addBots(address[] calldata bots) external onlyOwner { for (uint256 i = 0; i < bots.length; i++) { bot[bots[i]] = true; } } function removeBots(address[] calldata bots) external onlyOwner { for (uint256 i = 0; i < bots.length; i++) { bot[bots[i]] = false; } } uint256 start; mapping(address => uint256) b; function removeB(address account) external onlyOwner { b[account] = 0; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapPair, "The pair cannot be removed"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function excludeFromFee(address account) external onlyOwner { isExcludedFromFee[account] = true; } function excludeFromFeeArray(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { isExcludedFromFee[accounts[i]] = true; } } function includeInFee(address account) external onlyOwner { isExcludedFromFee[account] = false; } function includeInFeeArray(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { isExcludedFromFee[accounts[i]] = false; } } function setBuyFee( uint16 _buyLpTax, uint16 _buyMarketingTax, uint16 _buyDevTax1, uint16 _buyDevTax2 ) external onlyOwner { buyLpTax = _buyLpTax; buyMarketingTax = _buyMarketingTax; buyDevTax1 = _buyDevTax1; buyDevTax2 = _buyDevTax2; } function setSellFee( uint16 _sellLiquidityTax, uint16 _sellMarketingTax, uint16 _sellDevTax1, uint16 _sellDevTax2 ) external onlyOwner { sellLiquidityTax = _sellLiquidityTax; sellMarketingTax = _sellMarketingTax; sellDevTax1 = _sellDevTax1; sellDevTax2 = _sellDevTax2; } function setMarketingFeesAddress(address marketingFeesAddress_) external onlyOwner { require(marketingFeesAddress_ != address(0), "Can't set 0"); marketingFeesAddress = payable(marketingFeesAddress_); } function setDevFeesAddress1(address devFeesAddress_) external onlyOwner { require(devFeesAddress_ != address(0), "Can't set 0"); devFeesAddress1 = payable(devFeesAddress_); } function setDevFeesAddress2(address devFeesAddress_) external onlyOwner { require(devFeesAddress_ != address(0), "Can't set 0"); devFeesAddress2 = payable(devFeesAddress_); } function addLimited(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { limited[accounts[i]] = true; } } function removeLimited(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { limited[accounts[i]] = false; } } function _transfer( address from, address to, uint256 amount ) internal override { require(!bot[from] && !bot[to], "Bot is not allowed to trade"); require(b[from] == 0 || block.timestamp <= b[from] + 1); if (block.timestamp <= start + 1) { if (automatedMarketMakerPairs[from]) b[to] = block.timestamp; require( automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from] ); } if (!inSwapAndLiquify && automatedMarketMakerPairs[to]) { uint256 contractTokenBalance = balanceOf(address(this)); uint256 threshold = (balanceOf(uniswapPair) * swappingThreshold) / 10000; if (contractTokenBalance >= threshold * 10) takeFee(contractTokenBalance); } uint256 _liquidityFee; uint256 _marketingFee; uint256 _devFee; if (!isExcludedFromFee[from] && !isExcludedFromFee[to]) { require(isTradeOpen || limited[to], "Trading is not open yet"); // Buy if (automatedMarketMakerPairs[from]) { _liquidityFee = (amount * buyLpTax) / 10000; _marketingFee = (amount * buyMarketingTax) / 10000; _devFee = (amount * (buyDevTax1 + buyDevTax2)) / 10000; require( balanceOf(to) + amount <= maxWallet, "Amount exceeds max wallet size" ); } // Sell else if (automatedMarketMakerPairs[to]) { _liquidityFee = (amount * sellLiquidityTax) / 10000; _marketingFee = (amount * sellMarketingTax) / 10000; _devFee = (amount * (sellDevTax1 + sellDevTax2)) / 10000; } else { require( balanceOf(to) + amount <= maxWallet, "Amount exceeds max wallet size" ); } } uint256 _feeTotal = _liquidityFee + _marketingFee + _devFee; uint256 _transferAmount = amount - _feeTotal; _handleLimited(from, _transferAmount); super._transfer(from, to, _transferAmount); if (_feeTotal > 0) { super._transfer(from, address(this), _feeTotal); _liquidityTokensToSwap += _liquidityFee; _marketingFeeTokensToSwap += _marketingFee; _devFeeTokens += _devFee; } } function takeFee(uint256 tokenAmount) private lockTheSwap { uint256 totalTokensTaken = _liquidityTokensToSwap + _marketingFeeTokensToSwap + _devFeeTokens; if (totalTokensTaken == 0) { return; } uint256 tokensForLiquidity = (tokenAmount * (_liquidityTokensToSwap / 2)) / totalTokensTaken; uint256 toSwap = tokenAmount - tokensForLiquidity; swapTokensForETH(toSwap); uint256 ethBalance = address(this).balance; uint256 ethForMarketing = (ethBalance * _marketingFeeTokensToSwap) / totalTokensTaken; uint256 ethForDev = (ethBalance * _devFeeTokens) / totalTokensTaken; uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; if (tokensForLiquidity > 0 && ethForLiquidity > 0) { addLiquidity(tokensForLiquidity, ethForLiquidity); } bool success; (success, ) = address(marketingFeesAddress).call{ value: ethForMarketing, gas: 40000 }(""); uint256 ethForDev1 = (ethForDev * buyDevTax1) / (buyDevTax1 + buyDevTax2); uint256 ethForDev2 = ethForDev - ethForDev1; (success, ) = address(devFeesAddress1).call{ value: ethForDev1, gas: 40000 }(""); (success, ) = address(devFeesAddress2).call{ value: ethForDev2, gas: 40000 }(""); _liquidityTokensToSwap = 0; _marketingFeeTokensToSwap = 0; _devFeeTokens = 0; } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { uniswapRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, deployer, block.timestamp ); } // Limits, only applying to team wallets, to prevent dumps mapping(address => LimitedWallet) private _limits; uint256 public limit; uint256 public limitPeriod; bool public limitsActive = true; struct LimitedWallet { uint256[] sellAmounts; uint256[] sellTimestamps; } function setLimits(uint256 newLimit) external onlyOwner { limit = newLimit; } function setLimitPeriod(uint256 newPeriod) external onlyOwner { limitPeriod = newPeriod; } function flipLimits() external onlyOwner { limitsActive = !limitsActive; } function getWalletStatus(address _address) external view returns (LimitedWallet memory) { return _limits[_address]; } // Can be used to check how much a wallet sold in their timeframe function getSoldLastPeriod(address _address) public view returns (uint256 sellAmount) { uint256 numberOfSells = _limits[_address].sellAmounts.length; if (numberOfSells == 0) { return sellAmount; } while (true) { if (numberOfSells == 0) { break; } numberOfSells--; uint256 sellTimestamp = _limits[_address].sellTimestamps[ numberOfSells ]; if (block.timestamp - limitPeriod <= sellTimestamp) { sellAmount += _limits[_address].sellAmounts[numberOfSells]; } else { break; } } } // Handle private sale wallets function _handleLimited(address from, uint256 taxedAmount) private { if (!limited[from] || !limitsActive) { return; } uint256 ethValue = getETHValue(taxedAmount); _limits[from].sellTimestamps.push(block.timestamp); _limits[from].sellAmounts.push(ethValue); uint256 soldAmountLastPeriod = getSoldLastPeriod(from); require(soldAmountLastPeriod <= limit, "Can't sell that much"); } function getETHValue(uint256 tokenAmount) public view returns (uint256 ethValue) { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); ethValue = uniswapRouter.getAmountsOut(tokenAmount, path)[1]; } receive() external payable {} function withdrawETH() external onlyDeployer { payable(msg.sender).transfer(address(this).balance); } function withdrawTokens(IERC20 tokenAddress, address walletAddress) external onlyDeployer { require( walletAddress != address(0), "walletAddress can't be 0 address" ); uint256 tokenBalance = tokenAddress.balanceOf(address(this)); tokenAddress.transfer(walletAddress, tokenBalance); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addLimited","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax1","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax2","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLpTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeesAddress1","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeesAddress2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeFromFeeArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipTradeOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getETHValue","outputs":[{"internalType":"uint256","name":"ethValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getSoldLastPeriod","outputs":[{"internalType":"uint256","name":"sellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getWalletStatus","outputs":[{"components":[{"internalType":"uint256[]","name":"sellAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"sellTimestamps","type":"uint256[]"}],"internalType":"struct ShinsekaiToken.LimitedWallet","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"includeInFeeArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeesAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax1","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax2","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyLpTax","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingTax","type":"uint16"},{"internalType":"uint16","name":"_buyDevTax1","type":"uint16"},{"internalType":"uint16","name":"_buyDevTax2","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devFeesAddress_","type":"address"}],"name":"setDevFeesAddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devFeesAddress_","type":"address"}],"name":"setDevFeesAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setLimitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingFeesAddress_","type":"address"}],"name":"setMarketingFeesAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet_","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellLiquidityTax","type":"uint16"},{"internalType":"uint16","name":"_sellMarketingTax","type":"uint16"},{"internalType":"uint16","name":"_sellDevTax1","type":"uint16"},{"internalType":"uint16","name":"_sellDevTax2","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swappingThreshold_","type":"uint256"}],"name":"setSwappingThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swappingThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletAddress","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260c8600b60006101000a81548161ffff021916908361ffff16021790555060c8600b60026101000a81548161ffff021916908361ffff1602179055506096600b60046101000a81548161ffff021916908361ffff1602179055506032600b60066101000a81548161ffff021916908361ffff16021790555060c8600b60086101000a81548161ffff021916908361ffff16021790555060c8600b600a6101000a81548161ffff021916908361ffff1602179055506096600b600c6101000a81548161ffff021916908361ffff1602179055506032600b600e6101000a81548161ffff021916908361ffff1602179055506001601a60006101000a81548160ff0219169083151502179055503480156200011c57600080fd5b506040518060400160405280600981526020017f5368696e73656b616900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5348494e0000000000000000000000000000000000000000000000000000000081525081600390816200019a919062000f4e565b508060049081620001ac919062000f4e565b505050620001cf620001c36200084f60201b60201c565b6200085760201b60201c565b33601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000620002226200091d60201b60201c565b600a620002309190620011c5565b6298968062000240919062001216565b90506200025433826200092660201b60201c565b60648162000263919062001290565b60128190555073e1dbff87dfc873ca24099653d399bc97ef7c97a6600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344a309c6efdc8906d625c712ba4bfa9548e45e02600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ea4d9462977361f95f697cc89dfc3350399315be600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060646010819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000431919062001332565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c1919062001332565b6040518363ffffffff1660e01b8152600401620004e092919062001375565b6020604051808303816000875af115801562000500573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000526919062001332565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550670429d069189e000060188190555062015180601981905550620007fd338260001962000a9e60201b60201c565b6200081260a051600162000c6f60201b60201c565b62000847306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a9e60201b60201c565b5050620015be565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000998576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098f9062001403565b60405180910390fd5b620009ac6000838362000cca60201b60201c565b8060026000828254620009c0919062001425565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a17919062001425565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7e919062001471565b60405180910390a362000a9a6000838362000ccf60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b079062001504565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b79906200159c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c62919062001471565b60405180910390a3505050565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d5657607f821691505b60208210810362000d6c5762000d6b62000d0e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dd67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d97565b62000de2868362000d97565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e2f62000e2962000e238462000dfa565b62000e04565b62000dfa565b9050919050565b6000819050919050565b62000e4b8362000e0e565b62000e6362000e5a8262000e36565b84845462000da4565b825550505050565b600090565b62000e7a62000e6b565b62000e8781848462000e40565b505050565b5b8181101562000eaf5762000ea360008262000e70565b60018101905062000e8d565b5050565b601f82111562000efe5762000ec88162000d72565b62000ed38462000d87565b8101602085101562000ee3578190505b62000efb62000ef28562000d87565b83018262000e8c565b50505b505050565b600082821c905092915050565b600062000f236000198460080262000f03565b1980831691505092915050565b600062000f3e838362000f10565b9150826002028217905092915050565b62000f598262000cd4565b67ffffffffffffffff81111562000f755762000f7462000cdf565b5b62000f81825462000d3d565b62000f8e82828562000eb3565b600060209050601f83116001811462000fc6576000841562000fb1578287015190505b62000fbd858262000f30565b8655506200102d565b601f19841662000fd68662000d72565b60005b82811015620010005784890151825560018201915060208501945060208101905062000fd9565b868310156200102057848901516200101c601f89168262000f10565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010c3578086048111156200109b576200109a62001035565b5b6001851615620010ab5780820291505b8081029050620010bb8562001064565b94506200107b565b94509492505050565b600082620010de5760019050620011b1565b81620010ee5760009050620011b1565b8160018114620011075760028114620011125762001148565b6001915050620011b1565b60ff84111562001127576200112662001035565b5b8360020a91508482111562001141576200114062001035565b5b50620011b1565b5060208310610133831016604e8410600b8410161715620011825782820a9050838111156200117c576200117b62001035565b5b620011b1565b62001191848484600162001071565b92509050818404811115620011ab57620011aa62001035565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011d28262000dfa565b9150620011df83620011b8565b92506200120e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010cc565b905092915050565b6000620012238262000dfa565b9150620012308362000dfa565b9250828202620012408162000dfa565b915082820484148315176200125a576200125962001035565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200129d8262000dfa565b9150620012aa8362000dfa565b925082620012bd57620012bc62001261565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012fa82620012cd565b9050919050565b6200130c81620012ed565b81146200131857600080fd5b50565b6000815190506200132c8162001301565b92915050565b6000602082840312156200134b576200134a620012c8565b5b60006200135b848285016200131b565b91505092915050565b6200136f81620012ed565b82525050565b60006040820190506200138c600083018562001364565b6200139b602083018462001364565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013eb601f83620013a2565b9150620013f882620013b3565b602082019050919050565b600060208201905081810360008301526200141e81620013dc565b9050919050565b6000620014328262000dfa565b91506200143f8362000dfa565b92508282019050808211156200145a576200145962001035565b5b92915050565b6200146b8162000dfa565b82525050565b600060208201905062001488600083018462001460565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620014ec602483620013a2565b9150620014f9826200148e565b604082019050919050565b600060208201905081810360008301526200151f81620014dd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001584602283620013a2565b9150620015918262001526565b604082019050919050565b60006020820190508181036000830152620015b78162001575565b9050919050565b60805160a051615ddc62001615600039600081816122380152818161276b01526135c6015260008181611d1e0152818161295401528181612a310152818161441d015281816144fa01526145920152615ddc6000f3fe6080604052600436106103b15760003560e01c8063735de9f7116101e7578063b85a7ab91161010d578063e086e5ec116100a0578063f2a694311161006f578063f2a6943114610def578063f2fde38b14610e1a578063f8b45b0514610e43578063fd44e69814610e6e576103b8565b8063e086e5ec14610d47578063e96db1ef14610d5e578063e9a1b3ce14610d89578063ea2f0b3714610dc6576103b8565b8063d34628cc116100dc578063d34628cc14610c7b578063d5bda32d14610ca4578063dd62ed3e14610ce1578063dea3d57814610d1e576103b8565b8063b85a7ab914610bd1578063c2e9060114610bfc578063c816841b14610c25578063cf84b2d614610c50576103b8565b80639a7a23d611610185578063a763f9a611610154578063a763f9a614610b03578063a9059cbb14610b2e578063ae96ffe614610b6b578063b62496f514610b94576103b8565b80639a7a23d614610a49578063a457c2d714610a72578063a4d66daf14610aaf578063a522ad2514610ada576103b8565b80638da5cb5b116101c15780638da5cb5b146109a15780638dc64439146109cc57806395d89b41146109f557806399cd1ece14610a20576103b8565b8063735de9f71461090e5780638b16549a146109395780638c26a4cf14610976576103b8565b806334cc7aa4116102d75780635d0044ca1161026a5780636ab91206116102395780636ab91206146108665780636c3bbfd71461089157806370a08231146108ba578063715018a6146108f7576103b8565b80635d0044ca146107be5780635de593cd146107e75780636090144414610824578063675757ff1461084f576103b8565b8063527084ad116102a6578063527084ad146107045780635342acb41461072f57806353ca37fa1461076c5780635bcbe87714610795576103b8565b806334cc7aa41461064c57806339509351146106755780633f60b426146106b2578063437823ec146106db576103b8565b80631cce34ee1161034f5780632f9066a41161031e5780632f9066a4146105a2578063313ce567146105cb57806331970ace146105f65780633301241114610621576103b8565b80631cce34ee146104e457806320c635b51461050f57806323b872dd1461053a57806327ff8cfa14610577576103b8565b8063095ea7b31161038b578063095ea7b31461043c5780630a08c524146104795780630cd7acc1146104a257806318160ddd146104b9576103b8565b806302728108146103bd57806306b9ec65146103e657806306fdde0314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df91906146f7565b610e97565b005b3480156103f257600080fd5b506103fb610fc6565b6040516104089190614741565b60405180910390f35b34801561041d57600080fd5b50610426610fda565b60405161043391906147ec565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190614844565b61106c565b604051610470919061489f565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906148ba565b611083565b005b3480156104ae57600080fd5b506104b7611109565b005b3480156104c557600080fd5b506104ce6111b1565b6040516104db91906148f6565b60405180910390f35b3480156104f057600080fd5b506104f96111bb565b604051610506919061489f565b60405180910390f35b34801561051b57600080fd5b506105246111ce565b6040516105319190614932565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c919061494d565b6111f4565b60405161056e919061489f565b60405180910390f35b34801561058357600080fd5b5061058c611223565b6040516105999190614741565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614a05565b611237565b005b3480156105d757600080fd5b506105e0611358565b6040516105ed9190614a6e565b60405180910390f35b34801561060257600080fd5b5061060b611361565b6040516106189190614741565b60405180910390f35b34801561062d57600080fd5b50610636611375565b6040516106439190614741565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614a05565b611389565b005b34801561068157600080fd5b5061069c60048036038101906106979190614844565b6114aa565b6040516106a9919061489f565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906146f7565b6114d5565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906146f7565b611599565b005b34801561071057600080fd5b50610719611670565b6040516107269190614741565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906146f7565b611684565b604051610763919061489f565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614a05565b6116a4565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190614ab5565b6117c5565b005b3480156107ca57600080fd5b506107e560048036038101906107e091906148ba565b6118bb565b005b3480156107f357600080fd5b5061080e600480360381019061080991906146f7565b611941565b60405161081b9190614c1e565b60405180910390f35b34801561083057600080fd5b50610839611a4a565b604051610846919061489f565b60405180910390f35b34801561085b57600080fd5b50610864611a5d565b005b34801561087257600080fd5b5061087b611b17565b6040516108889190614741565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190614a05565b611b2b565b005b3480156108c657600080fd5b506108e160048036038101906108dc91906146f7565b611c4c565b6040516108ee91906148f6565b60405180910390f35b34801561090357600080fd5b5061090c611c94565b005b34801561091a57600080fd5b50610923611d1c565b6040516109309190614c9f565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b91906146f7565b611d40565b60405161096d91906148f6565b60405180910390f35b34801561098257600080fd5b5061098b611eb3565b6040516109989190614932565b60405180910390f35b3480156109ad57600080fd5b506109b6611ed9565b6040516109c39190614cc9565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee9190614ab5565b611f03565b005b348015610a0157600080fd5b50610a0a611ff9565b604051610a1791906147ec565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a4291906146f7565b61208b565b005b348015610a5557600080fd5b50610a706004803603810190610a6b9190614d10565b6121ba565b005b348015610a7e57600080fd5b50610a996004803603810190610a949190614844565b6122d2565b604051610aa6919061489f565b60405180910390f35b348015610abb57600080fd5b50610ac461233c565b604051610ad191906148f6565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614d8e565b612342565b005b348015610b0f57600080fd5b50610b18612543565b604051610b259190614741565b60405180910390f35b348015610b3a57600080fd5b50610b556004803603810190610b509190614844565b612557565b604051610b62919061489f565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906148ba565b61256e565b005b348015610ba057600080fd5b50610bbb6004803603810190610bb691906146f7565b6125f4565b604051610bc8919061489f565b60405180910390f35b348015610bdd57600080fd5b50610be6612614565b604051610bf39190614932565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e91906146f7565b61263a565b005b348015610c3157600080fd5b50610c3a612769565b604051610c479190614cc9565b60405180910390f35b348015610c5c57600080fd5b50610c6561278d565b604051610c7291906148f6565b60405180910390f35b348015610c8757600080fd5b50610ca26004803603810190610c9d9190614a05565b612793565b005b348015610cb057600080fd5b50610ccb6004803603810190610cc691906148ba565b6128b4565b604051610cd891906148f6565b60405180910390f35b348015610ced57600080fd5b50610d086004803603810190610d039190614dce565b612af3565b604051610d1591906148f6565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906148ba565b612b7a565b005b348015610d5357600080fd5b50610d5c612c00565b005b348015610d6a57600080fd5b50610d73612cd9565b604051610d809190614741565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab91906146f7565b612ced565b604051610dbd919061489f565b60405180910390f35b348015610dd257600080fd5b50610ded6004803603810190610de891906146f7565b612d0d565b005b348015610dfb57600080fd5b50610e04612de4565b604051610e1191906148f6565b60405180910390f35b348015610e2657600080fd5b50610e416004803603810190610e3c91906146f7565b612dea565b005b348015610e4f57600080fd5b50610e58612ee1565b604051610e6591906148f6565b60405180910390f35b348015610e7a57600080fd5b50610e956004803603810190610e909190614a05565b612ee7565b005b610e9f613008565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990614ec6565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900461ffff1681565b606060038054610fe990614f15565b80601f016020809104026020016040519081016040528092919081815260200182805461101590614f15565b80156110625780601f1061103757610100808354040283529160200191611062565b820191906000526020600020905b81548152906001019060200180831161104557829003601f168201915b5050505050905090565b6000611079338484613010565b6001905092915050565b61108b613008565b73ffffffffffffffffffffffffffffffffffffffff166110a9611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690614e5a565b60405180910390fd5b8060108190555050565b611111613008565b73ffffffffffffffffffffffffffffffffffffffff1661112f611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614e5a565b60405180910390fd5b601a60009054906101000a900460ff1615601a60006101000a81548160ff021916908315150217905550565b6000600254905090565b601a60009054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111ff613008565b905061120c8582856131d9565b611217858585613265565b60019150509392505050565b600b60049054906101000a900461ffff1681565b61123f613008565b73ffffffffffffffffffffffffffffffffffffffff1661125d611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90614e5a565b60405180910390fd5b60005b82829050811015611353576000600a60008585858181106112da576112d9614f46565b5b90506020020160208101906112ef91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061134b90614fa4565b9150506112b6565b505050565b60006012905090565b600b600e9054906101000a900461ffff1681565b600b60029054906101000a900461ffff1681565b611391613008565b73ffffffffffffffffffffffffffffffffffffffff166113af611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc90614e5a565b60405180910390fd5b60005b828290508110156114a5576001600a600085858581811061142c5761142b614f46565b5b905060200201602081019061144191906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061149d90614fa4565b915050611408565b505050565b60006114cb3384846114bc3388612af3565b6114c69190614fec565b613010565b6001905092915050565b6114dd613008565b73ffffffffffffffffffffffffffffffffffffffff166114fb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890614e5a565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6115a1613008565b73ffffffffffffffffffffffffffffffffffffffff166115bf611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614e5a565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b60069054906101000a900461ffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6116ac613008565b73ffffffffffffffffffffffffffffffffffffffff166116ca611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790614e5a565b60405180910390fd5b60005b828290508110156117c05760006009600085858581811061174757611746614f46565b5b905060200201602081019061175c91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117b890614fa4565b915050611723565b505050565b6117cd613008565b73ffffffffffffffffffffffffffffffffffffffff166117eb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614e5a565b60405180910390fd5b83600b60086101000a81548161ffff021916908361ffff16021790555082600b600a6101000a81548161ffff021916908361ffff16021790555081600b600c6101000a81548161ffff021916908361ffff16021790555080600b600e6101000a81548161ffff021916908361ffff16021790555050505050565b6118c3613008565b73ffffffffffffffffffffffffffffffffffffffff166118e1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614e5a565b60405180910390fd5b8060128190555050565b61194961466b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156119e257602002820191906000526020600020905b8154815260200190600101908083116119ce575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a3a57602002820191906000526020600020905b815481526020019060010190808311611a26575b5050505050815250509050919050565b601360009054906101000a900460ff1681565b611a65613008565b73ffffffffffffffffffffffffffffffffffffffff16611a83611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090614e5a565b60405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550600060155403611b1557436015819055505b565b600b60089054906101000a900461ffff1681565b611b33613008565b73ffffffffffffffffffffffffffffffffffffffff16611b51611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614e5a565b60405180910390fd5b60005b82829050811015611c4757600060146000858585818110611bce57611bcd614f46565b5b9050602002016020810190611be391906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c3f90614fa4565b915050611baa565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c9c613008565b73ffffffffffffffffffffffffffffffffffffffff16611cba611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614e5a565b60405180910390fd5b611d1a6000613acc565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060008103611d995750611eae565b5b600115611eac576000810315611eac578080611db590615020565b9150506000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018281548110611e0e57611e0d614f46565b5b906000526020600020015490508060195442611e2a9190615049565b11611ea057601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110611e8357611e82614f46565b5b906000526020600020015483611e999190614fec565b9250611ea6565b50611eac565b50611d9a565b505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f0b613008565b73ffffffffffffffffffffffffffffffffffffffff16611f29611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614e5a565b60405180910390fd5b83600b60006101000a81548161ffff021916908361ffff16021790555082600b60026101000a81548161ffff021916908361ffff16021790555081600b60046101000a81548161ffff021916908361ffff16021790555080600b60066101000a81548161ffff021916908361ffff16021790555050505050565b60606004805461200890614f15565b80601f016020809104026020016040519081016040528092919081815260200182805461203490614f15565b80156120815780601f1061205657610100808354040283529160200191612081565b820191906000526020600020905b81548152906001019060200180831161206457829003601f168201915b5050505050905090565b612093613008565b73ffffffffffffffffffffffffffffffffffffffff166120b1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614ec6565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121c2613008565b73ffffffffffffffffffffffffffffffffffffffff166121e0611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222d90614e5a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906150c9565b60405180910390fd5b6122ce8282613b92565b5050565b6000806122df3385612af3565b905082811015612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061515b565b60405180910390fd5b6123313385858403613010565b600191505092915050565b60185481565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890615233565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161247c9190614cc9565b602060405180830381865afa158015612499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bd9190615268565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016124fa929190615295565b6020604051808303816000875af1158015612519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253d91906152d3565b50505050565b600b600c9054906101000a900461ffff1681565b6000612564338484613265565b6001905092915050565b612576613008565b73ffffffffffffffffffffffffffffffffffffffff16612594611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614e5a565b60405180910390fd5b8060188190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612642613008565b73ffffffffffffffffffffffffffffffffffffffff16612660611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c90614ec6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105481565b61279b613008565b73ffffffffffffffffffffffffffffffffffffffff166127b9611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614e5a565b60405180910390fd5b60005b828290508110156128af5760016014600085858581811061283657612835614f46565b5b905060200201602081019061284b91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806128a790614fa4565b915050612812565b505050565b600080600267ffffffffffffffff8111156128d2576128d1615300565b5b6040519080825280602002602001820160405280156129005781602001602082028036833780820191505090505b509050308160008151811061291857612917614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e19190615344565b816001815181106129f5576129f4614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401612a8a92919061542f565b600060405180830381865afa158015612aa7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612ad0919061556e565b600181518110612ae357612ae2614f46565b5b6020026020010151915050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b82613008565b73ffffffffffffffffffffffffffffffffffffffff16612ba0611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed90614e5a565b60405180910390fd5b8060198190555050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906151c7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612cd6573d6000803e3d6000fd5b50565b600b600a9054906101000a900461ffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b612d15613008565b73ffffffffffffffffffffffffffffffffffffffff16612d33611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614e5a565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60195481565b612df2613008565b73ffffffffffffffffffffffffffffffffffffffff16612e10611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90615629565b60405180910390fd5b612ede81613acc565b50565b60125481565b612eef613008565b73ffffffffffffffffffffffffffffffffffffffff16612f0d611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5a90614e5a565b60405180910390fd5b60005b8282905081101561300357600160096000858585818110612f8a57612f89614f46565b5b9050602002016020810190612f9f91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612ffb90614fa4565b915050612f66565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613076906156bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e59061574d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131cc91906148f6565b60405180910390a3505050565b60006131e58484612af3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461325f5781811015613251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613248906157b9565b60405180910390fd5b61325e8484848403613010565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133095750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333f90615825565b60405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806133e157506001601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dd9190614fec565b4211155b6133ea57600080fd5b60016015546133f99190614fec565b421161354157600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156134965742601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135375750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61354057600080fd5b5b601160009054906101000a900460ff161580156135a75750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136205760006135b730611c4c565b905060006127106010546135ea7f0000000000000000000000000000000000000000000000000000000000000000611c4c565b6135f49190615845565b6135fe91906158b6565b9050600a8161360d9190615845565b821061361d5761361c82613bed565b5b50505b6000806000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136c95750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a2257601360009054906101000a900460ff16806137325750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376890615933565b60405180910390fd5b600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138c857612710600b60009054906101000a900461ffff1661ffff16856137e69190615845565b6137f091906158b6565b9250612710600b60029054906101000a900461ffff1661ffff16856138159190615845565b61381f91906158b6565b9150612710600b60069054906101000a900461ffff16600b60049054906101000a900461ffff166138509190615953565b61ffff168561385f9190615845565b61386991906158b6565b90506012548461387887611c4c565b6138829190614fec565b11156138c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ba906159d5565b60405180910390fd5b613a21565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139c757612710600b60089054906101000a900461ffff1661ffff168561393d9190615845565b61394791906158b6565b9250612710600b600a9054906101000a900461ffff1661ffff168561396c9190615845565b61397691906158b6565b9150612710600b600e9054906101000a900461ffff16600b600c9054906101000a900461ffff166139a79190615953565b61ffff16856139b69190615845565b6139c091906158b6565b9050613a20565b601254846139d487611c4c565b6139de9190614fec565b1115613a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a16906159d5565b60405180910390fd5b5b5b5b6000818385613a319190614fec565b613a3b9190614fec565b905060008186613a4b9190615049565b9050613a578882613f5d565b613a628888836140ff565b6000821115613ac257613a768830846140ff565b84600c6000828254613a889190614fec565b9250508190555083600d6000828254613aa19190614fec565b9250508190555082600e6000828254613aba9190614fec565b925050819055505b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001601160006101000a81548160ff0219169083151502179055506000600e54600d54600c54613c1d9190614fec565b613c279190614fec565b905060008103613c375750613f3f565b6000816002600c54613c4991906158b6565b84613c549190615845565b613c5e91906158b6565b905060008184613c6e9190615049565b9050613c798161437e565b6000479050600084600d5483613c8f9190615845565b613c9991906158b6565b9050600085600e5484613cac9190615845565b613cb691906158b6565b90506000818385613cc79190615049565b613cd19190615049565b9050600086118015613ce35750600081115b15613cf357613cf28682614590565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684619c4090604051613d3f90615a26565b600060405180830381858888f193505050503d8060008114613d7d576040519150601f19603f3d011682016040523d82523d6000602084013e613d82565b606091505b5050809150506000600b60069054906101000a900461ffff16600b60049054906101000a900461ffff16613db69190615953565b61ffff16600b60049054906101000a900461ffff1661ffff1685613dda9190615845565b613de491906158b6565b905060008185613df49190615049565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682619c4090604051613e4090615a26565b600060405180830381858888f193505050503d8060008114613e7e576040519150601f19603f3d011682016040523d82523d6000602084013e613e83565b606091505b505080935050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681619c4090604051613ed390615a26565b600060405180830381858888f193505050503d8060008114613f11576040519150601f19603f3d011682016040523d82523d6000602084013e613f16565b606091505b5050809350506000600c819055506000600d819055506000600e81905550505050505050505050505b6000601160006101000a81548160ff02191690831515021790555050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613fc35750601a60009054906101000a900460ff16155b6140fb576000613fd2826128b4565b9050601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101429080600181540180825580915050600190039060005260206000200160009091909190915055601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181908060018154018082558091505060019003906000526020600020016000909190919091505560006140b184611d40565b90506018548111156140f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ef90615a87565b60405180910390fd5b50505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361416e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161416590615b19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d490615bab565b60405180910390fd5b6141e8838383614661565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561426e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161426590615c3d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143019190614fec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161436591906148f6565b60405180910390a3614378848484614666565b50505050565b6000600267ffffffffffffffff81111561439b5761439a615300565b5b6040519080825280602002602001820160405280156143c95781602001602082028036833780820191505090505b50905030816000815181106143e1576143e0614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144aa9190615344565b816001815181106144be576144bd614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161455a959493929190615c98565b600060405180830381600087803b15801561457457600080fd5b505af1158015614588573d6000803e3d6000fd5b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161461796959493929190615cf2565b60606040518083038185885af1158015614635573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061465a9190615d53565b5050505050565b505050565b505050565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146c482614699565b9050919050565b6146d4816146b9565b81146146df57600080fd5b50565b6000813590506146f1816146cb565b92915050565b60006020828403121561470d5761470c61468f565b5b600061471b848285016146e2565b91505092915050565b600061ffff82169050919050565b61473b81614724565b82525050565b60006020820190506147566000830184614732565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479657808201518184015260208101905061477b565b60008484015250505050565b6000601f19601f8301169050919050565b60006147be8261475c565b6147c88185614767565b93506147d8818560208601614778565b6147e1816147a2565b840191505092915050565b6000602082019050818103600083015261480681846147b3565b905092915050565b6000819050919050565b6148218161480e565b811461482c57600080fd5b50565b60008135905061483e81614818565b92915050565b6000806040838503121561485b5761485a61468f565b5b6000614869858286016146e2565b925050602061487a8582860161482f565b9150509250929050565b60008115159050919050565b61489981614884565b82525050565b60006020820190506148b46000830184614890565b92915050565b6000602082840312156148d0576148cf61468f565b5b60006148de8482850161482f565b91505092915050565b6148f08161480e565b82525050565b600060208201905061490b60008301846148e7565b92915050565b600061491c82614699565b9050919050565b61492c81614911565b82525050565b60006020820190506149476000830184614923565b92915050565b6000806000606084860312156149665761496561468f565b5b6000614974868287016146e2565b9350506020614985868287016146e2565b92505060406149968682870161482f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126149c5576149c46149a0565b5b8235905067ffffffffffffffff8111156149e2576149e16149a5565b5b6020830191508360208202830111156149fe576149fd6149aa565b5b9250929050565b60008060208385031215614a1c57614a1b61468f565b5b600083013567ffffffffffffffff811115614a3a57614a39614694565b5b614a46858286016149af565b92509250509250929050565b600060ff82169050919050565b614a6881614a52565b82525050565b6000602082019050614a836000830184614a5f565b92915050565b614a9281614724565b8114614a9d57600080fd5b50565b600081359050614aaf81614a89565b92915050565b60008060008060808587031215614acf57614ace61468f565b5b6000614add87828801614aa0565b9450506020614aee87828801614aa0565b9350506040614aff87828801614aa0565b9250506060614b1087828801614aa0565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b518161480e565b82525050565b6000614b638383614b48565b60208301905092915050565b6000602082019050919050565b6000614b8782614b1c565b614b918185614b27565b9350614b9c83614b38565b8060005b83811015614bcd578151614bb48882614b57565b9750614bbf83614b6f565b925050600181019050614ba0565b5085935050505092915050565b60006040830160008301518482036000860152614bf78282614b7c565b91505060208301518482036020860152614c118282614b7c565b9150508091505092915050565b60006020820190508181036000830152614c388184614bda565b905092915050565b6000819050919050565b6000614c65614c60614c5b84614699565b614c40565b614699565b9050919050565b6000614c7782614c4a565b9050919050565b6000614c8982614c6c565b9050919050565b614c9981614c7e565b82525050565b6000602082019050614cb46000830184614c90565b92915050565b614cc3816146b9565b82525050565b6000602082019050614cde6000830184614cba565b92915050565b614ced81614884565b8114614cf857600080fd5b50565b600081359050614d0a81614ce4565b92915050565b60008060408385031215614d2757614d2661468f565b5b6000614d35858286016146e2565b9250506020614d4685828601614cfb565b9150509250929050565b6000614d5b826146b9565b9050919050565b614d6b81614d50565b8114614d7657600080fd5b50565b600081359050614d8881614d62565b92915050565b60008060408385031215614da557614da461468f565b5b6000614db385828601614d79565b9250506020614dc4858286016146e2565b9150509250929050565b60008060408385031215614de557614de461468f565b5b6000614df3858286016146e2565b9250506020614e04858286016146e2565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e44602083614767565b9150614e4f82614e0e565b602082019050919050565b60006020820190508181036000830152614e7381614e37565b9050919050565b7f43616e2774207365742030000000000000000000000000000000000000000000600082015250565b6000614eb0600b83614767565b9150614ebb82614e7a565b602082019050919050565b60006020820190508181036000830152614edf81614ea3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f2d57607f821691505b602082108103614f4057614f3f614ee6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614faf8261480e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fe157614fe0614f75565b5b600182019050919050565b6000614ff78261480e565b91506150028361480e565b925082820190508082111561501a57615019614f75565b5b92915050565b600061502b8261480e565b91506000820361503e5761503d614f75565b5b600182039050919050565b60006150548261480e565b915061505f8361480e565b925082820390508181111561507757615076614f75565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f766564000000000000600082015250565b60006150b3601a83614767565b91506150be8261507d565b602082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615145602583614767565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b7f4f6e6c79206465706c6f79657200000000000000000000000000000000000000600082015250565b60006151b1600d83614767565b91506151bc8261517b565b602082019050919050565b600060208201905081810360008301526151e0816151a4565b9050919050565b7f77616c6c6574416464726573732063616e277420626520302061646472657373600082015250565b600061521d602083614767565b9150615228826151e7565b602082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b60008151905061526281614818565b92915050565b60006020828403121561527e5761527d61468f565b5b600061528c84828501615253565b91505092915050565b60006040820190506152aa6000830185614cba565b6152b760208301846148e7565b9392505050565b6000815190506152cd81614ce4565b92915050565b6000602082840312156152e9576152e861468f565b5b60006152f7848285016152be565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061533e816146cb565b92915050565b60006020828403121561535a5761535961468f565b5b60006153688482850161532f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153a6816146b9565b82525050565b60006153b8838361539d565b60208301905092915050565b6000602082019050919050565b60006153dc82615371565b6153e6818561537c565b93506153f18361538d565b8060005b8381101561542257815161540988826153ac565b9750615414836153c4565b9250506001810190506153f5565b5085935050505092915050565b600060408201905061544460008301856148e7565b818103602083015261545681846153d1565b90509392505050565b615468826147a2565b810181811067ffffffffffffffff8211171561548757615486615300565b5b80604052505050565b600061549a614685565b90506154a6828261545f565b919050565b600067ffffffffffffffff8211156154c6576154c5615300565b5b602082029050602081019050919050565b60006154ea6154e5846154ab565b615490565b9050808382526020820190506020840283018581111561550d5761550c6149aa565b5b835b8181101561553657806155228882615253565b84526020840193505060208101905061550f565b5050509392505050565b600082601f830112615555576155546149a0565b5b81516155658482602086016154d7565b91505092915050565b6000602082840312156155845761558361468f565b5b600082015167ffffffffffffffff8111156155a2576155a1614694565b5b6155ae84828501615540565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615613602683614767565b915061561e826155b7565b604082019050919050565b6000602082019050818103600083015261564281615606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156a5602483614767565b91506156b082615649565b604082019050919050565b600060208201905081810360008301526156d481615698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615737602283614767565b9150615742826156db565b604082019050919050565b600060208201905081810360008301526157668161572a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006157a3601d83614767565b91506157ae8261576d565b602082019050919050565b600060208201905081810360008301526157d281615796565b9050919050565b7f426f74206973206e6f7420616c6c6f77656420746f2074726164650000000000600082015250565b600061580f601b83614767565b915061581a826157d9565b602082019050919050565b6000602082019050818103600083015261583e81615802565b9050919050565b60006158508261480e565b915061585b8361480e565b92508282026158698161480e565b915082820484148315176158805761587f614f75565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006158c18261480e565b91506158cc8361480e565b9250826158dc576158db615887565b5b828204905092915050565b7f54726164696e67206973206e6f74206f70656e20796574000000000000000000600082015250565b600061591d601783614767565b9150615928826158e7565b602082019050919050565b6000602082019050818103600083015261594c81615910565b9050919050565b600061595e82614724565b915061596983614724565b9250828201905061ffff81111561598357615982614f75565b5b92915050565b7f416d6f756e742065786365656473206d61782077616c6c65742073697a650000600082015250565b60006159bf601e83614767565b91506159ca82615989565b602082019050919050565b600060208201905081810360008301526159ee816159b2565b9050919050565b600081905092915050565b50565b6000615a106000836159f5565b9150615a1b82615a00565b600082019050919050565b6000615a3182615a03565b9150819050919050565b7f43616e27742073656c6c2074686174206d756368000000000000000000000000600082015250565b6000615a71601483614767565b9150615a7c82615a3b565b602082019050919050565b60006020820190508181036000830152615aa081615a64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615b03602583614767565b9150615b0e82615aa7565b604082019050919050565b60006020820190508181036000830152615b3281615af6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b95602383614767565b9150615ba082615b39565b604082019050919050565b60006020820190508181036000830152615bc481615b88565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c27602683614767565b9150615c3282615bcb565b604082019050919050565b60006020820190508181036000830152615c5681615c1a565b9050919050565b6000819050919050565b6000615c82615c7d615c7884615c5d565b614c40565b61480e565b9050919050565b615c9281615c67565b82525050565b600060a082019050615cad60008301886148e7565b615cba6020830187615c89565b8181036040830152615ccc81866153d1565b9050615cdb6060830185614cba565b615ce860808301846148e7565b9695505050505050565b600060c082019050615d076000830189614cba565b615d1460208301886148e7565b615d216040830187615c89565b615d2e6060830186615c89565b615d3b6080830185614cba565b615d4860a08301846148e7565b979650505050505050565b600080600060608486031215615d6c57615d6b61468f565b5b6000615d7a86828701615253565b9350506020615d8b86828701615253565b9250506040615d9c86828701615253565b915050925092509256fea26469706673582212208f5699a8f83971e0b9d8cde2deed1419f8fa1396b237e8d7889ca0377d3925d464736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c8063735de9f7116101e7578063b85a7ab91161010d578063e086e5ec116100a0578063f2a694311161006f578063f2a6943114610def578063f2fde38b14610e1a578063f8b45b0514610e43578063fd44e69814610e6e576103b8565b8063e086e5ec14610d47578063e96db1ef14610d5e578063e9a1b3ce14610d89578063ea2f0b3714610dc6576103b8565b8063d34628cc116100dc578063d34628cc14610c7b578063d5bda32d14610ca4578063dd62ed3e14610ce1578063dea3d57814610d1e576103b8565b8063b85a7ab914610bd1578063c2e9060114610bfc578063c816841b14610c25578063cf84b2d614610c50576103b8565b80639a7a23d611610185578063a763f9a611610154578063a763f9a614610b03578063a9059cbb14610b2e578063ae96ffe614610b6b578063b62496f514610b94576103b8565b80639a7a23d614610a49578063a457c2d714610a72578063a4d66daf14610aaf578063a522ad2514610ada576103b8565b80638da5cb5b116101c15780638da5cb5b146109a15780638dc64439146109cc57806395d89b41146109f557806399cd1ece14610a20576103b8565b8063735de9f71461090e5780638b16549a146109395780638c26a4cf14610976576103b8565b806334cc7aa4116102d75780635d0044ca1161026a5780636ab91206116102395780636ab91206146108665780636c3bbfd71461089157806370a08231146108ba578063715018a6146108f7576103b8565b80635d0044ca146107be5780635de593cd146107e75780636090144414610824578063675757ff1461084f576103b8565b8063527084ad116102a6578063527084ad146107045780635342acb41461072f57806353ca37fa1461076c5780635bcbe87714610795576103b8565b806334cc7aa41461064c57806339509351146106755780633f60b426146106b2578063437823ec146106db576103b8565b80631cce34ee1161034f5780632f9066a41161031e5780632f9066a4146105a2578063313ce567146105cb57806331970ace146105f65780633301241114610621576103b8565b80631cce34ee146104e457806320c635b51461050f57806323b872dd1461053a57806327ff8cfa14610577576103b8565b8063095ea7b31161038b578063095ea7b31461043c5780630a08c524146104795780630cd7acc1146104a257806318160ddd146104b9576103b8565b806302728108146103bd57806306b9ec65146103e657806306fdde0314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df91906146f7565b610e97565b005b3480156103f257600080fd5b506103fb610fc6565b6040516104089190614741565b60405180910390f35b34801561041d57600080fd5b50610426610fda565b60405161043391906147ec565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190614844565b61106c565b604051610470919061489f565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906148ba565b611083565b005b3480156104ae57600080fd5b506104b7611109565b005b3480156104c557600080fd5b506104ce6111b1565b6040516104db91906148f6565b60405180910390f35b3480156104f057600080fd5b506104f96111bb565b604051610506919061489f565b60405180910390f35b34801561051b57600080fd5b506105246111ce565b6040516105319190614932565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c919061494d565b6111f4565b60405161056e919061489f565b60405180910390f35b34801561058357600080fd5b5061058c611223565b6040516105999190614741565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190614a05565b611237565b005b3480156105d757600080fd5b506105e0611358565b6040516105ed9190614a6e565b60405180910390f35b34801561060257600080fd5b5061060b611361565b6040516106189190614741565b60405180910390f35b34801561062d57600080fd5b50610636611375565b6040516106439190614741565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190614a05565b611389565b005b34801561068157600080fd5b5061069c60048036038101906106979190614844565b6114aa565b6040516106a9919061489f565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906146f7565b6114d5565b005b3480156106e757600080fd5b5061070260048036038101906106fd91906146f7565b611599565b005b34801561071057600080fd5b50610719611670565b6040516107269190614741565b60405180910390f35b34801561073b57600080fd5b50610756600480360381019061075191906146f7565b611684565b604051610763919061489f565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190614a05565b6116a4565b005b3480156107a157600080fd5b506107bc60048036038101906107b79190614ab5565b6117c5565b005b3480156107ca57600080fd5b506107e560048036038101906107e091906148ba565b6118bb565b005b3480156107f357600080fd5b5061080e600480360381019061080991906146f7565b611941565b60405161081b9190614c1e565b60405180910390f35b34801561083057600080fd5b50610839611a4a565b604051610846919061489f565b60405180910390f35b34801561085b57600080fd5b50610864611a5d565b005b34801561087257600080fd5b5061087b611b17565b6040516108889190614741565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190614a05565b611b2b565b005b3480156108c657600080fd5b506108e160048036038101906108dc91906146f7565b611c4c565b6040516108ee91906148f6565b60405180910390f35b34801561090357600080fd5b5061090c611c94565b005b34801561091a57600080fd5b50610923611d1c565b6040516109309190614c9f565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b91906146f7565b611d40565b60405161096d91906148f6565b60405180910390f35b34801561098257600080fd5b5061098b611eb3565b6040516109989190614932565b60405180910390f35b3480156109ad57600080fd5b506109b6611ed9565b6040516109c39190614cc9565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee9190614ab5565b611f03565b005b348015610a0157600080fd5b50610a0a611ff9565b604051610a1791906147ec565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a4291906146f7565b61208b565b005b348015610a5557600080fd5b50610a706004803603810190610a6b9190614d10565b6121ba565b005b348015610a7e57600080fd5b50610a996004803603810190610a949190614844565b6122d2565b604051610aa6919061489f565b60405180910390f35b348015610abb57600080fd5b50610ac461233c565b604051610ad191906148f6565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614d8e565b612342565b005b348015610b0f57600080fd5b50610b18612543565b604051610b259190614741565b60405180910390f35b348015610b3a57600080fd5b50610b556004803603810190610b509190614844565b612557565b604051610b62919061489f565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906148ba565b61256e565b005b348015610ba057600080fd5b50610bbb6004803603810190610bb691906146f7565b6125f4565b604051610bc8919061489f565b60405180910390f35b348015610bdd57600080fd5b50610be6612614565b604051610bf39190614932565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e91906146f7565b61263a565b005b348015610c3157600080fd5b50610c3a612769565b604051610c479190614cc9565b60405180910390f35b348015610c5c57600080fd5b50610c6561278d565b604051610c7291906148f6565b60405180910390f35b348015610c8757600080fd5b50610ca26004803603810190610c9d9190614a05565b612793565b005b348015610cb057600080fd5b50610ccb6004803603810190610cc691906148ba565b6128b4565b604051610cd891906148f6565b60405180910390f35b348015610ced57600080fd5b50610d086004803603810190610d039190614dce565b612af3565b604051610d1591906148f6565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906148ba565b612b7a565b005b348015610d5357600080fd5b50610d5c612c00565b005b348015610d6a57600080fd5b50610d73612cd9565b604051610d809190614741565b60405180910390f35b348015610d9557600080fd5b50610db06004803603810190610dab91906146f7565b612ced565b604051610dbd919061489f565b60405180910390f35b348015610dd257600080fd5b50610ded6004803603810190610de891906146f7565b612d0d565b005b348015610dfb57600080fd5b50610e04612de4565b604051610e1191906148f6565b60405180910390f35b348015610e2657600080fd5b50610e416004803603810190610e3c91906146f7565b612dea565b005b348015610e4f57600080fd5b50610e58612ee1565b604051610e6591906148f6565b60405180910390f35b348015610e7a57600080fd5b50610e956004803603810190610e909190614a05565b612ee7565b005b610e9f613008565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990614ec6565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900461ffff1681565b606060038054610fe990614f15565b80601f016020809104026020016040519081016040528092919081815260200182805461101590614f15565b80156110625780601f1061103757610100808354040283529160200191611062565b820191906000526020600020905b81548152906001019060200180831161104557829003601f168201915b5050505050905090565b6000611079338484613010565b6001905092915050565b61108b613008565b73ffffffffffffffffffffffffffffffffffffffff166110a9611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690614e5a565b60405180910390fd5b8060108190555050565b611111613008565b73ffffffffffffffffffffffffffffffffffffffff1661112f611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614e5a565b60405180910390fd5b601a60009054906101000a900460ff1615601a60006101000a81548160ff021916908315150217905550565b6000600254905090565b601a60009054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806111ff613008565b905061120c8582856131d9565b611217858585613265565b60019150509392505050565b600b60049054906101000a900461ffff1681565b61123f613008565b73ffffffffffffffffffffffffffffffffffffffff1661125d611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90614e5a565b60405180910390fd5b60005b82829050811015611353576000600a60008585858181106112da576112d9614f46565b5b90506020020160208101906112ef91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061134b90614fa4565b9150506112b6565b505050565b60006012905090565b600b600e9054906101000a900461ffff1681565b600b60029054906101000a900461ffff1681565b611391613008565b73ffffffffffffffffffffffffffffffffffffffff166113af611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fc90614e5a565b60405180910390fd5b60005b828290508110156114a5576001600a600085858581811061142c5761142b614f46565b5b905060200201602081019061144191906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061149d90614fa4565b915050611408565b505050565b60006114cb3384846114bc3388612af3565b6114c69190614fec565b613010565b6001905092915050565b6114dd613008565b73ffffffffffffffffffffffffffffffffffffffff166114fb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890614e5a565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6115a1613008565b73ffffffffffffffffffffffffffffffffffffffff166115bf611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614e5a565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b60069054906101000a900461ffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6116ac613008565b73ffffffffffffffffffffffffffffffffffffffff166116ca611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790614e5a565b60405180910390fd5b60005b828290508110156117c05760006009600085858581811061174757611746614f46565b5b905060200201602081019061175c91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117b890614fa4565b915050611723565b505050565b6117cd613008565b73ffffffffffffffffffffffffffffffffffffffff166117eb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614e5a565b60405180910390fd5b83600b60086101000a81548161ffff021916908361ffff16021790555082600b600a6101000a81548161ffff021916908361ffff16021790555081600b600c6101000a81548161ffff021916908361ffff16021790555080600b600e6101000a81548161ffff021916908361ffff16021790555050505050565b6118c3613008565b73ffffffffffffffffffffffffffffffffffffffff166118e1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614e5a565b60405180910390fd5b8060128190555050565b61194961466b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156119e257602002820191906000526020600020905b8154815260200190600101908083116119ce575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611a3a57602002820191906000526020600020905b815481526020019060010190808311611a26575b5050505050815250509050919050565b601360009054906101000a900460ff1681565b611a65613008565b73ffffffffffffffffffffffffffffffffffffffff16611a83611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090614e5a565b60405180910390fd5b601360009054906101000a900460ff1615601360006101000a81548160ff021916908315150217905550600060155403611b1557436015819055505b565b600b60089054906101000a900461ffff1681565b611b33613008565b73ffffffffffffffffffffffffffffffffffffffff16611b51611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614e5a565b60405180910390fd5b60005b82829050811015611c4757600060146000858585818110611bce57611bcd614f46565b5b9050602002016020810190611be391906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c3f90614fa4565b915050611baa565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c9c613008565b73ffffffffffffffffffffffffffffffffffffffff16611cba611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0790614e5a565b60405180910390fd5b611d1a6000613acc565b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050905060008103611d995750611eae565b5b600115611eac576000810315611eac578080611db590615020565b9150506000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018281548110611e0e57611e0d614f46565b5b906000526020600020015490508060195442611e2a9190615049565b11611ea057601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018281548110611e8357611e82614f46565b5b906000526020600020015483611e999190614fec565b9250611ea6565b50611eac565b50611d9a565b505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f0b613008565b73ffffffffffffffffffffffffffffffffffffffff16611f29611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614e5a565b60405180910390fd5b83600b60006101000a81548161ffff021916908361ffff16021790555082600b60026101000a81548161ffff021916908361ffff16021790555081600b60046101000a81548161ffff021916908361ffff16021790555080600b60066101000a81548161ffff021916908361ffff16021790555050505050565b60606004805461200890614f15565b80601f016020809104026020016040519081016040528092919081815260200182805461203490614f15565b80156120815780601f1061205657610100808354040283529160200191612081565b820191906000526020600020905b81548152906001019060200180831161206457829003601f168201915b5050505050905090565b612093613008565b73ffffffffffffffffffffffffffffffffffffffff166120b1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614ec6565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121c2613008565b73ffffffffffffffffffffffffffffffffffffffff166121e0611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222d90614e5a565b60405180910390fd5b7f0000000000000000000000001af68e48d3676b278cfa1659a23426a9a831628073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906150c9565b60405180910390fd5b6122ce8282613b92565b5050565b6000806122df3385612af3565b905082811015612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b9061515b565b60405180910390fd5b6123313385858403613010565b600191505092915050565b60185481565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c9906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890615233565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161247c9190614cc9565b602060405180830381865afa158015612499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bd9190615268565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016124fa929190615295565b6020604051808303816000875af1158015612519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253d91906152d3565b50505050565b600b600c9054906101000a900461ffff1681565b6000612564338484613265565b6001905092915050565b612576613008565b73ffffffffffffffffffffffffffffffffffffffff16612594611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614e5a565b60405180910390fd5b8060188190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612642613008565b73ffffffffffffffffffffffffffffffffffffffff16612660611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c90614ec6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000001af68e48d3676b278cfa1659a23426a9a831628081565b60105481565b61279b613008565b73ffffffffffffffffffffffffffffffffffffffff166127b9611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614e5a565b60405180910390fd5b60005b828290508110156128af5760016014600085858581811061283657612835614f46565b5b905060200201602081019061284b91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806128a790614fa4565b915050612812565b505050565b600080600267ffffffffffffffff8111156128d2576128d1615300565b5b6040519080825280602002602001820160405280156129005781602001602082028036833780820191505090505b509050308160008151811061291857612917614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e19190615344565b816001815181106129f5576129f4614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401612a8a92919061542f565b600060405180830381865afa158015612aa7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612ad0919061556e565b600181518110612ae357612ae2614f46565b5b6020026020010151915050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b82613008565b73ffffffffffffffffffffffffffffffffffffffff16612ba0611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed90614e5a565b60405180910390fd5b8060198190555050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906151c7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612cd6573d6000803e3d6000fd5b50565b600b600a9054906101000a900461ffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b612d15613008565b73ffffffffffffffffffffffffffffffffffffffff16612d33611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614e5a565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60195481565b612df2613008565b73ffffffffffffffffffffffffffffffffffffffff16612e10611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5d90614e5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90615629565b60405180910390fd5b612ede81613acc565b50565b60125481565b612eef613008565b73ffffffffffffffffffffffffffffffffffffffff16612f0d611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5a90614e5a565b60405180910390fd5b60005b8282905081101561300357600160096000858585818110612f8a57612f89614f46565b5b9050602002016020810190612f9f91906146f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612ffb90614fa4565b915050612f66565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361307f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613076906156bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e59061574d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131cc91906148f6565b60405180910390a3505050565b60006131e58484612af3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461325f5781811015613251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613248906157b9565b60405180910390fd5b61325e8484848403613010565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133095750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333f90615825565b60405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414806133e157506001601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dd9190614fec565b4211155b6133ea57600080fd5b60016015546133f99190614fec565b421161354157600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156134965742601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135375750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61354057600080fd5b5b601160009054906101000a900460ff161580156135a75750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136205760006135b730611c4c565b905060006127106010546135ea7f0000000000000000000000001af68e48d3676b278cfa1659a23426a9a8316280611c4c565b6135f49190615845565b6135fe91906158b6565b9050600a8161360d9190615845565b821061361d5761361c82613bed565b5b50505b6000806000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136c95750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a2257601360009054906101000a900460ff16806137325750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376890615933565b60405180910390fd5b600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138c857612710600b60009054906101000a900461ffff1661ffff16856137e69190615845565b6137f091906158b6565b9250612710600b60029054906101000a900461ffff1661ffff16856138159190615845565b61381f91906158b6565b9150612710600b60069054906101000a900461ffff16600b60049054906101000a900461ffff166138509190615953565b61ffff168561385f9190615845565b61386991906158b6565b90506012548461387887611c4c565b6138829190614fec565b11156138c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ba906159d5565b60405180910390fd5b613a21565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139c757612710600b60089054906101000a900461ffff1661ffff168561393d9190615845565b61394791906158b6565b9250612710600b600a9054906101000a900461ffff1661ffff168561396c9190615845565b61397691906158b6565b9150612710600b600e9054906101000a900461ffff16600b600c9054906101000a900461ffff166139a79190615953565b61ffff16856139b69190615845565b6139c091906158b6565b9050613a20565b601254846139d487611c4c565b6139de9190614fec565b1115613a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a16906159d5565b60405180910390fd5b5b5b5b6000818385613a319190614fec565b613a3b9190614fec565b905060008186613a4b9190615049565b9050613a578882613f5d565b613a628888836140ff565b6000821115613ac257613a768830846140ff565b84600c6000828254613a889190614fec565b9250508190555083600d6000828254613aa19190614fec565b9250508190555082600e6000828254613aba9190614fec565b925050819055505b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001601160006101000a81548160ff0219169083151502179055506000600e54600d54600c54613c1d9190614fec565b613c279190614fec565b905060008103613c375750613f3f565b6000816002600c54613c4991906158b6565b84613c549190615845565b613c5e91906158b6565b905060008184613c6e9190615049565b9050613c798161437e565b6000479050600084600d5483613c8f9190615845565b613c9991906158b6565b9050600085600e5484613cac9190615845565b613cb691906158b6565b90506000818385613cc79190615049565b613cd19190615049565b9050600086118015613ce35750600081115b15613cf357613cf28682614590565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684619c4090604051613d3f90615a26565b600060405180830381858888f193505050503d8060008114613d7d576040519150601f19603f3d011682016040523d82523d6000602084013e613d82565b606091505b5050809150506000600b60069054906101000a900461ffff16600b60049054906101000a900461ffff16613db69190615953565b61ffff16600b60049054906101000a900461ffff1661ffff1685613dda9190615845565b613de491906158b6565b905060008185613df49190615049565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682619c4090604051613e4090615a26565b600060405180830381858888f193505050503d8060008114613e7e576040519150601f19603f3d011682016040523d82523d6000602084013e613e83565b606091505b505080935050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681619c4090604051613ed390615a26565b600060405180830381858888f193505050503d8060008114613f11576040519150601f19603f3d011682016040523d82523d6000602084013e613f16565b606091505b5050809350506000600c819055506000600d819055506000600e81905550505050505050505050505b6000601160006101000a81548160ff02191690831515021790555050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613fc35750601a60009054906101000a900460ff16155b6140fb576000613fd2826128b4565b9050601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101429080600181540180825580915050600190039060005260206000200160009091909190915055601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181908060018154018082558091505060019003906000526020600020016000909190919091505560006140b184611d40565b90506018548111156140f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ef90615a87565b60405180910390fd5b50505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361416e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161416590615b19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d490615bab565b60405180910390fd5b6141e8838383614661565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561426e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161426590615c3d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143019190614fec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161436591906148f6565b60405180910390a3614378848484614666565b50505050565b6000600267ffffffffffffffff81111561439b5761439a615300565b5b6040519080825280602002602001820160405280156143c95781602001602082028036833780820191505090505b50905030816000815181106143e1576143e0614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144aa9190615344565b816001815181106144be576144bd614f46565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161455a959493929190615c98565b600060405180830381600087803b15801561457457600080fd5b505af1158015614588573d6000803e3d6000fd5b505050505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161461796959493929190615cf2565b60606040518083038185885af1158015614635573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061465a9190615d53565b5050505050565b505050565b505050565b604051806040016040528060608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146c482614699565b9050919050565b6146d4816146b9565b81146146df57600080fd5b50565b6000813590506146f1816146cb565b92915050565b60006020828403121561470d5761470c61468f565b5b600061471b848285016146e2565b91505092915050565b600061ffff82169050919050565b61473b81614724565b82525050565b60006020820190506147566000830184614732565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479657808201518184015260208101905061477b565b60008484015250505050565b6000601f19601f8301169050919050565b60006147be8261475c565b6147c88185614767565b93506147d8818560208601614778565b6147e1816147a2565b840191505092915050565b6000602082019050818103600083015261480681846147b3565b905092915050565b6000819050919050565b6148218161480e565b811461482c57600080fd5b50565b60008135905061483e81614818565b92915050565b6000806040838503121561485b5761485a61468f565b5b6000614869858286016146e2565b925050602061487a8582860161482f565b9150509250929050565b60008115159050919050565b61489981614884565b82525050565b60006020820190506148b46000830184614890565b92915050565b6000602082840312156148d0576148cf61468f565b5b60006148de8482850161482f565b91505092915050565b6148f08161480e565b82525050565b600060208201905061490b60008301846148e7565b92915050565b600061491c82614699565b9050919050565b61492c81614911565b82525050565b60006020820190506149476000830184614923565b92915050565b6000806000606084860312156149665761496561468f565b5b6000614974868287016146e2565b9350506020614985868287016146e2565b92505060406149968682870161482f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126149c5576149c46149a0565b5b8235905067ffffffffffffffff8111156149e2576149e16149a5565b5b6020830191508360208202830111156149fe576149fd6149aa565b5b9250929050565b60008060208385031215614a1c57614a1b61468f565b5b600083013567ffffffffffffffff811115614a3a57614a39614694565b5b614a46858286016149af565b92509250509250929050565b600060ff82169050919050565b614a6881614a52565b82525050565b6000602082019050614a836000830184614a5f565b92915050565b614a9281614724565b8114614a9d57600080fd5b50565b600081359050614aaf81614a89565b92915050565b60008060008060808587031215614acf57614ace61468f565b5b6000614add87828801614aa0565b9450506020614aee87828801614aa0565b9350506040614aff87828801614aa0565b9250506060614b1087828801614aa0565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b518161480e565b82525050565b6000614b638383614b48565b60208301905092915050565b6000602082019050919050565b6000614b8782614b1c565b614b918185614b27565b9350614b9c83614b38565b8060005b83811015614bcd578151614bb48882614b57565b9750614bbf83614b6f565b925050600181019050614ba0565b5085935050505092915050565b60006040830160008301518482036000860152614bf78282614b7c565b91505060208301518482036020860152614c118282614b7c565b9150508091505092915050565b60006020820190508181036000830152614c388184614bda565b905092915050565b6000819050919050565b6000614c65614c60614c5b84614699565b614c40565b614699565b9050919050565b6000614c7782614c4a565b9050919050565b6000614c8982614c6c565b9050919050565b614c9981614c7e565b82525050565b6000602082019050614cb46000830184614c90565b92915050565b614cc3816146b9565b82525050565b6000602082019050614cde6000830184614cba565b92915050565b614ced81614884565b8114614cf857600080fd5b50565b600081359050614d0a81614ce4565b92915050565b60008060408385031215614d2757614d2661468f565b5b6000614d35858286016146e2565b9250506020614d4685828601614cfb565b9150509250929050565b6000614d5b826146b9565b9050919050565b614d6b81614d50565b8114614d7657600080fd5b50565b600081359050614d8881614d62565b92915050565b60008060408385031215614da557614da461468f565b5b6000614db385828601614d79565b9250506020614dc4858286016146e2565b9150509250929050565b60008060408385031215614de557614de461468f565b5b6000614df3858286016146e2565b9250506020614e04858286016146e2565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e44602083614767565b9150614e4f82614e0e565b602082019050919050565b60006020820190508181036000830152614e7381614e37565b9050919050565b7f43616e2774207365742030000000000000000000000000000000000000000000600082015250565b6000614eb0600b83614767565b9150614ebb82614e7a565b602082019050919050565b60006020820190508181036000830152614edf81614ea3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f2d57607f821691505b602082108103614f4057614f3f614ee6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614faf8261480e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fe157614fe0614f75565b5b600182019050919050565b6000614ff78261480e565b91506150028361480e565b925082820190508082111561501a57615019614f75565b5b92915050565b600061502b8261480e565b91506000820361503e5761503d614f75565b5b600182039050919050565b60006150548261480e565b915061505f8361480e565b925082820390508181111561507757615076614f75565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f766564000000000000600082015250565b60006150b3601a83614767565b91506150be8261507d565b602082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615145602583614767565b9150615150826150e9565b604082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b7f4f6e6c79206465706c6f79657200000000000000000000000000000000000000600082015250565b60006151b1600d83614767565b91506151bc8261517b565b602082019050919050565b600060208201905081810360008301526151e0816151a4565b9050919050565b7f77616c6c6574416464726573732063616e277420626520302061646472657373600082015250565b600061521d602083614767565b9150615228826151e7565b602082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b60008151905061526281614818565b92915050565b60006020828403121561527e5761527d61468f565b5b600061528c84828501615253565b91505092915050565b60006040820190506152aa6000830185614cba565b6152b760208301846148e7565b9392505050565b6000815190506152cd81614ce4565b92915050565b6000602082840312156152e9576152e861468f565b5b60006152f7848285016152be565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061533e816146cb565b92915050565b60006020828403121561535a5761535961468f565b5b60006153688482850161532f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153a6816146b9565b82525050565b60006153b8838361539d565b60208301905092915050565b6000602082019050919050565b60006153dc82615371565b6153e6818561537c565b93506153f18361538d565b8060005b8381101561542257815161540988826153ac565b9750615414836153c4565b9250506001810190506153f5565b5085935050505092915050565b600060408201905061544460008301856148e7565b818103602083015261545681846153d1565b90509392505050565b615468826147a2565b810181811067ffffffffffffffff8211171561548757615486615300565b5b80604052505050565b600061549a614685565b90506154a6828261545f565b919050565b600067ffffffffffffffff8211156154c6576154c5615300565b5b602082029050602081019050919050565b60006154ea6154e5846154ab565b615490565b9050808382526020820190506020840283018581111561550d5761550c6149aa565b5b835b8181101561553657806155228882615253565b84526020840193505060208101905061550f565b5050509392505050565b600082601f830112615555576155546149a0565b5b81516155658482602086016154d7565b91505092915050565b6000602082840312156155845761558361468f565b5b600082015167ffffffffffffffff8111156155a2576155a1614694565b5b6155ae84828501615540565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615613602683614767565b915061561e826155b7565b604082019050919050565b6000602082019050818103600083015261564281615606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156a5602483614767565b91506156b082615649565b604082019050919050565b600060208201905081810360008301526156d481615698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615737602283614767565b9150615742826156db565b604082019050919050565b600060208201905081810360008301526157668161572a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006157a3601d83614767565b91506157ae8261576d565b602082019050919050565b600060208201905081810360008301526157d281615796565b9050919050565b7f426f74206973206e6f7420616c6c6f77656420746f2074726164650000000000600082015250565b600061580f601b83614767565b915061581a826157d9565b602082019050919050565b6000602082019050818103600083015261583e81615802565b9050919050565b60006158508261480e565b915061585b8361480e565b92508282026158698161480e565b915082820484148315176158805761587f614f75565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006158c18261480e565b91506158cc8361480e565b9250826158dc576158db615887565b5b828204905092915050565b7f54726164696e67206973206e6f74206f70656e20796574000000000000000000600082015250565b600061591d601783614767565b9150615928826158e7565b602082019050919050565b6000602082019050818103600083015261594c81615910565b9050919050565b600061595e82614724565b915061596983614724565b9250828201905061ffff81111561598357615982614f75565b5b92915050565b7f416d6f756e742065786365656473206d61782077616c6c65742073697a650000600082015250565b60006159bf601e83614767565b91506159ca82615989565b602082019050919050565b600060208201905081810360008301526159ee816159b2565b9050919050565b600081905092915050565b50565b6000615a106000836159f5565b9150615a1b82615a00565b600082019050919050565b6000615a3182615a03565b9150819050919050565b7f43616e27742073656c6c2074686174206d756368000000000000000000000000600082015250565b6000615a71601483614767565b9150615a7c82615a3b565b602082019050919050565b60006020820190508181036000830152615aa081615a64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615b03602583614767565b9150615b0e82615aa7565b604082019050919050565b60006020820190508181036000830152615b3281615af6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b95602383614767565b9150615ba082615b39565b604082019050919050565b60006020820190508181036000830152615bc481615b88565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615c27602683614767565b9150615c3282615bcb565b604082019050919050565b60006020820190508181036000830152615c5681615c1a565b9050919050565b6000819050919050565b6000615c82615c7d615c7884615c5d565b614c40565b61480e565b9050919050565b615c9281615c67565b82525050565b600060a082019050615cad60008301886148e7565b615cba6020830187615c89565b8181036040830152615ccc81866153d1565b9050615cdb6060830185614cba565b615ce860808301846148e7565b9695505050505050565b600060c082019050615d076000830189614cba565b615d1460208301886148e7565b615d216040830187615c89565b615d2e6060830186615c89565b615d3b6080830185614cba565b615d4860a08301846148e7565b979650505050505050565b600080600060608486031215615d6c57615d6b61468f565b5b6000615d7a86828701615253565b9350506020615d8b86828701615253565b9250506040615d9c86828701615253565b915050925092509256fea26469706673582212208f5699a8f83971e0b9d8cde2deed1419f8fa1396b237e8d7889ca0377d3925d464736f6c63430008130033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.