ERC-20
Overview
Max Total Supply
100,000,000,000 BPAD
Holders
4
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
93,222,052,979.804458423037832079 BPADValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BotPad
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-11 */ // SPDX-License-Identifier: Unlicensed /* Introducing the first AI-powered, revenue-sharing, multi-chain trading bot on Telegram! Currently live for BSC & Polygon. BotPad introduces a revolutionary platform that empowers users to personalize their cryptocurrency trading experience through the creation and customization of trading bots. With an emphasis on user-friendly interfaces and advanced scripting capabilities, BotPad encompasses portfolio management, smart contract auditing, early call alerts, group management bots, and a commitment to robust security and privacy measures. Twitter - https://x.com/BotPad_app Telegram - https://t.me/BotPad_app Website - https://botpad.app/ */ pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; 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); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 to 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 {} } library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BotPad is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public tokensForMarketing; // block number of opened trading uint256 launchedAt; /******************/ // exclude 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); constructor() ERC20("BotPad", "BPAD") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 25; uint256 _sellMarketingFee = 25; uint256 totalSupply = 100000000000 * 1e18; maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap wallet buyMarketingFee = _buyMarketingFee; buyTotalFees = buyMarketingFee; sellMarketingFee = _sellMarketingFee; sellTotalFees = sellMarketingFee; marketingWallet = address(owner()); // set as marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); 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() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 20 / 1000, "Swap amount cannot be higher than 2% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee) external onlyOwner { buyMarketingFee = _marketingFee; buyTotalFees = buyMarketingFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees(uint256 _marketingFee) external onlyOwner { sellMarketingFee = _marketingFee; sellTotalFees = sellMarketingFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } 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 ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //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; 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); tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { uint256 _buyTotalFees = buyTotalFees; uint256 _buyMarketingFee = buyMarketingFee; fees = amount.mul(_buyTotalFees).div(100); tokensForMarketing += fees * _buyMarketingFee / _buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if(contractBalance == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"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":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":"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":"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600681526020017f426f7450616400000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42504144000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc92919062000ac9565b508060049080519060200190620000e592919062000ac9565b5050506000620000fa6200059560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001c58160016200059d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024057600080fd5b505afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b919062000be3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002de57600080fd5b505afa158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000319919062000be3565b6040518363ffffffff1660e01b81526004016200033892919062000c26565b602060405180830381600087803b1580156200035357600080fd5b505af115801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e919062000be3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d660a05160016200059d60201b60201c565b620003eb60a05160016200069a60201b60201c565b60006019905060006019905060006c01431e0fae6d7217caa000000090506103e8600a826200041b919062000c8c565b62000427919062000d1c565b6007819055506103e86014826200043f919062000c8c565b6200044b919062000d1c565b60098190555061271060018262000463919062000c8c565b6200046f919062000d1c565b60088190555082600e81905550600e54600d8190555081601081905550601054600f81905550620004a56200073b60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000507620004f96200073b60201b60201c565b60016200076560201b60201c565b6200051a3060016200076560201b60201c565b6200052f61dead60016200076560201b60201c565b62000551620005436200073b60201b60201c565b60016200059d60201b60201c565b620005643060016200059d60201b60201c565b6200057961dead60016200059d60201b60201c565b6200058b3382620008b260201b60201c565b5050505062000fe5565b600033905090565b620005ad6200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200063f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006369062000db5565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007756200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000807576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007fe9062000db5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008a6919062000df4565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000925576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200091c9062000e61565b60405180910390fd5b620009396000838362000a6160201b60201c565b620009558160025462000a6660201b62001eec1790919060201c565b600281905550620009b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a6660201b62001eec1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a55919062000e94565b60405180910390a35050565b505050565b600080828462000a77919062000eb1565b90508381101562000abf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab69062000f5e565b60405180910390fd5b8091505092915050565b82805462000ad79062000faf565b90600052602060002090601f01602090048101928262000afb576000855562000b47565b82601f1062000b1657805160ff191683800117855562000b47565b8280016001018555821562000b47579182015b8281111562000b4657825182559160200191906001019062000b29565b5b50905062000b56919062000b5a565b5090565b5b8082111562000b7557600081600090555060010162000b5b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bab8262000b7e565b9050919050565b62000bbd8162000b9e565b811462000bc957600080fd5b50565b60008151905062000bdd8162000bb2565b92915050565b60006020828403121562000bfc5762000bfb62000b79565b5b600062000c0c8482850162000bcc565b91505092915050565b62000c208162000b9e565b82525050565b600060408201905062000c3d600083018562000c15565b62000c4c602083018462000c15565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c998262000c53565b915062000ca68362000c53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ce25762000ce162000c5d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d298262000c53565b915062000d368362000c53565b92508262000d495762000d4862000ced565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d9d60208362000d54565b915062000daa8262000d65565b602082019050919050565b6000602082019050818103600083015262000dd08162000d8e565b9050919050565b60008115159050919050565b62000dee8162000dd7565b82525050565b600060208201905062000e0b600083018462000de3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e49601f8362000d54565b915062000e568262000e11565b602082019050919050565b6000602082019050818103600083015262000e7c8162000e3a565b9050919050565b62000e8e8162000c53565b82525050565b600060208201905062000eab600083018462000e83565b92915050565b600062000ebe8262000c53565b915062000ecb8362000c53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f035762000f0262000c5d565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f46601b8362000d54565b915062000f538262000f0e565b602082019050919050565b6000602082019050818103600083015262000f798162000f37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fc857607f821691505b6020821081141562000fdf5762000fde62000f80565b5b50919050565b60805160a0516145a36200102760003960008181610d8801526114ac015260008181610a950152818161316501528181613255015261327c01526145a36000f3fe60806040526004361061024a5760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063d85ba0631161007a578063d85ba063146108b3578063dd62ed3e146108de578063e2f456051461091b578063eba4c33314610946578063f2fde38b1461096f578063f8b45b051461099857610251565b8063bbc0c742146107ce578063c0246668146107f9578063c18bc19514610822578063c8c8ebe41461084b578063d257b34f1461087657610251565b80639a7a23d6116100fd5780639a7a23d6146106c5578063a457c2d7146106ee578063a9059cbb1461072b578063aacebbe314610768578063b62496f51461079157610251565b80638a8c523c146106045780638da5cb5b1461061b5780639213691314610646578063924de9b71461067157806395d89b411461069a57610251565b806349bd5a5e116101c7578063715018a61161018b578063715018a61461054557806371fc46881461055c5780637571336a1461058557806375f0a874146105ae5780637bce5a04146105d957610251565b806349bd5a5e1461044a5780634fbee193146104755780636a486a8e146104b25780636ddd1713146104dd57806370a082311461050857610251565b80631f3fed8f1161020e5780631f3fed8f14610351578063203e727e1461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be5780631694505e146102fb57806318160ddd1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c3565b60405161027891906133ab565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613466565b610a55565b6040516102b591906134c1565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906134dc565b610a73565b6040516102f291906134c1565b60405180910390f35b34801561030757600080fd5b50610310610a93565b60405161031d9190613568565b60405180910390f35b34801561033257600080fd5b5061033b610ab7565b6040516103489190613592565b60405180910390f35b34801561035d57600080fd5b50610366610ac1565b6040516103739190613592565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906135ad565b610ac7565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906135da565b610bf1565b6040516103d991906134c1565b60405180910390f35b3480156103ee57600080fd5b506103f7610cca565b6040516104049190613649565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613466565b610cd3565b60405161044191906134c1565b60405180910390f35b34801561045657600080fd5b5061045f610d86565b60405161046c9190613673565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906134dc565b610daa565b6040516104a991906134c1565b60405180910390f35b3480156104be57600080fd5b506104c7610e00565b6040516104d49190613592565b60405180910390f35b3480156104e957600080fd5b506104f2610e06565b6040516104ff91906134c1565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906134dc565b610e19565b60405161053c9190613592565b60405180910390f35b34801561055157600080fd5b5061055a610e61565b005b34801561056857600080fd5b50610583600480360381019061057e91906135ad565b610fb9565b005b34801561059157600080fd5b506105ac60048036038101906105a791906136ba565b6110a9565b005b3480156105ba57600080fd5b506105c361119b565b6040516105d09190613673565b60405180910390f35b3480156105e557600080fd5b506105ee6111c1565b6040516105fb9190613592565b60405180910390f35b34801561061057600080fd5b506106196111c7565b005b34801561062757600080fd5b5061063061129d565b60405161063d9190613673565b60405180910390f35b34801561065257600080fd5b5061065b6112c7565b6040516106689190613592565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906136fa565b6112cd565b005b3480156106a657600080fd5b506106af611381565b6040516106bc91906133ab565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906136ba565b611413565b005b3480156106fa57600080fd5b5061071560048036038101906107109190613466565b611547565b60405161072291906134c1565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613466565b611614565b60405161075f91906134c1565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906134dc565b611632565b005b34801561079d57600080fd5b506107b860048036038101906107b391906134dc565b611789565b6040516107c591906134c1565b60405180910390f35b3480156107da57600080fd5b506107e36117a9565b6040516107f091906134c1565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b91906136ba565b6117bc565b005b34801561082e57600080fd5b50610849600480360381019061084491906135ad565b6118fc565b005b34801561085757600080fd5b50610860611a26565b60405161086d9190613592565b60405180910390f35b34801561088257600080fd5b5061089d600480360381019061089891906135ad565b611a2c565b6040516108aa91906134c1565b60405180910390f35b3480156108bf57600080fd5b506108c8611b9c565b6040516108d59190613592565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613727565b611ba2565b6040516109129190613592565b60405180910390f35b34801561092757600080fd5b50610930611c29565b60405161093d9190613592565b60405180910390f35b34801561095257600080fd5b5061096d600480360381019061096891906135ad565b611c2f565b005b34801561097b57600080fd5b50610996600480360381019061099191906134dc565b611d1f565b005b3480156109a457600080fd5b506109ad611ee6565b6040516109ba9190613592565b60405180910390f35b6060600380546109d290613796565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90613796565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b5050505050905090565b6000610a69610a62611f4a565b8484611f52565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60115481565b610acf611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613814565b60405180910390fd5b670de0b6b3a76400006103e86001610b74610ab7565b610b7e9190613863565b610b8891906138ec565b610b9291906138ec565b811015610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb9061398f565b60405180910390fd5b670de0b6b3a764000081610be89190613863565b60078190555050565b6000610bfe84848461211d565b610cbf84610c0a611f4a565b610cba8560405180606001604052806028815260200161452160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c70611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b611f52565b600190509392505050565b60006012905090565b6000610d7c610ce0611f4a565b84610d778560016000610cf1611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eec90919063ffffffff16565b611f52565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e69611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610fc1611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790613814565b60405180910390fd5b80600e81905550600e54600d81905550600a600d5411156110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d906139fb565b60405180910390fd5b50565b6110b1611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613814565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6111cf611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613814565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6112d5611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613814565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60606004805461139090613796565b80601f01602080910402602001604051908101604052809291908181526020018280546113bc90613796565b80156114095780601f106113de57610100808354040283529160200191611409565b820191906000526020600020905b8154815290600101906020018083116113ec57829003601f168201915b5050505050905090565b61141b611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613814565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613a8d565b60405180910390fd5b6115438282612b7b565b5050565b600061160a611554611f4a565b8461160585604051806060016040528060258152602001614549602591396001600061157e611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b611f52565b6001905092915050565b6000611628611621611f4a565b848461211d565b6001905092915050565b61163a611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c090613814565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6117c4611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90613814565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f091906134c1565b60405180910390a25050565b611904611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90613814565b60405180910390fd5b670de0b6b3a76400006103e860056119a9610ab7565b6119b39190613863565b6119bd91906138ec565b6119c791906138ec565b811015611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613b1f565b60405180910390fd5b670de0b6b3a764000081611a1d9190613863565b60098190555050565b60075481565b6000611a36611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90613814565b60405180910390fd5b620186a06001611ad3610ab7565b611add9190613863565b611ae791906138ec565b821015611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613bb1565b60405180910390fd5b6103e86014611b36610ab7565b611b409190613863565b611b4a91906138ec565b821115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613c43565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611c37611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd90613814565b60405180910390fd5b80601081905550601054600f81905550600a600f541115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906139fb565b60405180910390fd5b50565b611d27611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000808284611efb9190613cf5565b905083811015611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613d97565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990613ebb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121109190613592565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218490613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490613fdf565b60405180910390fd5b60008114156122175761221283836000612c1c565b612b12565b61221f61129d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228d575061225d61129d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612300575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123195750600560149054906101000a900460ff16155b156126fc57600a60009054906101000a900460ff1661241357601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d35750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124099061404b565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124b65750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255d57600754811115612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f7906140dd565b60405180910390fd5b60095461250c83610e19565b826125179190613cf5565b1115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90614149565b60405180910390fd5b6126fb565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126005750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561264f5760075481111561264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906141db565b60405180910390fd5b6126fa565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126f9576009546126ac83610e19565b826126b79190613cf5565b11156126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef90614149565b60405180910390fd5b5b5b5b5b600061270730610e19565b9050600060085482101590506000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c95750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127d357600090505b6000811561298a57601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561283657506000600f54115b1561289d576128636064612855600f5488612eb190919063ffffffff16565b612f2c90919063ffffffff16565b9050600f54601054826128769190613863565b61288091906138ec565b601160008282546128919190613cf5565b92505081905550612966565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128f857506000600d54115b15612965576000600d5490506000600e5490506129316064612923848a612eb190919063ffffffff16565b612f2c90919063ffffffff16565b92508181846129409190613863565b61294a91906138ec565b6011600082825461295b9190613cf5565b9250508190555050505b5b600081111561297b5761297a873083612c1c565b5b808561298791906141fb565b94505b8280156129a35750600a60019054906101000a900460ff165b80156129bc5750600560149054906101000a900460ff16155b8015612a125750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a685750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612abe5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b02576001600560146101000a81548160ff021916908315150217905550612ae6612f76565b6000600560146101000a81548160ff0219169083151502179055505b612b0d878787612c1c565b505050505b505050565b6000838311158290612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5691906133ab565b60405180910390fd5b5060008385612b6e91906141fb565b9050809150509392505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf390613fdf565b60405180910390fd5b612d0783838361305e565b612d72816040518060600160405280602681526020016144fb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e05816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eec90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ea49190613592565b60405180910390a3505050565b600080831415612ec45760009050612f26565b60008284612ed29190613863565b9050828482612ee191906138ec565b14612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f18906142a1565b60405180910390fd5b809150505b92915050565b6000612f6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613063565b905092915050565b6000612f8130610e19565b9050600080821415612f9457505061305c565b6014600854612fa39190613863565b821115612fbc576014600854612fb99190613863565b91505b6000829050612fca816130c6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613010906142f2565b60006040518083038185875af1925050503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5050809250505050505b565b505050565b600080831182906130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a191906133ab565b60405180910390fd5b50600083856130b991906138ec565b9050809150509392505050565b6000600267ffffffffffffffff8111156130e3576130e2614307565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614336565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613201919061437a565b8160018151811061321557613214614336565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f000000000000000000000000000000000000000000000000000000000000000084611f52565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc9594939291906144a0565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334c578082015181840152602081019050613331565b8381111561335b576000848401525b50505050565b6000601f19601f8301169050919050565b600061337d82613312565b613387818561331d565b935061339781856020860161332e565b6133a081613361565b840191505092915050565b600060208201905081810360008301526133c58184613372565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133fd826133d2565b9050919050565b61340d816133f2565b811461341857600080fd5b50565b60008135905061342a81613404565b92915050565b6000819050919050565b61344381613430565b811461344e57600080fd5b50565b6000813590506134608161343a565b92915050565b6000806040838503121561347d5761347c6133cd565b5b600061348b8582860161341b565b925050602061349c85828601613451565b9150509250929050565b60008115159050919050565b6134bb816134a6565b82525050565b60006020820190506134d660008301846134b2565b92915050565b6000602082840312156134f2576134f16133cd565b5b60006135008482850161341b565b91505092915050565b6000819050919050565b600061352e613529613524846133d2565b613509565b6133d2565b9050919050565b600061354082613513565b9050919050565b600061355282613535565b9050919050565b61356281613547565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c81613430565b82525050565b60006020820190506135a76000830184613583565b92915050565b6000602082840312156135c3576135c26133cd565b5b60006135d184828501613451565b91505092915050565b6000806000606084860312156135f3576135f26133cd565b5b60006136018682870161341b565b93505060206136128682870161341b565b925050604061362386828701613451565b9150509250925092565b600060ff82169050919050565b6136438161362d565b82525050565b600060208201905061365e600083018461363a565b92915050565b61366d816133f2565b82525050565b60006020820190506136886000830184613664565b92915050565b613697816134a6565b81146136a257600080fd5b50565b6000813590506136b48161368e565b92915050565b600080604083850312156136d1576136d06133cd565b5b60006136df8582860161341b565b92505060206136f0858286016136a5565b9150509250929050565b6000602082840312156137105761370f6133cd565b5b600061371e848285016136a5565b91505092915050565b6000806040838503121561373e5761373d6133cd565b5b600061374c8582860161341b565b925050602061375d8582860161341b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137ae57607f821691505b602082108114156137c2576137c1613767565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137fe60208361331d565b9150613809826137c8565b602082019050919050565b6000602082019050818103600083015261382d816137f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061386e82613430565b915061387983613430565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b2576138b1613834565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138f782613430565b915061390283613430565b925082613912576139116138bd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613979602f8361331d565b91506139848261391d565b604082019050919050565b600060208201905081810360008301526139a88161396c565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006139e5601d8361331d565b91506139f0826139af565b602082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a7760398361331d565b9150613a8282613a1b565b604082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b0960248361331d565b9150613b1482613aad565b604082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613b9b60358361331d565b9150613ba682613b3f565b604082019050919050565b60006020820190508181036000830152613bca81613b8e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20322520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613c2d60328361331d565b9150613c3882613bd1565b604082019050919050565b60006020820190508181036000830152613c5c81613c20565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cbf60268361331d565b9150613cca82613c63565b604082019050919050565b60006020820190508181036000830152613cee81613cb2565b9050919050565b6000613d0082613430565b9150613d0b83613430565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d4057613d3f613834565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613d81601b8361331d565b9150613d8c82613d4b565b602082019050919050565b60006020820190508181036000830152613db081613d74565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e1360248361331d565b9150613e1e82613db7565b604082019050919050565b60006020820190508181036000830152613e4281613e06565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ea560228361331d565b9150613eb082613e49565b604082019050919050565b60006020820190508181036000830152613ed481613e98565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f3760258361331d565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc960238361331d565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061403560168361331d565b915061404082613fff565b602082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140c760358361331d565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061413360138361331d565b915061413e826140fd565b602082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006141c560368361331d565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613430565b915061421183613430565b92508282101561422457614223613834565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061428b60218361331d565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b600081905092915050565b50565b60006142dc6000836142c1565b91506142e7826142cc565b600082019050919050565b60006142fd826142cf565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061437481613404565b92915050565b6000602082840312156143905761438f6133cd565b5b600061439e84828501614365565b91505092915050565b6000819050919050565b60006143cc6143c76143c2846143a7565b613509565b613430565b9050919050565b6143dc816143b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614417816133f2565b82525050565b6000614429838361440e565b60208301905092915050565b6000602082019050919050565b600061444d826143e2565b61445781856143ed565b9350614462836143fe565b8060005b8381101561449357815161447a888261441d565b975061448583614435565b925050600181019050614466565b5085935050505092915050565b600060a0820190506144b56000830188613583565b6144c260208301876143d3565b81810360408301526144d48186614442565b90506144e36060830185613664565b6144f06080830184613583565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200c6d4dc8e1fdd4062306f358bbd359388834aa650fd21b88cbf43cc42a774df364736f6c63430008090033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063d85ba0631161007a578063d85ba063146108b3578063dd62ed3e146108de578063e2f456051461091b578063eba4c33314610946578063f2fde38b1461096f578063f8b45b051461099857610251565b8063bbc0c742146107ce578063c0246668146107f9578063c18bc19514610822578063c8c8ebe41461084b578063d257b34f1461087657610251565b80639a7a23d6116100fd5780639a7a23d6146106c5578063a457c2d7146106ee578063a9059cbb1461072b578063aacebbe314610768578063b62496f51461079157610251565b80638a8c523c146106045780638da5cb5b1461061b5780639213691314610646578063924de9b71461067157806395d89b411461069a57610251565b806349bd5a5e116101c7578063715018a61161018b578063715018a61461054557806371fc46881461055c5780637571336a1461058557806375f0a874146105ae5780637bce5a04146105d957610251565b806349bd5a5e1461044a5780634fbee193146104755780636a486a8e146104b25780636ddd1713146104dd57806370a082311461050857610251565b80631f3fed8f1161020e5780631f3fed8f14610351578063203e727e1461037c57806323b872dd146103a5578063313ce567146103e2578063395093511461040d57610251565b806306fdde0314610256578063095ea7b31461028157806310d5de53146102be5780631694505e146102fb57806318160ddd1461032657610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109c3565b60405161027891906133ab565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613466565b610a55565b6040516102b591906134c1565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906134dc565b610a73565b6040516102f291906134c1565b60405180910390f35b34801561030757600080fd5b50610310610a93565b60405161031d9190613568565b60405180910390f35b34801561033257600080fd5b5061033b610ab7565b6040516103489190613592565b60405180910390f35b34801561035d57600080fd5b50610366610ac1565b6040516103739190613592565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906135ad565b610ac7565b005b3480156103b157600080fd5b506103cc60048036038101906103c791906135da565b610bf1565b6040516103d991906134c1565b60405180910390f35b3480156103ee57600080fd5b506103f7610cca565b6040516104049190613649565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613466565b610cd3565b60405161044191906134c1565b60405180910390f35b34801561045657600080fd5b5061045f610d86565b60405161046c9190613673565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906134dc565b610daa565b6040516104a991906134c1565b60405180910390f35b3480156104be57600080fd5b506104c7610e00565b6040516104d49190613592565b60405180910390f35b3480156104e957600080fd5b506104f2610e06565b6040516104ff91906134c1565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906134dc565b610e19565b60405161053c9190613592565b60405180910390f35b34801561055157600080fd5b5061055a610e61565b005b34801561056857600080fd5b50610583600480360381019061057e91906135ad565b610fb9565b005b34801561059157600080fd5b506105ac60048036038101906105a791906136ba565b6110a9565b005b3480156105ba57600080fd5b506105c361119b565b6040516105d09190613673565b60405180910390f35b3480156105e557600080fd5b506105ee6111c1565b6040516105fb9190613592565b60405180910390f35b34801561061057600080fd5b506106196111c7565b005b34801561062757600080fd5b5061063061129d565b60405161063d9190613673565b60405180910390f35b34801561065257600080fd5b5061065b6112c7565b6040516106689190613592565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906136fa565b6112cd565b005b3480156106a657600080fd5b506106af611381565b6040516106bc91906133ab565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906136ba565b611413565b005b3480156106fa57600080fd5b5061071560048036038101906107109190613466565b611547565b60405161072291906134c1565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613466565b611614565b60405161075f91906134c1565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906134dc565b611632565b005b34801561079d57600080fd5b506107b860048036038101906107b391906134dc565b611789565b6040516107c591906134c1565b60405180910390f35b3480156107da57600080fd5b506107e36117a9565b6040516107f091906134c1565b60405180910390f35b34801561080557600080fd5b50610820600480360381019061081b91906136ba565b6117bc565b005b34801561082e57600080fd5b50610849600480360381019061084491906135ad565b6118fc565b005b34801561085757600080fd5b50610860611a26565b60405161086d9190613592565b60405180910390f35b34801561088257600080fd5b5061089d600480360381019061089891906135ad565b611a2c565b6040516108aa91906134c1565b60405180910390f35b3480156108bf57600080fd5b506108c8611b9c565b6040516108d59190613592565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613727565b611ba2565b6040516109129190613592565b60405180910390f35b34801561092757600080fd5b50610930611c29565b60405161093d9190613592565b60405180910390f35b34801561095257600080fd5b5061096d600480360381019061096891906135ad565b611c2f565b005b34801561097b57600080fd5b50610996600480360381019061099191906134dc565b611d1f565b005b3480156109a457600080fd5b506109ad611ee6565b6040516109ba9190613592565b60405180910390f35b6060600380546109d290613796565b80601f01602080910402602001604051908101604052809291908181526020018280546109fe90613796565b8015610a4b5780601f10610a2057610100808354040283529160200191610a4b565b820191906000526020600020905b815481529060010190602001808311610a2e57829003601f168201915b5050505050905090565b6000610a69610a62611f4a565b8484611f52565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60115481565b610acf611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613814565b60405180910390fd5b670de0b6b3a76400006103e86001610b74610ab7565b610b7e9190613863565b610b8891906138ec565b610b9291906138ec565b811015610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb9061398f565b60405180910390fd5b670de0b6b3a764000081610be89190613863565b60078190555050565b6000610bfe84848461211d565b610cbf84610c0a611f4a565b610cba8560405180606001604052806028815260200161452160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c70611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b611f52565b600190509392505050565b60006012905090565b6000610d7c610ce0611f4a565b84610d778560016000610cf1611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eec90919063ffffffff16565b611f52565b6001905092915050565b7f0000000000000000000000004b289a4bc6a575f021bc7bb8b7672a0c204d674981565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e69611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610fc1611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790613814565b60405180910390fd5b80600e81905550600e54600d81905550600a600d5411156110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d906139fb565b60405180910390fd5b50565b6110b1611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613814565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6111cf611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613814565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6112d5611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613814565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60606004805461139090613796565b80601f01602080910402602001604051908101604052809291908181526020018280546113bc90613796565b80156114095780601f106113de57610100808354040283529160200191611409565b820191906000526020600020905b8154815290600101906020018083116113ec57829003601f168201915b5050505050905090565b61141b611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613814565b60405180910390fd5b7f0000000000000000000000004b289a4bc6a575f021bc7bb8b7672a0c204d674973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613a8d565b60405180910390fd5b6115438282612b7b565b5050565b600061160a611554611f4a565b8461160585604051806060016040528060258152602001614549602591396001600061157e611f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b611f52565b6001905092915050565b6000611628611621611f4a565b848461211d565b6001905092915050565b61163a611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c090613814565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6117c4611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90613814565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f091906134c1565b60405180910390a25050565b611904611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90613814565b60405180910390fd5b670de0b6b3a76400006103e860056119a9610ab7565b6119b39190613863565b6119bd91906138ec565b6119c791906138ec565b811015611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613b1f565b60405180910390fd5b670de0b6b3a764000081611a1d9190613863565b60098190555050565b60075481565b6000611a36611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc90613814565b60405180910390fd5b620186a06001611ad3610ab7565b611add9190613863565b611ae791906138ec565b821015611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613bb1565b60405180910390fd5b6103e86014611b36610ab7565b611b409190613863565b611b4a91906138ec565b821115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390613c43565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611c37611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd90613814565b60405180910390fd5b80601081905550601054600f81905550600a600f541115611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d13906139fb565b60405180910390fd5b50565b611d27611f4a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90613cd5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000808284611efb9190613cf5565b905083811015611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613d97565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990613e29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990613ebb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121109190613592565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218490613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490613fdf565b60405180910390fd5b60008114156122175761221283836000612c1c565b612b12565b61221f61129d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228d575061225d61129d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612300575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123195750600560149054906101000a900460ff16155b156126fc57600a60009054906101000a900460ff1661241357601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d35750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124099061404b565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124b65750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255d57600754811115612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f7906140dd565b60405180910390fd5b60095461250c83610e19565b826125179190613cf5565b1115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90614149565b60405180910390fd5b6126fb565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126005750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561264f5760075481111561264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906141db565b60405180910390fd5b6126fa565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126f9576009546126ac83610e19565b826126b79190613cf5565b11156126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef90614149565b60405180910390fd5b5b5b5b5b600061270730610e19565b9050600060085482101590506000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c95750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127d357600090505b6000811561298a57601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561283657506000600f54115b1561289d576128636064612855600f5488612eb190919063ffffffff16565b612f2c90919063ffffffff16565b9050600f54601054826128769190613863565b61288091906138ec565b601160008282546128919190613cf5565b92505081905550612966565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128f857506000600d54115b15612965576000600d5490506000600e5490506129316064612923848a612eb190919063ffffffff16565b612f2c90919063ffffffff16565b92508181846129409190613863565b61294a91906138ec565b6011600082825461295b9190613cf5565b9250508190555050505b5b600081111561297b5761297a873083612c1c565b5b808561298791906141fb565b94505b8280156129a35750600a60019054906101000a900460ff165b80156129bc5750600560149054906101000a900460ff16155b8015612a125750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a685750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612abe5750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b02576001600560146101000a81548160ff021916908315150217905550612ae6612f76565b6000600560146101000a81548160ff0219169083151502179055505b612b0d878787612c1c565b505050505b505050565b6000838311158290612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5691906133ab565b60405180910390fd5b5060008385612b6e91906141fb565b9050809150509392505050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf390613fdf565b60405180910390fd5b612d0783838361305e565b612d72816040518060600160405280602681526020016144fb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b179092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e05816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eec90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ea49190613592565b60405180910390a3505050565b600080831415612ec45760009050612f26565b60008284612ed29190613863565b9050828482612ee191906138ec565b14612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f18906142a1565b60405180910390fd5b809150505b92915050565b6000612f6e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613063565b905092915050565b6000612f8130610e19565b9050600080821415612f9457505061305c565b6014600854612fa39190613863565b821115612fbc576014600854612fb99190613863565b91505b6000829050612fca816130c6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613010906142f2565b60006040518083038185875af1925050503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5050809250505050505b565b505050565b600080831182906130aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a191906133ab565b60405180910390fd5b50600083856130b991906138ec565b9050809150509392505050565b6000600267ffffffffffffffff8111156130e3576130e2614307565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614336565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613201919061437a565b8160018151811061321557613214614336565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f52565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc9594939291906144a0565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334c578082015181840152602081019050613331565b8381111561335b576000848401525b50505050565b6000601f19601f8301169050919050565b600061337d82613312565b613387818561331d565b935061339781856020860161332e565b6133a081613361565b840191505092915050565b600060208201905081810360008301526133c58184613372565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133fd826133d2565b9050919050565b61340d816133f2565b811461341857600080fd5b50565b60008135905061342a81613404565b92915050565b6000819050919050565b61344381613430565b811461344e57600080fd5b50565b6000813590506134608161343a565b92915050565b6000806040838503121561347d5761347c6133cd565b5b600061348b8582860161341b565b925050602061349c85828601613451565b9150509250929050565b60008115159050919050565b6134bb816134a6565b82525050565b60006020820190506134d660008301846134b2565b92915050565b6000602082840312156134f2576134f16133cd565b5b60006135008482850161341b565b91505092915050565b6000819050919050565b600061352e613529613524846133d2565b613509565b6133d2565b9050919050565b600061354082613513565b9050919050565b600061355282613535565b9050919050565b61356281613547565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c81613430565b82525050565b60006020820190506135a76000830184613583565b92915050565b6000602082840312156135c3576135c26133cd565b5b60006135d184828501613451565b91505092915050565b6000806000606084860312156135f3576135f26133cd565b5b60006136018682870161341b565b93505060206136128682870161341b565b925050604061362386828701613451565b9150509250925092565b600060ff82169050919050565b6136438161362d565b82525050565b600060208201905061365e600083018461363a565b92915050565b61366d816133f2565b82525050565b60006020820190506136886000830184613664565b92915050565b613697816134a6565b81146136a257600080fd5b50565b6000813590506136b48161368e565b92915050565b600080604083850312156136d1576136d06133cd565b5b60006136df8582860161341b565b92505060206136f0858286016136a5565b9150509250929050565b6000602082840312156137105761370f6133cd565b5b600061371e848285016136a5565b91505092915050565b6000806040838503121561373e5761373d6133cd565b5b600061374c8582860161341b565b925050602061375d8582860161341b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137ae57607f821691505b602082108114156137c2576137c1613767565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137fe60208361331d565b9150613809826137c8565b602082019050919050565b6000602082019050818103600083015261382d816137f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061386e82613430565b915061387983613430565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138b2576138b1613834565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138f782613430565b915061390283613430565b925082613912576139116138bd565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613979602f8361331d565b91506139848261391d565b604082019050919050565b600060208201905081810360008301526139a88161396c565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006139e5601d8361331d565b91506139f0826139af565b602082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a7760398361331d565b9150613a8282613a1b565b604082019050919050565b60006020820190508181036000830152613aa681613a6a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b0960248361331d565b9150613b1482613aad565b604082019050919050565b60006020820190508181036000830152613b3881613afc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613b9b60358361331d565b9150613ba682613b3f565b604082019050919050565b60006020820190508181036000830152613bca81613b8e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20322520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613c2d60328361331d565b9150613c3882613bd1565b604082019050919050565b60006020820190508181036000830152613c5c81613c20565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613cbf60268361331d565b9150613cca82613c63565b604082019050919050565b60006020820190508181036000830152613cee81613cb2565b9050919050565b6000613d0082613430565b9150613d0b83613430565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d4057613d3f613834565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613d81601b8361331d565b9150613d8c82613d4b565b602082019050919050565b60006020820190508181036000830152613db081613d74565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e1360248361331d565b9150613e1e82613db7565b604082019050919050565b60006020820190508181036000830152613e4281613e06565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ea560228361331d565b9150613eb082613e49565b604082019050919050565b60006020820190508181036000830152613ed481613e98565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f3760258361331d565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc960238361331d565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061403560168361331d565b915061404082613fff565b602082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140c760358361331d565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061413360138361331d565b915061413e826140fd565b602082019050919050565b6000602082019050818103600083015261416281614126565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006141c560368361331d565b91506141d082614169565b604082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613430565b915061421183613430565b92508282101561422457614223613834565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061428b60218361331d565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b600081905092915050565b50565b60006142dc6000836142c1565b91506142e7826142cc565b600082019050919050565b60006142fd826142cf565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061437481613404565b92915050565b6000602082840312156143905761438f6133cd565b5b600061439e84828501614365565b91505092915050565b6000819050919050565b60006143cc6143c76143c2846143a7565b613509565b613430565b9050919050565b6143dc816143b1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614417816133f2565b82525050565b6000614429838361440e565b60208301905092915050565b6000602082019050919050565b600061444d826143e2565b61445781856143ed565b9350614462836143fe565b8060005b8381101561449357815161447a888261441d565b975061448583614435565b925050600181019050614466565b5085935050505092915050565b600060a0820190506144b56000830188613583565b6144c260208301876143d3565b81810360408301526144d48186614442565b90506144e36060830185613664565b6144f06080830184613583565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200c6d4dc8e1fdd4062306f358bbd359388834aa650fd21b88cbf43cc42a774df364736f6c63430008090033
Deployed Bytecode Sourcemap
30073:10598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10345:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31198:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30150:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9294:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30946:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34279:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10997:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9135:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11762:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30208:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36435:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30870:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30483:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9466:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22673:148;;;;;;;;;;;;;:::i;:::-;;35097:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34746:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30287:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33670:148;;;;;;;;;;;;;:::i;:::-;;22029:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30905:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34987:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8391:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35765:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12484:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9807:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36217:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31421:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30443:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35574:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34522:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30327:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33890:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30796:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10046:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30369:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35333:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22977:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30409:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8171:100;8225:13;8258:5;8251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8171:100;:::o;10345:169::-;10428:4;10445:39;10454:12;:10;:12::i;:::-;10468:7;10477:6;10445:8;:39::i;:::-;10502:4;10495:11;;10345:169;;;;:::o;31198:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30150:51::-;;;:::o;9294:108::-;9355:7;9382:12;;9375:19;;9294:108;:::o;30946:33::-;;;;:::o;34279:234::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34398:4:::1;34392;34388:1;34372:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34371:31;;;;:::i;:::-;34361:6;:41;;34353:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34498:6;34488;:17;;;;:::i;:::-;34465:20;:40;;;;34279:234:::0;:::o;10997:355::-;11137:4;11154:36;11164:6;11172:9;11183:6;11154:9;:36::i;:::-;11201:121;11210:6;11218:12;:10;:12::i;:::-;11232:89;11270:6;11232:89;;;;;;;;;;;;;;;;;:11;:19;11244:6;11232:19;;;;;;;;;;;;;;;:33;11252:12;:10;:12::i;:::-;11232:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11201:8;:121::i;:::-;11340:4;11333:11;;10997:355;;;;;:::o;9135:93::-;9193:5;9218:2;9211:9;;9135:93;:::o;11762:218::-;11850:4;11867:83;11876:12;:10;:12::i;:::-;11890:7;11899:50;11938:10;11899:11;:25;11911:12;:10;:12::i;:::-;11899:25;;;;;;;;;;;;;;;:34;11925:7;11899:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11867:8;:83::i;:::-;11968:4;11961:11;;11762:218;;;;:::o;30208:38::-;;;:::o;36435:125::-;36500:4;36524:19;:28;36544:7;36524:28;;;;;;;;;;;;;;;;;;;;;;;;;36517:35;;36435:125;;;:::o;30870:28::-;;;;:::o;30483:31::-;;;;;;;;;;;;;:::o;9466:127::-;9540:7;9567:9;:18;9577:7;9567:18;;;;;;;;;;;;;;;;9560:25;;9466:127;;;:::o;22673:148::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22780:1:::1;22743:40;;22764:6;;;;;;;;;;;22743:40;;;;;;;;;;;;22811:1;22794:6;;:19;;;;;;;;;;;;;;;;;;22673:148::o:0;35097:227::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35191:13:::1;35173:15;:31;;;;35230:15;;35215:12;:30;;;;35280:2;35264:12;;:18;;35256:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35097:227:::0;:::o;34746:144::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34878:4:::1;34836:31;:39;34868:6;34836:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34746:144:::0;;:::o;30287:30::-;;;;;;;;;;;;;:::o;30830:::-;;;;:::o;33670:148::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33741:4:::1;33725:13;;:20;;;;;;;;;;;;;;;;;;33770:4;33756:11;;:18;;;;;;;;;;;;;;;;;;33798:12;33785:10;:25;;;;33670:148::o:0;22029:79::-;22067:7;22094:6;;;;;;;;;;;22087:13;;22029:79;:::o;30905:31::-;;;;:::o;34987:101::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35073:7:::1;35059:11;;:21;;;;;;;;;;;;;;;;;;34987:101:::0;:::o;8391:104::-;8447:13;8480:7;8473:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8391:104;:::o;35765:245::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35872:13:::1;35864:21;;:4;:21;;;;35856:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35961:41;35990:4;35996:5;35961:28;:41::i;:::-;35765:245:::0;;:::o;12484:269::-;12577:4;12594:129;12603:12;:10;:12::i;:::-;12617:7;12626:96;12665:15;12626:96;;;;;;;;;;;;;;;;;:11;:25;12638:12;:10;:12::i;:::-;12626:25;;;;;;;;;;;;;;;:34;12652:7;12626:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12594:8;:129::i;:::-;12741:4;12734:11;;12484:269;;;;:::o;9807:175::-;9893:4;9910:42;9920:12;:10;:12::i;:::-;9934:9;9945:6;9910:9;:42::i;:::-;9970:4;9963:11;;9807:175;;;;:::o;36217:208::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36354:15:::1;;;;;;;;;;;36311:59;;36334:18;36311:59;;;;;;;;;;;;36399:18;36381:15;;:36;;;;;;;;;;;;;;;;;;36217:208:::0;:::o;31421:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30443:33::-;;;;;;;;;;;;;:::o;35574:182::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35690:8:::1;35659:19;:28;35679:7;35659:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35730:7;35714:34;;;35739:8;35714:34;;;;;;:::i;:::-;;;;;;;;35574:182:::0;;:::o;34522:215::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:4:::1;34638;34634:1;34618:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34617:31;;;;:::i;:::-;34607:6;:41;;34599:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34722:6;34712;:17;;;;:::i;:::-;34700:9;:29;;;;34522:215:::0;:::o;30327:35::-;;;;:::o;33890:380::-;33971:4;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34027:6:::1;34023:1;34007:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33994:9;:39;;33986:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34143:4;34138:2;34122:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;34109:9;:38;;34101:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:9;34212:18;:30;;;;34259:4;34252:11;;33890:380:::0;;;:::o;30796:27::-;;;;:::o;10046:151::-;10135:7;10162:11;:18;10174:5;10162:18;;;;;;;;;;;;;;;:27;10181:7;10162:27;;;;;;;;;;;;;;;;10155:34;;10046:151;;;;:::o;30369:33::-;;;;:::o;35333:232::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35429:13:::1;35410:16;:32;;;;35469:16;;35453:13;:32;;;;35521:2;35504:13;;:19;;35496:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35333:232:::0;:::o;22977:244::-;22252:12;:10;:12::i;:::-;22242:22;;:6;;;;;;;;;;;:22;;;22234:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23086:1:::1;23066:22;;:8;:22;;;;23058:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23176:8;23147:38;;23168:6;;;;;;;;;;;23147:38;;;;;;;;;;;;23205:8;23196:6;;:17;;;;;;;;;;;;;;;;;;22977:244:::0;:::o;30409:24::-;;;;:::o;17061:182::-;17119:7;17139:9;17155:1;17151;:5;;;;:::i;:::-;17139:17;;17180:1;17175;:6;;17167:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17234:1;17227:8;;;17061:182;;;;:::o;770:98::-;823:7;850:10;843:17;;770:98;:::o;15680:381::-;15833:1;15816:19;;:5;:19;;;;15808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15914:1;15895:21;;:7;:21;;;;15887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15999:6;15969:11;:18;15981:5;15969:18;;;;;;;;;;;;;;;:27;15988:7;15969:27;;;;;;;;;;;;;;;:36;;;;16037:7;16021:32;;16030:5;16021:32;;;16046:6;16021:32;;;;;;:::i;:::-;;;;;;;;15680:381;;;:::o;36620:2931::-;36768:1;36752:18;;:4;:18;;;;36744:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36845:1;36831:16;;:2;:16;;;;36823:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36912:1;36902:6;:11;36899:92;;;36930:28;36946:4;36952:2;36956:1;36930:15;:28::i;:::-;36973:7;;36899:92;37024:7;:5;:7::i;:::-;37016:15;;:4;:15;;;;:36;;;;;37045:7;:5;:7::i;:::-;37039:13;;:2;:13;;;;37016:36;:60;;;;;37074:1;37060:16;;:2;:16;;;;37016:60;:89;;;;;37098:6;37084:21;;:2;:21;;;;37016:89;:106;;;;;37114:8;;;;;;;;;;;37113:9;37016:106;37007:883;;;37137:13;;;;;;;;;;;37133:119;;37166:19;:25;37186:4;37166:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37195:19;:23;37215:2;37195:23;;;;;;;;;;;;;;;;;;;;;;;;;37166:52;37158:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37133:119;37278:25;:31;37304:4;37278:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37314:31;:35;37346:2;37314:35;;;;;;;;;;;;;;;;;;;;;;;;;37313:36;37278:71;37274:611;;;37377:20;;37367:6;:30;;37359:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37497:9;;37480:13;37490:2;37480:9;:13::i;:::-;37471:6;:22;;;;:::i;:::-;:35;;37463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37274:611;;;37569:25;:29;37595:2;37569:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37603:31;:37;37635:4;37603:37;;;;;;;;;;;;;;;;;;;;;;;;;37602:38;37569:71;37565:320;;;37668:20;;37658:6;:30;;37650:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37565:320;;;37768:31;:35;37800:2;37768:35;;;;;;;;;;;;;;;;;;;;;;;;;37764:121;;37845:9;;37828:13;37838:2;37828:9;:13::i;:::-;37819:6;:22;;;;:::i;:::-;:35;;37811:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37764:121;37565:320;37274:611;37007:883;37904:28;37935:24;37953:4;37935:9;:24::i;:::-;37904:55;;37970:12;38009:18;;37985:20;:42;;37970:57;;38032:12;38048:8;;;;;;;;;;;38047:9;38032:24;;38158:19;:25;38178:4;38158:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38187:19;:23;38207:2;38187:23;;;;;;;;;;;;;;;;;;;;;;;;;38158:52;38155:99;;;38237:5;38227:15;;38155:99;38267:12;38371:7;38368:775;;;38422:25;:29;38448:2;38422:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38471:1;38455:13;;:17;38422:50;38418:575;;;38499:34;38529:3;38499:25;38510:13;;38499:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38492:41;;38600:13;;38581:16;;38574:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38552:18;;:61;;;;;;;:::i;:::-;;;;;;;;38418:575;;;38674:25;:31;38700:4;38674:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38724:1;38709:12;;:16;38674:51;38671:322;;;38743:21;38767:12;;38743:36;;38795:24;38822:15;;38795:42;;38863:34;38893:3;38863:25;38874:13;38863:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38856:41;;38964:13;38945:16;38938:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38916:18;;:61;;;;;;;:::i;:::-;;;;;;;;38727:266;;38671:322;38418:575;39020:1;39013:4;:8;39010:93;;;39045:42;39061:4;39075;39082;39045:15;:42::i;:::-;39010:93;39127:4;39117:14;;;;;:::i;:::-;;;38368:775;39187:7;:35;;;;;39211:11;;;;;;;;;;;39187:35;:61;;;;;39240:8;;;;;;;;;;;39239:9;39187:61;:110;;;;;39266:25;:31;39292:4;39266:31;;;;;;;;;;;;;;;;;;;;;;;;;39265:32;39187:110;:153;;;;;39315:19;:25;39335:4;39315:25;;;;;;;;;;;;;;;;;;;;;;;;;39314:26;39187:153;:194;;;;;39358:19;:23;39378:2;39358:23;;;;;;;;;;;;;;;;;;;;;;;;;39357:24;39187:194;39169:328;;;39419:4;39408:8;;:15;;;;;;;;;;;;;;;;;;39441:10;:8;:10::i;:::-;39480:5;39469:8;;:16;;;;;;;;;;;;;;;;;;39169:328;39510:33;39526:4;39532:2;39536:6;39510:15;:33::i;:::-;36733:2818;;;;36620:2931;;;;:::o;17967:193::-;18053:7;18086:1;18081;:6;;18089:12;18073:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18113:9;18129:1;18125;:5;;;;:::i;:::-;18113:17;;18151:1;18144:8;;;17967:193;;;;;:::o;36019:189::-;36136:5;36102:25;:31;36128:4;36102:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36194:5;36160:40;;36188:4;36160:40;;;;;;;;;;;;36019:189;;:::o;13244:575::-;13402:1;13384:20;;:6;:20;;;;13376:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13486:1;13465:23;;:9;:23;;;;13457:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13542:47;13563:6;13571:9;13582:6;13542:20;:47::i;:::-;13623:71;13645:6;13623:71;;;;;;;;;;;;;;;;;:9;:17;13633:6;13623:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13603:9;:17;13613:6;13603:17;;;;;;;;;;;;;;;:91;;;;13728:32;13753:6;13728:9;:20;13738:9;13728:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13705:9;:20;13715:9;13705:20;;;;;;;;;;;;;;;:55;;;;13793:9;13776:35;;13785:6;13776:35;;;13804:6;13776:35;;;;;;:::i;:::-;;;;;;;;13244:575;;;:::o;18420:473::-;18478:7;18728:1;18723;:6;18719:47;;;18753:1;18746:8;;;;18719:47;18779:9;18795:1;18791;:5;;;;:::i;:::-;18779:17;;18824:1;18819;18815;:5;;;;:::i;:::-;:10;18807:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18884:1;18877:8;;;18420:473;;;;;:::o;19370:132::-;19428:7;19455:39;19459:1;19462;19455:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19448:46;;19370:132;;;;:::o;40167:499::-;40206:23;40232:24;40250:4;40232:9;:24::i;:::-;40206:50;;40267:12;40315:1;40296:15;:20;40293:34;;;40319:7;;;;40293:34;40382:2;40361:18;;:23;;;;:::i;:::-;40343:15;:41;40340:111;;;40437:2;40416:18;;:23;;;;:::i;:::-;40398:41;;40340:111;40469:26;40498:15;40469:44;;40524:36;40541:18;40524:16;:36::i;:::-;40603:15;;;;;;;;;;;40595:29;;40632:21;40595:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40582:76;;;;;40195:471;;;40167:499;:::o;16665:125::-;;;;:::o;19999:279::-;20085:7;20117:1;20113;:5;20120:12;20105:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20144:9;20160:1;20156;:5;;;;:::i;:::-;20144:17;;20269:1;20262:8;;;19999:279;;;;;:::o;39560:597::-;39689:21;39727:1;39713:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39689:40;;39758:4;39740;39745:1;39740:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39784:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39774:4;39779:1;39774:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39820:62;39837:4;39852:15;39870:11;39820:8;:62::i;:::-;39922:15;:66;;;40003:11;40029:1;40073:4;40100;40120:15;39922:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39615:542;39560:597;:::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:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:180::-;9990:77;9987:1;9980:88;10087:4;10084:1;10077:15;10111:4;10108:1;10101:15;10128:348;10168:7;10191:20;10209:1;10191:20;:::i;:::-;10186:25;;10225:20;10243:1;10225:20;:::i;:::-;10220:25;;10413:1;10345:66;10341:74;10338:1;10335:81;10330:1;10323:9;10316:17;10312:105;10309:131;;;10420:18;;:::i;:::-;10309:131;10468:1;10465;10461:9;10450:20;;10128:348;;;;:::o;10482:180::-;10530:77;10527:1;10520:88;10627:4;10624:1;10617:15;10651:4;10648:1;10641:15;10668:185;10708:1;10725:20;10743:1;10725:20;:::i;:::-;10720:25;;10759:20;10777:1;10759:20;:::i;:::-;10754:25;;10798:1;10788:35;;10803:18;;:::i;:::-;10788:35;10845:1;10842;10838:9;10833:14;;10668:185;;;;:::o;10859:234::-;10999:34;10995:1;10987:6;10983:14;10976:58;11068:17;11063:2;11055:6;11051:15;11044:42;10859:234;:::o;11099:366::-;11241:3;11262:67;11326:2;11321:3;11262:67;:::i;:::-;11255:74;;11338:93;11427:3;11338:93;:::i;:::-;11456:2;11451:3;11447:12;11440:19;;11099:366;;;:::o;11471:419::-;11637:4;11675:2;11664:9;11660:18;11652:26;;11724:9;11718:4;11714:20;11710:1;11699:9;11695:17;11688:47;11752:131;11878:4;11752:131;:::i;:::-;11744:139;;11471:419;;;:::o;11896:179::-;12036:31;12032:1;12024:6;12020:14;12013:55;11896:179;:::o;12081:366::-;12223:3;12244:67;12308:2;12303:3;12244:67;:::i;:::-;12237:74;;12320:93;12409:3;12320:93;:::i;:::-;12438:2;12433:3;12429:12;12422:19;;12081:366;;;:::o;12453:419::-;12619:4;12657:2;12646:9;12642:18;12634:26;;12706:9;12700:4;12696:20;12692:1;12681:9;12677:17;12670:47;12734:131;12860:4;12734:131;:::i;:::-;12726:139;;12453:419;;;:::o;12878:244::-;13018:34;13014:1;13006:6;13002:14;12995:58;13087:27;13082:2;13074:6;13070:15;13063:52;12878:244;:::o;13128:366::-;13270:3;13291:67;13355:2;13350:3;13291:67;:::i;:::-;13284:74;;13367:93;13456:3;13367:93;:::i;:::-;13485:2;13480:3;13476:12;13469:19;;13128:366;;;:::o;13500:419::-;13666:4;13704:2;13693:9;13689:18;13681:26;;13753:9;13747:4;13743:20;13739:1;13728:9;13724:17;13717:47;13781:131;13907:4;13781:131;:::i;:::-;13773:139;;13500:419;;;:::o;13925:223::-;14065:34;14061:1;14053:6;14049:14;14042:58;14134:6;14129:2;14121:6;14117:15;14110:31;13925:223;:::o;14154:366::-;14296:3;14317:67;14381:2;14376:3;14317:67;:::i;:::-;14310:74;;14393:93;14482:3;14393:93;:::i;:::-;14511:2;14506:3;14502:12;14495:19;;14154:366;;;:::o;14526:419::-;14692:4;14730:2;14719:9;14715:18;14707:26;;14779:9;14773:4;14769:20;14765:1;14754:9;14750:17;14743:47;14807:131;14933:4;14807:131;:::i;:::-;14799:139;;14526:419;;;:::o;14951:240::-;15091:34;15087:1;15079:6;15075:14;15068:58;15160:23;15155:2;15147:6;15143:15;15136:48;14951:240;:::o;15197:366::-;15339:3;15360:67;15424:2;15419:3;15360:67;:::i;:::-;15353:74;;15436:93;15525:3;15436:93;:::i;:::-;15554:2;15549:3;15545:12;15538:19;;15197:366;;;:::o;15569:419::-;15735:4;15773:2;15762:9;15758:18;15750:26;;15822:9;15816:4;15812:20;15808:1;15797:9;15793:17;15786:47;15850:131;15976:4;15850:131;:::i;:::-;15842:139;;15569:419;;;:::o;15994:237::-;16134:34;16130:1;16122:6;16118:14;16111:58;16203:20;16198:2;16190:6;16186:15;16179:45;15994:237;:::o;16237:366::-;16379:3;16400:67;16464:2;16459:3;16400:67;:::i;:::-;16393:74;;16476:93;16565:3;16476:93;:::i;:::-;16594:2;16589:3;16585:12;16578:19;;16237:366;;;:::o;16609:419::-;16775:4;16813:2;16802:9;16798:18;16790:26;;16862:9;16856:4;16852:20;16848:1;16837:9;16833:17;16826:47;16890:131;17016:4;16890:131;:::i;:::-;16882:139;;16609:419;;;:::o;17034:225::-;17174:34;17170:1;17162:6;17158:14;17151:58;17243:8;17238:2;17230:6;17226:15;17219:33;17034:225;:::o;17265:366::-;17407:3;17428:67;17492:2;17487:3;17428:67;:::i;:::-;17421:74;;17504:93;17593:3;17504:93;:::i;:::-;17622:2;17617:3;17613:12;17606:19;;17265:366;;;:::o;17637:419::-;17803:4;17841:2;17830:9;17826:18;17818:26;;17890:9;17884:4;17880:20;17876:1;17865:9;17861:17;17854:47;17918:131;18044:4;17918:131;:::i;:::-;17910:139;;17637:419;;;:::o;18062:305::-;18102:3;18121:20;18139:1;18121:20;:::i;:::-;18116:25;;18155:20;18173:1;18155:20;:::i;:::-;18150:25;;18309:1;18241:66;18237:74;18234:1;18231:81;18228:107;;;18315:18;;:::i;:::-;18228:107;18359:1;18356;18352:9;18345:16;;18062:305;;;;:::o;18373:177::-;18513:29;18509:1;18501:6;18497:14;18490:53;18373:177;:::o;18556:366::-;18698:3;18719:67;18783:2;18778:3;18719:67;:::i;:::-;18712:74;;18795:93;18884:3;18795:93;:::i;:::-;18913:2;18908:3;18904:12;18897:19;;18556:366;;;:::o;18928:419::-;19094:4;19132:2;19121:9;19117:18;19109:26;;19181:9;19175:4;19171:20;19167:1;19156:9;19152:17;19145:47;19209:131;19335:4;19209:131;:::i;:::-;19201:139;;18928:419;;;:::o;19353:223::-;19493:34;19489:1;19481:6;19477:14;19470:58;19562:6;19557:2;19549:6;19545:15;19538:31;19353:223;:::o;19582:366::-;19724:3;19745:67;19809:2;19804:3;19745:67;:::i;:::-;19738:74;;19821:93;19910:3;19821:93;:::i;:::-;19939:2;19934:3;19930:12;19923:19;;19582:366;;;:::o;19954:419::-;20120:4;20158:2;20147:9;20143:18;20135:26;;20207:9;20201:4;20197:20;20193:1;20182:9;20178:17;20171:47;20235:131;20361:4;20235:131;:::i;:::-;20227:139;;19954:419;;;:::o;20379:221::-;20519:34;20515:1;20507:6;20503:14;20496:58;20588:4;20583:2;20575:6;20571:15;20564:29;20379:221;:::o;20606:366::-;20748:3;20769:67;20833:2;20828:3;20769:67;:::i;:::-;20762:74;;20845:93;20934:3;20845:93;:::i;:::-;20963:2;20958:3;20954:12;20947:19;;20606:366;;;:::o;20978:419::-;21144:4;21182:2;21171:9;21167:18;21159:26;;21231:9;21225:4;21221:20;21217:1;21206:9;21202:17;21195:47;21259:131;21385:4;21259:131;:::i;:::-;21251:139;;20978:419;;;:::o;21403:224::-;21543:34;21539:1;21531:6;21527:14;21520:58;21612:7;21607:2;21599:6;21595:15;21588:32;21403:224;:::o;21633:366::-;21775:3;21796:67;21860:2;21855:3;21796:67;:::i;:::-;21789:74;;21872:93;21961:3;21872:93;:::i;:::-;21990:2;21985:3;21981:12;21974:19;;21633:366;;;:::o;22005:419::-;22171:4;22209:2;22198:9;22194:18;22186:26;;22258:9;22252:4;22248:20;22244:1;22233:9;22229:17;22222:47;22286:131;22412:4;22286:131;:::i;:::-;22278:139;;22005:419;;;:::o;22430:222::-;22570:34;22566:1;22558:6;22554:14;22547:58;22639:5;22634:2;22626:6;22622:15;22615:30;22430:222;:::o;22658:366::-;22800:3;22821:67;22885:2;22880:3;22821:67;:::i;:::-;22814:74;;22897:93;22986:3;22897:93;:::i;:::-;23015:2;23010:3;23006:12;22999:19;;22658:366;;;:::o;23030:419::-;23196:4;23234:2;23223:9;23219:18;23211:26;;23283:9;23277:4;23273:20;23269:1;23258:9;23254:17;23247:47;23311:131;23437:4;23311:131;:::i;:::-;23303:139;;23030:419;;;:::o;23455:172::-;23595:24;23591:1;23583:6;23579:14;23572:48;23455:172;:::o;23633:366::-;23775:3;23796:67;23860:2;23855:3;23796:67;:::i;:::-;23789:74;;23872:93;23961:3;23872:93;:::i;:::-;23990:2;23985:3;23981:12;23974:19;;23633:366;;;:::o;24005:419::-;24171:4;24209:2;24198:9;24194:18;24186:26;;24258:9;24252:4;24248:20;24244:1;24233:9;24229:17;24222:47;24286:131;24412:4;24286:131;:::i;:::-;24278:139;;24005:419;;;:::o;24430:240::-;24570:34;24566:1;24558:6;24554:14;24547:58;24639:23;24634:2;24626:6;24622:15;24615:48;24430:240;:::o;24676:366::-;24818:3;24839:67;24903:2;24898:3;24839:67;:::i;:::-;24832:74;;24915:93;25004:3;24915:93;:::i;:::-;25033:2;25028:3;25024:12;25017:19;;24676:366;;;:::o;25048:419::-;25214:4;25252:2;25241:9;25237:18;25229:26;;25301:9;25295:4;25291:20;25287:1;25276:9;25272:17;25265:47;25329:131;25455:4;25329:131;:::i;:::-;25321:139;;25048:419;;;:::o;25473:169::-;25613:21;25609:1;25601:6;25597:14;25590:45;25473:169;:::o;25648:366::-;25790:3;25811:67;25875:2;25870:3;25811:67;:::i;:::-;25804:74;;25887:93;25976:3;25887:93;:::i;:::-;26005:2;26000:3;25996:12;25989:19;;25648:366;;;:::o;26020:419::-;26186:4;26224:2;26213:9;26209:18;26201:26;;26273:9;26267:4;26263:20;26259:1;26248:9;26244:17;26237:47;26301:131;26427:4;26301:131;:::i;:::-;26293:139;;26020:419;;;:::o;26445:241::-;26585:34;26581:1;26573:6;26569:14;26562:58;26654:24;26649:2;26641:6;26637:15;26630:49;26445:241;:::o;26692:366::-;26834:3;26855:67;26919:2;26914:3;26855:67;:::i;:::-;26848:74;;26931:93;27020:3;26931:93;:::i;:::-;27049:2;27044:3;27040:12;27033:19;;26692:366;;;:::o;27064:419::-;27230:4;27268:2;27257:9;27253:18;27245:26;;27317:9;27311:4;27307:20;27303:1;27292:9;27288:17;27281:47;27345:131;27471:4;27345:131;:::i;:::-;27337:139;;27064:419;;;:::o;27489:191::-;27529:4;27549:20;27567:1;27549:20;:::i;:::-;27544:25;;27583:20;27601:1;27583:20;:::i;:::-;27578:25;;27622:1;27619;27616:8;27613:34;;;27627:18;;:::i;:::-;27613:34;27672:1;27669;27665:9;27657:17;;27489:191;;;;:::o;27686:220::-;27826:34;27822:1;27814:6;27810:14;27803:58;27895:3;27890:2;27882:6;27878:15;27871:28;27686:220;:::o;27912:366::-;28054:3;28075:67;28139:2;28134:3;28075:67;:::i;:::-;28068:74;;28151:93;28240:3;28151:93;:::i;:::-;28269:2;28264:3;28260:12;28253:19;;27912:366;;;:::o;28284:419::-;28450:4;28488:2;28477:9;28473:18;28465:26;;28537:9;28531:4;28527:20;28523:1;28512:9;28508:17;28501:47;28565:131;28691:4;28565:131;:::i;:::-;28557:139;;28284:419;;;:::o;28709:147::-;28810:11;28847:3;28832:18;;28709:147;;;;:::o;28862:114::-;;:::o;28982:398::-;29141:3;29162:83;29243:1;29238:3;29162:83;:::i;:::-;29155:90;;29254:93;29343:3;29254:93;:::i;:::-;29372:1;29367:3;29363:11;29356:18;;28982:398;;;:::o;29386:379::-;29570:3;29592:147;29735:3;29592:147;:::i;:::-;29585:154;;29756:3;29749:10;;29386:379;;;:::o;29771:180::-;29819:77;29816:1;29809:88;29916:4;29913:1;29906:15;29940:4;29937:1;29930:15;29957:180;30005:77;30002:1;29995:88;30102:4;30099:1;30092:15;30126:4;30123:1;30116:15;30143:143;30200:5;30231:6;30225:13;30216:22;;30247:33;30274:5;30247:33;:::i;:::-;30143:143;;;;:::o;30292:351::-;30362:6;30411:2;30399:9;30390:7;30386:23;30382:32;30379:119;;;30417:79;;:::i;:::-;30379:119;30537:1;30562:64;30618:7;30609:6;30598:9;30594:22;30562:64;:::i;:::-;30552:74;;30508:128;30292:351;;;;:::o;30649:85::-;30694:7;30723:5;30712:16;;30649:85;;;:::o;30740:158::-;30798:9;30831:61;30849:42;30858:32;30884:5;30858:32;:::i;:::-;30849:42;:::i;:::-;30831:61;:::i;:::-;30818:74;;30740:158;;;:::o;30904:147::-;30999:45;31038:5;30999:45;:::i;:::-;30994:3;30987:58;30904:147;;:::o;31057:114::-;31124:6;31158:5;31152:12;31142:22;;31057:114;;;:::o;31177:184::-;31276:11;31310:6;31305:3;31298:19;31350:4;31345:3;31341:14;31326:29;;31177:184;;;;:::o;31367:132::-;31434:4;31457:3;31449:11;;31487:4;31482:3;31478:14;31470:22;;31367:132;;;:::o;31505:108::-;31582:24;31600:5;31582:24;:::i;:::-;31577:3;31570:37;31505:108;;:::o;31619:179::-;31688:10;31709:46;31751:3;31743:6;31709:46;:::i;:::-;31787:4;31782:3;31778:14;31764:28;;31619:179;;;;:::o;31804:113::-;31874:4;31906;31901:3;31897:14;31889:22;;31804:113;;;:::o;31953:732::-;32072:3;32101:54;32149:5;32101:54;:::i;:::-;32171:86;32250:6;32245:3;32171:86;:::i;:::-;32164:93;;32281:56;32331:5;32281:56;:::i;:::-;32360:7;32391:1;32376:284;32401:6;32398:1;32395:13;32376:284;;;32477:6;32471:13;32504:63;32563:3;32548:13;32504:63;:::i;:::-;32497:70;;32590:60;32643:6;32590:60;:::i;:::-;32580:70;;32436:224;32423:1;32420;32416:9;32411:14;;32376:284;;;32380:14;32676:3;32669:10;;32077:608;;;31953:732;;;;:::o;32691:831::-;32954:4;32992:3;32981:9;32977:19;32969:27;;33006:71;33074:1;33063:9;33059:17;33050:6;33006:71;:::i;:::-;33087:80;33163:2;33152:9;33148:18;33139:6;33087:80;:::i;:::-;33214:9;33208:4;33204:20;33199:2;33188:9;33184:18;33177:48;33242:108;33345:4;33336:6;33242:108;:::i;:::-;33234:116;;33360:72;33428:2;33417:9;33413:18;33404:6;33360:72;:::i;:::-;33442:73;33510:3;33499:9;33495:19;33486:6;33442:73;:::i;:::-;32691:831;;;;;;;;:::o
Swarm Source
ipfs://0c6d4dc8e1fdd4062306f358bbd359388834aa650fd21b88cbf43cc42a774df3
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.