ERC-20
MEME
Overview
Max Total Supply
1,000,000,000,000 SHENT
Holders
137 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Shenron
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-03 */ /** *Submitted for verification at Etherscan.io on 2023-06-02 */ /** Shenron Creator: Kami ------------------------------------------------- Twitter: https://twitter.com/ShenronCreator ------------------------------------------------- Shenron Token ------------------------------------------------- Website: https://shenron.asia/ Twitter: https://twitter.com/Shenron_Token Telegram: https://t.me/Shenron_Token Medium: https://medium.com/@shenrontoken */ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; 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 Shenron is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; uint256 private tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public _isBot; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Shenron", "SHENT") { address newOwner = address(msg.sender); 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 = 1; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 1; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 1; uint256 totalSupply = 1 * 1e12 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet maxWallet = totalSupply * 3 / 100; // 3% max wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0x845DbD0144bB8aE72681B5fFA4e581B650016386); // set as marketing wallet devWallet = address(0x769A3A6aA7ea8910347b6ab482085ACac367197C); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(devWallet, true); excludeFromMaxTransaction(newOwner, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(devWallet, 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(newOwner, totalSupply); transferOwnership(newOwner); } receive() external payable { } // 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() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = 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 BotAddress(address account, bool value) external onlyOwner{ _isBot[account] = value; } 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 updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } 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"); require(!_isBot[from] && !_isBot[to], "Blacklisted address"); if(amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ //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 { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (bool success,) = address(marketingWallet).call{value: ethForMarketing}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } // keep leftover ETH for buyback (success,) = address(devWallet).call{value: address(this).balance}(""); } function withdrawStuckETH() external onlyOwner{ require (address(this).balance > 0, "Can't withdraw negative or zero"); payable(owner()).transfer(address(this).balance); } function removeStuckToken(address _address) external onlyOwner { require(_address != address(this), "Can't withdraw tokens destined for liquidity"); require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0"); IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this))); } }
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":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"BotAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","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":"updateMaxAmount","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"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600781526020017f5368656e726f6e000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5348454e540000000000000000000000000000000000000000000000000000008152508160039081620000aa919062000fb8565b508060049081620000bc919062000fb8565b5050506000620000d16200066160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a18160016200066960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062001109565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062001109565b6040518363ffffffff1660e01b8152600401620002f49291906200114c565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062001109565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a05160016200066960201b60201c565b6200039760a05160016200076660201b60201c565b600060019050600080600190506000806001905060006001905060006c0c9f2c9cd04674edea4000000090506064600182620003d49190620011a8565b620003e0919062001222565b600881905550612710600582620003f89190620011a8565b62000404919062001222565b60098190555060646003826200041b9190620011a8565b62000427919062001222565b600a8190555086600d8190555085600e8190555084600f81905550600f54600e54600d546200045791906200125a565b6200046391906200125a565b600c819055508360118190555082601281905550816013819055506013546012546011546200049391906200125a565b6200049f91906200125a565b60108190555073845dbd0144bb8ae72681b5ffa4e581b650016386600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073769a3a6aa7ea8910347b6ab482085acac367197c600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005628960016200080760201b60201c565b620005753060016200080760201b60201c565b6200058a61dead60016200080760201b60201c565b620005bf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080760201b60201c565b620005d28960016200066960201b60201c565b620005e53060016200066960201b60201c565b6200061a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066960201b60201c565b6200062f61dead60016200066960201b60201c565b6200064189826200095460201b60201c565b620006528962000b0260201b60201c565b505050505050505050620014fc565b600033905090565b620006796200066160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070290620012f6565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620008176200066160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a090620012f6565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000948919062001335565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bd90620013a2565b60405180910390fd5b620009da6000838362000cd660201b60201c565b620009f68160025462000cdb60201b620022ab1790919060201c565b60028190555062000a54816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cdb60201b620022ab1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af69190620013d5565b60405180910390a35050565b62000b126200066160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000ba4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9b90620012f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0d9062001468565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000cec91906200125a565b90508381101562000d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d2b90620014da565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dc057607f821691505b60208210810362000dd65762000dd562000d78565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e01565b62000e4c868362000e01565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e9962000e9362000e8d8462000e64565b62000e6e565b62000e64565b9050919050565b6000819050919050565b62000eb58362000e78565b62000ecd62000ec48262000ea0565b84845462000e0e565b825550505050565b600090565b62000ee462000ed5565b62000ef181848462000eaa565b505050565b5b8181101562000f195762000f0d60008262000eda565b60018101905062000ef7565b5050565b601f82111562000f685762000f328162000ddc565b62000f3d8462000df1565b8101602085101562000f4d578190505b62000f6562000f5c8562000df1565b83018262000ef6565b50505b505050565b600082821c905092915050565b600062000f8d6000198460080262000f6d565b1980831691505092915050565b600062000fa8838362000f7a565b9150826002028217905092915050565b62000fc38262000d3e565b67ffffffffffffffff81111562000fdf5762000fde62000d49565b5b62000feb825462000da7565b62000ff882828562000f1d565b600060209050601f8311600181146200103057600084156200101b578287015190505b62001027858262000f9a565b86555062001097565b601f198416620010408662000ddc565b60005b828110156200106a5784890151825560018201915060208501945060208101905062001043565b868310156200108a578489015162001086601f89168262000f7a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010d182620010a4565b9050919050565b620010e381620010c4565b8114620010ef57600080fd5b50565b6000815190506200110381620010d8565b92915050565b6000602082840312156200112257620011216200109f565b5b60006200113284828501620010f2565b91505092915050565b6200114681620010c4565b82525050565b60006040820190506200116360008301856200113b565b6200117260208301846200113b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011b58262000e64565b9150620011c28362000e64565b9250828202620011d28162000e64565b91508282048414831517620011ec57620011eb62001179565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200122f8262000e64565b91506200123c8362000e64565b9250826200124f576200124e620011f3565b5b828204905092915050565b6000620012678262000e64565b9150620012748362000e64565b92508282019050808211156200128f576200128e62001179565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012de60208362001295565b9150620012eb82620012a6565b602082019050919050565b600060208201905081810360008301526200131181620012cf565b9050919050565b60008115159050919050565b6200132f8162001318565b82525050565b60006020820190506200134c600083018462001324565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200138a601f8362001295565b9150620013978262001352565b602082019050919050565b60006020820190508181036000830152620013bd816200137b565b9050919050565b620013cf8162000e64565b82525050565b6000602082019050620013ec6000830184620013c4565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200145060268362001295565b91506200145d82620013f2565b604082019050919050565b60006020820190508181036000830152620014838162001441565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620014c2601b8362001295565b9150620014cf826200148a565b602082019050919050565b60006020820190508181036000830152620014f581620014b3565b9050919050565b60805160a051614e646200154c60003960008181610fff0152611583015260008181610cdf01528181613736015281816138170152818161383e015281816138da01526139010152614e646000f3fe6080604052600436106102815760003560e01c8063924de9b71161014f578063c8c8ebe4116100c1578063e2f456051161007a578063e2f45605146109f7578063f11a24d314610a22578063f2fde38b14610a4d578063f5648a4f14610a76578063f637434214610a8d578063f8b45b0514610ab857610288565b8063c8c8ebe4146108d5578063d257b34f14610900578063d85ba0631461093d578063d9a0c16914610968578063dd62ed3e14610991578063e083e922146109ce57610288565b8063a457c2d711610113578063a457c2d71461078f578063a9059cbb146107cc578063aacebbe314610809578063abb8105214610832578063b62496f51461086f578063c0246668146108ac57610288565b8063924de9b7146106bc57806395d89b41146106e55780639a7a23d6146107105780639c3b4fdc14610739578063a0d82dc51461076457610288565b806349bd5a5e116101f35780637571336a116101ac5780637571336a146105bc57806375f0a874146105e55780637bce5a04146106105780638da5cb5b1461063b5780638ea5220f14610666578063921369131461069157610288565b806349bd5a5e146104aa5780634fbee193146104d55780636a486a8e146105125780636ddd17131461053d57806370a0823114610568578063715018a6146105a557610288565b806318160ddd1161024557806318160ddd146103865780631816467f146103b157806323b872dd146103da57806327c8f83514610417578063313ce56714610442578063395093511461046d57610288565b806306fdde031461028d578063095ea7b3146102b8578063106b5da1146102f557806310d5de531461031e5780631694505e1461035b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ae3565b6040516102af9190613aa3565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613b5e565b610b75565b6040516102ec9190613bb9565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613bd4565b610b93565b005b34801561032a57600080fd5b5061034560048036038101906103409190613c01565b610cbd565b6040516103529190613bb9565b60405180910390f35b34801561036757600080fd5b50610370610cdd565b60405161037d9190613c8d565b60405180910390f35b34801561039257600080fd5b5061039b610d01565b6040516103a89190613cb7565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613c01565b610d0b565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613cd2565b610e62565b60405161040e9190613bb9565b60405180910390f35b34801561042357600080fd5b5061042c610f3b565b6040516104399190613d34565b60405180910390f35b34801561044e57600080fd5b50610457610f41565b6040516104649190613d6b565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613b5e565b610f4a565b6040516104a19190613bb9565b60405180910390f35b3480156104b657600080fd5b506104bf610ffd565b6040516104cc9190613d34565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613c01565b611021565b6040516105099190613bb9565b60405180910390f35b34801561051e57600080fd5b50610527611077565b6040516105349190613cb7565b60405180910390f35b34801561054957600080fd5b5061055261107d565b60405161055f9190613bb9565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190613c01565b611090565b60405161059c9190613cb7565b60405180910390f35b3480156105b157600080fd5b506105ba6110d8565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613db2565b611230565b005b3480156105f157600080fd5b506105fa611322565b6040516106079190613d34565b60405180910390f35b34801561061c57600080fd5b50610625611348565b6040516106329190613cb7565b60405180910390f35b34801561064757600080fd5b5061065061134e565b60405161065d9190613d34565b60405180910390f35b34801561067257600080fd5b5061067b611378565b6040516106889190613d34565b60405180910390f35b34801561069d57600080fd5b506106a661139e565b6040516106b39190613cb7565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613df2565b6113a4565b005b3480156106f157600080fd5b506106fa611458565b6040516107079190613aa3565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613db2565b6114ea565b005b34801561074557600080fd5b5061074e61161d565b60405161075b9190613cb7565b60405180910390f35b34801561077057600080fd5b50610779611623565b6040516107869190613cb7565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b5e565b611629565b6040516107c39190613bb9565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190613b5e565b6116f6565b6040516108009190613bb9565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190613c01565b611714565b005b34801561083e57600080fd5b5061085960048036038101906108549190613c01565b61186b565b6040516108669190613bb9565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613c01565b61188b565b6040516108a39190613bb9565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613db2565b6118ab565b005b3480156108e157600080fd5b506108ea6119eb565b6040516108f79190613cb7565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190613bd4565b6119f1565b6040516109349190613bb9565b60405180910390f35b34801561094957600080fd5b50610952611b61565b60405161095f9190613cb7565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613db2565b611b67565b005b34801561099d57600080fd5b506109b860048036038101906109b39190613e1f565b611c59565b6040516109c59190613cb7565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f09190613c01565b611ce0565b005b348015610a0357600080fd5b50610a0c611fa3565b604051610a199190613cb7565b60405180910390f35b348015610a2e57600080fd5b50610a37611fa9565b604051610a449190613cb7565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190613c01565b611faf565b005b348015610a8257600080fd5b50610a8b612175565b005b348015610a9957600080fd5b50610aa261229f565b604051610aaf9190613cb7565b60405180910390f35b348015610ac457600080fd5b50610acd6122a5565b604051610ada9190613cb7565b60405180910390f35b606060038054610af290613e8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e90613e8e565b8015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b820191906000526020600020905b815481529060010190602001808311610b4e57829003601f168201915b5050505050905090565b6000610b89610b82612309565b8484612311565b6001905092915050565b610b9b612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190613f0b565b60405180910390fd5b670de0b6b3a76400006103e86005610c40610d01565b610c4a9190613f5a565b610c549190613fcb565b610c5e9190613fcb565b811015610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061406e565b60405180910390fd5b670de0b6b3a764000081610cb49190613f5a565b60088190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d13612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990613f0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e6f8484846124da565b610f3084610e7b612309565b610f2b85604051806060016040528060288152602001614de260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ee1612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b612311565b600190509392505050565b61dead81565b60006012905090565b6000610ff3610f57612309565b84610fee8560016000610f68612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ab90919063ffffffff16565b612311565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e0612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690613f0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611238612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613f0b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6113ac612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613f0b565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606004805461146790613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461149390613e8e565b80156114e05780601f106114b5576101008083540402835291602001916114e0565b820191906000526020600020905b8154815290600101906020018083116114c357829003601f168201915b5050505050905090565b6114f2612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157890613f0b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614100565b60405180910390fd5b6116198282612f93565b5050565b600f5481565b60135481565b60006116ec611636612309565b846116e785604051806060016040528060258152602001614e0a6025913960016000611660612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b612311565b6001905092915050565b600061170a611703612309565b84846124da565b6001905092915050565b61171c612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613f0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b6118b3612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613f0b565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119df9190613bb9565b60405180910390a25050565b60085481565b60006119fb612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613f0b565b60405180910390fd5b620186a06001611a98610d01565b611aa29190613f5a565b611aac9190613fcb565b821015611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614192565b60405180910390fd5b6103e86005611afb610d01565b611b059190613f5a565b611b0f9190613fcb565b821115611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890614224565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611b6f612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613f0b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce8612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90613f0b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906142b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e209190613d34565b602060405180830381865afa158015611e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6191906142eb565b11611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890614364565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611ec561134e565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611efe9190613d34565b602060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f91906142eb565b6040518363ffffffff1660e01b8152600401611f5c929190614384565b6020604051808303816000875af1158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9f91906143c2565b5050565b60095481565b600e5481565b611fb7612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613f0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90614461565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61217d612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f0b565b60405180910390fd5b6000471161224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906144cd565b60405180910390fd5b61225761134e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561229c573d6000803e3d6000fd5b50565b60125481565b600a5481565b60008082846122ba91906144ed565b9050838110156122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f69061456d565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612377906145ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614691565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124cd9190613cb7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906147b5565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561265c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290614821565b60405180910390fd5b600081036126b4576126af83836000613034565b612f2a565b6126bc61134e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272a57506126fa61134e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561279d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127b65750600560149054906101000a900460ff16155b15612a5257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285e5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612905576008548111156128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f906148b3565b60405180910390fd5b600a546128b483611090565b826128bf91906144ed565b1115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f79061491f565b60405180910390fd5b612a51565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f7576008548111156129f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e9906149b1565b60405180910390fd5b612a50565b600a54612a0383611090565b82612a0e91906144ed565b1115612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a469061491f565b60405180910390fd5b5b5b5b6000612a5d30611090565b905060006009548210159050808015612a825750600b60009054906101000a900460ff165b8015612a9b5750600560149054906101000a900460ff16155b8015612af15750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b475750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b9d5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be1576001600560146101000a81548160ff021916908315150217905550612bc56132c7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c975750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ca157600090505b60008115612f1a57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d0457506000601054115b15612dd157612d316064612d236010548861358490919063ffffffff16565b6135fe90919063ffffffff16565b905060105460125482612d449190613f5a565b612d4e9190613fcb565b60156000828254612d5f91906144ed565b9250508190555060105460135482612d779190613f5a565b612d819190613fcb565b60166000828254612d9291906144ed565b9250508190555060105460115482612daa9190613f5a565b612db49190613fcb565b60146000828254612dc591906144ed565b92505081905550612ef6565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2c57506000600c54115b15612ef557612e596064612e4b600c548861358490919063ffffffff16565b6135fe90919063ffffffff16565b9050600c54600e5482612e6c9190613f5a565b612e769190613fcb565b60156000828254612e8791906144ed565b92505081905550600c54600f5482612e9f9190613f5a565b612ea99190613fcb565b60166000828254612eba91906144ed565b92505081905550600c54600d5482612ed29190613f5a565b612edc9190613fcb565b60146000828254612eed91906144ed565b925050819055505b5b6000811115612f0b57612f0a873083613034565b5b8085612f1791906149d1565b94505b612f25878787613034565b505050505b505050565b6000838311158290612f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6e9190613aa3565b60405180910390fd5b5060008385612f8691906149d1565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309a90614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613109906147b5565b60405180910390fd5b61311d838383613648565b61318881604051806060016040528060268152602001614dbc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061321b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132ba9190613cb7565b60405180910390a3505050565b60006132d230611090565b905060006016546014546015546132e991906144ed565b6132f391906144ed565b905060008214806133045750600081145b15613310575050613582565b6000600282601554856133239190613f5a565b61332d9190613fcb565b6133379190613fcb565b9050600061334e828561364d90919063ffffffff16565b9050600047905061335e82613697565b6000613373824761364d90919063ffffffff16565b9050600061339e866133906014548561358490919063ffffffff16565b6135fe90919063ffffffff16565b905060006133c9876133bb6016548661358490919063ffffffff16565b6135fe90919063ffffffff16565b905060008183856133da91906149d1565b6133e491906149d1565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161344690614a36565b60006040518083038185875af1925050503d8060008114613483576040519150601f19603f3d011682016040523d82523d6000602084013e613488565b606091505b5050905060008811801561349c5750600082115b156134e9576134ab88836138d4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187836015546040516134e093929190614a4b565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161352f90614a36565b60006040518083038185875af1925050503d806000811461356c576040519150601f19603f3d011682016040523d82523d6000602084013e613571565b606091505b505080915050505050505050505050505b565b600080830361359657600090506135f8565b600082846135a49190613f5a565b90508284826135b39190613fcb565b146135f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ea90614af4565b60405180910390fd5b809150505b92915050565b600061364083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139b0565b905092915050565b505050565b600061368f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f2f565b905092915050565b6000600267ffffffffffffffff8111156136b4576136b3614b14565b5b6040519080825280602002602001820160405280156136e25781602001602082028036833780820191505090505b50905030816000815181106136fa576136f9614b43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561379f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c39190614b87565b816001815181106137d7576137d6614b43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061383c307f000000000000000000000000000000000000000000000000000000000000000084612311565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161389e959493929190614cad565b600060405180830381600087803b1580156138b857600080fd5b505af11580156138cc573d6000803e3d6000fd5b505050505050565b6138ff307f000000000000000000000000000000000000000000000000000000000000000084612311565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161396696959493929190614d07565b60606040518083038185885af1158015613984573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139a99190614d68565b5050505050565b600080831182906139f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ee9190613aa3565b60405180910390fd5b5060008385613a069190613fcb565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a4d578082015181840152602081019050613a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a7582613a13565b613a7f8185613a1e565b9350613a8f818560208601613a2f565b613a9881613a59565b840191505092915050565b60006020820190508181036000830152613abd8184613a6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af582613aca565b9050919050565b613b0581613aea565b8114613b1057600080fd5b50565b600081359050613b2281613afc565b92915050565b6000819050919050565b613b3b81613b28565b8114613b4657600080fd5b50565b600081359050613b5881613b32565b92915050565b60008060408385031215613b7557613b74613ac5565b5b6000613b8385828601613b13565b9250506020613b9485828601613b49565b9150509250929050565b60008115159050919050565b613bb381613b9e565b82525050565b6000602082019050613bce6000830184613baa565b92915050565b600060208284031215613bea57613be9613ac5565b5b6000613bf884828501613b49565b91505092915050565b600060208284031215613c1757613c16613ac5565b5b6000613c2584828501613b13565b91505092915050565b6000819050919050565b6000613c53613c4e613c4984613aca565b613c2e565b613aca565b9050919050565b6000613c6582613c38565b9050919050565b6000613c7782613c5a565b9050919050565b613c8781613c6c565b82525050565b6000602082019050613ca26000830184613c7e565b92915050565b613cb181613b28565b82525050565b6000602082019050613ccc6000830184613ca8565b92915050565b600080600060608486031215613ceb57613cea613ac5565b5b6000613cf986828701613b13565b9350506020613d0a86828701613b13565b9250506040613d1b86828701613b49565b9150509250925092565b613d2e81613aea565b82525050565b6000602082019050613d496000830184613d25565b92915050565b600060ff82169050919050565b613d6581613d4f565b82525050565b6000602082019050613d806000830184613d5c565b92915050565b613d8f81613b9e565b8114613d9a57600080fd5b50565b600081359050613dac81613d86565b92915050565b60008060408385031215613dc957613dc8613ac5565b5b6000613dd785828601613b13565b9250506020613de885828601613d9d565b9150509250929050565b600060208284031215613e0857613e07613ac5565b5b6000613e1684828501613d9d565b91505092915050565b60008060408385031215613e3657613e35613ac5565b5b6000613e4485828601613b13565b9250506020613e5585828601613b13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ea657607f821691505b602082108103613eb957613eb8613e5f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ef5602083613a1e565b9150613f0082613ebf565b602082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f6582613b28565b9150613f7083613b28565b9250828202613f7e81613b28565b91508282048414831517613f9557613f94613f2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd682613b28565b9150613fe183613b28565b925082613ff157613ff0613f9c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614058602f83613a1e565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140ea603983613a1e565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417c603583613a1e565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061420e603483613a1e565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006142a0602c83613a1e565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b6000815190506142e581613b32565b92915050565b60006020828403121561430157614300613ac5565b5b600061430f848285016142d6565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b600061434e601083613a1e565b915061435982614318565b602082019050919050565b6000602082019050818103600083015261437d81614341565b9050919050565b60006040820190506143996000830185613d25565b6143a66020830184613ca8565b9392505050565b6000815190506143bc81613d86565b92915050565b6000602082840312156143d8576143d7613ac5565b5b60006143e6848285016143ad565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061444b602683613a1e565b9150614456826143ef565b604082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006144b7601f83613a1e565b91506144c282614481565b602082019050919050565b600060208201905081810360008301526144e6816144aa565b9050919050565b60006144f882613b28565b915061450383613b28565b925082820190508082111561451b5761451a613f2b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614557601b83613a1e565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145e9602483613a1e565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061467b602283613a1e565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061470d602583613a1e565b9150614718826146b1565b604082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061479f602383613a1e565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061480b601383613a1e565b9150614816826147d5565b602082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061489d603583613a1e565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614909601383613a1e565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061499b603683613a1e565b91506149a68261493f565b604082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b60006149dc82613b28565b91506149e783613b28565b92508282039050818111156149ff576149fe613f2b565b5b92915050565b600081905092915050565b50565b6000614a20600083614a05565b9150614a2b82614a10565b600082019050919050565b6000614a4182614a13565b9150819050919050565b6000606082019050614a606000830186613ca8565b614a6d6020830185613ca8565b614a7a6040830184613ca8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ade602183613a1e565b9150614ae982614a82565b604082019050919050565b60006020820190508181036000830152614b0d81614ad1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b8181613afc565b92915050565b600060208284031215614b9d57614b9c613ac5565b5b6000614bab84828501614b72565b91505092915050565b6000819050919050565b6000614bd9614bd4614bcf84614bb4565b613c2e565b613b28565b9050919050565b614be981614bbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c2481613aea565b82525050565b6000614c368383614c1b565b60208301905092915050565b6000602082019050919050565b6000614c5a82614bef565b614c648185614bfa565b9350614c6f83614c0b565b8060005b83811015614ca0578151614c878882614c2a565b9750614c9283614c42565b925050600181019050614c73565b5085935050505092915050565b600060a082019050614cc26000830188613ca8565b614ccf6020830187614be0565b8181036040830152614ce18186614c4f565b9050614cf06060830185613d25565b614cfd6080830184613ca8565b9695505050505050565b600060c082019050614d1c6000830189613d25565b614d296020830188613ca8565b614d366040830187614be0565b614d436060830186614be0565b614d506080830185613d25565b614d5d60a0830184613ca8565b979650505050505050565b600080600060608486031215614d8157614d80613ac5565b5b6000614d8f868287016142d6565b9350506020614da0868287016142d6565b9250506040614db1868287016142d6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f650e28fb58e5137b66beeca61399c78cb26ba97b90f05bf07b7daec6fe8d1be64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063924de9b71161014f578063c8c8ebe4116100c1578063e2f456051161007a578063e2f45605146109f7578063f11a24d314610a22578063f2fde38b14610a4d578063f5648a4f14610a76578063f637434214610a8d578063f8b45b0514610ab857610288565b8063c8c8ebe4146108d5578063d257b34f14610900578063d85ba0631461093d578063d9a0c16914610968578063dd62ed3e14610991578063e083e922146109ce57610288565b8063a457c2d711610113578063a457c2d71461078f578063a9059cbb146107cc578063aacebbe314610809578063abb8105214610832578063b62496f51461086f578063c0246668146108ac57610288565b8063924de9b7146106bc57806395d89b41146106e55780639a7a23d6146107105780639c3b4fdc14610739578063a0d82dc51461076457610288565b806349bd5a5e116101f35780637571336a116101ac5780637571336a146105bc57806375f0a874146105e55780637bce5a04146106105780638da5cb5b1461063b5780638ea5220f14610666578063921369131461069157610288565b806349bd5a5e146104aa5780634fbee193146104d55780636a486a8e146105125780636ddd17131461053d57806370a0823114610568578063715018a6146105a557610288565b806318160ddd1161024557806318160ddd146103865780631816467f146103b157806323b872dd146103da57806327c8f83514610417578063313ce56714610442578063395093511461046d57610288565b806306fdde031461028d578063095ea7b3146102b8578063106b5da1146102f557806310d5de531461031e5780631694505e1461035b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ae3565b6040516102af9190613aa3565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613b5e565b610b75565b6040516102ec9190613bb9565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613bd4565b610b93565b005b34801561032a57600080fd5b5061034560048036038101906103409190613c01565b610cbd565b6040516103529190613bb9565b60405180910390f35b34801561036757600080fd5b50610370610cdd565b60405161037d9190613c8d565b60405180910390f35b34801561039257600080fd5b5061039b610d01565b6040516103a89190613cb7565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613c01565b610d0b565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613cd2565b610e62565b60405161040e9190613bb9565b60405180910390f35b34801561042357600080fd5b5061042c610f3b565b6040516104399190613d34565b60405180910390f35b34801561044e57600080fd5b50610457610f41565b6040516104649190613d6b565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613b5e565b610f4a565b6040516104a19190613bb9565b60405180910390f35b3480156104b657600080fd5b506104bf610ffd565b6040516104cc9190613d34565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613c01565b611021565b6040516105099190613bb9565b60405180910390f35b34801561051e57600080fd5b50610527611077565b6040516105349190613cb7565b60405180910390f35b34801561054957600080fd5b5061055261107d565b60405161055f9190613bb9565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a9190613c01565b611090565b60405161059c9190613cb7565b60405180910390f35b3480156105b157600080fd5b506105ba6110d8565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613db2565b611230565b005b3480156105f157600080fd5b506105fa611322565b6040516106079190613d34565b60405180910390f35b34801561061c57600080fd5b50610625611348565b6040516106329190613cb7565b60405180910390f35b34801561064757600080fd5b5061065061134e565b60405161065d9190613d34565b60405180910390f35b34801561067257600080fd5b5061067b611378565b6040516106889190613d34565b60405180910390f35b34801561069d57600080fd5b506106a661139e565b6040516106b39190613cb7565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613df2565b6113a4565b005b3480156106f157600080fd5b506106fa611458565b6040516107079190613aa3565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613db2565b6114ea565b005b34801561074557600080fd5b5061074e61161d565b60405161075b9190613cb7565b60405180910390f35b34801561077057600080fd5b50610779611623565b6040516107869190613cb7565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190613b5e565b611629565b6040516107c39190613bb9565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190613b5e565b6116f6565b6040516108009190613bb9565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190613c01565b611714565b005b34801561083e57600080fd5b5061085960048036038101906108549190613c01565b61186b565b6040516108669190613bb9565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613c01565b61188b565b6040516108a39190613bb9565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613db2565b6118ab565b005b3480156108e157600080fd5b506108ea6119eb565b6040516108f79190613cb7565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190613bd4565b6119f1565b6040516109349190613bb9565b60405180910390f35b34801561094957600080fd5b50610952611b61565b60405161095f9190613cb7565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613db2565b611b67565b005b34801561099d57600080fd5b506109b860048036038101906109b39190613e1f565b611c59565b6040516109c59190613cb7565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f09190613c01565b611ce0565b005b348015610a0357600080fd5b50610a0c611fa3565b604051610a199190613cb7565b60405180910390f35b348015610a2e57600080fd5b50610a37611fa9565b604051610a449190613cb7565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190613c01565b611faf565b005b348015610a8257600080fd5b50610a8b612175565b005b348015610a9957600080fd5b50610aa261229f565b604051610aaf9190613cb7565b60405180910390f35b348015610ac457600080fd5b50610acd6122a5565b604051610ada9190613cb7565b60405180910390f35b606060038054610af290613e8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e90613e8e565b8015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b820191906000526020600020905b815481529060010190602001808311610b4e57829003601f168201915b5050505050905090565b6000610b89610b82612309565b8484612311565b6001905092915050565b610b9b612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190613f0b565b60405180910390fd5b670de0b6b3a76400006103e86005610c40610d01565b610c4a9190613f5a565b610c549190613fcb565b610c5e9190613fcb565b811015610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061406e565b60405180910390fd5b670de0b6b3a764000081610cb49190613f5a565b60088190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d13612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990613f0b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e6f8484846124da565b610f3084610e7b612309565b610f2b85604051806060016040528060288152602001614de260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ee1612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b612311565b600190509392505050565b61dead81565b60006012905090565b6000610ff3610f57612309565b84610fee8560016000610f68612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ab90919063ffffffff16565b612311565b6001905092915050565b7f000000000000000000000000f283e4a36fe717e5ca6b12c5d68d4422951d144981565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e0612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690613f0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611238612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613f0b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6113ac612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290613f0b565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b60606004805461146790613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461149390613e8e565b80156114e05780601f106114b5576101008083540402835291602001916114e0565b820191906000526020600020905b8154815290600101906020018083116114c357829003601f168201915b5050505050905090565b6114f2612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157890613f0b565b60405180910390fd5b7f000000000000000000000000f283e4a36fe717e5ca6b12c5d68d4422951d144973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614100565b60405180910390fd5b6116198282612f93565b5050565b600f5481565b60135481565b60006116ec611636612309565b846116e785604051806060016040528060258152602001614e0a6025913960016000611660612309565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b612311565b6001905092915050565b600061170a611703612309565b84846124da565b6001905092915050565b61171c612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290613f0b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b601a6020528060005260406000206000915054906101000a900460ff1681565b6118b3612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613f0b565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119df9190613bb9565b60405180910390a25050565b60085481565b60006119fb612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613f0b565b60405180910390fd5b620186a06001611a98610d01565b611aa29190613f5a565b611aac9190613fcb565b821015611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614192565b60405180910390fd5b6103e86005611afb610d01565b611b059190613f5a565b611b0f9190613fcb565b821115611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890614224565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611b6f612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590613f0b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce8612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90613f0b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc906142b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e209190613d34565b602060405180830381865afa158015611e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6191906142eb565b11611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890614364565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611ec561134e565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611efe9190613d34565b602060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f91906142eb565b6040518363ffffffff1660e01b8152600401611f5c929190614384565b6020604051808303816000875af1158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9f91906143c2565b5050565b60095481565b600e5481565b611fb7612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90613f0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ac90614461565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61217d612309565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f0b565b60405180910390fd5b6000471161224f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612246906144cd565b60405180910390fd5b61225761134e565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561229c573d6000803e3d6000fd5b50565b60125481565b600a5481565b60008082846122ba91906144ed565b9050838110156122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f69061456d565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612377906145ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614691565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124cd9190613cb7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906147b5565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561265c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290614821565b60405180910390fd5b600081036126b4576126af83836000613034565b612f2a565b6126bc61134e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272a57506126fa61134e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561279d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127b65750600560149054906101000a900460ff16155b15612a5257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285e5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612905576008548111156128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f906148b3565b60405180910390fd5b600a546128b483611090565b826128bf91906144ed565b1115612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f79061491f565b60405180910390fd5b612a51565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f7576008548111156129f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e9906149b1565b60405180910390fd5b612a50565b600a54612a0383611090565b82612a0e91906144ed565b1115612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a469061491f565b60405180910390fd5b5b5b5b6000612a5d30611090565b905060006009548210159050808015612a825750600b60009054906101000a900460ff165b8015612a9b5750600560149054906101000a900460ff16155b8015612af15750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b475750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b9d5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be1576001600560146101000a81548160ff021916908315150217905550612bc56132c7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c975750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ca157600090505b60008115612f1a57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d0457506000601054115b15612dd157612d316064612d236010548861358490919063ffffffff16565b6135fe90919063ffffffff16565b905060105460125482612d449190613f5a565b612d4e9190613fcb565b60156000828254612d5f91906144ed565b9250508190555060105460135482612d779190613f5a565b612d819190613fcb565b60166000828254612d9291906144ed565b9250508190555060105460115482612daa9190613f5a565b612db49190613fcb565b60146000828254612dc591906144ed565b92505081905550612ef6565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2c57506000600c54115b15612ef557612e596064612e4b600c548861358490919063ffffffff16565b6135fe90919063ffffffff16565b9050600c54600e5482612e6c9190613f5a565b612e769190613fcb565b60156000828254612e8791906144ed565b92505081905550600c54600f5482612e9f9190613f5a565b612ea99190613fcb565b60166000828254612eba91906144ed565b92505081905550600c54600d5482612ed29190613f5a565b612edc9190613fcb565b60146000828254612eed91906144ed565b925050819055505b5b6000811115612f0b57612f0a873083613034565b5b8085612f1791906149d1565b94505b612f25878787613034565b505050505b505050565b6000838311158290612f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6e9190613aa3565b60405180910390fd5b5060008385612f8691906149d1565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309a90614723565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613109906147b5565b60405180910390fd5b61311d838383613648565b61318881604051806060016040528060268152602001614dbc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061321b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132ba9190613cb7565b60405180910390a3505050565b60006132d230611090565b905060006016546014546015546132e991906144ed565b6132f391906144ed565b905060008214806133045750600081145b15613310575050613582565b6000600282601554856133239190613f5a565b61332d9190613fcb565b6133379190613fcb565b9050600061334e828561364d90919063ffffffff16565b9050600047905061335e82613697565b6000613373824761364d90919063ffffffff16565b9050600061339e866133906014548561358490919063ffffffff16565b6135fe90919063ffffffff16565b905060006133c9876133bb6016548661358490919063ffffffff16565b6135fe90919063ffffffff16565b905060008183856133da91906149d1565b6133e491906149d1565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161344690614a36565b60006040518083038185875af1925050503d8060008114613483576040519150601f19603f3d011682016040523d82523d6000602084013e613488565b606091505b5050905060008811801561349c5750600082115b156134e9576134ab88836138d4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187836015546040516134e093929190614a4b565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161352f90614a36565b60006040518083038185875af1925050503d806000811461356c576040519150601f19603f3d011682016040523d82523d6000602084013e613571565b606091505b505080915050505050505050505050505b565b600080830361359657600090506135f8565b600082846135a49190613f5a565b90508284826135b39190613fcb565b146135f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ea90614af4565b60405180910390fd5b809150505b92915050565b600061364083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139b0565b905092915050565b505050565b600061368f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f2f565b905092915050565b6000600267ffffffffffffffff8111156136b4576136b3614b14565b5b6040519080825280602002602001820160405280156136e25781602001602082028036833780820191505090505b50905030816000815181106136fa576136f9614b43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561379f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c39190614b87565b816001815181106137d7576137d6614b43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061383c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612311565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161389e959493929190614cad565b600060405180830381600087803b1580156138b857600080fd5b505af11580156138cc573d6000803e3d6000fd5b505050505050565b6138ff307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612311565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161396696959493929190614d07565b60606040518083038185885af1158015613984573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139a99190614d68565b5050505050565b600080831182906139f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ee9190613aa3565b60405180910390fd5b5060008385613a069190613fcb565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a4d578082015181840152602081019050613a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a7582613a13565b613a7f8185613a1e565b9350613a8f818560208601613a2f565b613a9881613a59565b840191505092915050565b60006020820190508181036000830152613abd8184613a6a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af582613aca565b9050919050565b613b0581613aea565b8114613b1057600080fd5b50565b600081359050613b2281613afc565b92915050565b6000819050919050565b613b3b81613b28565b8114613b4657600080fd5b50565b600081359050613b5881613b32565b92915050565b60008060408385031215613b7557613b74613ac5565b5b6000613b8385828601613b13565b9250506020613b9485828601613b49565b9150509250929050565b60008115159050919050565b613bb381613b9e565b82525050565b6000602082019050613bce6000830184613baa565b92915050565b600060208284031215613bea57613be9613ac5565b5b6000613bf884828501613b49565b91505092915050565b600060208284031215613c1757613c16613ac5565b5b6000613c2584828501613b13565b91505092915050565b6000819050919050565b6000613c53613c4e613c4984613aca565b613c2e565b613aca565b9050919050565b6000613c6582613c38565b9050919050565b6000613c7782613c5a565b9050919050565b613c8781613c6c565b82525050565b6000602082019050613ca26000830184613c7e565b92915050565b613cb181613b28565b82525050565b6000602082019050613ccc6000830184613ca8565b92915050565b600080600060608486031215613ceb57613cea613ac5565b5b6000613cf986828701613b13565b9350506020613d0a86828701613b13565b9250506040613d1b86828701613b49565b9150509250925092565b613d2e81613aea565b82525050565b6000602082019050613d496000830184613d25565b92915050565b600060ff82169050919050565b613d6581613d4f565b82525050565b6000602082019050613d806000830184613d5c565b92915050565b613d8f81613b9e565b8114613d9a57600080fd5b50565b600081359050613dac81613d86565b92915050565b60008060408385031215613dc957613dc8613ac5565b5b6000613dd785828601613b13565b9250506020613de885828601613d9d565b9150509250929050565b600060208284031215613e0857613e07613ac5565b5b6000613e1684828501613d9d565b91505092915050565b60008060408385031215613e3657613e35613ac5565b5b6000613e4485828601613b13565b9250506020613e5585828601613b13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ea657607f821691505b602082108103613eb957613eb8613e5f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ef5602083613a1e565b9150613f0082613ebf565b602082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f6582613b28565b9150613f7083613b28565b9250828202613f7e81613b28565b91508282048414831517613f9557613f94613f2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fd682613b28565b9150613fe183613b28565b925082613ff157613ff0613f9c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614058602f83613a1e565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140ea603983613a1e565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417c603583613a1e565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061420e603483613a1e565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b60006142a0602c83613a1e565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b6000815190506142e581613b32565b92915050565b60006020828403121561430157614300613ac5565b5b600061430f848285016142d6565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b600061434e601083613a1e565b915061435982614318565b602082019050919050565b6000602082019050818103600083015261437d81614341565b9050919050565b60006040820190506143996000830185613d25565b6143a66020830184613ca8565b9392505050565b6000815190506143bc81613d86565b92915050565b6000602082840312156143d8576143d7613ac5565b5b60006143e6848285016143ad565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061444b602683613a1e565b9150614456826143ef565b604082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006144b7601f83613a1e565b91506144c282614481565b602082019050919050565b600060208201905081810360008301526144e6816144aa565b9050919050565b60006144f882613b28565b915061450383613b28565b925082820190508082111561451b5761451a613f2b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614557601b83613a1e565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145e9602483613a1e565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061467b602283613a1e565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061470d602583613a1e565b9150614718826146b1565b604082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061479f602383613a1e565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061480b601383613a1e565b9150614816826147d5565b602082019050919050565b6000602082019050818103600083015261483a816147fe565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061489d603583613a1e565b91506148a882614841565b604082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614909601383613a1e565b9150614914826148d3565b602082019050919050565b60006020820190508181036000830152614938816148fc565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061499b603683613a1e565b91506149a68261493f565b604082019050919050565b600060208201905081810360008301526149ca8161498e565b9050919050565b60006149dc82613b28565b91506149e783613b28565b92508282039050818111156149ff576149fe613f2b565b5b92915050565b600081905092915050565b50565b6000614a20600083614a05565b9150614a2b82614a10565b600082019050919050565b6000614a4182614a13565b9150819050919050565b6000606082019050614a606000830186613ca8565b614a6d6020830185613ca8565b614a7a6040830184613ca8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ade602183613a1e565b9150614ae982614a82565b604082019050919050565b60006020820190508181036000830152614b0d81614ad1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b8181613afc565b92915050565b600060208284031215614b9d57614b9c613ac5565b5b6000614bab84828501614b72565b91505092915050565b6000819050919050565b6000614bd9614bd4614bcf84614bb4565b613c2e565b613b28565b9050919050565b614be981614bbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c2481613aea565b82525050565b6000614c368383614c1b565b60208301905092915050565b6000602082019050919050565b6000614c5a82614bef565b614c648185614bfa565b9350614c6f83614c0b565b8060005b83811015614ca0578151614c878882614c2a565b9750614c9283614c42565b925050600181019050614c73565b5085935050505092915050565b600060a082019050614cc26000830188613ca8565b614ccf6020830187614be0565b8181036040830152614ce18186614c4f565b9050614cf06060830185613d25565b614cfd6080830184613ca8565b9695505050505050565b600060c082019050614d1c6000830189613d25565b614d296020830188613ca8565b614d366040830187614be0565b614d436060830186614be0565b614d506080830185613d25565b614d5d60a0830184613ca8565b979650505050505050565b600080600060608486031215614d8157614d80613ac5565b5b6000614d8f868287016142d6565b9350506020614da0868287016142d6565b9250506040614db1868287016142d6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f650e28fb58e5137b66beeca61399c78cb26ba97b90f05bf07b7daec6fe8d1be64736f6c63430008120033
Deployed Bytecode Sourcemap
29917:13496:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8073:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10240:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34875:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30976:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29994:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9193:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36450:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10891:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30097:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9035:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11655:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30052:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36621:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30563:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30378:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9364:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22538:148;;;;;;;;;;;;;:::i;:::-;;35118:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30189:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30452;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21896:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30226:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30598:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35362:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8292:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35782:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30526:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30674:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12376:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9704:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36230:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31049:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31245:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35592:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30263:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34482:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30418:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35475:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9942:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43071:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30305:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30489:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22841:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42869:194;;;;;;;;;;;;;:::i;:::-;;30636:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30345:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8073:100;8127:13;8160:5;8153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8073:100;:::o;10240:169::-;10323:4;10340:39;10349:12;:10;:12::i;:::-;10363:7;10372:6;10340:8;:39::i;:::-;10397:4;10390:11;;10240:169;;;;:::o;34875:231::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34991:4:::1;34985;34981:1;34965:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34964:31;;;;:::i;:::-;34954:6;:41;;34946:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35091:6;35081;:17;;;;:::i;:::-;35058:20;:40;;;;34875:231:::0;:::o;30976:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29994:51::-;;;:::o;9193:108::-;9254:7;9281:12;;9274:19;;9193:108;:::o;36450:157::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36557:9:::1;;;;;;;;;;;36529:38;;36546:9;36529:38;;;;;;;;;;;;36590:9;36578;;:21;;;;;;;;;;;;;;;;;;36450:157:::0;:::o;10891:355::-;11031:4;11048:36;11058:6;11066:9;11077:6;11048:9;:36::i;:::-;11095:121;11104:6;11112:12;:10;:12::i;:::-;11126:89;11164:6;11126:89;;;;;;;;;;;;;;;;;:11;:19;11138:6;11126:19;;;;;;;;;;;;;;;:33;11146:12;:10;:12::i;:::-;11126:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11095:8;:121::i;:::-;11234:4;11227:11;;10891:355;;;;;:::o;30097:53::-;30143:6;30097:53;:::o;9035:93::-;9093:5;9118:2;9111:9;;9035:93;:::o;11655:218::-;11743:4;11760:83;11769:12;:10;:12::i;:::-;11783:7;11792:50;11831:10;11792:11;:25;11804:12;:10;:12::i;:::-;11792:25;;;;;;;;;;;;;;;:34;11818:7;11792:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11760:8;:83::i;:::-;11861:4;11854:11;;11655:218;;;;:::o;30052:38::-;;;:::o;36621:125::-;36686:4;36710:19;:28;36730:7;36710:28;;;;;;;;;;;;;;;;;;;;;;;;;36703:35;;36621:125;;;:::o;30563:28::-;;;;:::o;30378:30::-;;;;;;;;;;;;;:::o;9364:127::-;9438:7;9465:9;:18;9475:7;9465:18;;;;;;;;;;;;;;;;9458:25;;9364:127;;;:::o;22538:148::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22645:1:::1;22608:40;;22629:6;;;;;;;;;;;22608:40;;;;;;;;;;;;22676:1;22659:6;;:19;;;;;;;;;;;;;;;;;;22538:148::o:0;35118:144::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35250:4:::1;35208:31;:39;35240:6;35208:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35118:144:::0;;:::o;30189:30::-;;;;;;;;;;;;;:::o;30452:::-;;;;:::o;21896:79::-;21934:7;21961:6;;;;;;;;;;;21954:13;;21896:79;:::o;30226:24::-;;;;;;;;;;;;;:::o;30598:31::-;;;;:::o;35362:101::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35448:7:::1;35434:11;;:21;;;;;;;;;;;;;;;;;;35362:101:::0;:::o;8292:104::-;8348:13;8381:7;8374:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8292:104;:::o;35782:244::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35889:13:::1;35881:21;;:4;:21;;::::0;35873:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35977:41;36006:4;36012:5;35977:28;:41::i;:::-;35782:244:::0;;:::o;30526:24::-;;;;:::o;30674:25::-;;;;:::o;12376:269::-;12469:4;12486:129;12495:12;:10;:12::i;:::-;12509:7;12518:96;12557:15;12518:96;;;;;;;;;;;;;;;;;:11;:25;12530:12;:10;:12::i;:::-;12518:25;;;;;;;;;;;;;;;:34;12544:7;12518:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12486:8;:129::i;:::-;12633:4;12626:11;;12376:269;;;;:::o;9704:175::-;9790:4;9807:42;9817:12;:10;:12::i;:::-;9831:9;9842:6;9807:9;:42::i;:::-;9867:4;9860:11;;9704:175;;;;:::o;36230:208::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36367:15:::1;;;;;;;;;;;36324:59;;36347:18;36324:59;;;;;;;;;;;;36412:18;36394:15;;:36;;;;;;;;;;;;;;;;;;36230:208:::0;:::o;31049:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;31245:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;35592:182::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35708:8:::1;35677:19;:28;35697:7;35677:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35748:7;35732:34;;;35757:8;35732:34;;;;;;:::i;:::-;;;;;;;;35592:182:::0;;:::o;30263:35::-;;;;:::o;34482:381::-;34563:4;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34619:6:::1;34615:1;34599:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34586:9;:39;;34578:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:4;34730:1;34714:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34701:9;:37;;34693:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:9;34805:18;:30;;;;34852:4;34845:11;;34482:381:::0;;;:::o;30418:27::-;;;;:::o;35475:109::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35571:5:::1;35553:6;:15;35560:7;35553:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35475:109:::0;;:::o;9942:151::-;10031:7;10058:11;:18;10070:5;10058:18;;;;;;;;;;;;;;;:27;10077:7;10058:27;;;;;;;;;;;;;;;;10051:34;;9942:151;;;;:::o;43071:339::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43173:4:::1;43153:25;;:8;:25;;::::0;43145:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43290:1;43253:8;43246:26;;;43281:4;43246:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;43238:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43332:8;43325:25;;;43351:7;:5;:7::i;:::-;43367:8;43360:26;;;43395:4;43360:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43325:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43071:339:::0;:::o;30305:33::-;;;;:::o;30489:30::-;;;;:::o;22841:244::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22950:1:::1;22930:22;;:8;:22;;::::0;22922:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23040:8;23011:38;;23032:6;;;;;;;;;;;23011:38;;;;;;;;;;;;23069:8;23060:6;;:17;;;;;;;;;;;;;;;;;;22841:244:::0;:::o;42869:194::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42959:1:::1;42935:21;:25;42926:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43015:7;:5;:7::i;:::-;43007:25;;:48;43033:21;43007:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42869:194::o:0;30636:31::-;;;;:::o;30345:24::-;;;;:::o;16940:181::-;16998:7;17018:9;17034:1;17030;:5;;;;:::i;:::-;17018:17;;17059:1;17054;:6;;17046:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:1;17105:8;;;16940:181;;;;:::o;709:98::-;762:7;789:10;782:17;;709:98;:::o;15562:380::-;15715:1;15698:19;;:5;:19;;;15690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15796:1;15777:21;;:7;:21;;;15769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15880:6;15850:11;:18;15862:5;15850:18;;;;;;;;;;;;;;;:27;15869:7;15850:27;;;;;;;;;;;;;;;:36;;;;15918:7;15902:32;;15911:5;15902:32;;;15927:6;15902:32;;;;;;:::i;:::-;;;;;;;;15562:380;;;:::o;36754:3392::-;36902:1;36886:18;;:4;:18;;;36878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36979:1;36965:16;;:2;:16;;;36957:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37041:6;:12;37048:4;37041:12;;;;;;;;;;;;;;;;;;;;;;;;;37040:13;:28;;;;;37058:6;:10;37065:2;37058:10;;;;;;;;;;;;;;;;;;;;;;;;;37057:11;37040:28;37032:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37127:1;37117:6;:11;37114:92;;37145:28;37161:4;37167:2;37171:1;37145:15;:28::i;:::-;37188:7;;37114:92;37260:7;:5;:7::i;:::-;37252:15;;:4;:15;;;;:49;;;;;37294:7;:5;:7::i;:::-;37288:13;;:2;:13;;;;37252:49;:86;;;;;37336:1;37322:16;;:2;:16;;;;37252:86;:128;;;;;37373:6;37359:21;;:2;:21;;;;37252:128;:158;;;;;37402:8;;;;;;;;;;;37401:9;37252:158;37230:1014;;;37495:25;:31;37521:4;37495:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37531:31;:35;37563:2;37531:35;;;;;;;;;;;;;;;;;;;;;;;;;37530:36;37495:71;37491:738;;;37613:20;;37603:6;:30;;37595:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37752:9;;37735:13;37745:2;37735:9;:13::i;:::-;37726:6;:22;;;;:::i;:::-;:35;;37718:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37491:738;;;37879:25;:29;37905:2;37879:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37913:31;:37;37945:4;37913:37;;;;;;;;;;;;;;;;;;;;;;;;;37912:38;37879:71;37875:354;;;37997:20;;37987:6;:30;;37979:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37875:354;;;38176:9;;38159:13;38169:2;38159:9;:13::i;:::-;38150:6;:22;;;;:::i;:::-;:35;;38142:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37875:354;37491:738;37230:1014;38278:28;38309:24;38327:4;38309:9;:24::i;:::-;38278:55;;38354:12;38393:18;;38369:20;:42;;38354:57;;38442:7;:35;;;;;38466:11;;;;;;;;;;;38442:35;:61;;;;;38495:8;;;;;;;;;;;38494:9;38442:61;:110;;;;;38521:25;:31;38547:4;38521:31;;;;;;;;;;;;;;;;;;;;;;;;;38520:32;38442:110;:153;;;;;38570:19;:25;38590:4;38570:25;;;;;;;;;;;;;;;;;;;;;;;;;38569:26;38442:153;:194;;;;;38613:19;:23;38633:2;38613:23;;;;;;;;;;;;;;;;;;;;;;;;;38612:24;38442:194;38424:338;;;38674:4;38663:8;;:15;;;;;;;;;;;;;;;;;;38707:10;:8;:10::i;:::-;38745:5;38734:8;;:16;;;;;;;;;;;;;;;;;;38424:338;38782:12;38798:8;;;;;;;;;;;38797:9;38782:24;;38907:19;:25;38927:4;38907:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38936:19;:23;38956:2;38936:23;;;;;;;;;;;;;;;;;;;;;;;;;38907:52;38904:99;;;38986:5;38976:15;;38904:99;39023:12;39127:7;39124:969;;;39180:25;:29;39206:2;39180:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39229:1;39213:13;;:17;39180:50;39176:748;;;39257:34;39287:3;39257:25;39268:13;;39257:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39250:41;;39358:13;;39339:16;;39332:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39310:18;;:61;;;;;;;:::i;:::-;;;;;;;;39426:13;;39413:10;;39406:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39390:12;;:49;;;;;;;:::i;:::-;;;;;;;;39506:13;;39487:16;;39480:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39458:18;;:61;;;;;;;:::i;:::-;;;;;;;;39176:748;;;39580:25;:31;39606:4;39580:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39630:1;39615:12;;:16;39580:51;39577:347;;;39656:33;39685:3;39656:24;39667:12;;39656:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39649:40;;39752:12;;39734:15;;39727:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39705:18;;:59;;;;;;;:::i;:::-;;;;;;;;39818:12;;39806:9;;39799:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39783:12;;:47;;;;;;;:::i;:::-;;;;;;;;39896:12;;39878:15;;39871:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39849:18;;:59;;;;;;;:::i;:::-;;;;;;;;39577:347;39176:748;39962:1;39955:4;:8;39952:93;;;39987:42;40003:4;40017;40024;39987:15;:42::i;:::-;39952:93;40077:4;40067:14;;;;;:::i;:::-;;;39124:969;40105:33;40121:4;40127:2;40131:6;40105:15;:33::i;:::-;36867:3279;;;;36754:3392;;;;:::o;17843:192::-;17929:7;17962:1;17957;:6;;17965:12;17949:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17989:9;18005:1;18001;:5;;;;:::i;:::-;17989:17;;18026:1;18019:8;;;17843:192;;;;;:::o;36034:188::-;36151:5;36117:25;:31;36143:4;36117:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36208:5;36174:40;;36202:4;36174:40;;;;;;;;;;;;36034:188;;:::o;13135:573::-;13293:1;13275:20;;:6;:20;;;13267:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13377:1;13356:23;;:9;:23;;;13348:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13432:47;13453:6;13461:9;13472:6;13432:20;:47::i;:::-;13512:71;13534:6;13512:71;;;;;;;;;;;;;;;;;:9;:17;13522:6;13512:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13492:9;:17;13502:6;13492:17;;;;;;;;;;;;;;;:91;;;;13617:32;13642:6;13617:9;:20;13627:9;13617:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13594:9;:20;13604:9;13594:20;;;;;;;;;;;;;;;:55;;;;13682:9;13665:35;;13674:6;13665:35;;;13693:6;13665:35;;;;;;:::i;:::-;;;;;;;;13135:573;;;:::o;41304:1553::-;41343:23;41369:24;41387:4;41369:9;:24::i;:::-;41343:50;;41404:25;41474:12;;41453:18;;41432;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41404:82;;41529:1;41510:15;:20;:46;;;;41555:1;41534:17;:22;41510:46;41507:60;;;41559:7;;;;41507:60;41636:23;41721:1;41701:17;41680:18;;41662:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41636:86;;41733:26;41762:36;41782:15;41762;:19;;:36;;;;:::i;:::-;41733:65;;41819:25;41847:21;41819:49;;41881:36;41898:18;41881:16;:36::i;:::-;41939:18;41960:44;41986:17;41960:21;:25;;:44;;;;:::i;:::-;41939:65;;42025:23;42051:57;42090:17;42051:34;42066:18;;42051:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42025:83;;42119:17;42139:51;42172:17;42139:28;42154:12;;42139:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42119:71;;42221:23;42278:9;42260:15;42247:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42221:66;;42339:1;42318:18;:22;;;;42372:1;42351:18;:22;;;;42399:1;42384:12;:16;;;;42422:12;42447:15;;;;;;;;;;;42439:29;;42476:15;42439:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42421:75;;;42528:1;42510:15;:19;:42;;;;;42551:1;42533:15;:19;42510:42;42507:210;;;42568:46;42581:15;42598;42568:12;:46::i;:::-;42634:71;42649:18;42669:15;42686:18;;42634:71;;;;;;;;:::i;:::-;;;;;;;;42507:210;42800:9;;;;;;;;;;;42792:23;;42823:21;42792:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42779:70;;;;;41332:1525;;;;;;;;;;41304:1553;:::o;18294:471::-;18352:7;18602:1;18597;:6;18593:47;;18627:1;18620:8;;;;18593:47;18652:9;18668:1;18664;:5;;;;:::i;:::-;18652:17;;18697:1;18692;18688;:5;;;;:::i;:::-;:10;18680:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18756:1;18749:8;;;18294:471;;;;;:::o;19241:132::-;19299:7;19326:39;19330:1;19333;19326:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19319:46;;19241:132;;;;:::o;16545:125::-;;;;:::o;17404:136::-;17462:7;17489:43;17493:1;17496;17489:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17482:50;;17404:136;;;;:::o;40154:601::-;40282:21;40320:1;40306:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40282:40;;40351:4;40333;40338:1;40333:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40377:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40367:4;40372:1;40367:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40412:62;40429:4;40444:15;40462:11;40412:8;:62::i;:::-;40513:15;:66;;;40594:11;40620:1;40664:4;40691;40711:15;40513:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40209:546;40154:601;:::o;40779:517::-;40927:62;40944:4;40959:15;40977:11;40927:8;:62::i;:::-;41032:15;:31;;;41071:9;41104:4;41124:11;41150:1;41193;30143:6;41262:15;41032:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40779:517;;:::o;19869:278::-;19955:7;19987:1;19983;:5;19990:12;19975:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20014:9;20030:1;20026;:5;;;;:::i;:::-;20014:17;;20138:1;20131:8;;;19869:278;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:153::-;4539:9;4572:37;4603:5;4572:37;:::i;:::-;4559:50;;4462:153;;;:::o;4621:185::-;4735:64;4793:5;4735:64;:::i;:::-;4730:3;4723:77;4621:185;;:::o;4812:276::-;4932:4;4970:2;4959:9;4955:18;4947:26;;4983:98;5078:1;5067:9;5063:17;5054:6;4983:98;:::i;:::-;4812:276;;;;:::o;5094:118::-;5181:24;5199:5;5181:24;:::i;:::-;5176:3;5169:37;5094:118;;:::o;5218:222::-;5311:4;5349:2;5338:9;5334:18;5326:26;;5362:71;5430:1;5419:9;5415:17;5406:6;5362:71;:::i;:::-;5218:222;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:180::-;8445:77;8442:1;8435:88;8542:4;8539:1;8532:15;8566:4;8563:1;8556:15;8583:320;8627:6;8664:1;8658:4;8654:12;8644:22;;8711:1;8705:4;8701:12;8732:18;8722:81;;8788:4;8780:6;8776:17;8766:27;;8722:81;8850:2;8842:6;8839:14;8819:18;8816:38;8813:84;;8869:18;;:::i;:::-;8813:84;8634:269;8583:320;;;:::o;8909:182::-;9049:34;9045:1;9037:6;9033:14;9026:58;8909:182;:::o;9097:366::-;9239:3;9260:67;9324:2;9319:3;9260:67;:::i;:::-;9253:74;;9336:93;9425:3;9336:93;:::i;:::-;9454:2;9449:3;9445:12;9438:19;;9097:366;;;:::o;9469:419::-;9635:4;9673:2;9662:9;9658:18;9650:26;;9722:9;9716:4;9712:20;9708:1;9697:9;9693:17;9686:47;9750:131;9876:4;9750:131;:::i;:::-;9742:139;;9469:419;;;:::o;9894:180::-;9942:77;9939:1;9932:88;10039:4;10036:1;10029:15;10063:4;10060:1;10053:15;10080:410;10120:7;10143:20;10161:1;10143:20;:::i;:::-;10138:25;;10177:20;10195:1;10177:20;:::i;:::-;10172:25;;10232:1;10229;10225:9;10254:30;10272:11;10254:30;:::i;:::-;10243:41;;10433:1;10424:7;10420:15;10417:1;10414:22;10394:1;10387:9;10367:83;10344:139;;10463:18;;:::i;:::-;10344:139;10128:362;10080:410;;;;:::o;10496:180::-;10544:77;10541:1;10534:88;10641:4;10638:1;10631:15;10665:4;10662:1;10655:15;10682:185;10722:1;10739:20;10757:1;10739:20;:::i;:::-;10734:25;;10773:20;10791:1;10773:20;:::i;:::-;10768:25;;10812:1;10802:35;;10817:18;;:::i;:::-;10802:35;10859:1;10856;10852:9;10847:14;;10682:185;;;;:::o;10873:234::-;11013:34;11009:1;11001:6;10997:14;10990:58;11082:17;11077:2;11069:6;11065:15;11058:42;10873:234;:::o;11113:366::-;11255:3;11276:67;11340:2;11335:3;11276:67;:::i;:::-;11269:74;;11352:93;11441:3;11352:93;:::i;:::-;11470:2;11465:3;11461:12;11454:19;;11113:366;;;:::o;11485:419::-;11651:4;11689:2;11678:9;11674:18;11666:26;;11738:9;11732:4;11728:20;11724:1;11713:9;11709:17;11702:47;11766:131;11892:4;11766:131;:::i;:::-;11758:139;;11485:419;;;:::o;11910:244::-;12050:34;12046:1;12038:6;12034:14;12027:58;12119:27;12114:2;12106:6;12102:15;12095:52;11910:244;:::o;12160:366::-;12302:3;12323:67;12387:2;12382:3;12323:67;:::i;:::-;12316:74;;12399:93;12488:3;12399:93;:::i;:::-;12517:2;12512:3;12508:12;12501:19;;12160:366;;;:::o;12532:419::-;12698:4;12736:2;12725:9;12721:18;12713:26;;12785:9;12779:4;12775:20;12771:1;12760:9;12756:17;12749:47;12813:131;12939:4;12813:131;:::i;:::-;12805:139;;12532:419;;;:::o;12957:240::-;13097:34;13093:1;13085:6;13081:14;13074:58;13166:23;13161:2;13153:6;13149:15;13142:48;12957:240;:::o;13203:366::-;13345:3;13366:67;13430:2;13425:3;13366:67;:::i;:::-;13359:74;;13442:93;13531:3;13442:93;:::i;:::-;13560:2;13555:3;13551:12;13544:19;;13203:366;;;:::o;13575:419::-;13741:4;13779:2;13768:9;13764:18;13756:26;;13828:9;13822:4;13818:20;13814:1;13803:9;13799:17;13792:47;13856:131;13982:4;13856:131;:::i;:::-;13848:139;;13575:419;;;:::o;14000:239::-;14140:34;14136:1;14128:6;14124:14;14117:58;14209:22;14204:2;14196:6;14192:15;14185:47;14000:239;:::o;14245:366::-;14387:3;14408:67;14472:2;14467:3;14408:67;:::i;:::-;14401:74;;14484:93;14573:3;14484:93;:::i;:::-;14602:2;14597:3;14593:12;14586:19;;14245:366;;;:::o;14617:419::-;14783:4;14821:2;14810:9;14806:18;14798:26;;14870:9;14864:4;14860:20;14856:1;14845:9;14841:17;14834:47;14898:131;15024:4;14898:131;:::i;:::-;14890:139;;14617:419;;;:::o;15042:231::-;15182:34;15178:1;15170:6;15166:14;15159:58;15251:14;15246:2;15238:6;15234:15;15227:39;15042:231;:::o;15279:366::-;15421:3;15442:67;15506:2;15501:3;15442:67;:::i;:::-;15435:74;;15518:93;15607:3;15518:93;:::i;:::-;15636:2;15631:3;15627:12;15620:19;;15279:366;;;:::o;15651:419::-;15817:4;15855:2;15844:9;15840:18;15832:26;;15904:9;15898:4;15894:20;15890:1;15879:9;15875:17;15868:47;15932:131;16058:4;15932:131;:::i;:::-;15924:139;;15651:419;;;:::o;16076:143::-;16133:5;16164:6;16158:13;16149:22;;16180:33;16207:5;16180:33;:::i;:::-;16076:143;;;;:::o;16225:351::-;16295:6;16344:2;16332:9;16323:7;16319:23;16315:32;16312:119;;;16350:79;;:::i;:::-;16312:119;16470:1;16495:64;16551:7;16542:6;16531:9;16527:22;16495:64;:::i;:::-;16485:74;;16441:128;16225:351;;;;:::o;16582:166::-;16722:18;16718:1;16710:6;16706:14;16699:42;16582:166;:::o;16754:366::-;16896:3;16917:67;16981:2;16976:3;16917:67;:::i;:::-;16910:74;;16993:93;17082:3;16993:93;:::i;:::-;17111:2;17106:3;17102:12;17095:19;;16754:366;;;:::o;17126:419::-;17292:4;17330:2;17319:9;17315:18;17307:26;;17379:9;17373:4;17369:20;17365:1;17354:9;17350:17;17343:47;17407:131;17533:4;17407:131;:::i;:::-;17399:139;;17126:419;;;:::o;17551:332::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17723:71;17791:1;17780:9;17776:17;17767:6;17723:71;:::i;:::-;17804:72;17872:2;17861:9;17857:18;17848:6;17804:72;:::i;:::-;17551:332;;;;;:::o;17889:137::-;17943:5;17974:6;17968:13;17959:22;;17990:30;18014:5;17990:30;:::i;:::-;17889:137;;;;:::o;18032:345::-;18099:6;18148:2;18136:9;18127:7;18123:23;18119:32;18116:119;;;18154:79;;:::i;:::-;18116:119;18274:1;18299:61;18352:7;18343:6;18332:9;18328:22;18299:61;:::i;:::-;18289:71;;18245:125;18032:345;;;;:::o;18383:225::-;18523:34;18519:1;18511:6;18507:14;18500:58;18592:8;18587:2;18579:6;18575:15;18568:33;18383:225;:::o;18614:366::-;18756:3;18777:67;18841:2;18836:3;18777:67;:::i;:::-;18770:74;;18853:93;18942:3;18853:93;:::i;:::-;18971:2;18966:3;18962:12;18955:19;;18614:366;;;:::o;18986:419::-;19152:4;19190:2;19179:9;19175:18;19167:26;;19239:9;19233:4;19229:20;19225:1;19214:9;19210:17;19203:47;19267:131;19393:4;19267:131;:::i;:::-;19259:139;;18986:419;;;:::o;19411:181::-;19551:33;19547:1;19539:6;19535:14;19528:57;19411:181;:::o;19598:366::-;19740:3;19761:67;19825:2;19820:3;19761:67;:::i;:::-;19754:74;;19837:93;19926:3;19837:93;:::i;:::-;19955:2;19950:3;19946:12;19939:19;;19598:366;;;:::o;19970:419::-;20136:4;20174:2;20163:9;20159:18;20151:26;;20223:9;20217:4;20213:20;20209:1;20198:9;20194:17;20187:47;20251:131;20377:4;20251:131;:::i;:::-;20243:139;;19970:419;;;:::o;20395:191::-;20435:3;20454:20;20472:1;20454:20;:::i;:::-;20449:25;;20488:20;20506:1;20488:20;:::i;:::-;20483:25;;20531:1;20528;20524:9;20517:16;;20552:3;20549:1;20546:10;20543:36;;;20559:18;;:::i;:::-;20543:36;20395:191;;;;:::o;20592:177::-;20732:29;20728:1;20720:6;20716:14;20709:53;20592:177;:::o;20775:366::-;20917:3;20938:67;21002:2;20997:3;20938:67;:::i;:::-;20931:74;;21014:93;21103:3;21014:93;:::i;:::-;21132:2;21127:3;21123:12;21116:19;;20775:366;;;:::o;21147:419::-;21313:4;21351:2;21340:9;21336:18;21328:26;;21400:9;21394:4;21390:20;21386:1;21375:9;21371:17;21364:47;21428:131;21554:4;21428:131;:::i;:::-;21420:139;;21147:419;;;:::o;21572:223::-;21712:34;21708:1;21700:6;21696:14;21689:58;21781:6;21776:2;21768:6;21764:15;21757:31;21572:223;:::o;21801:366::-;21943:3;21964:67;22028:2;22023:3;21964:67;:::i;:::-;21957:74;;22040:93;22129:3;22040:93;:::i;:::-;22158:2;22153:3;22149:12;22142:19;;21801:366;;;:::o;22173:419::-;22339:4;22377:2;22366:9;22362:18;22354:26;;22426:9;22420:4;22416:20;22412:1;22401:9;22397:17;22390:47;22454:131;22580:4;22454:131;:::i;:::-;22446:139;;22173:419;;;:::o;22598:221::-;22738:34;22734:1;22726:6;22722:14;22715:58;22807:4;22802:2;22794:6;22790:15;22783:29;22598:221;:::o;22825:366::-;22967:3;22988:67;23052:2;23047:3;22988:67;:::i;:::-;22981:74;;23064:93;23153:3;23064:93;:::i;:::-;23182:2;23177:3;23173:12;23166:19;;22825:366;;;:::o;23197:419::-;23363:4;23401:2;23390:9;23386:18;23378:26;;23450:9;23444:4;23440:20;23436:1;23425:9;23421:17;23414:47;23478:131;23604:4;23478:131;:::i;:::-;23470:139;;23197:419;;;:::o;23622:224::-;23762:34;23758:1;23750:6;23746:14;23739:58;23831:7;23826:2;23818:6;23814:15;23807:32;23622:224;:::o;23852:366::-;23994:3;24015:67;24079:2;24074:3;24015:67;:::i;:::-;24008:74;;24091:93;24180:3;24091:93;:::i;:::-;24209:2;24204:3;24200:12;24193:19;;23852:366;;;:::o;24224:419::-;24390:4;24428:2;24417:9;24413:18;24405:26;;24477:9;24471:4;24467:20;24463:1;24452:9;24448:17;24441:47;24505:131;24631:4;24505:131;:::i;:::-;24497:139;;24224:419;;;:::o;24649:222::-;24789:34;24785:1;24777:6;24773:14;24766:58;24858:5;24853:2;24845:6;24841:15;24834:30;24649:222;:::o;24877:366::-;25019:3;25040:67;25104:2;25099:3;25040:67;:::i;:::-;25033:74;;25116:93;25205:3;25116:93;:::i;:::-;25234:2;25229:3;25225:12;25218:19;;24877:366;;;:::o;25249:419::-;25415:4;25453:2;25442:9;25438:18;25430:26;;25502:9;25496:4;25492:20;25488:1;25477:9;25473:17;25466:47;25530:131;25656:4;25530:131;:::i;:::-;25522:139;;25249:419;;;:::o;25674:169::-;25814:21;25810:1;25802:6;25798:14;25791:45;25674:169;:::o;25849:366::-;25991:3;26012:67;26076:2;26071:3;26012:67;:::i;:::-;26005:74;;26088:93;26177:3;26088:93;:::i;:::-;26206:2;26201:3;26197:12;26190:19;;25849:366;;;:::o;26221:419::-;26387:4;26425:2;26414:9;26410:18;26402:26;;26474:9;26468:4;26464:20;26460:1;26449:9;26445:17;26438:47;26502:131;26628:4;26502:131;:::i;:::-;26494:139;;26221:419;;;:::o;26646:240::-;26786:34;26782:1;26774:6;26770:14;26763:58;26855:23;26850:2;26842:6;26838:15;26831:48;26646:240;:::o;26892:366::-;27034:3;27055:67;27119:2;27114:3;27055:67;:::i;:::-;27048:74;;27131:93;27220:3;27131:93;:::i;:::-;27249:2;27244:3;27240:12;27233:19;;26892:366;;;:::o;27264:419::-;27430:4;27468:2;27457:9;27453:18;27445:26;;27517:9;27511:4;27507:20;27503:1;27492:9;27488:17;27481:47;27545:131;27671:4;27545:131;:::i;:::-;27537:139;;27264:419;;;:::o;27689:169::-;27829:21;27825:1;27817:6;27813:14;27806:45;27689:169;:::o;27864:366::-;28006:3;28027:67;28091:2;28086:3;28027:67;:::i;:::-;28020:74;;28103:93;28192:3;28103:93;:::i;:::-;28221:2;28216:3;28212:12;28205:19;;27864:366;;;:::o;28236:419::-;28402:4;28440:2;28429:9;28425:18;28417:26;;28489:9;28483:4;28479:20;28475:1;28464:9;28460:17;28453:47;28517:131;28643:4;28517:131;:::i;:::-;28509:139;;28236:419;;;:::o;28661:241::-;28801:34;28797:1;28789:6;28785:14;28778:58;28870:24;28865:2;28857:6;28853:15;28846:49;28661:241;:::o;28908:366::-;29050:3;29071:67;29135:2;29130:3;29071:67;:::i;:::-;29064:74;;29147:93;29236:3;29147:93;:::i;:::-;29265:2;29260:3;29256:12;29249:19;;28908:366;;;:::o;29280:419::-;29446:4;29484:2;29473:9;29469:18;29461:26;;29533:9;29527:4;29523:20;29519:1;29508:9;29504:17;29497:47;29561:131;29687:4;29561:131;:::i;:::-;29553:139;;29280:419;;;:::o;29705:194::-;29745:4;29765:20;29783:1;29765:20;:::i;:::-;29760:25;;29799:20;29817:1;29799:20;:::i;:::-;29794:25;;29843:1;29840;29836:9;29828:17;;29867:1;29861:4;29858:11;29855:37;;;29872:18;;:::i;:::-;29855:37;29705:194;;;;:::o;29905:147::-;30006:11;30043:3;30028:18;;29905:147;;;;:::o;30058:114::-;;:::o;30178:398::-;30337:3;30358:83;30439:1;30434:3;30358:83;:::i;:::-;30351:90;;30450:93;30539:3;30450:93;:::i;:::-;30568:1;30563:3;30559:11;30552:18;;30178:398;;;:::o;30582:379::-;30766:3;30788:147;30931:3;30788:147;:::i;:::-;30781:154;;30952:3;30945:10;;30582:379;;;:::o;30967:442::-;31116:4;31154:2;31143:9;31139:18;31131:26;;31167:71;31235:1;31224:9;31220:17;31211:6;31167:71;:::i;:::-;31248:72;31316:2;31305:9;31301:18;31292:6;31248:72;:::i;:::-;31330;31398:2;31387:9;31383:18;31374:6;31330:72;:::i;:::-;30967:442;;;;;;:::o;31415:220::-;31555:34;31551:1;31543:6;31539:14;31532:58;31624:3;31619:2;31611:6;31607:15;31600:28;31415:220;:::o;31641:366::-;31783:3;31804:67;31868:2;31863:3;31804:67;:::i;:::-;31797:74;;31880:93;31969:3;31880:93;:::i;:::-;31998:2;31993:3;31989:12;31982:19;;31641:366;;;:::o;32013:419::-;32179:4;32217:2;32206:9;32202:18;32194:26;;32266:9;32260:4;32256:20;32252:1;32241:9;32237:17;32230:47;32294:131;32420:4;32294:131;:::i;:::-;32286:139;;32013:419;;;:::o;32438:180::-;32486:77;32483:1;32476:88;32583:4;32580:1;32573:15;32607:4;32604:1;32597:15;32624:180;32672:77;32669:1;32662:88;32769:4;32766:1;32759:15;32793:4;32790:1;32783:15;32810:143;32867:5;32898:6;32892:13;32883:22;;32914:33;32941:5;32914:33;:::i;:::-;32810:143;;;;:::o;32959:351::-;33029:6;33078:2;33066:9;33057:7;33053:23;33049:32;33046:119;;;33084:79;;:::i;:::-;33046:119;33204:1;33229:64;33285:7;33276:6;33265:9;33261:22;33229:64;:::i;:::-;33219:74;;33175:128;32959:351;;;;:::o;33316:85::-;33361:7;33390:5;33379:16;;33316:85;;;:::o;33407:158::-;33465:9;33498:61;33516:42;33525:32;33551:5;33525:32;:::i;:::-;33516:42;:::i;:::-;33498:61;:::i;:::-;33485:74;;33407:158;;;:::o;33571:147::-;33666:45;33705:5;33666:45;:::i;:::-;33661:3;33654:58;33571:147;;:::o;33724:114::-;33791:6;33825:5;33819:12;33809:22;;33724:114;;;:::o;33844:184::-;33943:11;33977:6;33972:3;33965:19;34017:4;34012:3;34008:14;33993:29;;33844:184;;;;:::o;34034:132::-;34101:4;34124:3;34116:11;;34154:4;34149:3;34145:14;34137:22;;34034:132;;;:::o;34172:108::-;34249:24;34267:5;34249:24;:::i;:::-;34244:3;34237:37;34172:108;;:::o;34286:179::-;34355:10;34376:46;34418:3;34410:6;34376:46;:::i;:::-;34454:4;34449:3;34445:14;34431:28;;34286:179;;;;:::o;34471:113::-;34541:4;34573;34568:3;34564:14;34556:22;;34471:113;;;:::o;34620:732::-;34739:3;34768:54;34816:5;34768:54;:::i;:::-;34838:86;34917:6;34912:3;34838:86;:::i;:::-;34831:93;;34948:56;34998:5;34948:56;:::i;:::-;35027:7;35058:1;35043:284;35068:6;35065:1;35062:13;35043:284;;;35144:6;35138:13;35171:63;35230:3;35215:13;35171:63;:::i;:::-;35164:70;;35257:60;35310:6;35257:60;:::i;:::-;35247:70;;35103:224;35090:1;35087;35083:9;35078:14;;35043:284;;;35047:14;35343:3;35336:10;;34744:608;;;34620:732;;;;:::o;35358:831::-;35621:4;35659:3;35648:9;35644:19;35636:27;;35673:71;35741:1;35730:9;35726:17;35717:6;35673:71;:::i;:::-;35754:80;35830:2;35819:9;35815:18;35806:6;35754:80;:::i;:::-;35881:9;35875:4;35871:20;35866:2;35855:9;35851:18;35844:48;35909:108;36012:4;36003:6;35909:108;:::i;:::-;35901:116;;36027:72;36095:2;36084:9;36080:18;36071:6;36027:72;:::i;:::-;36109:73;36177:3;36166:9;36162:19;36153:6;36109:73;:::i;:::-;35358:831;;;;;;;;:::o;36195:807::-;36444:4;36482:3;36471:9;36467:19;36459:27;;36496:71;36564:1;36553:9;36549:17;36540:6;36496:71;:::i;:::-;36577:72;36645:2;36634:9;36630:18;36621:6;36577:72;:::i;:::-;36659:80;36735:2;36724:9;36720:18;36711:6;36659:80;:::i;:::-;36749;36825:2;36814:9;36810:18;36801:6;36749:80;:::i;:::-;36839:73;36907:3;36896:9;36892:19;36883:6;36839:73;:::i;:::-;36922;36990:3;36979:9;36975:19;36966:6;36922:73;:::i;:::-;36195:807;;;;;;;;;:::o;37008:663::-;37096:6;37104;37112;37161:2;37149:9;37140:7;37136:23;37132:32;37129:119;;;37167:79;;:::i;:::-;37129:119;37287:1;37312:64;37368:7;37359:6;37348:9;37344:22;37312:64;:::i;:::-;37302:74;;37258:128;37425:2;37451:64;37507:7;37498:6;37487:9;37483:22;37451:64;:::i;:::-;37441:74;;37396:129;37564:2;37590:64;37646:7;37637:6;37626:9;37622:22;37590:64;:::i;:::-;37580:74;;37535:129;37008:663;;;;;:::o
Swarm Source
ipfs://f650e28fb58e5137b66beeca61399c78cb26ba97b90f05bf07b7daec6fe8d1be
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.