More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Snatch
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-15 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Snatch is ERC20, Ownable { using SafeMath for uint256; struct FeeRatios { uint256 marketingPortion; uint256 developmentPortion; } IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public marketingWallet; FeeRatios public feeRatios = FeeRatios(40,60); // 40/60% wallet tax split mapping(address => bool) public bots; mapping (address => uint256) public _buyMap; address payable private _developmentAddress = payable(0x1185f7638129De06B028B9F441e969Bd16E7D297); address payable private _marketingAddress = payable(0x68d3B46E0d5804a9f9886DC83c73dc2dEe465a37); uint256 public swapTokensAtAmount; bool public tradingActive = false; bool public swapEnabled = false; // block number of opened trading uint256 launchedAt; uint256 launchedTime = 0; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxWalletAmount; // 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 ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event FeeRatiosChanged(uint256 indexed developmentPortion, uint256 indexed marketingPortion); constructor() ERC20("SNATCH", "SNATCH") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxWallet(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxWallet(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 100000000000 * 1e18; swapTokensAtAmount = totalSupply * 1 / 1000; // 0.1% swap wallet marketingWallet = address(owner()); // set as marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxWallet(owner(), true); excludeFromMaxWallet(address(this), true); excludeFromMaxWallet(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } function maxWallet() public view returns(uint256) { uint256 _initialMaxWallet = 50000000 * 1e18; uint256 _timeRound = (block.timestamp - launchedTime) / 6 hours; uint256 _maxWallet = _initialMaxWallet; if(_timeRound <= 100){ if(totalSupply() / (2**_timeRound) > 0){ _maxWallet = _initialMaxWallet * 20**_timeRound; if(_maxWallet >= totalSupply()){ _maxWallet = totalSupply(); } } else { _maxWallet = totalSupply(); } } else { _maxWallet = totalSupply(); } return _maxWallet; } function buyMarketingFee() public view returns(uint256) { uint256 _initialBuyFee = 25; uint256 _timeRound = (block.timestamp - launchedTime) / 5 minutes; uint256 _buyFee = _initialBuyFee; if(_timeRound <= _initialBuyFee){ _buyFee = _initialBuyFee - _timeRound; } else { _buyFee = 4; } return _buyFee; } function sellMarketingFee() public view returns(uint256) { uint256 _initialSellFee = 30; uint256 _timeRound = (block.timestamp - launchedTime) / 5 minutes; uint256 _sellFee = _initialSellFee; if(_timeRound <= _initialSellFee){ _sellFee = _initialSellFee - _timeRound; } else { _sellFee = 4; } return _sellFee; } // once enabled, can never be turned off function enableTrading() external onlyOwner { require(!tradingActive, "Trading is active"); tradingActive = true; swapEnabled = true; launchedAt = block.number; launchedTime = block.timestamp; } function excludeFromMaxWallet(address updAds, bool isEx) public onlyOwner { _isExcludedMaxWalletAmount[updAds] = isEx; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxWalletAmount[to]) { require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded"); } else if(!_isExcludedMaxWalletAmount[to]){ require(amount + balanceOf(to) <= maxWallet(), "Max wallet exceeded"); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 _sellMarketingFee = sellMarketingFee(); uint256 _buyMarketingFee = buyMarketingFee(); // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && _sellMarketingFee > 0){ fees = amount.mul(_sellMarketingFee).div(100); } // on buy else if(automatedMarketMakerPairs[from] && _buyMarketingFee > 0) { fees = amount.mul(_buyMarketingFee).div(100); } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if(contractBalance == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"developmentPortion","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"marketingPortion","type":"uint256"}],"name":"FeeRatiosChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRatios","outputs":[{"internalType":"uint256","name":"marketingPortion","type":"uint256"},{"internalType":"uint256","name":"developmentPortion","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052604051806040016040528060288152602001603c815250600760008201518160000155602082015181600101555050731185f7638129de06b028b9f441e969bd16e7d297600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507368d3b46e0d5804a9f9886dc83c73dc2dee465a37600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff02191690831515021790555060006010553480156200012557600080fd5b506040518060400160405280600681526020017f534e4154434800000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f534e4154434800000000000000000000000000000000000000000000000000008152508160039080519060200190620001aa92919062000b31565b508060049080519060200190620001c392919062000b31565b5050506000620001d8620005fd60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002a38160016200060560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031e57600080fd5b505afa15801562000333573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000359919062000c4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bc57600080fd5b505afa158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f7919062000c4b565b6040518363ffffffff1660e01b81526004016200041692919062000c8e565b602060405180830381600087803b1580156200043157600080fd5b505af115801562000446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046c919062000c4b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004b460a05160016200060560201b60201c565b620004c960a05160016200070260201b60201c565b60006c01431e0fae6d7217caa000000090506103e8600182620004ed919062000cf4565b620004f9919062000d84565b600d819055506200050f620007a360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057162000563620007a360201b60201c565b6001620007cd60201b60201c565b62000584306001620007cd60201b60201c565b6200059961dead6001620007cd60201b60201c565b620005bb620005ad620007a360201b60201c565b60016200060560201b60201c565b620005ce3060016200060560201b60201c565b620005e361dead60016200060560201b60201c565b620005f533826200091a60201b60201c565b50506200104d565b600033905090565b62000615620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069e9062000e1d565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007dd620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200086f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008669062000e1d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200090e919062000e5c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009849062000ec9565b60405180910390fd5b620009a16000838362000ac960201b60201c565b620009bd8160025462000ace60201b620019141790919060201c565b60028190555062000a1b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ace60201b620019141790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abd919062000efc565b60405180910390a35050565b505050565b600080828462000adf919062000f19565b90508381101562000b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1e9062000fc6565b60405180910390fd5b8091505092915050565b82805462000b3f9062001017565b90600052602060002090601f01602090048101928262000b63576000855562000baf565b82601f1062000b7e57805160ff191683800117855562000baf565b8280016001018555821562000baf579182015b8281111562000bae57825182559160200191906001019062000b91565b5b50905062000bbe919062000bc2565b5090565b5b8082111562000bdd57600081600090555060010162000bc3565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c138262000be6565b9050919050565b62000c258162000c06565b811462000c3157600080fd5b50565b60008151905062000c458162000c1a565b92915050565b60006020828403121562000c645762000c6362000be1565b5b600062000c748482850162000c34565b91505092915050565b62000c888162000c06565b82525050565b600060408201905062000ca5600083018562000c7d565b62000cb4602083018462000c7d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d018262000cbb565b915062000d0e8362000cbb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d4a5762000d4962000cc5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d918262000cbb565b915062000d9e8362000cbb565b92508262000db15762000db062000d55565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0560208362000dbc565b915062000e128262000dcd565b602082019050919050565b6000602082019050818103600083015262000e388162000df6565b9050919050565b60008115159050919050565b62000e568162000e3f565b82525050565b600060208201905062000e73600083018462000e4b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb1601f8362000dbc565b915062000ebe8262000e79565b602082019050919050565b6000602082019050818103600083015262000ee48162000ea2565b9050919050565b62000ef68162000cbb565b82525050565b600060208201905062000f13600083018462000eeb565b92915050565b600062000f268262000cbb565b915062000f338362000cbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f6b5762000f6a62000cc5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fae601b8362000dbc565b915062000fbb8262000f76565b602082019050919050565b6000602082019050818103600083015262000fe18162000f9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200103057607f821691505b6020821081141562001047576200104662000fe8565b5b50919050565b60805160a051613c1f6200108f60003960008181610adb015261109e01526000818161091801528181612a0001528181612af00152612b170152613c1f6000f3fe6080604052600436106101fd5760003560e01c80638ffee7851161010d578063b62496f5116100a0578063d2fcc0011161006f578063d2fcc00114610781578063dd62ed3e146107aa578063e2f45605146107e7578063f2fde38b14610812578063f8b45b051461083b57610204565b8063b62496f5146106b3578063bbc0c742146106f0578063bfd792841461071b578063c02466681461075857610204565b80639a7a23d6116100dc5780639a7a23d6146105e7578063a457c2d714610610578063a9059cbb1461064d578063aacebbe31461068a57610204565b80638ffee78514610528578063921369131461055457806395d89b411461057f57806396880b17146105aa57610204565b80634fbee1931161019057806375f0a8741161015f57806375f0a874146104535780637bce5a041461047e5780637f2feddc146104a95780638a8c523c146104e65780638da5cb5b146104fd57610204565b80634fbee193146103975780636ddd1713146103d457806370a08231146103ff578063715018a61461043c57610204565b806323b872dd116101cc57806323b872dd146102c7578063313ce56714610304578063395093511461032f57806349bd5a5e1461036c57610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610866565b60405161022b9190612c46565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612d01565b6108f8565b6040516102689190612d5c565b60405180910390f35b34801561027d57600080fd5b50610286610916565b6040516102939190612dd6565b60405180910390f35b3480156102a857600080fd5b506102b161093a565b6040516102be9190612e00565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612e1b565b610944565b6040516102fb9190612d5c565b60405180910390f35b34801561031057600080fd5b50610319610a1d565b6040516103269190612e8a565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190612d01565b610a26565b6040516103639190612d5c565b60405180910390f35b34801561037857600080fd5b50610381610ad9565b60405161038e9190612eb4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612ecf565b610afd565b6040516103cb9190612d5c565b60405180910390f35b3480156103e057600080fd5b506103e9610b53565b6040516103f69190612d5c565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612ecf565b610b66565b6040516104339190612e00565b60405180910390f35b34801561044857600080fd5b50610451610bae565b005b34801561045f57600080fd5b50610468610d06565b6040516104759190612eb4565b60405180910390f35b34801561048a57600080fd5b50610493610d2c565b6040516104a09190612e00565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612ecf565b610d7f565b6040516104dd9190612e00565b60405180910390f35b3480156104f257600080fd5b506104fb610d97565b005b34801561050957600080fd5b50610512610ec4565b60405161051f9190612eb4565b60405180910390f35b34801561053457600080fd5b5061053d610eee565b60405161054b929190612efc565b60405180910390f35b34801561056057600080fd5b50610569610f00565b6040516105769190612e00565b60405180910390f35b34801561058b57600080fd5b50610594610f53565b6040516105a19190612c46565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190612ecf565b610fe5565b6040516105de9190612d5c565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612f51565b611005565b005b34801561061c57600080fd5b5061063760048036038101906106329190612d01565b611139565b6040516106449190612d5c565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190612d01565b611206565b6040516106819190612d5c565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612ecf565b611224565b005b3480156106bf57600080fd5b506106da60048036038101906106d59190612ecf565b61137b565b6040516106e79190612d5c565b60405180910390f35b3480156106fc57600080fd5b5061070561139b565b6040516107129190612d5c565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612ecf565b6113ae565b60405161074f9190612d5c565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612f51565b6113ce565b005b34801561078d57600080fd5b506107a860048036038101906107a39190612f51565b61150e565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190612f91565b611600565b6040516107de9190612e00565b60405180910390f35b3480156107f357600080fd5b506107fc611687565b6040516108099190612e00565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190612ecf565b61168d565b005b34801561084757600080fd5b50610850611854565b60405161085d9190612e00565b60405180910390f35b60606003805461087590613000565b80601f01602080910402602001604051908101604052809291908181526020018280546108a190613000565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b600061090c610905611972565b848461197a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610951848484611b45565b610a128461095d611972565b610a0d85604051806060016040528060288152602001613b9d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c3611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b61197a565b600190509392505050565b60006012905090565b6000610acf610a33611972565b84610aca8560016000610a44611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461191490919063ffffffff16565b61197a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bb6611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061307e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060199050600061012c60105442610d4691906130cd565b610d509190613130565b90506000829050828211610d71578183610d6a91906130cd565b9050610d76565b600490505b80935050505090565b600a6020528060005260406000206000915090505481565b610d9f611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e259061307e565b60405180910390fd5b600e60009054906101000a900460ff1615610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906131ad565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff02191690831515021790555043600f8190555042601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078060000154908060010154905082565b600080601e9050600061012c60105442610f1a91906130cd565b610f249190613130565b90506000829050828211610f45578183610f3e91906130cd565b9050610f4a565b600490505b80935050505090565b606060048054610f6290613000565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613000565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b61100d611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110939061307e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111229061323f565b60405180910390fd5b6111358282612416565b5050565b60006111fc611146611972565b846111f785604051806060016040528060258152602001613bc56025913960016000611170611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b61197a565b6001905092915050565b600061121a611213611972565b8484611b45565b6001905092915050565b61122c611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061307e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6113d6611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061307e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115029190612d5c565b60405180910390a25050565b611516611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061307e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611695611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b9061307e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906132d1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e64066972000000905060006154606010544261187891906130cd565b6118829190613130565b90506000829050606482116119005760008260026118a09190613424565b6118a861093a565b6118b29190613130565b11156118f0578160146118c59190613424565b836118d0919061346f565b90506118da61093a565b81106118eb576118e861093a565b90505b6118fb565b6118f861093a565b90505b61190b565b61190861093a565b90505b80935050505090565b600080828461192391906134c9565b905083811015611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061356b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061368f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b389190612e00565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90613721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906137b3565b60405180910390fd5b6000811415611c3f57611c3a838360006124b7565b6123ad565b611c47610ec4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611cb55750611c85610ec4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d28575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d415750600560149054906101000a900460ff16155b15611ff657600e60009054906101000a900460ff16611e3b57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dfb5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061381f565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ede5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f4557611eeb611854565b611ef483610b66565b82611eff91906134c9565b1115611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f379061388b565b60405180910390fd5b611ff5565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ff457611f9e611854565b611fa783610b66565b82611fb291906134c9565b1115611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea9061388b565b60405180910390fd5b5b5b5b600061200130610b66565b90506000600d5482101590506000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120c35750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120cd57600090505b6000806120d8610f00565b905060006120e4610d2c565b9050831561222357601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121455750600082115b15612177576121706064612162848a61274c90919063ffffffff16565b6127c790919063ffffffff16565b92506121ff565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121d05750600081115b156121fe576121fb60646121ed838a61274c90919063ffffffff16565b6127c790919063ffffffff16565b92505b5b6000831115612214576122138930856124b7565b5b828761222091906130cd565b96505b84801561223c5750600e60019054906101000a900460ff165b80156122555750600560149054906101000a900460ff16155b80156122ab5750601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123015750601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123575750601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561239b576001600560146101000a81548160ff02191690831515021790555061237f612811565b6000600560146101000a81548160ff0219169083151502179055505b6123a68989896124b7565b5050505050505b505050565b60008383111582906123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19190612c46565b60405180910390fd5b506000838561240991906130cd565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90613721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e906137b3565b60405180910390fd5b6125a28383836128f9565b61260d81604051806060016040528060268152602001613b77602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126a0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461191490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161273f9190612e00565b60405180910390a3505050565b60008083141561275f57600090506127c1565b6000828461276d919061346f565b905082848261277c9190613130565b146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b39061391d565b60405180910390fd5b809150505b92915050565b600061280983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128fe565b905092915050565b600061281c30610b66565b905060008082141561282f5750506128f7565b6014600d5461283e919061346f565b821115612857576014600d54612854919061346f565b91505b600082905061286581612961565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516128ab9061396e565b60006040518083038185875af1925050503d80600081146128e8576040519150601f19603f3d011682016040523d82523d6000602084013e6128ed565b606091505b5050809250505050505b565b505050565b60008083118290612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c9190612c46565b60405180910390fd5b50600083856129549190613130565b9050809150509392505050565b6000600267ffffffffffffffff81111561297e5761297d613983565b5b6040519080825280602002602001820160405280156129ac5781602001602082028036833780820191505090505b50905030816000815181106129c4576129c36139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a6457600080fd5b505afa158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c91906139f6565b81600181518110612ab057612aaf6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b15307f00000000000000000000000000000000000000000000000000000000000000008461197a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b77959493929190613b1c565b600060405180830381600087803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612be7578082015181840152602081019050612bcc565b83811115612bf6576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c1882612bad565b612c228185612bb8565b9350612c32818560208601612bc9565b612c3b81612bfc565b840191505092915050565b60006020820190508181036000830152612c608184612c0d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9882612c6d565b9050919050565b612ca881612c8d565b8114612cb357600080fd5b50565b600081359050612cc581612c9f565b92915050565b6000819050919050565b612cde81612ccb565b8114612ce957600080fd5b50565b600081359050612cfb81612cd5565b92915050565b60008060408385031215612d1857612d17612c68565b5b6000612d2685828601612cb6565b9250506020612d3785828601612cec565b9150509250929050565b60008115159050919050565b612d5681612d41565b82525050565b6000602082019050612d716000830184612d4d565b92915050565b6000819050919050565b6000612d9c612d97612d9284612c6d565b612d77565b612c6d565b9050919050565b6000612dae82612d81565b9050919050565b6000612dc082612da3565b9050919050565b612dd081612db5565b82525050565b6000602082019050612deb6000830184612dc7565b92915050565b612dfa81612ccb565b82525050565b6000602082019050612e156000830184612df1565b92915050565b600080600060608486031215612e3457612e33612c68565b5b6000612e4286828701612cb6565b9350506020612e5386828701612cb6565b9250506040612e6486828701612cec565b9150509250925092565b600060ff82169050919050565b612e8481612e6e565b82525050565b6000602082019050612e9f6000830184612e7b565b92915050565b612eae81612c8d565b82525050565b6000602082019050612ec96000830184612ea5565b92915050565b600060208284031215612ee557612ee4612c68565b5b6000612ef384828501612cb6565b91505092915050565b6000604082019050612f116000830185612df1565b612f1e6020830184612df1565b9392505050565b612f2e81612d41565b8114612f3957600080fd5b50565b600081359050612f4b81612f25565b92915050565b60008060408385031215612f6857612f67612c68565b5b6000612f7685828601612cb6565b9250506020612f8785828601612f3c565b9150509250929050565b60008060408385031215612fa857612fa7612c68565b5b6000612fb685828601612cb6565b9250506020612fc785828601612cb6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061301857607f821691505b6020821081141561302c5761302b612fd1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613068602083612bb8565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130d882612ccb565b91506130e383612ccb565b9250828210156130f6576130f561309e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061313b82612ccb565b915061314683612ccb565b92508261315657613155613101565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b6000613197601183612bb8565b91506131a282613161565b602082019050919050565b600060208201905081810360008301526131c68161318a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613229603983612bb8565b9150613234826131cd565b604082019050919050565b600060208201905081810360008301526132588161321c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132bb602683612bb8565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613348578086048111156133245761332361309e565b5b60018516156133335780820291505b8081029050613341856132f1565b9450613308565b94509492505050565b600082613361576001905061341d565b8161336f576000905061341d565b8160018114613385576002811461338f576133be565b600191505061341d565b60ff8411156133a1576133a061309e565b5b8360020a9150848211156133b8576133b761309e565b5b5061341d565b5060208310610133831016604e8410600b84101617156133f35782820a9050838111156133ee576133ed61309e565b5b61341d565b61340084848460016132fe565b925090508184048111156134175761341661309e565b5b81810290505b9392505050565b600061342f82612ccb565b915061343a83612ccb565b92506134677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613351565b905092915050565b600061347a82612ccb565b915061348583612ccb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134be576134bd61309e565b5b828202905092915050565b60006134d482612ccb565b91506134df83612ccb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135145761351361309e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613555601b83612bb8565b91506135608261351f565b602082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135e7602483612bb8565b91506135f28261358b565b604082019050919050565b60006020820190508181036000830152613616816135da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613679602283612bb8565b91506136848261361d565b604082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061370b602583612bb8565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061379d602383612bb8565b91506137a882613741565b604082019050919050565b600060208201905081810360008301526137cc81613790565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613809601683612bb8565b9150613814826137d3565b602082019050919050565b60006020820190508181036000830152613838816137fc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613875601383612bb8565b91506138808261383f565b602082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613907602183612bb8565b9150613912826138ab565b604082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b600081905092915050565b50565b600061395860008361393d565b915061396382613948565b600082019050919050565b60006139798261394b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139f081612c9f565b92915050565b600060208284031215613a0c57613a0b612c68565b5b6000613a1a848285016139e1565b91505092915050565b6000819050919050565b6000613a48613a43613a3e84613a23565b612d77565b612ccb565b9050919050565b613a5881613a2d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9381612c8d565b82525050565b6000613aa58383613a8a565b60208301905092915050565b6000602082019050919050565b6000613ac982613a5e565b613ad38185613a69565b9350613ade83613a7a565b8060005b83811015613b0f578151613af68882613a99565b9750613b0183613ab1565b925050600181019050613ae2565b5085935050505092915050565b600060a082019050613b316000830188612df1565b613b3e6020830187613a4f565b8181036040830152613b508186613abe565b9050613b5f6060830185612ea5565b613b6c6080830184612df1565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c1d1d56a934148320669f66ca1f90fb91e657395c79a1097865e9724d4d8f76464736f6c63430008090033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80638ffee7851161010d578063b62496f5116100a0578063d2fcc0011161006f578063d2fcc00114610781578063dd62ed3e146107aa578063e2f45605146107e7578063f2fde38b14610812578063f8b45b051461083b57610204565b8063b62496f5146106b3578063bbc0c742146106f0578063bfd792841461071b578063c02466681461075857610204565b80639a7a23d6116100dc5780639a7a23d6146105e7578063a457c2d714610610578063a9059cbb1461064d578063aacebbe31461068a57610204565b80638ffee78514610528578063921369131461055457806395d89b411461057f57806396880b17146105aa57610204565b80634fbee1931161019057806375f0a8741161015f57806375f0a874146104535780637bce5a041461047e5780637f2feddc146104a95780638a8c523c146104e65780638da5cb5b146104fd57610204565b80634fbee193146103975780636ddd1713146103d457806370a08231146103ff578063715018a61461043c57610204565b806323b872dd116101cc57806323b872dd146102c7578063313ce56714610304578063395093511461032f57806349bd5a5e1461036c57610204565b806306fdde0314610209578063095ea7b3146102345780631694505e1461027157806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610866565b60405161022b9190612c46565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612d01565b6108f8565b6040516102689190612d5c565b60405180910390f35b34801561027d57600080fd5b50610286610916565b6040516102939190612dd6565b60405180910390f35b3480156102a857600080fd5b506102b161093a565b6040516102be9190612e00565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612e1b565b610944565b6040516102fb9190612d5c565b60405180910390f35b34801561031057600080fd5b50610319610a1d565b6040516103269190612e8a565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190612d01565b610a26565b6040516103639190612d5c565b60405180910390f35b34801561037857600080fd5b50610381610ad9565b60405161038e9190612eb4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612ecf565b610afd565b6040516103cb9190612d5c565b60405180910390f35b3480156103e057600080fd5b506103e9610b53565b6040516103f69190612d5c565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612ecf565b610b66565b6040516104339190612e00565b60405180910390f35b34801561044857600080fd5b50610451610bae565b005b34801561045f57600080fd5b50610468610d06565b6040516104759190612eb4565b60405180910390f35b34801561048a57600080fd5b50610493610d2c565b6040516104a09190612e00565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612ecf565b610d7f565b6040516104dd9190612e00565b60405180910390f35b3480156104f257600080fd5b506104fb610d97565b005b34801561050957600080fd5b50610512610ec4565b60405161051f9190612eb4565b60405180910390f35b34801561053457600080fd5b5061053d610eee565b60405161054b929190612efc565b60405180910390f35b34801561056057600080fd5b50610569610f00565b6040516105769190612e00565b60405180910390f35b34801561058b57600080fd5b50610594610f53565b6040516105a19190612c46565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190612ecf565b610fe5565b6040516105de9190612d5c565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612f51565b611005565b005b34801561061c57600080fd5b5061063760048036038101906106329190612d01565b611139565b6040516106449190612d5c565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190612d01565b611206565b6040516106819190612d5c565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612ecf565b611224565b005b3480156106bf57600080fd5b506106da60048036038101906106d59190612ecf565b61137b565b6040516106e79190612d5c565b60405180910390f35b3480156106fc57600080fd5b5061070561139b565b6040516107129190612d5c565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612ecf565b6113ae565b60405161074f9190612d5c565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190612f51565b6113ce565b005b34801561078d57600080fd5b506107a860048036038101906107a39190612f51565b61150e565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190612f91565b611600565b6040516107de9190612e00565b60405180910390f35b3480156107f357600080fd5b506107fc611687565b6040516108099190612e00565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190612ecf565b61168d565b005b34801561084757600080fd5b50610850611854565b60405161085d9190612e00565b60405180910390f35b60606003805461087590613000565b80601f01602080910402602001604051908101604052809291908181526020018280546108a190613000565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b600061090c610905611972565b848461197a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610951848484611b45565b610a128461095d611972565b610a0d85604051806060016040528060288152602001613b9d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c3611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b61197a565b600190509392505050565b60006012905090565b6000610acf610a33611972565b84610aca8560016000610a44611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461191490919063ffffffff16565b61197a565b6001905092915050565b7f000000000000000000000000bda2ef4a78d6108730eda49af26b28c1f8c5b36581565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bb6611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061307e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060199050600061012c60105442610d4691906130cd565b610d509190613130565b90506000829050828211610d71578183610d6a91906130cd565b9050610d76565b600490505b80935050505090565b600a6020528060005260406000206000915090505481565b610d9f611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e259061307e565b60405180910390fd5b600e60009054906101000a900460ff1615610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906131ad565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff02191690831515021790555043600f8190555042601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078060000154908060010154905082565b600080601e9050600061012c60105442610f1a91906130cd565b610f249190613130565b90506000829050828211610f45578183610f3e91906130cd565b9050610f4a565b600490505b80935050505090565b606060048054610f6290613000565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613000565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050905090565b60126020528060005260406000206000915054906101000a900460ff1681565b61100d611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110939061307e565b60405180910390fd5b7f000000000000000000000000bda2ef4a78d6108730eda49af26b28c1f8c5b36573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111229061323f565b60405180910390fd5b6111358282612416565b5050565b60006111fc611146611972565b846111f785604051806060016040528060258152602001613bc56025913960016000611170611972565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b61197a565b6001905092915050565b600061121a611213611972565b8484611b45565b6001905092915050565b61122c611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061307e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b6113d6611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c9061307e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115029190612d5c565b60405180910390a25050565b611516611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061307e565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b611695611972565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b9061307e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b906132d1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806a295be96e64066972000000905060006154606010544261187891906130cd565b6118829190613130565b90506000829050606482116119005760008260026118a09190613424565b6118a861093a565b6118b29190613130565b11156118f0578160146118c59190613424565b836118d0919061346f565b90506118da61093a565b81106118eb576118e861093a565b90505b6118fb565b6118f861093a565b90505b61190b565b61190861093a565b90505b80935050505090565b600080828461192391906134c9565b905083811015611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061356b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e1906135fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061368f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b389190612e00565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90613721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906137b3565b60405180910390fd5b6000811415611c3f57611c3a838360006124b7565b6123ad565b611c47610ec4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611cb55750611c85610ec4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d28575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d415750600560149054906101000a900460ff16155b15611ff657600e60009054906101000a900460ff16611e3b57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dfb5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061381f565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ede5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f4557611eeb611854565b611ef483610b66565b82611eff91906134c9565b1115611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f379061388b565b60405180910390fd5b611ff5565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ff457611f9e611854565b611fa783610b66565b82611fb291906134c9565b1115611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea9061388b565b60405180910390fd5b5b5b5b600061200130610b66565b90506000600d5482101590506000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120c35750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120cd57600090505b6000806120d8610f00565b905060006120e4610d2c565b9050831561222357601360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121455750600082115b15612177576121706064612162848a61274c90919063ffffffff16565b6127c790919063ffffffff16565b92506121ff565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121d05750600081115b156121fe576121fb60646121ed838a61274c90919063ffffffff16565b6127c790919063ffffffff16565b92505b5b6000831115612214576122138930856124b7565b5b828761222091906130cd565b96505b84801561223c5750600e60019054906101000a900460ff165b80156122555750600560149054906101000a900460ff16155b80156122ab5750601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123015750601160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123575750601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561239b576001600560146101000a81548160ff02191690831515021790555061237f612811565b6000600560146101000a81548160ff0219169083151502179055505b6123a68989896124b7565b5050505050505b505050565b60008383111582906123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19190612c46565b60405180910390fd5b506000838561240991906130cd565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90613721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e906137b3565b60405180910390fd5b6125a28383836128f9565b61260d81604051806060016040528060268152602001613b77602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126a0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461191490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161273f9190612e00565b60405180910390a3505050565b60008083141561275f57600090506127c1565b6000828461276d919061346f565b905082848261277c9190613130565b146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b39061391d565b60405180910390fd5b809150505b92915050565b600061280983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128fe565b905092915050565b600061281c30610b66565b905060008082141561282f5750506128f7565b6014600d5461283e919061346f565b821115612857576014600d54612854919061346f565b91505b600082905061286581612961565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516128ab9061396e565b60006040518083038185875af1925050503d80600081146128e8576040519150601f19603f3d011682016040523d82523d6000602084013e6128ed565b606091505b5050809250505050505b565b505050565b60008083118290612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c9190612c46565b60405180910390fd5b50600083856129549190613130565b9050809150509392505050565b6000600267ffffffffffffffff81111561297e5761297d613983565b5b6040519080825280602002602001820160405280156129ac5781602001602082028036833780820191505090505b50905030816000815181106129c4576129c36139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612a6457600080fd5b505afa158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c91906139f6565b81600181518110612ab057612aaf6139b2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b15307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461197a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b77959493929190613b1c565b600060405180830381600087803b158015612b9157600080fd5b505af1158015612ba5573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612be7578082015181840152602081019050612bcc565b83811115612bf6576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c1882612bad565b612c228185612bb8565b9350612c32818560208601612bc9565b612c3b81612bfc565b840191505092915050565b60006020820190508181036000830152612c608184612c0d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9882612c6d565b9050919050565b612ca881612c8d565b8114612cb357600080fd5b50565b600081359050612cc581612c9f565b92915050565b6000819050919050565b612cde81612ccb565b8114612ce957600080fd5b50565b600081359050612cfb81612cd5565b92915050565b60008060408385031215612d1857612d17612c68565b5b6000612d2685828601612cb6565b9250506020612d3785828601612cec565b9150509250929050565b60008115159050919050565b612d5681612d41565b82525050565b6000602082019050612d716000830184612d4d565b92915050565b6000819050919050565b6000612d9c612d97612d9284612c6d565b612d77565b612c6d565b9050919050565b6000612dae82612d81565b9050919050565b6000612dc082612da3565b9050919050565b612dd081612db5565b82525050565b6000602082019050612deb6000830184612dc7565b92915050565b612dfa81612ccb565b82525050565b6000602082019050612e156000830184612df1565b92915050565b600080600060608486031215612e3457612e33612c68565b5b6000612e4286828701612cb6565b9350506020612e5386828701612cb6565b9250506040612e6486828701612cec565b9150509250925092565b600060ff82169050919050565b612e8481612e6e565b82525050565b6000602082019050612e9f6000830184612e7b565b92915050565b612eae81612c8d565b82525050565b6000602082019050612ec96000830184612ea5565b92915050565b600060208284031215612ee557612ee4612c68565b5b6000612ef384828501612cb6565b91505092915050565b6000604082019050612f116000830185612df1565b612f1e6020830184612df1565b9392505050565b612f2e81612d41565b8114612f3957600080fd5b50565b600081359050612f4b81612f25565b92915050565b60008060408385031215612f6857612f67612c68565b5b6000612f7685828601612cb6565b9250506020612f8785828601612f3c565b9150509250929050565b60008060408385031215612fa857612fa7612c68565b5b6000612fb685828601612cb6565b9250506020612fc785828601612cb6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061301857607f821691505b6020821081141561302c5761302b612fd1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613068602083612bb8565b915061307382613032565b602082019050919050565b600060208201905081810360008301526130978161305b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130d882612ccb565b91506130e383612ccb565b9250828210156130f6576130f561309e565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061313b82612ccb565b915061314683612ccb565b92508261315657613155613101565b5b828204905092915050565b7f54726164696e6720697320616374697665000000000000000000000000000000600082015250565b6000613197601183612bb8565b91506131a282613161565b602082019050919050565b600060208201905081810360008301526131c68161318a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613229603983612bb8565b9150613234826131cd565b604082019050919050565b600060208201905081810360008301526132588161321c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132bb602683612bb8565b91506132c68261325f565b604082019050919050565b600060208201905081810360008301526132ea816132ae565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613348578086048111156133245761332361309e565b5b60018516156133335780820291505b8081029050613341856132f1565b9450613308565b94509492505050565b600082613361576001905061341d565b8161336f576000905061341d565b8160018114613385576002811461338f576133be565b600191505061341d565b60ff8411156133a1576133a061309e565b5b8360020a9150848211156133b8576133b761309e565b5b5061341d565b5060208310610133831016604e8410600b84101617156133f35782820a9050838111156133ee576133ed61309e565b5b61341d565b61340084848460016132fe565b925090508184048111156134175761341661309e565b5b81810290505b9392505050565b600061342f82612ccb565b915061343a83612ccb565b92506134677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613351565b905092915050565b600061347a82612ccb565b915061348583612ccb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134be576134bd61309e565b5b828202905092915050565b60006134d482612ccb565b91506134df83612ccb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135145761351361309e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613555601b83612bb8565b91506135608261351f565b602082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135e7602483612bb8565b91506135f28261358b565b604082019050919050565b60006020820190508181036000830152613616816135da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613679602283612bb8565b91506136848261361d565b604082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061370b602583612bb8565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061379d602383612bb8565b91506137a882613741565b604082019050919050565b600060208201905081810360008301526137cc81613790565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613809601683612bb8565b9150613814826137d3565b602082019050919050565b60006020820190508181036000830152613838816137fc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613875601383612bb8565b91506138808261383f565b602082019050919050565b600060208201905081810360008301526138a481613868565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613907602183612bb8565b9150613912826138ab565b604082019050919050565b60006020820190508181036000830152613936816138fa565b9050919050565b600081905092915050565b50565b600061395860008361393d565b915061396382613948565b600082019050919050565b60006139798261394b565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506139f081612c9f565b92915050565b600060208284031215613a0c57613a0b612c68565b5b6000613a1a848285016139e1565b91505092915050565b6000819050919050565b6000613a48613a43613a3e84613a23565b612d77565b612ccb565b9050919050565b613a5881613a2d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9381612c8d565b82525050565b6000613aa58383613a8a565b60208301905092915050565b6000602082019050919050565b6000613ac982613a5e565b613ad38185613a69565b9350613ade83613a7a565b8060005b83811015613b0f578151613af68882613a99565b9750613b0183613ab1565b925050600181019050613ae2565b5085935050505092915050565b600060a082019050613b316000830188612df1565b613b3e6020830187613a4f565b8181036040830152613b508186613abe565b9050613b5f6060830185612ea5565b613b6c6080830184612df1565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c1d1d56a934148320669f66ca1f90fb91e657395c79a1097865e9724d4d8f76464736f6c63430008090033
Deployed Bytecode Sourcemap
29394:9388:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9666:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29576:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8615:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10318:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8456:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11083:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29634:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35100:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30216:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8787:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:148;;;;;;;;;;;;;:::i;:::-;;29710:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33055:364;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29874:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33855:238;;;;;;;;;;;;;:::i;:::-;;21350:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29749:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33426:373;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7712:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30497:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34436:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11805:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9128:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34882:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30715:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30176:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29836:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34245:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34102:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9367:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30133:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22298:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32475:573;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7492:100;7546:13;7579:5;7572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7492:100;:::o;9666:169::-;9749:4;9766:39;9775:12;:10;:12::i;:::-;9789:7;9798:6;9766:8;:39::i;:::-;9823:4;9816:11;;9666:169;;;;:::o;29576:51::-;;;:::o;8615:108::-;8676:7;8703:12;;8696:19;;8615:108;:::o;10318:355::-;10458:4;10475:36;10485:6;10493:9;10504:6;10475:9;:36::i;:::-;10522:121;10531:6;10539:12;:10;:12::i;:::-;10553:89;10591:6;10553:89;;;;;;;;;;;;;;;;;:11;:19;10565:6;10553:19;;;;;;;;;;;;;;;:33;10573:12;:10;:12::i;:::-;10553:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10522:8;:121::i;:::-;10661:4;10654:11;;10318:355;;;;;:::o;8456:93::-;8514:5;8539:2;8532:9;;8456:93;:::o;11083:218::-;11171:4;11188:83;11197:12;:10;:12::i;:::-;11211:7;11220:50;11259:10;11220:11;:25;11232:12;:10;:12::i;:::-;11220:25;;;;;;;;;;;;;;;:34;11246:7;11220:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11188:8;:83::i;:::-;11289:4;11282:11;;11083:218;;;;:::o;29634:38::-;;;:::o;35100:125::-;35165:4;35189:19;:28;35209:7;35189:28;;;;;;;;;;;;;;;;;;;;;;;;;35182:35;;35100:125;;;:::o;30216:31::-;;;;;;;;;;;;;:::o;8787:127::-;8861:7;8888:9;:18;8898:7;8888:18;;;;;;;;;;;;;;;;8881:25;;8787:127;;;:::o;21994:148::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1:::1;22064:40;;22085:6;;;;;;;;;;;22064:40;;;;;;;;;;;;22132:1;22115:6;;:19;;;;;;;;;;;;;;;;;;21994:148::o:0;29710:30::-;;;;;;;;;;;;;:::o;33055:364::-;33102:7;33122:22;33147:2;33122:27;;33160:18;33216:9;33200:12;;33182:15;:30;;;;:::i;:::-;33181:44;;;;:::i;:::-;33160:65;;33230:15;33248:14;33230:32;;33288:14;33274:10;:28;33271:110;;33336:10;33319:14;:27;;;;:::i;:::-;33309:37;;33271:110;;;33374:1;33364:11;;33271:110;33404:7;33397:14;;;;;33055:364;:::o;29874:43::-;;;;;;;;;;;;;;;;;:::o;33855:238::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33919:13:::1;;;;;;;;;;;33918:14;33910:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33975:4;33959:13;;:20;;;;;;;;;;;;;;;;;;34004:4;33990:11;;:18;;;;;;;;;;;;;;;;;;34032:12;34019:10;:25;;;;34070:15;34055:12;:30;;;;33855:238::o:0;21350:79::-;21388:7;21415:6;;;;;;;;;;;21408:13;;21350:79;:::o;29749:45::-;;;;;;;;;;;;;;:::o;33426:373::-;33474:7;33494:23;33520:2;33494:28;;33533:18;33589:9;33573:12;;33555:15;:30;;;;:::i;:::-;33554:44;;;;:::i;:::-;33533:65;;33603:16;33622:15;33603:34;;33663:15;33649:10;:29;33646:114;;33714:10;33696:15;:28;;;;:::i;:::-;33685:39;;33646:114;;;33753:1;33742:12;;33646:114;33783:8;33776:15;;;;;33426:373;:::o;7712:104::-;7768:13;7801:7;7794:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7712:104;:::o;30497:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;34436:242::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34543:13:::1;34535:21;;:4;:21;;;;34527:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34629:41;34658:4;34664:5;34629:28;:41::i;:::-;34436:242:::0;;:::o;11805:269::-;11898:4;11915:129;11924:12;:10;:12::i;:::-;11938:7;11947:96;11986:15;11947:96;;;;;;;;;;;;;;;;;:11;:25;11959:12;:10;:12::i;:::-;11947:25;;;;;;;;;;;;;;;:34;11973:7;11947:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11915:8;:129::i;:::-;12062:4;12055:11;;11805:269;;;;:::o;9128:175::-;9214:4;9231:42;9241:12;:10;:12::i;:::-;9255:9;9266:6;9231:9;:42::i;:::-;9291:4;9284:11;;9128:175;;;;:::o;34882:208::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35019:15:::1;;;;;;;;;;;34976:59;;34999:18;34976:59;;;;;;;;;;;;35064:18;35046:15;;:36;;;;;;;;;;;;;;;;;;34882:208:::0;:::o;30715:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30176:33::-;;;;;;;;;;;;;:::o;29836:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;34245:182::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34361:8:::1;34330:19;:28;34350:7;34330:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34401:7;34385:34;;;34410:8;34385:34;;;;;;:::i;:::-;;;;;;;;34245:182:::0;;:::o;34102:134::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34224:4:::1;34187:26;:34;34214:6;34187:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;34102:134:::0;;:::o;9367:151::-;9456:7;9483:11;:18;9495:5;9483:18;;;;;;;;;;;;;;;:27;9502:7;9483:27;;;;;;;;;;;;;;;;9476:34;;9367:151;;;;:::o;30133:33::-;;;;:::o;22298:244::-;21573:12;:10;:12::i;:::-;21563:22;;:6;;;;;;;;;;;:22;;;21555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22407:1:::1;22387:22;;:8;:22;;;;22379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22497:8;22468:38;;22489:6;;;;;;;;;;;22468:38;;;;;;;;;;;;22526:8;22517:6;;:17;;;;;;;;;;;;;;;;;;22298:244:::0;:::o;32475:573::-;32516:7;32536:25;32564:15;32536:43;;32584:18;32640:7;32624:12;;32606:15;:30;;;;:::i;:::-;32605:42;;;;:::i;:::-;32584:63;;32652:18;32673:17;32652:38;;32716:3;32702:10;:17;32699:310;;32763:1;32749:10;32746:1;:13;;;;:::i;:::-;32729;:11;:13::i;:::-;:31;;;;:::i;:::-;:35;32726:233;;;32809:10;32805:2;:14;;;;:::i;:::-;32785:17;:34;;;;:::i;:::-;32772:47;;32849:13;:11;:13::i;:::-;32835:10;:27;32832:74;;32885:13;:11;:13::i;:::-;32871:27;;32832:74;32726:233;;;32939:13;:11;:13::i;:::-;32925:27;;32726:233;32699:310;;;32990:13;:11;:13::i;:::-;32976:27;;32699:310;33030:10;33023:17;;;;;32475:573;:::o;16382:182::-;16440:7;16460:9;16476:1;16472;:5;;;;:::i;:::-;16460:17;;16501:1;16496;:6;;16488:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16555:1;16548:8;;;16382:182;;;;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;15001:381::-;15154:1;15137:19;;:5;:19;;;;15129:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15235:1;15216:21;;:7;:21;;;;15208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15320:6;15290:11;:18;15302:5;15290:18;;;;;;;;;;;;;;;:27;15309:7;15290:27;;;;;;;;;;;;;;;:36;;;;15358:7;15342:32;;15351:5;15342:32;;;15367:6;15342:32;;;;;;:::i;:::-;;;;;;;;15001:381;;;:::o;35234:2433::-;35382:1;35366:18;;:4;:18;;;;35358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35459:1;35445:16;;:2;:16;;;;35437:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35526:1;35516:6;:11;35513:92;;;35544:28;35560:4;35566:2;35570:1;35544:15;:28::i;:::-;35587:7;;35513:92;35639:7;:5;:7::i;:::-;35631:15;;:4;:15;;;;:36;;;;;35660:7;:5;:7::i;:::-;35654:13;;:2;:13;;;;35631:36;:60;;;;;35689:1;35675:16;;:2;:16;;;;35631:60;:89;;;;;35713:6;35699:21;;:2;:21;;;;35631:89;:106;;;;;35729:8;;;;;;;;;;;35728:9;35631:106;35622:552;;;35752:13;;;;;;;;;;;35748:119;;35781:19;:25;35801:4;35781:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35810:19;:23;35830:2;35810:23;;;;;;;;;;;;;;;;;;;;;;;;;35781:52;35773:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35748:119;35893:25;:31;35919:4;35893:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;35929:26;:30;35956:2;35929:30;;;;;;;;;;;;;;;;;;;;;;;;;35928:31;35893:66;35889:280;;;36003:11;:9;:11::i;:::-;35986:13;35996:2;35986:9;:13::i;:::-;35977:6;:22;;;;:::i;:::-;:37;;35969:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35889:280;;;36055:26;:30;36082:2;36055:30;;;;;;;;;;;;;;;;;;;;;;;;;36051:118;;36127:11;:9;:11::i;:::-;36110:13;36120:2;36110:9;:13::i;:::-;36101:6;:22;;;;:::i;:::-;:37;;36093:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36051:118;35889:280;35622:552;36180:28;36211:24;36229:4;36211:9;:24::i;:::-;36180:55;;36246:12;36285:18;;36261:20;:42;;36246:57;;36308:12;36324:8;;;;;;;;;;;36323:9;36308:24;;36434:19;:25;36454:4;36434:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36463:19;:23;36483:2;36463:23;;;;;;;;;;;;;;;;;;;;;;;;;36434:52;36431:99;;;36513:5;36503:15;;36431:99;36543:12;36570:25;36598:18;:16;:18::i;:::-;36570:46;;36627:24;36654:17;:15;:17::i;:::-;36627:44;;36763:7;36760:517;;;36814:25;:29;36840:2;36814:29;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;36867:1;36847:17;:21;36814:54;36810:317;;;36895:38;36929:3;36895:29;36906:17;36895:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;36888:45;;36810:317;;;36994:25;:31;37020:4;36994:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;37048:1;37029:16;:20;36994:55;36991:136;;;37074:37;37107:3;37074:28;37085:16;37074:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;37067:44;;36991:136;36810:317;37154:1;37147:4;:8;37144:93;;;37179:42;37195:4;37209;37216;37179:15;:42::i;:::-;37144:93;37261:4;37251:14;;;;;:::i;:::-;;;36760:517;37309:7;:35;;;;;37333:11;;;;;;;;;;;37309:35;:61;;;;;37362:8;;;;;;;;;;;37361:9;37309:61;:110;;;;;37388:25;:31;37414:4;37388:31;;;;;;;;;;;;;;;;;;;;;;;;;37387:32;37309:110;:153;;;;;37437:19;:25;37457:4;37437:25;;;;;;;;;;;;;;;;;;;;;;;;;37436:26;37309:153;:194;;;;;37480:19;:23;37500:2;37480:23;;;;;;;;;;;;;;;;;;;;;;;;;37479:24;37309:194;37291:322;;;37541:4;37530:8;;:15;;;;;;;;;;;;;;;;;;37560:10;:8;:10::i;:::-;37596:5;37585:8;;:16;;;;;;;;;;;;;;;;;;37291:322;37626:33;37642:4;37648:2;37652:6;37626:15;:33::i;:::-;35347:2320;;;;;;35234:2433;;;;:::o;17288:193::-;17374:7;17407:1;17402;:6;;17410:12;17394:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17434:9;17450:1;17446;:5;;;;:::i;:::-;17434:17;;17472:1;17465:8;;;17288:193;;;;;:::o;34687:186::-;34804:5;34770:25;:31;34796:4;34770:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34859:5;34825:40;;34853:4;34825:40;;;;;;;;;;;;34687:186;;:::o;12565:575::-;12723:1;12705:20;;:6;:20;;;;12697:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12807:1;12786:23;;:9;:23;;;;12778:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12863:47;12884:6;12892:9;12903:6;12863:20;:47::i;:::-;12944:71;12966:6;12944:71;;;;;;;;;;;;;;;;;:9;:17;12954:6;12944:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12924:9;:17;12934:6;12924:17;;;;;;;;;;;;;;;:91;;;;13049:32;13074:6;13049:9;:20;13059:9;13049:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13026:9;:20;13036:9;13026:20;;;;;;;;;;;;;;;:55;;;;13114:9;13097:35;;13106:6;13097:35;;;13125:6;13097:35;;;;;;:::i;:::-;;;;;;;;12565:575;;;:::o;17741:473::-;17799:7;18049:1;18044;:6;18040:47;;;18074:1;18067:8;;;;18040:47;18100:9;18116:1;18112;:5;;;;:::i;:::-;18100:17;;18145:1;18140;18136;:5;;;;:::i;:::-;:10;18128:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18205:1;18198:8;;;17741:473;;;;;:::o;18691:132::-;18749:7;18776:39;18780:1;18783;18776:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18769:46;;18691:132;;;;:::o;38283:494::-;38322:23;38348:24;38366:4;38348:9;:24::i;:::-;38322:50;;38383:12;38431:1;38412:15;:20;38409:34;;;38435:7;;;;38409:34;38498:2;38477:18;;:23;;;;:::i;:::-;38459:15;:41;38456:111;;;38553:2;38532:18;;:23;;;;:::i;:::-;38514:41;;38456:111;38580:26;38609:15;38580:44;;38635:36;38652:18;38635:16;:36::i;:::-;38714:15;;;;;;;;;;;38706:29;;38743:21;38706:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38693:76;;;;;38311:466;;;38283:494;:::o;15986:125::-;;;;:::o;19320:279::-;19406:7;19438:1;19434;:5;19441:12;19426:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19465:9;19481:1;19477;:5;;;;:::i;:::-;19465:17;;19590:1;19583:8;;;19320:279;;;;;:::o;37676:597::-;37805:21;37843:1;37829:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37805:40;;37874:4;37856;37861:1;37856:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37900:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37890:4;37895:1;37890:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37936:62;37953:4;37968:15;37986:11;37936:8;:62::i;:::-;38038:15;:66;;;38119:11;38145:1;38189:4;38216;38236:15;38038:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37731:542;37676:597;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:86::-;5484:7;5524:4;5517:5;5513:16;5502:27;;5449:86;;;:::o;5541:112::-;5624:22;5640:5;5624:22;:::i;:::-;5619:3;5612:35;5541:112;;:::o;5659:214::-;5748:4;5786:2;5775:9;5771:18;5763:26;;5799:67;5863:1;5852:9;5848:17;5839:6;5799:67;:::i;:::-;5659:214;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:332::-;6687:4;6725:2;6714:9;6710:18;6702:26;;6738:71;6806:1;6795:9;6791:17;6782:6;6738:71;:::i;:::-;6819:72;6887:2;6876:9;6872:18;6863:6;6819:72;:::i;:::-;6566:332;;;;;:::o;6904:116::-;6974:21;6989:5;6974:21;:::i;:::-;6967:5;6964:32;6954:60;;7010:1;7007;7000:12;6954:60;6904:116;:::o;7026:133::-;7069:5;7107:6;7094:20;7085:29;;7123:30;7147:5;7123:30;:::i;:::-;7026:133;;;;:::o;7165:468::-;7230:6;7238;7287:2;7275:9;7266:7;7262:23;7258:32;7255:119;;;7293:79;;:::i;:::-;7255:119;7413:1;7438:53;7483:7;7474:6;7463:9;7459:22;7438:53;:::i;:::-;7428:63;;7384:117;7540:2;7566:50;7608:7;7599:6;7588:9;7584:22;7566:50;:::i;:::-;7556:60;;7511:115;7165:468;;;;;:::o;7639:474::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:53;8088:7;8079:6;8068:9;8064:22;8043:53;:::i;:::-;8033:63;;7988:118;7639:474;;;;;:::o;8119:180::-;8167:77;8164:1;8157:88;8264:4;8261:1;8254:15;8288:4;8285:1;8278:15;8305:320;8349:6;8386:1;8380:4;8376:12;8366:22;;8433:1;8427:4;8423:12;8454:18;8444:81;;8510:4;8502:6;8498:17;8488:27;;8444:81;8572:2;8564:6;8561:14;8541:18;8538:38;8535:84;;;8591:18;;:::i;:::-;8535:84;8356:269;8305:320;;;:::o;8631:182::-;8771:34;8767:1;8759:6;8755:14;8748:58;8631:182;:::o;8819:366::-;8961:3;8982:67;9046:2;9041:3;8982:67;:::i;:::-;8975:74;;9058:93;9147:3;9058:93;:::i;:::-;9176:2;9171:3;9167:12;9160:19;;8819:366;;;:::o;9191:419::-;9357:4;9395:2;9384:9;9380:18;9372:26;;9444:9;9438:4;9434:20;9430:1;9419:9;9415:17;9408:47;9472:131;9598:4;9472:131;:::i;:::-;9464:139;;9191:419;;;:::o;9616:180::-;9664:77;9661:1;9654:88;9761:4;9758:1;9751:15;9785:4;9782:1;9775:15;9802:191;9842:4;9862:20;9880:1;9862:20;:::i;:::-;9857:25;;9896:20;9914:1;9896:20;:::i;:::-;9891:25;;9935:1;9932;9929:8;9926:34;;;9940:18;;:::i;:::-;9926:34;9985:1;9982;9978:9;9970:17;;9802:191;;;;:::o;9999:180::-;10047:77;10044:1;10037:88;10144:4;10141:1;10134:15;10168:4;10165:1;10158:15;10185:185;10225:1;10242:20;10260:1;10242:20;:::i;:::-;10237:25;;10276:20;10294:1;10276:20;:::i;:::-;10271:25;;10315:1;10305:35;;10320:18;;:::i;:::-;10305:35;10362:1;10359;10355:9;10350:14;;10185:185;;;;:::o;10376:167::-;10516:19;10512:1;10504:6;10500:14;10493:43;10376:167;:::o;10549:366::-;10691:3;10712:67;10776:2;10771:3;10712:67;:::i;:::-;10705:74;;10788:93;10877:3;10788:93;:::i;:::-;10906:2;10901:3;10897:12;10890:19;;10549:366;;;:::o;10921:419::-;11087:4;11125:2;11114:9;11110:18;11102:26;;11174:9;11168:4;11164:20;11160:1;11149:9;11145:17;11138:47;11202:131;11328:4;11202:131;:::i;:::-;11194:139;;10921:419;;;:::o;11346:244::-;11486:34;11482:1;11474:6;11470:14;11463:58;11555:27;11550:2;11542:6;11538:15;11531:52;11346:244;:::o;11596:366::-;11738:3;11759:67;11823:2;11818:3;11759:67;:::i;:::-;11752:74;;11835:93;11924:3;11835:93;:::i;:::-;11953:2;11948:3;11944:12;11937:19;;11596:366;;;:::o;11968:419::-;12134:4;12172:2;12161:9;12157:18;12149:26;;12221:9;12215:4;12211:20;12207:1;12196:9;12192:17;12185:47;12249:131;12375:4;12249:131;:::i;:::-;12241:139;;11968:419;;;:::o;12393:225::-;12533:34;12529:1;12521:6;12517:14;12510:58;12602:8;12597:2;12589:6;12585:15;12578:33;12393:225;:::o;12624:366::-;12766:3;12787:67;12851:2;12846:3;12787:67;:::i;:::-;12780:74;;12863:93;12952:3;12863:93;:::i;:::-;12981:2;12976:3;12972:12;12965:19;;12624:366;;;:::o;12996:419::-;13162:4;13200:2;13189:9;13185:18;13177:26;;13249:9;13243:4;13239:20;13235:1;13224:9;13220:17;13213:47;13277:131;13403:4;13277:131;:::i;:::-;13269:139;;12996:419;;;:::o;13421:102::-;13463:8;13510:5;13507:1;13503:13;13482:34;;13421:102;;;:::o;13529:848::-;13590:5;13597:4;13621:6;13612:15;;13645:5;13636:14;;13659:712;13680:1;13670:8;13667:15;13659:712;;;13775:4;13770:3;13766:14;13760:4;13757:24;13754:50;;;13784:18;;:::i;:::-;13754:50;13834:1;13824:8;13820:16;13817:451;;;14249:4;14242:5;14238:16;14229:25;;13817:451;14299:4;14293;14289:15;14281:23;;14329:32;14352:8;14329:32;:::i;:::-;14317:44;;13659:712;;;13529:848;;;;;;;:::o;14383:1073::-;14437:5;14628:8;14618:40;;14649:1;14640:10;;14651:5;;14618:40;14677:4;14667:36;;14694:1;14685:10;;14696:5;;14667:36;14763:4;14811:1;14806:27;;;;14847:1;14842:191;;;;14756:277;;14806:27;14824:1;14815:10;;14826:5;;;14842:191;14887:3;14877:8;14874:17;14871:43;;;14894:18;;:::i;:::-;14871:43;14943:8;14940:1;14936:16;14927:25;;14978:3;14971:5;14968:14;14965:40;;;14985:18;;:::i;:::-;14965:40;15018:5;;;14756:277;;15142:2;15132:8;15129:16;15123:3;15117:4;15114:13;15110:36;15092:2;15082:8;15079:16;15074:2;15068:4;15065:12;15061:35;15045:111;15042:246;;;15198:8;15192:4;15188:19;15179:28;;15233:3;15226:5;15223:14;15220:40;;;15240:18;;:::i;:::-;15220:40;15273:5;;15042:246;15313:42;15351:3;15341:8;15335:4;15332:1;15313:42;:::i;:::-;15298:57;;;;15387:4;15382:3;15378:14;15371:5;15368:25;15365:51;;;15396:18;;:::i;:::-;15365:51;15445:4;15438:5;15434:16;15425:25;;14383:1073;;;;;;:::o;15462:285::-;15522:5;15546:23;15564:4;15546:23;:::i;:::-;15538:31;;15590:27;15608:8;15590:27;:::i;:::-;15578:39;;15636:104;15673:66;15663:8;15657:4;15636:104;:::i;:::-;15627:113;;15462:285;;;;:::o;15753:348::-;15793:7;15816:20;15834:1;15816:20;:::i;:::-;15811:25;;15850:20;15868:1;15850:20;:::i;:::-;15845:25;;16038:1;15970:66;15966:74;15963:1;15960:81;15955:1;15948:9;15941:17;15937:105;15934:131;;;16045:18;;:::i;:::-;15934:131;16093:1;16090;16086:9;16075:20;;15753:348;;;;:::o;16107:305::-;16147:3;16166:20;16184:1;16166:20;:::i;:::-;16161:25;;16200:20;16218:1;16200:20;:::i;:::-;16195:25;;16354:1;16286:66;16282:74;16279:1;16276:81;16273:107;;;16360:18;;:::i;:::-;16273:107;16404:1;16401;16397:9;16390:16;;16107:305;;;;:::o;16418:177::-;16558:29;16554:1;16546:6;16542:14;16535:53;16418:177;:::o;16601:366::-;16743:3;16764:67;16828:2;16823:3;16764:67;:::i;:::-;16757:74;;16840:93;16929:3;16840:93;:::i;:::-;16958:2;16953:3;16949:12;16942:19;;16601:366;;;:::o;16973:419::-;17139:4;17177:2;17166:9;17162:18;17154:26;;17226:9;17220:4;17216:20;17212:1;17201:9;17197:17;17190:47;17254:131;17380:4;17254:131;:::i;:::-;17246:139;;16973:419;;;:::o;17398:223::-;17538:34;17534:1;17526:6;17522:14;17515:58;17607:6;17602:2;17594:6;17590:15;17583:31;17398:223;:::o;17627:366::-;17769:3;17790:67;17854:2;17849:3;17790:67;:::i;:::-;17783:74;;17866:93;17955:3;17866:93;:::i;:::-;17984:2;17979:3;17975:12;17968:19;;17627:366;;;:::o;17999:419::-;18165:4;18203:2;18192:9;18188:18;18180:26;;18252:9;18246:4;18242:20;18238:1;18227:9;18223:17;18216:47;18280:131;18406:4;18280:131;:::i;:::-;18272:139;;17999:419;;;:::o;18424:221::-;18564:34;18560:1;18552:6;18548:14;18541:58;18633:4;18628:2;18620:6;18616:15;18609:29;18424:221;:::o;18651:366::-;18793:3;18814:67;18878:2;18873:3;18814:67;:::i;:::-;18807:74;;18890:93;18979:3;18890:93;:::i;:::-;19008:2;19003:3;18999:12;18992:19;;18651:366;;;:::o;19023:419::-;19189:4;19227:2;19216:9;19212:18;19204:26;;19276:9;19270:4;19266:20;19262:1;19251:9;19247:17;19240:47;19304:131;19430:4;19304:131;:::i;:::-;19296:139;;19023:419;;;:::o;19448:224::-;19588:34;19584:1;19576:6;19572:14;19565:58;19657:7;19652:2;19644:6;19640:15;19633:32;19448:224;:::o;19678:366::-;19820:3;19841:67;19905:2;19900:3;19841:67;:::i;:::-;19834:74;;19917:93;20006:3;19917:93;:::i;:::-;20035:2;20030:3;20026:12;20019:19;;19678:366;;;:::o;20050:419::-;20216:4;20254:2;20243:9;20239:18;20231:26;;20303:9;20297:4;20293:20;20289:1;20278:9;20274:17;20267:47;20331:131;20457:4;20331:131;:::i;:::-;20323:139;;20050:419;;;:::o;20475:222::-;20615:34;20611:1;20603:6;20599:14;20592:58;20684:5;20679:2;20671:6;20667:15;20660:30;20475:222;:::o;20703:366::-;20845:3;20866:67;20930:2;20925:3;20866:67;:::i;:::-;20859:74;;20942:93;21031:3;20942:93;:::i;:::-;21060:2;21055:3;21051:12;21044:19;;20703:366;;;:::o;21075:419::-;21241:4;21279:2;21268:9;21264:18;21256:26;;21328:9;21322:4;21318:20;21314:1;21303:9;21299:17;21292:47;21356:131;21482:4;21356:131;:::i;:::-;21348:139;;21075:419;;;:::o;21500:172::-;21640:24;21636:1;21628:6;21624:14;21617:48;21500:172;:::o;21678:366::-;21820:3;21841:67;21905:2;21900:3;21841:67;:::i;:::-;21834:74;;21917:93;22006:3;21917:93;:::i;:::-;22035:2;22030:3;22026:12;22019:19;;21678:366;;;:::o;22050:419::-;22216:4;22254:2;22243:9;22239:18;22231:26;;22303:9;22297:4;22293:20;22289:1;22278:9;22274:17;22267:47;22331:131;22457:4;22331:131;:::i;:::-;22323:139;;22050:419;;;:::o;22475:169::-;22615:21;22611:1;22603:6;22599:14;22592:45;22475:169;:::o;22650:366::-;22792:3;22813:67;22877:2;22872:3;22813:67;:::i;:::-;22806:74;;22889:93;22978:3;22889:93;:::i;:::-;23007:2;23002:3;22998:12;22991:19;;22650:366;;;:::o;23022:419::-;23188:4;23226:2;23215:9;23211:18;23203:26;;23275:9;23269:4;23265:20;23261:1;23250:9;23246:17;23239:47;23303:131;23429:4;23303:131;:::i;:::-;23295:139;;23022:419;;;:::o;23447:220::-;23587:34;23583:1;23575:6;23571:14;23564:58;23656:3;23651:2;23643:6;23639:15;23632:28;23447:220;:::o;23673:366::-;23815:3;23836:67;23900:2;23895:3;23836:67;:::i;:::-;23829:74;;23912:93;24001:3;23912:93;:::i;:::-;24030:2;24025:3;24021:12;24014:19;;23673:366;;;:::o;24045:419::-;24211:4;24249:2;24238:9;24234:18;24226:26;;24298:9;24292:4;24288:20;24284:1;24273:9;24269:17;24262:47;24326:131;24452:4;24326:131;:::i;:::-;24318:139;;24045:419;;;:::o;24470:147::-;24571:11;24608:3;24593:18;;24470:147;;;;:::o;24623:114::-;;:::o;24743:398::-;24902:3;24923:83;25004:1;24999:3;24923:83;:::i;:::-;24916:90;;25015:93;25104:3;25015:93;:::i;:::-;25133:1;25128:3;25124:11;25117:18;;24743:398;;;:::o;25147:379::-;25331:3;25353:147;25496:3;25353:147;:::i;:::-;25346:154;;25517:3;25510:10;;25147:379;;;:::o;25532:180::-;25580:77;25577:1;25570:88;25677:4;25674:1;25667:15;25701:4;25698:1;25691:15;25718:180;25766:77;25763:1;25756:88;25863:4;25860:1;25853:15;25887:4;25884:1;25877:15;25904:143;25961:5;25992:6;25986:13;25977:22;;26008:33;26035:5;26008:33;:::i;:::-;25904:143;;;;:::o;26053:351::-;26123:6;26172:2;26160:9;26151:7;26147:23;26143:32;26140:119;;;26178:79;;:::i;:::-;26140:119;26298:1;26323:64;26379:7;26370:6;26359:9;26355:22;26323:64;:::i;:::-;26313:74;;26269:128;26053:351;;;;:::o;26410:85::-;26455:7;26484:5;26473:16;;26410:85;;;:::o;26501:158::-;26559:9;26592:61;26610:42;26619:32;26645:5;26619:32;:::i;:::-;26610:42;:::i;:::-;26592:61;:::i;:::-;26579:74;;26501:158;;;:::o;26665:147::-;26760:45;26799:5;26760:45;:::i;:::-;26755:3;26748:58;26665:147;;:::o;26818:114::-;26885:6;26919:5;26913:12;26903:22;;26818:114;;;:::o;26938:184::-;27037:11;27071:6;27066:3;27059:19;27111:4;27106:3;27102:14;27087:29;;26938:184;;;;:::o;27128:132::-;27195:4;27218:3;27210:11;;27248:4;27243:3;27239:14;27231:22;;27128:132;;;:::o;27266:108::-;27343:24;27361:5;27343:24;:::i;:::-;27338:3;27331:37;27266:108;;:::o;27380:179::-;27449:10;27470:46;27512:3;27504:6;27470:46;:::i;:::-;27548:4;27543:3;27539:14;27525:28;;27380:179;;;;:::o;27565:113::-;27635:4;27667;27662:3;27658:14;27650:22;;27565:113;;;:::o;27714:732::-;27833:3;27862:54;27910:5;27862:54;:::i;:::-;27932:86;28011:6;28006:3;27932:86;:::i;:::-;27925:93;;28042:56;28092:5;28042:56;:::i;:::-;28121:7;28152:1;28137:284;28162:6;28159:1;28156:13;28137:284;;;28238:6;28232:13;28265:63;28324:3;28309:13;28265:63;:::i;:::-;28258:70;;28351:60;28404:6;28351:60;:::i;:::-;28341:70;;28197:224;28184:1;28181;28177:9;28172:14;;28137:284;;;28141:14;28437:3;28430:10;;27838:608;;;27714:732;;;;:::o;28452:831::-;28715:4;28753:3;28742:9;28738:19;28730:27;;28767:71;28835:1;28824:9;28820:17;28811:6;28767:71;:::i;:::-;28848:80;28924:2;28913:9;28909:18;28900:6;28848:80;:::i;:::-;28975:9;28969:4;28965:20;28960:2;28949:9;28945:18;28938:48;29003:108;29106:4;29097:6;29003:108;:::i;:::-;28995:116;;29121:72;29189:2;29178:9;29174:18;29165:6;29121:72;:::i;:::-;29203:73;29271:3;29260:9;29256:19;29247:6;29203:73;:::i;:::-;28452:831;;;;;;;;:::o
Swarm Source
ipfs://c1d1d56a934148320669f66ca1f90fb91e657395c79a1097865e9724d4d8f764
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.