ERC-20
Overview
Max Total Supply
10,000,000,000 CHIYOKO
Holders
15
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.2278758783203125 CHIYOKOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CHIYOKO
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-11 */ // SPDX-License-Identifier: MIT pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0; pragma experimental ABIEncoderV2; ////// lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /* pragma solidity ^0.8.0; */ /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /* pragma solidity ^0.8.0; */ /* import "../utils/Context.sol"; */ /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } ////// src/IUniswapV2Factory.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } /* pragma solidity >=0.8.10; */ /* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */ /* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */ /* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */ /* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */ /* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */ /* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */ /* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */ contract CHIYOKO is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; // EVERYTHING BELOW IS DISABLED uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public percentForLPBurn = 25; // 25 = .25% bool public lpBurnEnabled = true; uint256 public lpBurnFrequency = 3600 seconds; uint256 public lastLpBurnTime; uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime; // EVERYTHING ON ABOVE IS DISABLED bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Chiyoko Uni", "CHIYOKO") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 totalSupply = 10000000000 * 1e18; maxTransactionAmount = 200000000 * 1e18; // 2% from total supply maxTransactionAmountTxn maxWallet = 200000000 * 1e18; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() private onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) private onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if ( !swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from] ) { } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForDev += (fees * sellDevFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div( totalTokensToSwap ); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260196009556001600a60006101000a81548160ff021916908315150217905550610e10600b55610708600d556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055506001601160006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600b81526020017f436869796f6b6f20556e690000000000000000000000000000000000000000008152506040518060400160405280600781526020017f434849594f4b4f0000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000799565b5080600490805190602001906200014792919062000799565b5050506200016a6200015e6200043460201b60201c565b6200043c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200050260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c9190620008b3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca9190620008b3565b6040518363ffffffff1660e01b8152600401620002e9929190620008f6565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f9190620008b3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200050260201b60201c565b60006b204fce5e3e2502611000000090506aa56fa5b99019a5c80000006006819055506aa56fa5b99019a5c8000000600881905550612710600582620003be91906200095c565b620003ca9190620009ec565b600781905550620003f2620003e4620005ec60201b60201c565b60016200050260201b60201c565b620004053060016200050260201b60201c565b6200041a61dead60016200050260201b60201c565b6200042c33826200061660201b60201c565b505062000c09565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005126200043460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000538620005ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000591576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005889062000a85565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006809062000af7565b60405180910390fd5b6200069d600083836200078f60201b60201c565b8060026000828254620006b1919062000b19565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000708919062000b19565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200076f919062000b87565b60405180910390a36200078b600083836200079460201b60201c565b5050565b505050565b505050565b828054620007a79062000bd3565b90600052602060002090601f016020900481019282620007cb576000855562000817565b82601f10620007e657805160ff191683800117855562000817565b8280016001018555821562000817579182015b8281111562000816578251825591602001919060010190620007f9565b5b5090506200082691906200082a565b5090565b5b80821115620008455760008160009055506001016200082b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200087b826200084e565b9050919050565b6200088d816200086e565b81146200089957600080fd5b50565b600081519050620008ad8162000882565b92915050565b600060208284031215620008cc57620008cb62000849565b5b6000620008dc848285016200089c565b91505092915050565b620008f0816200086e565b82525050565b60006040820190506200090d6000830185620008e5565b6200091c6020830184620008e5565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009698262000923565b9150620009768362000923565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009b257620009b16200092d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009f98262000923565b915062000a068362000923565b92508262000a195762000a18620009bd565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a6d60208362000a24565b915062000a7a8262000a35565b602082019050919050565b6000602082019050818103600083015262000aa08162000a5e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000adf601f8362000a24565b915062000aec8262000aa7565b602082019050919050565b6000602082019050818103600083015262000b128162000ad0565b9050919050565b600062000b268262000923565b915062000b338362000923565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b6b5762000b6a6200092d565b5b828201905092915050565b62000b818162000923565b82525050565b600060208201905062000b9e600083018462000b76565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bec57607f821691505b6020821081141562000c035762000c0262000ba4565b5b50919050565b60805160a05161393062000c6060003960008181610d170152611740015260008181610b05015281816116e80152818161270c015281816127ed01528181612814015281816128b001526128d701526139306000f3fe6080604052600436106102605760003560e01c8063751039fc11610144578063a9059cbb116100b6578063d85ba0631161007a578063d85ba0631461091f578063dd62ed3e1461094a578063e2f4560514610987578063f11a24d3146109b2578063f6374342146109dd578063f8b45b0514610a0857610267565b8063a9059cbb14610824578063b62496f514610861578063bbc0c7421461089e578063c876d0b9146108c9578063c8c8ebe4146108f457610267565b80639c3b4fdc116101085780639c3b4fdc146107105780639ec22c0e1461073b5780639fccce3214610766578063a0d82dc514610791578063a457c2d7146107bc578063a4c82a00146107f957610267565b8063751039fc146106395780637bce5a04146106645780638da5cb5b1461068f57806392136913146106ba57806395d89b41146106e557610267565b806327c8f835116101dd57806349bd5a5e116101a157806349bd5a5e146105395780634a62bb65146105645780636a486a8e1461058f5780636ddd1713146105ba57806370a08231146105e5578063715018a61461062257610267565b806327c8f835146104505780632c3e486c1461047b5780632e82f1a0146104a6578063313ce567146104d157806339509351146104fc57610267565b8063184c16c511610224578063184c16c514610367578063199ffc72146103925780631a8145bb146103bd5780631f3fed8f146103e857806323b872dd1461041357610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a33565b60405161028e9190612a1f565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ada565b610ac5565b6040516102cb9190612b35565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612b50565b610ae3565b6040516103089190612b35565b60405180910390f35b34801561031d57600080fd5b50610326610b03565b6040516103339190612bdc565b60405180910390f35b34801561034857600080fd5b50610351610b27565b60405161035e9190612c06565b60405180910390f35b34801561037357600080fd5b5061037c610b31565b6040516103899190612c06565b60405180910390f35b34801561039e57600080fd5b506103a7610b37565b6040516103b49190612c06565b60405180910390f35b3480156103c957600080fd5b506103d2610b3d565b6040516103df9190612c06565b60405180910390f35b3480156103f457600080fd5b506103fd610b43565b60405161040a9190612c06565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190612c21565b610b49565b6040516104479190612b35565b60405180910390f35b34801561045c57600080fd5b50610465610c41565b6040516104729190612c83565b60405180910390f35b34801561048757600080fd5b50610490610c47565b60405161049d9190612c06565b60405180910390f35b3480156104b257600080fd5b506104bb610c4d565b6040516104c89190612b35565b60405180910390f35b3480156104dd57600080fd5b506104e6610c60565b6040516104f39190612cba565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612ada565b610c69565b6040516105309190612b35565b60405180910390f35b34801561054557600080fd5b5061054e610d15565b60405161055b9190612c83565b60405180910390f35b34801561057057600080fd5b50610579610d39565b6040516105869190612b35565b60405180910390f35b34801561059b57600080fd5b506105a4610d4c565b6040516105b19190612c06565b60405180910390f35b3480156105c657600080fd5b506105cf610d52565b6040516105dc9190612b35565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190612b50565b610d65565b6040516106199190612c06565b60405180910390f35b34801561062e57600080fd5b50610637610dad565b005b34801561064557600080fd5b5061064e610e35565b60405161065b9190612b35565b60405180910390f35b34801561067057600080fd5b50610679610ed5565b6040516106869190612c06565b60405180910390f35b34801561069b57600080fd5b506106a4610edb565b6040516106b19190612c83565b60405180910390f35b3480156106c657600080fd5b506106cf610f05565b6040516106dc9190612c06565b60405180910390f35b3480156106f157600080fd5b506106fa610f0b565b6040516107079190612a1f565b60405180910390f35b34801561071c57600080fd5b50610725610f9d565b6040516107329190612c06565b60405180910390f35b34801561074757600080fd5b50610750610fa3565b60405161075d9190612c06565b60405180910390f35b34801561077257600080fd5b5061077b610fa9565b6040516107889190612c06565b60405180910390f35b34801561079d57600080fd5b506107a6610faf565b6040516107b39190612c06565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612ada565b610fb5565b6040516107f09190612b35565b60405180910390f35b34801561080557600080fd5b5061080e6110a0565b60405161081b9190612c06565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612ada565b6110a6565b6040516108589190612b35565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190612b50565b6110c4565b6040516108959190612b35565b60405180910390f35b3480156108aa57600080fd5b506108b36110e4565b6040516108c09190612b35565b60405180910390f35b3480156108d557600080fd5b506108de6110f7565b6040516108eb9190612b35565b60405180910390f35b34801561090057600080fd5b5061090961110a565b6040516109169190612c06565b60405180910390f35b34801561092b57600080fd5b50610934611110565b6040516109419190612c06565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c9190612cd5565b611116565b60405161097e9190612c06565b60405180910390f35b34801561099357600080fd5b5061099c61119d565b6040516109a99190612c06565b60405180910390f35b3480156109be57600080fd5b506109c76111a3565b6040516109d49190612c06565b60405180910390f35b3480156109e957600080fd5b506109f26111a9565b6040516109ff9190612c06565b60405180910390f35b348015610a1457600080fd5b50610a1d6111af565b604051610a2a9190612c06565b60405180910390f35b606060038054610a4290612d44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e90612d44565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050905090565b6000610ad9610ad26111b5565b84846111bd565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600d5481565b60095481565b601b5481565b601a5481565b6000610b56848484611388565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ba16111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890612de8565b60405180910390fd5b610c3585610c2d6111b5565b8584036111bd565b60019150509392505050565b61dead81565b600b5481565b600a60009054906101000a900460ff1681565b60006012905090565b6000610d0b610c766111b5565b848460016000610c846111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d069190612e37565b6111bd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900460ff1681565b60165481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db56111b5565b73ffffffffffffffffffffffffffffffffffffffff16610dd3610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612ed9565b60405180910390fd5b610e336000612112565b565b6000610e3f6111b5565b73ffffffffffffffffffffffffffffffffffffffff16610e5d610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90612ed9565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60135481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b606060048054610f1a90612d44565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4690612d44565b8015610f935780601f10610f6857610100808354040283529160200191610f93565b820191906000526020600020905b815481529060010190602001808311610f7657829003601f168201915b5050505050905090565b60155481565b600e5481565b601c5481565b60195481565b60008060016000610fc46111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890612f6b565b60405180910390fd5b61109561108c6111b5565b858584036111bd565b600191505092915050565b600c5481565b60006110ba6110b36111b5565b8484611388565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b601160009054906101000a900460ff1681565b60065481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b60145481565b60185481565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490612ffd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061308f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161137b9190612c06565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613121565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906131b3565b60405180910390fd5b60008114156114825761147d838360006121d8565b61210d565b600f60009054906101000a900460ff1615611b455761149f610edb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561150d57506114dd610edb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115465750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611580575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115995750600560149054906101000a900460ff16155b15611b4457600f60019054906101000a900460ff1661169357601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806116535750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899061321f565b60405180910390fd5b5b601160009054906101000a900460ff161561185b576116b0610edb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561173757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561178f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561185a5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906132d7565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118fe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156119a557600654811115611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613369565b60405180910390fd5b60085461195483610d65565b8261195f9190612e37565b11156119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906133d5565b60405180910390fd5b611b43565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a485750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9757600654811115611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613467565b60405180910390fd5b611b42565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b4157600854611af483610d65565b82611aff9190612e37565b1115611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b37906133d5565b60405180910390fd5b5b5b5b5b5b6000611b5030610d65565b905060006007548210159050808015611b755750600f60029054906101000a900460ff165b8015611b8e5750600560149054906101000a900460ff16155b8015611be45750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c3a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c905750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cd4576001600560146101000a81548160ff021916908315150217905550611cb8612459565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015611d3a5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611d525750600a60009054906101000a900460ff165b8015611d6d5750600b54600c54611d699190612e37565b4210155b8015611dc35750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b506000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e7a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e8457600090505b600081156120fd57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee757506000601654115b15611fb457611f146064611f066016548861262190919063ffffffff16565b61263790919063ffffffff16565b905060165460185482611f279190613487565b611f319190613510565b601b6000828254611f429190612e37565b9250508190555060165460195482611f5a9190613487565b611f649190613510565b601c6000828254611f759190612e37565b9250508190555060165460175482611f8d9190613487565b611f979190613510565b601a6000828254611fa89190612e37565b925050819055506120d9565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f57506000601254115b156120d85761203c606461202e6012548861262190919063ffffffff16565b61263790919063ffffffff16565b90506012546014548261204f9190613487565b6120599190613510565b601b600082825461206a9190612e37565b92505081905550601254601554826120829190613487565b61208c9190613510565b601c600082825461209d9190612e37565b92505081905550601254601354826120b59190613487565b6120bf9190613510565b601a60008282546120d09190612e37565b925050819055505b5b60008111156120ee576120ed8730836121d8565b5b80856120fa9190613541565b94505b6121088787876121d8565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f90613121565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af906131b3565b60405180910390fd5b6122c383838361264d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612340906135e7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dc9190612e37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124409190612c06565b60405180910390a3612453848484612652565b50505050565b600061246430610d65565b90506000601c54601a54601b5461247b9190612e37565b6124859190612e37565b905060008214806124965750600081145b156124a257505061261f565b60146007546124b19190613487565b8211156124ca5760146007546124c79190613487565b91505b6000600282601b54856124dd9190613487565b6124e79190613510565b6124f19190613510565b90506000612508828561265790919063ffffffff16565b905060004790506125188261266d565b600061252d824761265790919063ffffffff16565b905060006125588661254a601a548561262190919063ffffffff16565b61263790919063ffffffff16565b9050600061258387612575601c548661262190919063ffffffff16565b61263790919063ffffffff16565b905060008183856125949190613541565b61259e9190613541565b90506000601b819055506000601a819055506000601c819055506000871180156125c85750600081115b15612615576125d787826128aa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b5460405161260c93929190613607565b60405180910390a15b5050505050505050505b565b6000818361262f9190613487565b905092915050565b600081836126459190613510565b905092915050565b505050565b505050565b600081836126659190613541565b905092915050565b6000600267ffffffffffffffff81111561268a5761268961363e565b5b6040519080825280602002602001820160405280156126b85781602001602082028036833780820191505090505b50905030816000815181106126d0576126cf61366d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279991906136b1565b816001815181106127ad576127ac61366d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612812307f0000000000000000000000000000000000000000000000000000000000000000846111bd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016128749594939291906137d7565b600060405180830381600087803b15801561288e57600080fd5b505af11580156128a2573d6000803e3d6000fd5b505050505050565b6128d5307f0000000000000000000000000000000000000000000000000000000000000000846111bd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161293c96959493929190613831565b60606040518083038185885af115801561295a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061297f91906138a7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129c05780820151818401526020810190506129a5565b838111156129cf576000848401525b50505050565b6000601f19601f8301169050919050565b60006129f182612986565b6129fb8185612991565b9350612a0b8185602086016129a2565b612a14816129d5565b840191505092915050565b60006020820190508181036000830152612a3981846129e6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7182612a46565b9050919050565b612a8181612a66565b8114612a8c57600080fd5b50565b600081359050612a9e81612a78565b92915050565b6000819050919050565b612ab781612aa4565b8114612ac257600080fd5b50565b600081359050612ad481612aae565b92915050565b60008060408385031215612af157612af0612a41565b5b6000612aff85828601612a8f565b9250506020612b1085828601612ac5565b9150509250929050565b60008115159050919050565b612b2f81612b1a565b82525050565b6000602082019050612b4a6000830184612b26565b92915050565b600060208284031215612b6657612b65612a41565b5b6000612b7484828501612a8f565b91505092915050565b6000819050919050565b6000612ba2612b9d612b9884612a46565b612b7d565b612a46565b9050919050565b6000612bb482612b87565b9050919050565b6000612bc682612ba9565b9050919050565b612bd681612bbb565b82525050565b6000602082019050612bf16000830184612bcd565b92915050565b612c0081612aa4565b82525050565b6000602082019050612c1b6000830184612bf7565b92915050565b600080600060608486031215612c3a57612c39612a41565b5b6000612c4886828701612a8f565b9350506020612c5986828701612a8f565b9250506040612c6a86828701612ac5565b9150509250925092565b612c7d81612a66565b82525050565b6000602082019050612c986000830184612c74565b92915050565b600060ff82169050919050565b612cb481612c9e565b82525050565b6000602082019050612ccf6000830184612cab565b92915050565b60008060408385031215612cec57612ceb612a41565b5b6000612cfa85828601612a8f565b9250506020612d0b85828601612a8f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d5c57607f821691505b60208210811415612d7057612d6f612d15565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612dd2602883612991565b9150612ddd82612d76565b604082019050919050565b60006020820190508181036000830152612e0181612dc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4282612aa4565b9150612e4d83612aa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8257612e81612e08565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ec3602083612991565b9150612ece82612e8d565b602082019050919050565b60006020820190508181036000830152612ef281612eb6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f55602583612991565b9150612f6082612ef9565b604082019050919050565b60006020820190508181036000830152612f8481612f48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fe7602483612991565b9150612ff282612f8b565b604082019050919050565b6000602082019050818103600083015261301681612fda565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613079602283612991565b91506130848261301d565b604082019050919050565b600060208201905081810360008301526130a88161306c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061310b602583612991565b9150613116826130af565b604082019050919050565b6000602082019050818103600083015261313a816130fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061319d602383612991565b91506131a882613141565b604082019050919050565b600060208201905081810360008301526131cc81613190565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613209601683612991565b9150613214826131d3565b602082019050919050565b60006020820190508181036000830152613238816131fc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006132c1604983612991565b91506132cc8261323f565b606082019050919050565b600060208201905081810360008301526132f0816132b4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613353603583612991565b915061335e826132f7565b604082019050919050565b6000602082019050818103600083015261338281613346565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006133bf601383612991565b91506133ca82613389565b602082019050919050565b600060208201905081810360008301526133ee816133b2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613451603683612991565b915061345c826133f5565b604082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b600061349282612aa4565b915061349d83612aa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134d6576134d5612e08565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351b82612aa4565b915061352683612aa4565b925082613536576135356134e1565b5b828204905092915050565b600061354c82612aa4565b915061355783612aa4565b92508282101561356a57613569612e08565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135d1602683612991565b91506135dc82613575565b604082019050919050565b60006020820190508181036000830152613600816135c4565b9050919050565b600060608201905061361c6000830186612bf7565b6136296020830185612bf7565b6136366040830184612bf7565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136ab81612a78565b92915050565b6000602082840312156136c7576136c6612a41565b5b60006136d58482850161369c565b91505092915050565b6000819050919050565b60006137036136fe6136f9846136de565b612b7d565b612aa4565b9050919050565b613713816136e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61374e81612a66565b82525050565b60006137608383613745565b60208301905092915050565b6000602082019050919050565b600061378482613719565b61378e8185613724565b935061379983613735565b8060005b838110156137ca5781516137b18882613754565b97506137bc8361376c565b92505060018101905061379d565b5085935050505092915050565b600060a0820190506137ec6000830188612bf7565b6137f9602083018761370a565b818103604083015261380b8186613779565b905061381a6060830185612c74565b6138276080830184612bf7565b9695505050505050565b600060c0820190506138466000830189612c74565b6138536020830188612bf7565b613860604083018761370a565b61386d606083018661370a565b61387a6080830185612c74565b61388760a0830184612bf7565b979650505050505050565b6000815190506138a181612aae565b92915050565b6000806000606084860312156138c0576138bf612a41565b5b60006138ce86828701613892565b93505060206138df86828701613892565b92505060406138f086828701613892565b915050925092509256fea2646970667358221220bbb54877504e6d1016a6faa9c3718d6c84af3359582c1f1558cb23783446374564736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102605760003560e01c8063751039fc11610144578063a9059cbb116100b6578063d85ba0631161007a578063d85ba0631461091f578063dd62ed3e1461094a578063e2f4560514610987578063f11a24d3146109b2578063f6374342146109dd578063f8b45b0514610a0857610267565b8063a9059cbb14610824578063b62496f514610861578063bbc0c7421461089e578063c876d0b9146108c9578063c8c8ebe4146108f457610267565b80639c3b4fdc116101085780639c3b4fdc146107105780639ec22c0e1461073b5780639fccce3214610766578063a0d82dc514610791578063a457c2d7146107bc578063a4c82a00146107f957610267565b8063751039fc146106395780637bce5a04146106645780638da5cb5b1461068f57806392136913146106ba57806395d89b41146106e557610267565b806327c8f835116101dd57806349bd5a5e116101a157806349bd5a5e146105395780634a62bb65146105645780636a486a8e1461058f5780636ddd1713146105ba57806370a08231146105e5578063715018a61461062257610267565b806327c8f835146104505780632c3e486c1461047b5780632e82f1a0146104a6578063313ce567146104d157806339509351146104fc57610267565b8063184c16c511610224578063184c16c514610367578063199ffc72146103925780631a8145bb146103bd5780631f3fed8f146103e857806323b872dd1461041357610267565b806306fdde031461026c578063095ea7b31461029757806310d5de53146102d45780631694505e1461031157806318160ddd1461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a33565b60405161028e9190612a1f565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612ada565b610ac5565b6040516102cb9190612b35565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612b50565b610ae3565b6040516103089190612b35565b60405180910390f35b34801561031d57600080fd5b50610326610b03565b6040516103339190612bdc565b60405180910390f35b34801561034857600080fd5b50610351610b27565b60405161035e9190612c06565b60405180910390f35b34801561037357600080fd5b5061037c610b31565b6040516103899190612c06565b60405180910390f35b34801561039e57600080fd5b506103a7610b37565b6040516103b49190612c06565b60405180910390f35b3480156103c957600080fd5b506103d2610b3d565b6040516103df9190612c06565b60405180910390f35b3480156103f457600080fd5b506103fd610b43565b60405161040a9190612c06565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190612c21565b610b49565b6040516104479190612b35565b60405180910390f35b34801561045c57600080fd5b50610465610c41565b6040516104729190612c83565b60405180910390f35b34801561048757600080fd5b50610490610c47565b60405161049d9190612c06565b60405180910390f35b3480156104b257600080fd5b506104bb610c4d565b6040516104c89190612b35565b60405180910390f35b3480156104dd57600080fd5b506104e6610c60565b6040516104f39190612cba565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612ada565b610c69565b6040516105309190612b35565b60405180910390f35b34801561054557600080fd5b5061054e610d15565b60405161055b9190612c83565b60405180910390f35b34801561057057600080fd5b50610579610d39565b6040516105869190612b35565b60405180910390f35b34801561059b57600080fd5b506105a4610d4c565b6040516105b19190612c06565b60405180910390f35b3480156105c657600080fd5b506105cf610d52565b6040516105dc9190612b35565b60405180910390f35b3480156105f157600080fd5b5061060c60048036038101906106079190612b50565b610d65565b6040516106199190612c06565b60405180910390f35b34801561062e57600080fd5b50610637610dad565b005b34801561064557600080fd5b5061064e610e35565b60405161065b9190612b35565b60405180910390f35b34801561067057600080fd5b50610679610ed5565b6040516106869190612c06565b60405180910390f35b34801561069b57600080fd5b506106a4610edb565b6040516106b19190612c83565b60405180910390f35b3480156106c657600080fd5b506106cf610f05565b6040516106dc9190612c06565b60405180910390f35b3480156106f157600080fd5b506106fa610f0b565b6040516107079190612a1f565b60405180910390f35b34801561071c57600080fd5b50610725610f9d565b6040516107329190612c06565b60405180910390f35b34801561074757600080fd5b50610750610fa3565b60405161075d9190612c06565b60405180910390f35b34801561077257600080fd5b5061077b610fa9565b6040516107889190612c06565b60405180910390f35b34801561079d57600080fd5b506107a6610faf565b6040516107b39190612c06565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612ada565b610fb5565b6040516107f09190612b35565b60405180910390f35b34801561080557600080fd5b5061080e6110a0565b60405161081b9190612c06565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612ada565b6110a6565b6040516108589190612b35565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190612b50565b6110c4565b6040516108959190612b35565b60405180910390f35b3480156108aa57600080fd5b506108b36110e4565b6040516108c09190612b35565b60405180910390f35b3480156108d557600080fd5b506108de6110f7565b6040516108eb9190612b35565b60405180910390f35b34801561090057600080fd5b5061090961110a565b6040516109169190612c06565b60405180910390f35b34801561092b57600080fd5b50610934611110565b6040516109419190612c06565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c9190612cd5565b611116565b60405161097e9190612c06565b60405180910390f35b34801561099357600080fd5b5061099c61119d565b6040516109a99190612c06565b60405180910390f35b3480156109be57600080fd5b506109c76111a3565b6040516109d49190612c06565b60405180910390f35b3480156109e957600080fd5b506109f26111a9565b6040516109ff9190612c06565b60405180910390f35b348015610a1457600080fd5b50610a1d6111af565b604051610a2a9190612c06565b60405180910390f35b606060038054610a4290612d44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e90612d44565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050905090565b6000610ad9610ad26111b5565b84846111bd565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600d5481565b60095481565b601b5481565b601a5481565b6000610b56848484611388565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ba16111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890612de8565b60405180910390fd5b610c3585610c2d6111b5565b8584036111bd565b60019150509392505050565b61dead81565b600b5481565b600a60009054906101000a900460ff1681565b60006012905090565b6000610d0b610c766111b5565b848460016000610c846111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d069190612e37565b6111bd565b6001905092915050565b7f000000000000000000000000bf00f1589a2ee03bc409ca24e3ca8aaf3504f30e81565b600f60009054906101000a900460ff1681565b60165481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db56111b5565b73ffffffffffffffffffffffffffffffffffffffff16610dd3610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090612ed9565b60405180910390fd5b610e336000612112565b565b6000610e3f6111b5565b73ffffffffffffffffffffffffffffffffffffffff16610e5d610edb565b73ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90612ed9565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60135481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b606060048054610f1a90612d44565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4690612d44565b8015610f935780601f10610f6857610100808354040283529160200191610f93565b820191906000526020600020905b815481529060010190602001808311610f7657829003601f168201915b5050505050905090565b60155481565b600e5481565b601c5481565b60195481565b60008060016000610fc46111b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890612f6b565b60405180910390fd5b61109561108c6111b5565b858584036111bd565b600191505092915050565b600c5481565b60006110ba6110b36111b5565b8484611388565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b601160009054906101000a900460ff1681565b60065481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b60145481565b60185481565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490612ffd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061308f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161137b9190612c06565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90613121565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f906131b3565b60405180910390fd5b60008114156114825761147d838360006121d8565b61210d565b600f60009054906101000a900460ff1615611b455761149f610edb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561150d57506114dd610edb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115465750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611580575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115995750600560149054906101000a900460ff16155b15611b4457600f60019054906101000a900460ff1661169357601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806116535750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116899061321f565b60405180910390fd5b5b601160009054906101000a900460ff161561185b576116b0610edb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561173757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561178f57507f000000000000000000000000bf00f1589a2ee03bc409ca24e3ca8aaf3504f30e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561185a5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906132d7565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118fe5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156119a557600654811115611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613369565b60405180910390fd5b60085461195483610d65565b8261195f9190612e37565b11156119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906133d5565b60405180910390fd5b611b43565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a485750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a9757600654811115611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613467565b60405180910390fd5b611b42565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b4157600854611af483610d65565b82611aff9190612e37565b1115611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b37906133d5565b60405180910390fd5b5b5b5b5b5b6000611b5030610d65565b905060006007548210159050808015611b755750600f60029054906101000a900460ff165b8015611b8e5750600560149054906101000a900460ff16155b8015611be45750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c3a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c905750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cd4576001600560146101000a81548160ff021916908315150217905550611cb8612459565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015611d3a5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611d525750600a60009054906101000a900460ff165b8015611d6d5750600b54600c54611d699190612e37565b4210155b8015611dc35750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b506000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e7a5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e8457600090505b600081156120fd57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee757506000601654115b15611fb457611f146064611f066016548861262190919063ffffffff16565b61263790919063ffffffff16565b905060165460185482611f279190613487565b611f319190613510565b601b6000828254611f429190612e37565b9250508190555060165460195482611f5a9190613487565b611f649190613510565b601c6000828254611f759190612e37565b9250508190555060165460175482611f8d9190613487565b611f979190613510565b601a6000828254611fa89190612e37565b925050819055506120d9565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561200f57506000601254115b156120d85761203c606461202e6012548861262190919063ffffffff16565b61263790919063ffffffff16565b90506012546014548261204f9190613487565b6120599190613510565b601b600082825461206a9190612e37565b92505081905550601254601554826120829190613487565b61208c9190613510565b601c600082825461209d9190612e37565b92505081905550601254601354826120b59190613487565b6120bf9190613510565b601a60008282546120d09190612e37565b925050819055505b5b60008111156120ee576120ed8730836121d8565b5b80856120fa9190613541565b94505b6121088787876121d8565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f90613121565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af906131b3565b60405180910390fd5b6122c383838361264d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612340906135e7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123dc9190612e37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124409190612c06565b60405180910390a3612453848484612652565b50505050565b600061246430610d65565b90506000601c54601a54601b5461247b9190612e37565b6124859190612e37565b905060008214806124965750600081145b156124a257505061261f565b60146007546124b19190613487565b8211156124ca5760146007546124c79190613487565b91505b6000600282601b54856124dd9190613487565b6124e79190613510565b6124f19190613510565b90506000612508828561265790919063ffffffff16565b905060004790506125188261266d565b600061252d824761265790919063ffffffff16565b905060006125588661254a601a548561262190919063ffffffff16565b61263790919063ffffffff16565b9050600061258387612575601c548661262190919063ffffffff16565b61263790919063ffffffff16565b905060008183856125949190613541565b61259e9190613541565b90506000601b819055506000601a819055506000601c819055506000871180156125c85750600081115b15612615576125d787826128aa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b5460405161260c93929190613607565b60405180910390a15b5050505050505050505b565b6000818361262f9190613487565b905092915050565b600081836126459190613510565b905092915050565b505050565b505050565b600081836126659190613541565b905092915050565b6000600267ffffffffffffffff81111561268a5761268961363e565b5b6040519080825280602002602001820160405280156126b85781602001602082028036833780820191505090505b50905030816000815181106126d0576126cf61366d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279991906136b1565b816001815181106127ad576127ac61366d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612812307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111bd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016128749594939291906137d7565b600060405180830381600087803b15801561288e57600080fd5b505af11580156128a2573d6000803e3d6000fd5b505050505050565b6128d5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111bd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161293c96959493929190613831565b60606040518083038185885af115801561295a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061297f91906138a7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129c05780820151818401526020810190506129a5565b838111156129cf576000848401525b50505050565b6000601f19601f8301169050919050565b60006129f182612986565b6129fb8185612991565b9350612a0b8185602086016129a2565b612a14816129d5565b840191505092915050565b60006020820190508181036000830152612a3981846129e6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a7182612a46565b9050919050565b612a8181612a66565b8114612a8c57600080fd5b50565b600081359050612a9e81612a78565b92915050565b6000819050919050565b612ab781612aa4565b8114612ac257600080fd5b50565b600081359050612ad481612aae565b92915050565b60008060408385031215612af157612af0612a41565b5b6000612aff85828601612a8f565b9250506020612b1085828601612ac5565b9150509250929050565b60008115159050919050565b612b2f81612b1a565b82525050565b6000602082019050612b4a6000830184612b26565b92915050565b600060208284031215612b6657612b65612a41565b5b6000612b7484828501612a8f565b91505092915050565b6000819050919050565b6000612ba2612b9d612b9884612a46565b612b7d565b612a46565b9050919050565b6000612bb482612b87565b9050919050565b6000612bc682612ba9565b9050919050565b612bd681612bbb565b82525050565b6000602082019050612bf16000830184612bcd565b92915050565b612c0081612aa4565b82525050565b6000602082019050612c1b6000830184612bf7565b92915050565b600080600060608486031215612c3a57612c39612a41565b5b6000612c4886828701612a8f565b9350506020612c5986828701612a8f565b9250506040612c6a86828701612ac5565b9150509250925092565b612c7d81612a66565b82525050565b6000602082019050612c986000830184612c74565b92915050565b600060ff82169050919050565b612cb481612c9e565b82525050565b6000602082019050612ccf6000830184612cab565b92915050565b60008060408385031215612cec57612ceb612a41565b5b6000612cfa85828601612a8f565b9250506020612d0b85828601612a8f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d5c57607f821691505b60208210811415612d7057612d6f612d15565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612dd2602883612991565b9150612ddd82612d76565b604082019050919050565b60006020820190508181036000830152612e0181612dc5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4282612aa4565b9150612e4d83612aa4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8257612e81612e08565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ec3602083612991565b9150612ece82612e8d565b602082019050919050565b60006020820190508181036000830152612ef281612eb6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f55602583612991565b9150612f6082612ef9565b604082019050919050565b60006020820190508181036000830152612f8481612f48565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fe7602483612991565b9150612ff282612f8b565b604082019050919050565b6000602082019050818103600083015261301681612fda565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613079602283612991565b91506130848261301d565b604082019050919050565b600060208201905081810360008301526130a88161306c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061310b602583612991565b9150613116826130af565b604082019050919050565b6000602082019050818103600083015261313a816130fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061319d602383612991565b91506131a882613141565b604082019050919050565b600060208201905081810360008301526131cc81613190565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613209601683612991565b9150613214826131d3565b602082019050919050565b60006020820190508181036000830152613238816131fc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006132c1604983612991565b91506132cc8261323f565b606082019050919050565b600060208201905081810360008301526132f0816132b4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613353603583612991565b915061335e826132f7565b604082019050919050565b6000602082019050818103600083015261338281613346565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006133bf601383612991565b91506133ca82613389565b602082019050919050565b600060208201905081810360008301526133ee816133b2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613451603683612991565b915061345c826133f5565b604082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b600061349282612aa4565b915061349d83612aa4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134d6576134d5612e08565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061351b82612aa4565b915061352683612aa4565b925082613536576135356134e1565b5b828204905092915050565b600061354c82612aa4565b915061355783612aa4565b92508282101561356a57613569612e08565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135d1602683612991565b91506135dc82613575565b604082019050919050565b60006020820190508181036000830152613600816135c4565b9050919050565b600060608201905061361c6000830186612bf7565b6136296020830185612bf7565b6136366040830184612bf7565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506136ab81612a78565b92915050565b6000602082840312156136c7576136c6612a41565b5b60006136d58482850161369c565b91505092915050565b6000819050919050565b60006137036136fe6136f9846136de565b612b7d565b612aa4565b9050919050565b613713816136e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61374e81612a66565b82525050565b60006137608383613745565b60208301905092915050565b6000602082019050919050565b600061378482613719565b61378e8185613724565b935061379983613735565b8060005b838110156137ca5781516137b18882613754565b97506137bc8361376c565b92505060018101905061379d565b5085935050505092915050565b600060a0820190506137ec6000830188612bf7565b6137f9602083018761370a565b818103604083015261380b8186613779565b905061381a6060830185612c74565b6138276080830184612bf7565b9695505050505050565b600060c0820190506138466000830189612c74565b6138536020830188612bf7565b613860604083018761370a565b61386d606083018661370a565b61387a6080830185612c74565b61388760a0830184612bf7565b979650505050505050565b6000815190506138a181612aae565b92915050565b6000806000606084860312156138c0576138bf612a41565b5b60006138ce86828701613892565b93505060206138df86828701613892565b92505060406138f086828701613892565b915050925092509256fea2646970667358221220bbb54877504e6d1016a6faa9c3718d6c84af3359582c1f1558cb23783446374564736f6c634300080a0033
Deployed Bytecode Sourcemap
32373:12081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9201:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11368:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33998:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32450:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10321:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32976:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32793:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33782:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33742;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12019:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32553:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32888:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32849:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10163:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12920:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32508:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33112:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33597:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33191:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10492:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2794:103;;;;;;;;;;;;;:::i;:::-;;36450:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33490:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2143:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33632:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9420:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33564:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33030:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33822:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33708:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13638:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32940:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10832:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34219:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33152:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33408:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32680:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11070:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32722:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33527:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33670:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32762:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9201:100;9255:13;9288:5;9281:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9201:100;:::o;11368:169::-;11451:4;11468:39;11477:12;:10;:12::i;:::-;11491:7;11500:6;11468:8;:39::i;:::-;11525:4;11518:11;;11368:169;;;;:::o;33998:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32450:51::-;;;:::o;10321:108::-;10382:7;10409:12;;10402:19;;10321:108;:::o;32976:47::-;;;;:::o;32793:36::-;;;;:::o;33782:33::-;;;;:::o;33742:::-;;;;:::o;12019:492::-;12159:4;12176:36;12186:6;12194:9;12205:6;12176:9;:36::i;:::-;12225:24;12252:11;:19;12264:6;12252:19;;;;;;;;;;;;;;;:33;12272:12;:10;:12::i;:::-;12252:33;;;;;;;;;;;;;;;;12225:60;;12324:6;12304:16;:26;;12296:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12411:57;12420:6;12428:12;:10;:12::i;:::-;12461:6;12442:16;:25;12411:8;:57::i;:::-;12499:4;12492:11;;;12019:492;;;;;:::o;32553:53::-;32599:6;32553:53;:::o;32888:45::-;;;;:::o;32849:32::-;;;;;;;;;;;;;:::o;10163:93::-;10221:5;10246:2;10239:9;;10163:93;:::o;12920:215::-;13008:4;13025:80;13034:12;:10;:12::i;:::-;13048:7;13094:10;13057:11;:25;13069:12;:10;:12::i;:::-;13057:25;;;;;;;;;;;;;;;:34;13083:7;13057:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13025:8;:80::i;:::-;13123:4;13116:11;;12920:215;;;;:::o;32508:38::-;;;:::o;33112:33::-;;;;;;;;;;;;;:::o;33597:28::-;;;;:::o;33191:30::-;;;;;;;;;;;;;:::o;10492:127::-;10566:7;10593:9;:18;10603:7;10593:18;;;;;;;;;;;;;;;;10586:25;;10492:127;;;:::o;2794:103::-;2374:12;:10;:12::i;:::-;2363:23;;:7;:5;:7::i;:::-;:23;;;2355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2859:30:::1;2886:1;2859:18;:30::i;:::-;2794:103::o:0;36450:121::-;36502:4;2374:12;:10;:12::i;:::-;2363:23;;:7;:5;:7::i;:::-;:23;;;2355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36536:5:::1;36519:14;;:22;;;;;;;;;;;;;;;;;;36559:4;36552:11;;36450:121:::0;:::o;33490:30::-;;;;:::o;2143:87::-;2189:7;2216:6;;;;;;;;;;;2209:13;;2143:87;:::o;33632:31::-;;;;:::o;9420:104::-;9476:13;9509:7;9502:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9420:104;:::o;33564:24::-;;;;:::o;33030:35::-;;;;:::o;33822:27::-;;;;:::o;33708:25::-;;;;:::o;13638:413::-;13731:4;13748:24;13775:11;:25;13787:12;:10;:12::i;:::-;13775:25;;;;;;;;;;;;;;;:34;13801:7;13775:34;;;;;;;;;;;;;;;;13748:61;;13848:15;13828:16;:35;;13820:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13941:67;13950:12;:10;:12::i;:::-;13964:7;13992:15;13973:16;:34;13941:8;:67::i;:::-;14039:4;14032:11;;;13638:413;;;;:::o;32940:29::-;;;;:::o;10832:175::-;10918:4;10935:42;10945:12;:10;:12::i;:::-;10959:9;10970:6;10935:9;:42::i;:::-;10995:4;10988:11;;10832:175;;;;:::o;34219:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33152:32::-;;;;;;;;;;;;;:::o;33408:39::-;;;;;;;;;;;;;:::o;32680:35::-;;;;:::o;33456:27::-;;;;:::o;11070:151::-;11159:7;11186:11;:18;11198:5;11186:18;;;;;;;;;;;;;;;:27;11205:7;11186:27;;;;;;;;;;;;;;;;11179:34;;11070:151;;;;:::o;32722:33::-;;;;:::o;33527:30::-;;;;:::o;33670:31::-;;;;:::o;32762:24::-;;;;:::o;816:98::-;869:7;896:10;889:17;;816:98;:::o;17322:380::-;17475:1;17458:19;;:5;:19;;;;17450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17556:1;17537:21;;:7;:21;;;;17529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17640:6;17610:11;:18;17622:5;17610:18;;;;;;;;;;;;;;;:27;17629:7;17610:27;;;;;;;;;;;;;;;:36;;;;17678:7;17662:32;;17671:5;17662:32;;;17687:6;17662:32;;;;;;:::i;:::-;;;;;;;;17322:380;;;:::o;36805:4967::-;36953:1;36937:18;;:4;:18;;;;36929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37030:1;37016:16;;:2;:16;;;;37008:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37099:1;37089:6;:11;37085:93;;;37117:28;37133:4;37139:2;37143:1;37117:15;:28::i;:::-;37160:7;;37085:93;37194:14;;;;;;;;;;;37190:2487;;;37255:7;:5;:7::i;:::-;37247:15;;:4;:15;;;;:49;;;;;37289:7;:5;:7::i;:::-;37283:13;;:2;:13;;;;37247:49;:86;;;;;37331:1;37317:16;;:2;:16;;;;37247:86;:128;;;;;37368:6;37354:21;;:2;:21;;;;37247:128;:158;;;;;37397:8;;;;;;;;;;;37396:9;37247:158;37225:2441;;;37445:13;;;;;;;;;;;37440:223;;37517:19;:25;37537:4;37517:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37546:19;:23;37566:2;37546:23;;;;;;;;;;;;;;;;;;;;;;;;;37517:52;37483:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;37440:223;37819:20;;;;;;;;;;;37815:641;;;37900:7;:5;:7::i;:::-;37894:13;;:2;:13;;;;:72;;;;;37950:15;37936:30;;:2;:30;;;;37894:72;:129;;;;;38009:13;37995:28;;:2;:28;;;;37894:129;37864:573;;;38187:12;38112:28;:39;38141:9;38112:39;;;;;;;;;;;;;;;;:87;38074:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;38401:12;38359:28;:39;38388:9;38359:39;;;;;;;;;;;;;;;:54;;;;37864:573;37815:641;38530:25;:31;38556:4;38530:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38587:31;:35;38619:2;38587:35;;;;;;;;;;;;;;;;;;;;;;;;;38586:36;38530:92;38504:1147;;;38709:20;;38699:6;:30;;38665:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;38917:9;;38900:13;38910:2;38900:9;:13::i;:::-;38891:6;:22;;;;:::i;:::-;:35;;38857:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38504:1147;;;39095:25;:29;39121:2;39095:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39150:31;:37;39182:4;39150:37;;;;;;;;;;;;;;;;;;;;;;;;;39149:38;39095:92;39069:582;;;39274:20;;39264:6;:30;;39230:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;39069:582;;;39431:31;:35;39463:2;39431:35;;;;;;;;;;;;;;;;;;;;;;;;;39426:225;;39551:9;;39534:13;39544:2;39534:9;:13::i;:::-;39525:6;:22;;;;:::i;:::-;:35;;39491:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39426:225;39069:582;38504:1147;37225:2441;37190:2487;39689:28;39720:24;39738:4;39720:9;:24::i;:::-;39689:55;;39757:12;39796:18;;39772:20;:42;;39757:57;;39845:7;:35;;;;;39869:11;;;;;;;;;;;39845:35;:61;;;;;39898:8;;;;;;;;;;;39897:9;39845:61;:110;;;;;39924:25;:31;39950:4;39924:31;;;;;;;;;;;;;;;;;;;;;;;;;39923:32;39845:110;:153;;;;;39973:19;:25;39993:4;39973:25;;;;;;;;;;;;;;;;;;;;;;;;;39972:26;39845:153;:194;;;;;40016:19;:23;40036:2;40016:23;;;;;;;;;;;;;;;;;;;;;;;;;40015:24;39845:194;39827:326;;;40077:4;40066:8;;:15;;;;;;;;;;;;;;;;;;40098:10;:8;:10::i;:::-;40136:5;40125:8;;:16;;;;;;;;;;;;;;;;;;39827:326;40184:8;;;;;;;;;;;40183:9;:55;;;;;40209:25;:29;40235:2;40209:29;;;;;;;;;;;;;;;;;;;;;;;;;40183:55;:85;;;;;40255:13;;;;;;;;;;;40183:85;:153;;;;;40321:15;;40304:14;;:32;;;;:::i;:::-;40285:15;:51;;40183:153;:196;;;;;40354:19;:25;40374:4;40354:25;;;;;;;;;;;;;;;;;;;;;;;;;40353:26;40183:196;40165:238;40415:12;40431:8;;;;;;;;;;;40430:9;40415:24;;40541:19;:25;40561:4;40541:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40570:19;:23;40590:2;40570:23;;;;;;;;;;;;;;;;;;;;;;;;;40541:52;40537:100;;;40620:5;40610:15;;40537:100;40649:12;40754:7;40750:969;;;40806:25;:29;40832:2;40806:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40855:1;40839:13;;:17;40806:50;40802:768;;;40884:34;40914:3;40884:25;40895:13;;40884:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40877:41;;40987:13;;40967:16;;40960:4;:23;;;;:::i;:::-;40959:41;;;;:::i;:::-;40937:18;;:63;;;;;;;:::i;:::-;;;;;;;;41057:13;;41043:10;;41036:4;:17;;;;:::i;:::-;41035:35;;;;:::i;:::-;41019:12;;:51;;;;;;;:::i;:::-;;;;;;;;41139:13;;41119:16;;41112:4;:23;;;;:::i;:::-;41111:41;;;;:::i;:::-;41089:18;;:63;;;;;;;:::i;:::-;;;;;;;;40802:768;;;41214:25;:31;41240:4;41214:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41264:1;41249:12;;:16;41214:51;41210:360;;;41293:33;41322:3;41293:24;41304:12;;41293:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41286:40;;41394:12;;41375:15;;41368:4;:22;;;;:::i;:::-;41367:39;;;;:::i;:::-;41345:18;;:61;;;;;;;:::i;:::-;;;;;;;;41462:12;;41449:9;;41442:4;:16;;;;:::i;:::-;41441:33;;;;:::i;:::-;41425:12;;:49;;;;;;;:::i;:::-;;;;;;;;41542:12;;41523:15;;41516:4;:22;;;;:::i;:::-;41515:39;;;;:::i;:::-;41493:18;;:61;;;;;;;:::i;:::-;;;;;;;;41210:360;40802:768;41597:1;41590:4;:8;41586:91;;;41619:42;41635:4;41649;41656;41619:15;:42::i;:::-;41586:91;41703:4;41693:14;;;;;:::i;:::-;;;40750:969;41731:33;41747:4;41753:2;41757:6;41731:15;:33::i;:::-;36918:4854;;;;36805:4967;;;;:::o;3055:191::-;3129:16;3148:6;;;;;;;;;;;3129:25;;3174:8;3165:6;;:17;;;;;;;;;;;;;;;;;;3229:8;3198:40;;3219:8;3198:40;;;;;;;;;;;;3118:128;3055:191;:::o;14541:733::-;14699:1;14681:20;;:6;:20;;;;14673:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14783:1;14762:23;;:9;:23;;;;14754:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14838:47;14859:6;14867:9;14878:6;14838:20;:47::i;:::-;14898:21;14922:9;:17;14932:6;14922:17;;;;;;;;;;;;;;;;14898:41;;14975:6;14958:13;:23;;14950:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15096:6;15080:13;:22;15060:9;:17;15070:6;15060:17;;;;;;;;;;;;;;;:42;;;;15148:6;15124:9;:20;15134:9;15124:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15189:9;15172:35;;15181:6;15172:35;;;15200:6;15172:35;;;;;;:::i;:::-;;;;;;;;15220:46;15240:6;15248:9;15259:6;15220:19;:46::i;:::-;14662:612;14541:733;;;:::o;42902:1549::-;42941:23;42967:24;42985:4;42967:9;:24::i;:::-;42941:50;;43002:25;43098:12;;43064:18;;43030;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;43002:108;;43146:1;43127:15;:20;:46;;;;43172:1;43151:17;:22;43127:46;43123:85;;;43190:7;;;;43123:85;43263:2;43242:18;;:23;;;;:::i;:::-;43224:15;:41;43220:115;;;43321:2;43300:18;;:23;;;;:::i;:::-;43282:41;;43220:115;43396:23;43509:1;43476:17;43441:18;;43423:15;:36;;;;:::i;:::-;43422:71;;;;:::i;:::-;:88;;;;:::i;:::-;43396:114;;43521:26;43550:36;43570:15;43550;:19;;:36;;;;:::i;:::-;43521:65;;43599:25;43627:21;43599:49;;43661:36;43678:18;43661:16;:36::i;:::-;43710:18;43731:44;43757:17;43731:21;:25;;:44;;;;:::i;:::-;43710:65;;43788:23;43814:81;43867:17;43814:34;43829:18;;43814:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;43788:107;;43906:17;43926:51;43959:17;43926:28;43941:12;;43926:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43906:71;;43990:23;44047:9;44029:15;44016:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43990:66;;44090:1;44069:18;:22;;;;44123:1;44102:18;:22;;;;44150:1;44135:12;:16;;;;44188:1;44170:15;:19;:42;;;;;44211:1;44193:15;:19;44170:42;44166:278;;;44229:46;44242:15;44259;44229:12;:46::i;:::-;44295:137;44328:18;44365:15;44399:18;;44295:137;;;;;;;;:::i;:::-;;;;;;;;44166:278;42930:1521;;;;;;;;;42902:1549;:::o;22775:98::-;22833:7;22864:1;22860;:5;;;;:::i;:::-;22853:12;;22775:98;;;;:::o;23174:::-;23232:7;23263:1;23259;:5;;;;:::i;:::-;23252:12;;23174:98;;;;:::o;18302:125::-;;;;:::o;19031:124::-;;;;:::o;22418:98::-;22476:7;22507:1;22503;:5;;;;:::i;:::-;22496:12;;22418:98;;;;:::o;41780:589::-;41906:21;41944:1;41930:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41906:40;;41975:4;41957;41962:1;41957:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42001:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41991:4;41996:1;41991:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42036:62;42053:4;42068:15;42086:11;42036:8;:62::i;:::-;42137:15;:66;;;42218:11;42244:1;42288:4;42315;42335:15;42137:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41835:534;41780:589;:::o;42377:517::-;42525:62;42542:4;42557:15;42575:11;42525:8;:62::i;:::-;42630:15;:31;;;42669:9;42702:4;42722:11;42748:1;42791;32599:6;42860:15;42630:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42377:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:474::-;6634:6;6642;6691:2;6679:9;6670:7;6666:23;6662:32;6659:119;;;6697:79;;:::i;:::-;6659:119;6817:1;6842:53;6887:7;6878:6;6867:9;6863:22;6842:53;:::i;:::-;6832:63;;6788:117;6944:2;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6915:118;6566:474;;;;;:::o;7046:180::-;7094:77;7091:1;7084:88;7191:4;7188:1;7181:15;7215:4;7212:1;7205:15;7232:320;7276:6;7313:1;7307:4;7303:12;7293:22;;7360:1;7354:4;7350:12;7381:18;7371:81;;7437:4;7429:6;7425:17;7415:27;;7371:81;7499:2;7491:6;7488:14;7468:18;7465:38;7462:84;;;7518:18;;:::i;:::-;7462:84;7283:269;7232:320;;;:::o;7558:227::-;7698:34;7694:1;7686:6;7682:14;7675:58;7767:10;7762:2;7754:6;7750:15;7743:35;7558:227;:::o;7791:366::-;7933:3;7954:67;8018:2;8013:3;7954:67;:::i;:::-;7947:74;;8030:93;8119:3;8030:93;:::i;:::-;8148:2;8143:3;8139:12;8132:19;;7791:366;;;:::o;8163:419::-;8329:4;8367:2;8356:9;8352:18;8344:26;;8416:9;8410:4;8406:20;8402:1;8391:9;8387:17;8380:47;8444:131;8570:4;8444:131;:::i;:::-;8436:139;;8163:419;;;:::o;8588:180::-;8636:77;8633:1;8626:88;8733:4;8730:1;8723:15;8757:4;8754:1;8747:15;8774:305;8814:3;8833:20;8851:1;8833:20;:::i;:::-;8828:25;;8867:20;8885:1;8867:20;:::i;:::-;8862:25;;9021:1;8953:66;8949:74;8946:1;8943:81;8940:107;;;9027:18;;:::i;:::-;8940:107;9071:1;9068;9064:9;9057:16;;8774:305;;;;:::o;9085:182::-;9225:34;9221:1;9213:6;9209:14;9202:58;9085:182;:::o;9273:366::-;9415:3;9436:67;9500:2;9495:3;9436:67;:::i;:::-;9429:74;;9512:93;9601:3;9512:93;:::i;:::-;9630:2;9625:3;9621:12;9614:19;;9273:366;;;:::o;9645:419::-;9811:4;9849:2;9838:9;9834:18;9826:26;;9898:9;9892:4;9888:20;9884:1;9873:9;9869:17;9862:47;9926:131;10052:4;9926:131;:::i;:::-;9918:139;;9645:419;;;:::o;10070:224::-;10210:34;10206:1;10198:6;10194:14;10187:58;10279:7;10274:2;10266:6;10262:15;10255:32;10070:224;:::o;10300:366::-;10442:3;10463:67;10527:2;10522:3;10463:67;:::i;:::-;10456:74;;10539:93;10628:3;10539:93;:::i;:::-;10657:2;10652:3;10648:12;10641:19;;10300:366;;;:::o;10672:419::-;10838:4;10876:2;10865:9;10861:18;10853:26;;10925:9;10919:4;10915:20;10911:1;10900:9;10896:17;10889:47;10953:131;11079:4;10953:131;:::i;:::-;10945:139;;10672:419;;;:::o;11097:223::-;11237:34;11233:1;11225:6;11221:14;11214:58;11306:6;11301:2;11293:6;11289:15;11282:31;11097:223;:::o;11326:366::-;11468:3;11489:67;11553:2;11548:3;11489:67;:::i;:::-;11482:74;;11565:93;11654:3;11565:93;:::i;:::-;11683:2;11678:3;11674:12;11667:19;;11326:366;;;:::o;11698:419::-;11864:4;11902:2;11891:9;11887:18;11879:26;;11951:9;11945:4;11941:20;11937:1;11926:9;11922:17;11915:47;11979:131;12105:4;11979:131;:::i;:::-;11971:139;;11698:419;;;:::o;12123:221::-;12263:34;12259:1;12251:6;12247:14;12240:58;12332:4;12327:2;12319:6;12315:15;12308:29;12123:221;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:224::-;13287:34;13283:1;13275:6;13271:14;13264:58;13356:7;13351:2;13343:6;13339:15;13332:32;13147:224;:::o;13377:366::-;13519:3;13540:67;13604:2;13599:3;13540:67;:::i;:::-;13533:74;;13616:93;13705:3;13616:93;:::i;:::-;13734:2;13729:3;13725:12;13718:19;;13377:366;;;:::o;13749:419::-;13915:4;13953:2;13942:9;13938:18;13930:26;;14002:9;13996:4;13992:20;13988:1;13977:9;13973:17;13966:47;14030:131;14156:4;14030:131;:::i;:::-;14022:139;;13749:419;;;:::o;14174:222::-;14314:34;14310:1;14302:6;14298:14;14291:58;14383:5;14378:2;14370:6;14366:15;14359:30;14174:222;:::o;14402:366::-;14544:3;14565:67;14629:2;14624:3;14565:67;:::i;:::-;14558:74;;14641:93;14730:3;14641:93;:::i;:::-;14759:2;14754:3;14750:12;14743:19;;14402:366;;;:::o;14774:419::-;14940:4;14978:2;14967:9;14963:18;14955:26;;15027:9;15021:4;15017:20;15013:1;15002:9;14998:17;14991:47;15055:131;15181:4;15055:131;:::i;:::-;15047:139;;14774:419;;;:::o;15199:172::-;15339:24;15335:1;15327:6;15323:14;15316:48;15199:172;:::o;15377:366::-;15519:3;15540:67;15604:2;15599:3;15540:67;:::i;:::-;15533:74;;15616:93;15705:3;15616:93;:::i;:::-;15734:2;15729:3;15725:12;15718:19;;15377:366;;;:::o;15749:419::-;15915:4;15953:2;15942:9;15938:18;15930:26;;16002:9;15996:4;15992:20;15988:1;15977:9;15973:17;15966:47;16030:131;16156:4;16030:131;:::i;:::-;16022:139;;15749:419;;;:::o;16174:297::-;16314:34;16310:1;16302:6;16298:14;16291:58;16383:34;16378:2;16370:6;16366:15;16359:59;16452:11;16447:2;16439:6;16435:15;16428:36;16174:297;:::o;16477:366::-;16619:3;16640:67;16704:2;16699:3;16640:67;:::i;:::-;16633:74;;16716:93;16805:3;16716:93;:::i;:::-;16834:2;16829:3;16825:12;16818:19;;16477:366;;;:::o;16849:419::-;17015:4;17053:2;17042:9;17038:18;17030:26;;17102:9;17096:4;17092:20;17088:1;17077:9;17073:17;17066:47;17130:131;17256:4;17130:131;:::i;:::-;17122:139;;16849:419;;;:::o;17274:240::-;17414:34;17410:1;17402:6;17398:14;17391:58;17483:23;17478:2;17470:6;17466:15;17459:48;17274:240;:::o;17520:366::-;17662:3;17683:67;17747:2;17742:3;17683:67;:::i;:::-;17676:74;;17759:93;17848:3;17759:93;:::i;:::-;17877:2;17872:3;17868:12;17861:19;;17520:366;;;:::o;17892:419::-;18058:4;18096:2;18085:9;18081:18;18073:26;;18145:9;18139:4;18135:20;18131:1;18120:9;18116:17;18109:47;18173:131;18299:4;18173:131;:::i;:::-;18165:139;;17892:419;;;:::o;18317:169::-;18457:21;18453:1;18445:6;18441:14;18434:45;18317:169;:::o;18492:366::-;18634:3;18655:67;18719:2;18714:3;18655:67;:::i;:::-;18648:74;;18731:93;18820:3;18731:93;:::i;:::-;18849:2;18844:3;18840:12;18833:19;;18492:366;;;:::o;18864:419::-;19030:4;19068:2;19057:9;19053:18;19045:26;;19117:9;19111:4;19107:20;19103:1;19092:9;19088:17;19081:47;19145:131;19271:4;19145:131;:::i;:::-;19137:139;;18864:419;;;:::o;19289:241::-;19429:34;19425:1;19417:6;19413:14;19406:58;19498:24;19493:2;19485:6;19481:15;19474:49;19289:241;:::o;19536:366::-;19678:3;19699:67;19763:2;19758:3;19699:67;:::i;:::-;19692:74;;19775:93;19864:3;19775:93;:::i;:::-;19893:2;19888:3;19884:12;19877:19;;19536:366;;;:::o;19908:419::-;20074:4;20112:2;20101:9;20097:18;20089:26;;20161:9;20155:4;20151:20;20147:1;20136:9;20132:17;20125:47;20189:131;20315:4;20189:131;:::i;:::-;20181:139;;19908:419;;;:::o;20333:348::-;20373:7;20396:20;20414:1;20396:20;:::i;:::-;20391:25;;20430:20;20448:1;20430:20;:::i;:::-;20425:25;;20618:1;20550:66;20546:74;20543:1;20540:81;20535:1;20528:9;20521:17;20517:105;20514:131;;;20625:18;;:::i;:::-;20514:131;20673:1;20670;20666:9;20655:20;;20333:348;;;;:::o;20687:180::-;20735:77;20732:1;20725:88;20832:4;20829:1;20822:15;20856:4;20853:1;20846:15;20873:185;20913:1;20930:20;20948:1;20930:20;:::i;:::-;20925:25;;20964:20;20982:1;20964:20;:::i;:::-;20959:25;;21003:1;20993:35;;21008:18;;:::i;:::-;20993:35;21050:1;21047;21043:9;21038:14;;20873:185;;;;:::o;21064:191::-;21104:4;21124:20;21142:1;21124:20;:::i;:::-;21119:25;;21158:20;21176:1;21158:20;:::i;:::-;21153:25;;21197:1;21194;21191:8;21188:34;;;21202:18;;:::i;:::-;21188:34;21247:1;21244;21240:9;21232:17;;21064:191;;;;:::o;21261:225::-;21401:34;21397:1;21389:6;21385:14;21378:58;21470:8;21465:2;21457:6;21453:15;21446:33;21261:225;:::o;21492:366::-;21634:3;21655:67;21719:2;21714:3;21655:67;:::i;:::-;21648:74;;21731:93;21820:3;21731:93;:::i;:::-;21849:2;21844:3;21840:12;21833:19;;21492:366;;;:::o;21864:419::-;22030:4;22068:2;22057:9;22053:18;22045:26;;22117:9;22111:4;22107:20;22103:1;22092:9;22088:17;22081:47;22145:131;22271:4;22145:131;:::i;:::-;22137:139;;21864:419;;;:::o;22289:442::-;22438:4;22476:2;22465:9;22461:18;22453:26;;22489:71;22557:1;22546:9;22542:17;22533:6;22489:71;:::i;:::-;22570:72;22638:2;22627:9;22623:18;22614:6;22570:72;:::i;:::-;22652;22720:2;22709:9;22705:18;22696:6;22652:72;:::i;:::-;22289:442;;;;;;:::o;22737:180::-;22785:77;22782:1;22775:88;22882:4;22879:1;22872:15;22906:4;22903:1;22896:15;22923:180;22971:77;22968:1;22961:88;23068:4;23065:1;23058:15;23092:4;23089:1;23082:15;23109:143;23166:5;23197:6;23191:13;23182:22;;23213:33;23240:5;23213:33;:::i;:::-;23109:143;;;;:::o;23258:351::-;23328:6;23377:2;23365:9;23356:7;23352:23;23348:32;23345:119;;;23383:79;;:::i;:::-;23345:119;23503:1;23528:64;23584:7;23575:6;23564:9;23560:22;23528:64;:::i;:::-;23518:74;;23474:128;23258:351;;;;:::o;23615:85::-;23660:7;23689:5;23678:16;;23615:85;;;:::o;23706:158::-;23764:9;23797:61;23815:42;23824:32;23850:5;23824:32;:::i;:::-;23815:42;:::i;:::-;23797:61;:::i;:::-;23784:74;;23706:158;;;:::o;23870:147::-;23965:45;24004:5;23965:45;:::i;:::-;23960:3;23953:58;23870:147;;:::o;24023:114::-;24090:6;24124:5;24118:12;24108:22;;24023:114;;;:::o;24143:184::-;24242:11;24276:6;24271:3;24264:19;24316:4;24311:3;24307:14;24292:29;;24143:184;;;;:::o;24333:132::-;24400:4;24423:3;24415:11;;24453:4;24448:3;24444:14;24436:22;;24333:132;;;:::o;24471:108::-;24548:24;24566:5;24548:24;:::i;:::-;24543:3;24536:37;24471:108;;:::o;24585:179::-;24654:10;24675:46;24717:3;24709:6;24675:46;:::i;:::-;24753:4;24748:3;24744:14;24730:28;;24585:179;;;;:::o;24770:113::-;24840:4;24872;24867:3;24863:14;24855:22;;24770:113;;;:::o;24919:732::-;25038:3;25067:54;25115:5;25067:54;:::i;:::-;25137:86;25216:6;25211:3;25137:86;:::i;:::-;25130:93;;25247:56;25297:5;25247:56;:::i;:::-;25326:7;25357:1;25342:284;25367:6;25364:1;25361:13;25342:284;;;25443:6;25437:13;25470:63;25529:3;25514:13;25470:63;:::i;:::-;25463:70;;25556:60;25609:6;25556:60;:::i;:::-;25546:70;;25402:224;25389:1;25386;25382:9;25377:14;;25342:284;;;25346:14;25642:3;25635:10;;25043:608;;;24919:732;;;;:::o;25657:831::-;25920:4;25958:3;25947:9;25943:19;25935:27;;25972:71;26040:1;26029:9;26025:17;26016:6;25972:71;:::i;:::-;26053:80;26129:2;26118:9;26114:18;26105:6;26053:80;:::i;:::-;26180:9;26174:4;26170:20;26165:2;26154:9;26150:18;26143:48;26208:108;26311:4;26302:6;26208:108;:::i;:::-;26200:116;;26326:72;26394:2;26383:9;26379:18;26370:6;26326:72;:::i;:::-;26408:73;26476:3;26465:9;26461:19;26452:6;26408:73;:::i;:::-;25657:831;;;;;;;;:::o;26494:807::-;26743:4;26781:3;26770:9;26766:19;26758:27;;26795:71;26863:1;26852:9;26848:17;26839:6;26795:71;:::i;:::-;26876:72;26944:2;26933:9;26929:18;26920:6;26876:72;:::i;:::-;26958:80;27034:2;27023:9;27019:18;27010:6;26958:80;:::i;:::-;27048;27124:2;27113:9;27109:18;27100:6;27048:80;:::i;:::-;27138:73;27206:3;27195:9;27191:19;27182:6;27138:73;:::i;:::-;27221;27289:3;27278:9;27274:19;27265:6;27221:73;:::i;:::-;26494:807;;;;;;;;;:::o;27307:143::-;27364:5;27395:6;27389:13;27380:22;;27411:33;27438:5;27411:33;:::i;:::-;27307:143;;;;:::o;27456:663::-;27544:6;27552;27560;27609:2;27597:9;27588:7;27584:23;27580:32;27577:119;;;27615:79;;:::i;:::-;27577:119;27735:1;27760:64;27816:7;27807:6;27796:9;27792:22;27760:64;:::i;:::-;27750:74;;27706:128;27873:2;27899:64;27955:7;27946:6;27935:9;27931:22;27899:64;:::i;:::-;27889:74;;27844:129;28012:2;28038:64;28094:7;28085:6;28074:9;28070:22;28038:64;:::i;:::-;28028:74;;27983:129;27456:663;;;;;:::o
Swarm Source
ipfs://bbb54877504e6d1016a6faa9c3718d6c84af3359582c1f1558cb237834463745
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.