ERC-20
Blockchain
Overview
Max Total Supply
40,000,000.000000000000002 WPWR
Holders
161 (0.00%)
Market
Price
$0.00 @ 0.000001 ETH (-1.00%)
Onchain Market Cap
$73,093.60
Circulating Supply Market Cap
$478,687.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
wPWR
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-11 */ // 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 wPWR is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public devWallet; address public bridgeAddress; uint256 public swapTokensAtAmount; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public enableEarlySellTax = true; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; // Blacklist Map mapping (address => bool) private _blacklist; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event BridgeMint(address indexed account, uint256 amount); event BridgeBurn(address indexed account, uint256 amount); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event stakeWalletUpdated(address indexed newWallet, address indexed oldWallet); event StakeContractUpdated(address indexed newWallet, address indexed oldWallet); constructor() ERC20("Wrapped PWR", "WPWR") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyDevFee = 2; uint256 _sellDevFee = 2; uint256 totalSupply = 20000000 * 10**18; swapTokensAtAmount = totalSupply * 5 / 10000; buyDevFee = _buyDevFee; buyTotalFees = buyDevFee; sellDevFee = _sellDevFee; sellTotalFees = sellDevFee; devWallet = address(0x5F13287143e9E4eeB8423025C7ad886986af243C); // set as dev wallet bridgeAddress = address(owner()); // set as dev wallet till bridge excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(bridgeAddress), true); _mint(msg.sender, totalSupply); } receive() external payable { } function setMaxxModifier(address account, bool onOrOff) external onlyOwner { _blacklist[account] = onOrOff; } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } function resetLimitsBackIntoEffect() external onlyOwner returns(bool) { limitsInEffect = true; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setEarlySellTax(bool onoff) external onlyOwner { enableEarlySellTax = onoff; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 2 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees( uint256 _devFee) external onlyOwner { buyDevFee = _devFee; buyTotalFees = buyDevFee; require(buyTotalFees <= 11, "Must keep fees at 11% or less"); } function updateSellFees(uint256 _devFee) external onlyOwner { sellDevFee = _devFee; sellTotalFees = sellDevFee; require(sellTotalFees <= 11, "Must keep fees at 11% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function blacklistAccount (address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } 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 updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function updateBridgeContract(address newWallet) external onlyOwner { bridgeAddress = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && to != bridgeAddress && from != bridgeAddress && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } } } // anti bot logic if (block.number <= (launchedAt) && to != uniswapV2Pair && to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ) { _blacklist[to] = true; emit BoughtEarly(to); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; bool walletToWallet = !automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from]; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || walletToWallet) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForDev += fees * sellDevFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForDev += fees * buyDevFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); } function bridgeMint(address user, uint256 amount) external { require(msg.sender == bridgeAddress, "Not Bridge Call"); _mint(user, amount); emit BridgeMint(user, amount); } function bridgeBurn(address user, uint256 amount) external { require(msg.sender == bridgeAddress, "Not Bridge Call"); _burn(user, amount); emit BridgeBurn(user, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BridgeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BridgeMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StakeContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"stakeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bridgeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bridgeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLimitsBackIntoEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"onOrOff","type":"bool"}],"name":"setMaxxModifier","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBridgeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506000600960026101000a81548160ff0219169083151502179055506001600960036101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600b81526020017f57726170706564205057520000000000000000000000000000000000000000008152506040518060400160405280600481526020017f575057520000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d929190620009eb565b50806004908051906020019062000136929190620009eb565b50505060006200014b620005b460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027e57600080fd5b505afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000b05565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031c57600080fd5b505afa15801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000b05565b6040518363ffffffff1660e01b81526004016200037692919062000b48565b602060405180830381600087803b1580156200039157600080fd5b505af1158015620003a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cc919062000b05565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200041460a0516001620005bc60201b60201c565b60006002905060006002905060006a108b2a2c28029094000000905061271060058262000442919062000bae565b6200044e919062000c3e565b60088190555082600f81905550600f54600e8190555081601181905550601154601081905550735f13287143e9e4eeb8423025c7ad886986af243c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004d96200065d60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053b6200052d6200065d60201b60201c565b60016200068760201b60201c565b6200054e3060016200068760201b60201c565b6200056361dead60016200068760201b60201c565b62000598600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200068760201b60201c565b620005aa3382620007d460201b60201c565b5050505062000f07565b600033905090565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000697620005b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000729576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007209062000cd7565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007c8919062000d16565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083e9062000d83565b60405180910390fd5b6200085b600083836200098360201b60201c565b62000877816002546200098860201b6200252f1790919060201c565b600281905550620008d5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200098860201b6200252f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000977919062000db6565b60405180910390a35050565b505050565b600080828462000999919062000dd3565b905083811015620009e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d89062000e80565b60405180910390fd5b8091505092915050565b828054620009f99062000ed1565b90600052602060002090601f01602090048101928262000a1d576000855562000a69565b82601f1062000a3857805160ff191683800117855562000a69565b8280016001018555821562000a69579182015b8281111562000a6857825182559160200191906001019062000a4b565b5b50905062000a78919062000a7c565b5090565b5b8082111562000a9757600081600090555060010162000a7d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000acd8262000aa0565b9050919050565b62000adf8162000ac0565b811462000aeb57600080fd5b50565b60008151905062000aff8162000ad4565b92915050565b60006020828403121562000b1e5762000b1d62000a9b565b5b600062000b2e8482850162000aee565b91505092915050565b62000b428162000ac0565b82525050565b600060408201905062000b5f600083018562000b37565b62000b6e602083018462000b37565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000bbb8262000b75565b915062000bc88362000b75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c045762000c0362000b7f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c4b8262000b75565b915062000c588362000b75565b92508262000c6b5762000c6a62000c0f565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cbf60208362000c76565b915062000ccc8262000c87565b602082019050919050565b6000602082019050818103600083015262000cf28162000cb0565b9050919050565b60008115159050919050565b62000d108162000cf9565b82525050565b600060208201905062000d2d600083018462000d05565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d6b601f8362000c76565b915062000d788262000d33565b602082019050919050565b6000602082019050818103600083015262000d9e8162000d5c565b9050919050565b62000db08162000b75565b82525050565b600060208201905062000dcd600083018462000da5565b92915050565b600062000de08262000b75565b915062000ded8362000b75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e255762000e2462000b7f565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000e68601b8362000c76565b915062000e758262000e30565b602082019050919050565b6000602082019050818103600083015262000e9b8162000e59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eea57607f821691505b6020821081141562000f015762000f0062000ea2565b5b50919050565b60805160a05161527962000f5e6000396000818161113601528181611a0201528181612caf0152612ddb015260008181610d2a01528181612c5701528181613db601528181613ea60152613ecd01526152796000f3fe6080604052600436106102b25760003560e01c80638ea5220f11610175578063b62496f5116100dc578063dd62ed3e11610095578063e884f2601161006f578063e884f26014610ad5578063eba4c33314610b00578063f2fde38b14610b29578063f5ed243014610b52576102b9565b8063dd62ed3e14610a44578063dfa50fd814610a81578063e2f4560514610aaa576102b9565b8063b62496f514610920578063bbc0c7421461095d578063c024666814610988578063c876d0b9146109b1578063d257b34f146109dc578063d85ba06314610a19576102b9565b8063a0d82dc51161012e578063a0d82dc5146107fc578063a265777814610827578063a3c573eb14610850578063a457c2d71461087b578063a4d15b64146108b8578063a9059cbb146108e3576102b9565b80638ea5220f146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639fccce32146107d1576102b9565b80634a62bb651161021957806371fc4688116101d257806371fc46881461061657806374f4f5471461063f578063751039fc146106685780638a8c523c146106935780638c2a993e146106aa5780638da5cb5b146106d3576102b9565b80634a62bb65146105045780634fbee1931461052f5780636a486a8e1461056c5780636ddd17131461059757806370a08231146105c2578063715018a6146105ff576102b9565b80631816467f1161026b5780631816467f146103e257806323b872dd1461040b5780632d5a5d3414610448578063313ce56714610471578063395093511461049c57806349bd5a5e146104d9576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631632b026146103635780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7d565b6040516102e0919061405f565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061411a565b610c0f565b60405161031d9190614175565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190614190565b610c2d565b60405161035a9190614175565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190614190565b610c4d565b005b34801561039857600080fd5b506103a1610d28565b6040516103ae919061421c565b60405180910390f35b3480156103c357600080fd5b506103cc610d4c565b6040516103d99190614246565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190614190565b610d56565b005b34801561041757600080fd5b50610432600480360381019061042d9190614261565b610ead565b60405161043f9190614175565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906142e0565b610f86565b005b34801561047d57600080fd5b50610486611078565b604051610493919061433c565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061411a565b611081565b6040516104d09190614175565b60405180910390f35b3480156104e557600080fd5b506104ee611134565b6040516104fb9190614366565b60405180910390f35b34801561051057600080fd5b50610519611158565b6040516105269190614175565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614190565b61116b565b6040516105639190614175565b60405180910390f35b34801561057857600080fd5b506105816111c1565b60405161058e9190614246565b60405180910390f35b3480156105a357600080fd5b506105ac6111c7565b6040516105b99190614175565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614190565b6111da565b6040516105f69190614246565b60405180910390f35b34801561060b57600080fd5b50610614611222565b005b34801561062257600080fd5b5061063d60048036038101906106389190614381565b61137a565b005b34801561064b57600080fd5b506106666004803603810190610661919061411a565b61146a565b005b34801561067457600080fd5b5061067d611556565b60405161068a9190614175565b60405180910390f35b34801561069f57600080fd5b506106a8611611565b005b3480156106b657600080fd5b506106d160048036038101906106cc919061411a565b6116e7565b005b3480156106df57600080fd5b506106e86117d3565b6040516106f59190614366565b60405180910390f35b34801561070a57600080fd5b506107136117fd565b6040516107209190614366565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906143ae565b611823565b005b34801561075e57600080fd5b506107676118d7565b604051610774919061405f565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142e0565b611969565b005b3480156107b257600080fd5b506107bb611a9d565b6040516107c89190614246565b60405180910390f35b3480156107dd57600080fd5b506107e6611aa3565b6040516107f39190614246565b60405180910390f35b34801561080857600080fd5b50610811611aa9565b60405161081e9190614246565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906143ae565b611aaf565b005b34801561085c57600080fd5b50610865611b63565b6040516108729190614366565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d919061411a565b611b89565b6040516108af9190614175565b60405180910390f35b3480156108c457600080fd5b506108cd611c56565b6040516108da9190614175565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061411a565b611c69565b6040516109179190614175565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190614190565b611c87565b6040516109549190614175565b60405180910390f35b34801561096957600080fd5b50610972611ca7565b60405161097f9190614175565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa91906142e0565b611cba565b005b3480156109bd57600080fd5b506109c6611dfa565b6040516109d39190614175565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190614381565b611e0d565b604051610a109190614175565b60405180910390f35b348015610a2557600080fd5b50610a2e611f7d565b604051610a3b9190614246565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a6691906143db565b611f83565b604051610a789190614246565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa391906142e0565b61200a565b005b348015610ab657600080fd5b50610abf6120fc565b604051610acc9190614246565b60405180910390f35b348015610ae157600080fd5b50610aea612102565b604051610af79190614175565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614381565b6121bd565b005b348015610b3557600080fd5b50610b506004803603810190610b4b9190614190565b6122ad565b005b348015610b5e57600080fd5b50610b67612474565b604051610b749190614175565b60405180910390f35b606060038054610b8c9061444a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb89061444a565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b5050505050905090565b6000610c23610c1c61258d565b8484612595565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b610c5561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906144c8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d5e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de4906144c8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610eba848484612760565b610f7b84610ec661258d565b610f76856040518060600160405280602881526020016151f760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f2c61258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b612595565b600190509392505050565b610f8e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906144c8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600061112a61108e61258d565b84611125856001600061109f61258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b612595565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600960009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600960029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122a61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906144c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61138261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906144c8565b60405180910390fd5b80600f81905550600f54600e81905550600b600e541115611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90614534565b60405180910390fd5b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f1906145a0565b60405180910390fd5b611504828261343d565b8173ffffffffffffffffffffffffffffffffffffffff167f9b5b9a05e4726d8bb959f1440e05c6b8109443f2083bc4e386237d76545265538260405161154a9190614246565b60405180910390a25050565b600061156061258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144c8565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506001905090565b61161961258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906144c8565b60405180910390fd5b6001600960016101000a81548160ff0219169083151502179055506001600960026101000a81548160ff02191690831515021790555043601381905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906145a0565b60405180910390fd5b61178182826135eb565b8173ffffffffffffffffffffffffffffffffffffffff167f397b33b307fc137878ebfc75b295289ec0ee25a31bb5bf034f33256fe8ea2aa6826040516117c79190614246565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182b61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144c8565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b6060600480546118e69061444a565b80601f01602080910402602001604051908101604052809291908181526020018280546119129061444a565b801561195f5780601f106119345761010080835404028352916020019161195f565b820191906000526020600020905b81548152906001019060200180831161194257829003601f168201915b5050505050905090565b61197161258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906144c8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690614632565b60405180910390fd5b611a99828261377f565b5050565b600f5481565b60125481565b60115481565b611ab761258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d906144c8565b60405180910390fd5b80600960036101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c4c611b9661258d565b84611c478560405180606001604052806025815260200161521f6025913960016000611bc061258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b612595565b6001905092915050565b600960039054906101000a900460ff1681565b6000611c7d611c7661258d565b8484612760565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b600960019054906101000a900460ff1681565b611cc261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906144c8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dee9190614175565b60405180910390a25050565b600d60009054906101000a900460ff1681565b6000611e1761258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906144c8565b60405180910390fd5b620186a06002611eb4610d4c565b611ebe9190614681565b611ec8919061470a565b821015611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906147ad565b60405180910390fd5b6103e8600a611f17610d4c565b611f219190614681565b611f2b919061470a565b821115611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f649061483f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61201261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906144c8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b600061210c61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612192906144c8565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6121c561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906144c8565b60405180910390fd5b80601181905550601154601081905550600b60105411156122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614534565b60405180910390fd5b50565b6122b561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b906144c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906148d1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061247e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612504906144c8565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055506001905090565b600080828461253e91906148f1565b905083811015612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614993565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc90614a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614ab7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127539190614246565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614bdb565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128e45750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a90614c6d565b60405180910390fd5b600081141561293d5761293883836000613820565b6133d4565b600960009054906101000a900460ff1615612dcc5761295a6117d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c857506129986117d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aef5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b085750600560149054906101000a900460ff16155b15612dcb57600960019054906101000a900460ff16612c0257601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bc25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614cd9565b60405180910390fd5b5b600d60009054906101000a900460ff1615612dca57612c1f6117d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ca657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfe57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dc95743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7b90614d91565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b6013544311158015612e2a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e765750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f17576001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b6000612f22306111da565b905060006008548210159050808015612f475750600960029054906101000a900460ff165b8015612f605750600560149054906101000a900460ff16155b8015612fb65750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561300c5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130625750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130a6576001600560146101000a81548160ff02191690831515021790555061308a613ab5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff161590506000601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131615750601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132045750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061320c5750805b1561321657600091505b600082156133c357601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327957506000601054115b156132e0576132a6606461329860105489613c0390919063ffffffff16565b613c7e90919063ffffffff16565b9050601054601154826132b99190614681565b6132c3919061470a565b601260008282546132d491906148f1565b9250508190555061339f565b601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333b57506000600e54115b1561339e57613368606461335a600e5489613c0390919063ffffffff16565b613c7e90919063ffffffff16565b9050600e54600f548261337b9190614681565b613385919061470a565b6012600082825461339691906148f1565b925050819055505b5b60008111156133b4576133b3883083613820565b5b80866133c09190614db1565b95505b6133ce888888613820565b50505050505b505050565b6000838311158290613421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613418919061405f565b60405180910390fd5b50600083856134309190614db1565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a490614e57565b60405180910390fd5b6134b982600083613cc8565b613524816040518060600160405280602281526020016151af602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357b81600254613ccd90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135df9190614246565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290614ec3565b60405180910390fd5b61366760008383613cc8565b61367c8160025461252f90919063ffffffff16565b6002819055506136d3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137739190614246565b60405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388790614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f790614bdb565b60405180910390fd5b61390b838383613cc8565b613976816040518060600160405280602681526020016151d1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a09816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aa89190614246565b60405180910390a3505050565b6000613ac0306111da565b905060006012549050600080831480613ad95750600082145b15613ae657505050613c01565b6014600854613af59190614681565b831115613b0e576014600854613b0b9190614681565b92505b60008390506000479050613b2182613d17565b6000613b368247613ccd90919063ffffffff16565b90506000613b6186613b5360125485613c0390919063ffffffff16565b613c7e90919063ffffffff16565b90506000601281905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613bb190614f14565b60006040518083038185875af1925050503d8060008114613bee576040519150601f19603f3d011682016040523d82523d6000602084013e613bf3565b606091505b505080955050505050505050505b565b600080831415613c165760009050613c78565b60008284613c249190614681565b9050828482613c33919061470a565b14613c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6a90614f9b565b60405180910390fd5b809150505b92915050565b6000613cc083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f63565b905092915050565b505050565b6000613d0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133d9565b905092915050565b6000600267ffffffffffffffff811115613d3457613d33614fbb565b5b604051908082528060200260200182016040528015613d625781602001602082028036833780820191505090505b5090503081600081518110613d7a57613d79614fea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e1a57600080fd5b505afa158015613e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e52919061502e565b81600181518110613e6657613e65614fea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ecb307f000000000000000000000000000000000000000000000000000000000000000084612595565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f2d959493929190615154565b600060405180830381600087803b158015613f4757600080fd5b505af1158015613f5b573d6000803e3d6000fd5b505050505050565b60008083118290613faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa1919061405f565b60405180910390fd5b5060008385613fb9919061470a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614000578082015181840152602081019050613fe5565b8381111561400f576000848401525b50505050565b6000601f19601f8301169050919050565b600061403182613fc6565b61403b8185613fd1565b935061404b818560208601613fe2565b61405481614015565b840191505092915050565b600060208201905081810360008301526140798184614026565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140b182614086565b9050919050565b6140c1816140a6565b81146140cc57600080fd5b50565b6000813590506140de816140b8565b92915050565b6000819050919050565b6140f7816140e4565b811461410257600080fd5b50565b600081359050614114816140ee565b92915050565b6000806040838503121561413157614130614081565b5b600061413f858286016140cf565b925050602061415085828601614105565b9150509250929050565b60008115159050919050565b61416f8161415a565b82525050565b600060208201905061418a6000830184614166565b92915050565b6000602082840312156141a6576141a5614081565b5b60006141b4848285016140cf565b91505092915050565b6000819050919050565b60006141e26141dd6141d884614086565b6141bd565b614086565b9050919050565b60006141f4826141c7565b9050919050565b6000614206826141e9565b9050919050565b614216816141fb565b82525050565b6000602082019050614231600083018461420d565b92915050565b614240816140e4565b82525050565b600060208201905061425b6000830184614237565b92915050565b60008060006060848603121561427a57614279614081565b5b6000614288868287016140cf565b9350506020614299868287016140cf565b92505060406142aa86828701614105565b9150509250925092565b6142bd8161415a565b81146142c857600080fd5b50565b6000813590506142da816142b4565b92915050565b600080604083850312156142f7576142f6614081565b5b6000614305858286016140cf565b9250506020614316858286016142cb565b9150509250929050565b600060ff82169050919050565b61433681614320565b82525050565b6000602082019050614351600083018461432d565b92915050565b614360816140a6565b82525050565b600060208201905061437b6000830184614357565b92915050565b60006020828403121561439757614396614081565b5b60006143a584828501614105565b91505092915050565b6000602082840312156143c4576143c3614081565b5b60006143d2848285016142cb565b91505092915050565b600080604083850312156143f2576143f1614081565b5b6000614400858286016140cf565b9250506020614411858286016140cf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446257607f821691505b602082108114156144765761447561441b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b2602083613fd1565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061451e601d83613fd1565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e6f74204272696467652043616c6c0000000000000000000000000000000000600082015250565b600061458a600f83613fd1565b915061459582614554565b602082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061461c603983613fd1565b9150614627826145c0565b604082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061468c826140e4565b9150614697836140e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146d0576146cf614652565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614715826140e4565b9150614720836140e4565b9250826147305761472f6146db565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614797603583613fd1565b91506147a28261473b565b604082019050919050565b600060208201905081810360008301526147c68161478a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614829603483613fd1565b9150614834826147cd565b604082019050919050565b600060208201905081810360008301526148588161481c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148bb602683613fd1565b91506148c68261485f565b604082019050919050565b600060208201905081810360008301526148ea816148ae565b9050919050565b60006148fc826140e4565b9150614907836140e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561493c5761493b614652565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061497d601b83613fd1565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602483613fd1565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa1602283613fd1565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b33602583613fd1565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602383613fd1565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614c57603183613fd1565b9150614c6282614bfb565b604082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cc3601683613fd1565b9150614cce82614c8d565b602082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d7b604983613fd1565b9150614d8682614cf9565b606082019050919050565b60006020820190508181036000830152614daa81614d6e565b9050919050565b6000614dbc826140e4565b9150614dc7836140e4565b925082821015614dda57614dd9614652565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e41602183613fd1565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614ead601f83613fd1565b9150614eb882614e77565b602082019050919050565b60006020820190508181036000830152614edc81614ea0565b9050919050565b600081905092915050565b50565b6000614efe600083614ee3565b9150614f0982614eee565b600082019050919050565b6000614f1f82614ef1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f85602183613fd1565b9150614f9082614f29565b604082019050919050565b60006020820190508181036000830152614fb481614f78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615028816140b8565b92915050565b60006020828403121561504457615043614081565b5b600061505284828501615019565b91505092915050565b6000819050919050565b600061508061507b6150768461505b565b6141bd565b6140e4565b9050919050565b61509081615065565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150cb816140a6565b82525050565b60006150dd83836150c2565b60208301905092915050565b6000602082019050919050565b600061510182615096565b61510b81856150a1565b9350615116836150b2565b8060005b8381101561514757815161512e88826150d1565b9750615139836150e9565b92505060018101905061511a565b5085935050505092915050565b600060a0820190506151696000830188614237565b6151766020830187615087565b818103604083015261518881866150f6565b90506151976060830185614357565b6151a46080830184614237565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac94adc08577821f3560f2ff4745f044e39b9a3e0dccc285206df3ac9c39c3a664736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c80638ea5220f11610175578063b62496f5116100dc578063dd62ed3e11610095578063e884f2601161006f578063e884f26014610ad5578063eba4c33314610b00578063f2fde38b14610b29578063f5ed243014610b52576102b9565b8063dd62ed3e14610a44578063dfa50fd814610a81578063e2f4560514610aaa576102b9565b8063b62496f514610920578063bbc0c7421461095d578063c024666814610988578063c876d0b9146109b1578063d257b34f146109dc578063d85ba06314610a19576102b9565b8063a0d82dc51161012e578063a0d82dc5146107fc578063a265777814610827578063a3c573eb14610850578063a457c2d71461087b578063a4d15b64146108b8578063a9059cbb146108e3576102b9565b80638ea5220f146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639fccce32146107d1576102b9565b80634a62bb651161021957806371fc4688116101d257806371fc46881461061657806374f4f5471461063f578063751039fc146106685780638a8c523c146106935780638c2a993e146106aa5780638da5cb5b146106d3576102b9565b80634a62bb65146105045780634fbee1931461052f5780636a486a8e1461056c5780636ddd17131461059757806370a08231146105c2578063715018a6146105ff576102b9565b80631816467f1161026b5780631816467f146103e257806323b872dd1461040b5780632d5a5d3414610448578063313ce56714610471578063395093511461049c57806349bd5a5e146104d9576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631632b026146103635780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7d565b6040516102e0919061405f565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b919061411a565b610c0f565b60405161031d9190614175565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190614190565b610c2d565b60405161035a9190614175565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190614190565b610c4d565b005b34801561039857600080fd5b506103a1610d28565b6040516103ae919061421c565b60405180910390f35b3480156103c357600080fd5b506103cc610d4c565b6040516103d99190614246565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190614190565b610d56565b005b34801561041757600080fd5b50610432600480360381019061042d9190614261565b610ead565b60405161043f9190614175565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906142e0565b610f86565b005b34801561047d57600080fd5b50610486611078565b604051610493919061433c565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061411a565b611081565b6040516104d09190614175565b60405180910390f35b3480156104e557600080fd5b506104ee611134565b6040516104fb9190614366565b60405180910390f35b34801561051057600080fd5b50610519611158565b6040516105269190614175565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190614190565b61116b565b6040516105639190614175565b60405180910390f35b34801561057857600080fd5b506105816111c1565b60405161058e9190614246565b60405180910390f35b3480156105a357600080fd5b506105ac6111c7565b6040516105b99190614175565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190614190565b6111da565b6040516105f69190614246565b60405180910390f35b34801561060b57600080fd5b50610614611222565b005b34801561062257600080fd5b5061063d60048036038101906106389190614381565b61137a565b005b34801561064b57600080fd5b506106666004803603810190610661919061411a565b61146a565b005b34801561067457600080fd5b5061067d611556565b60405161068a9190614175565b60405180910390f35b34801561069f57600080fd5b506106a8611611565b005b3480156106b657600080fd5b506106d160048036038101906106cc919061411a565b6116e7565b005b3480156106df57600080fd5b506106e86117d3565b6040516106f59190614366565b60405180910390f35b34801561070a57600080fd5b506107136117fd565b6040516107209190614366565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b91906143ae565b611823565b005b34801561075e57600080fd5b506107676118d7565b604051610774919061405f565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142e0565b611969565b005b3480156107b257600080fd5b506107bb611a9d565b6040516107c89190614246565b60405180910390f35b3480156107dd57600080fd5b506107e6611aa3565b6040516107f39190614246565b60405180910390f35b34801561080857600080fd5b50610811611aa9565b60405161081e9190614246565b60405180910390f35b34801561083357600080fd5b5061084e600480360381019061084991906143ae565b611aaf565b005b34801561085c57600080fd5b50610865611b63565b6040516108729190614366565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d919061411a565b611b89565b6040516108af9190614175565b60405180910390f35b3480156108c457600080fd5b506108cd611c56565b6040516108da9190614175565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061411a565b611c69565b6040516109179190614175565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190614190565b611c87565b6040516109549190614175565b60405180910390f35b34801561096957600080fd5b50610972611ca7565b60405161097f9190614175565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa91906142e0565b611cba565b005b3480156109bd57600080fd5b506109c6611dfa565b6040516109d39190614175565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190614381565b611e0d565b604051610a109190614175565b60405180910390f35b348015610a2557600080fd5b50610a2e611f7d565b604051610a3b9190614246565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a6691906143db565b611f83565b604051610a789190614246565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa391906142e0565b61200a565b005b348015610ab657600080fd5b50610abf6120fc565b604051610acc9190614246565b60405180910390f35b348015610ae157600080fd5b50610aea612102565b604051610af79190614175565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614381565b6121bd565b005b348015610b3557600080fd5b50610b506004803603810190610b4b9190614190565b6122ad565b005b348015610b5e57600080fd5b50610b67612474565b604051610b749190614175565b60405180910390f35b606060038054610b8c9061444a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb89061444a565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b5050505050905090565b6000610c23610c1c61258d565b8484612595565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b610c5561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906144c8565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d5e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de4906144c8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610eba848484612760565b610f7b84610ec661258d565b610f76856040518060600160405280602881526020016151f760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f2c61258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b612595565b600190509392505050565b610f8e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611014906144c8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b600061112a61108e61258d565b84611125856001600061109f61258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b612595565b6001905092915050565b7f00000000000000000000000060ea0ce89d6a4c0957ac430f759c78838f9b95fa81565b600960009054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600960029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61122a61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b0906144c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61138261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906144c8565b60405180910390fd5b80600f81905550600f54600e81905550600b600e541115611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90614534565b60405180910390fd5b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f1906145a0565b60405180910390fd5b611504828261343d565b8173ffffffffffffffffffffffffffffffffffffffff167f9b5b9a05e4726d8bb959f1440e05c6b8109443f2083bc4e386237d76545265538260405161154a9190614246565b60405180910390a25050565b600061156061258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144c8565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506001905090565b61161961258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906144c8565b60405180910390fd5b6001600960016101000a81548160ff0219169083151502179055506001600960026101000a81548160ff02191690831515021790555043601381905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906145a0565b60405180910390fd5b61178182826135eb565b8173ffffffffffffffffffffffffffffffffffffffff167f397b33b307fc137878ebfc75b295289ec0ee25a31bb5bf034f33256fe8ea2aa6826040516117c79190614246565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182b61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144c8565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b6060600480546118e69061444a565b80601f01602080910402602001604051908101604052809291908181526020018280546119129061444a565b801561195f5780601f106119345761010080835404028352916020019161195f565b820191906000526020600020905b81548152906001019060200180831161194257829003601f168201915b5050505050905090565b61197161258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f7906144c8565b60405180910390fd5b7f00000000000000000000000060ea0ce89d6a4c0957ac430f759c78838f9b95fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690614632565b60405180910390fd5b611a99828261377f565b5050565b600f5481565b60125481565b60115481565b611ab761258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d906144c8565b60405180910390fd5b80600960036101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c4c611b9661258d565b84611c478560405180606001604052806025815260200161521f6025913960016000611bc061258d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b612595565b6001905092915050565b600960039054906101000a900460ff1681565b6000611c7d611c7661258d565b8484612760565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b600960019054906101000a900460ff1681565b611cc261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906144c8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dee9190614175565b60405180910390a25050565b600d60009054906101000a900460ff1681565b6000611e1761258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906144c8565b60405180910390fd5b620186a06002611eb4610d4c565b611ebe9190614681565b611ec8919061470a565b821015611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f01906147ad565b60405180910390fd5b6103e8600a611f17610d4c565b611f219190614681565b611f2b919061470a565b821115611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f649061483f565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61201261258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906144c8565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b600061210c61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612192906144c8565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6121c561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906144c8565b60405180910390fd5b80601181905550601154601081905550600b60105411156122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614534565b60405180910390fd5b50565b6122b561258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b906144c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906148d1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061247e61258d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612504906144c8565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055506001905090565b600080828461253e91906148f1565b905083811015612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614993565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc90614a25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614ab7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127539190614246565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c790614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614bdb565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128e45750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a90614c6d565b60405180910390fd5b600081141561293d5761293883836000613820565b6133d4565b600960009054906101000a900460ff1615612dcc5761295a6117d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c857506129986117d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aef5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b085750600560149054906101000a900460ff16155b15612dcb57600960019054906101000a900460ff16612c0257601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bc25750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614cd9565b60405180910390fd5b5b600d60009054906101000a900460ff1615612dca57612c1f6117d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ca657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cfe57507f00000000000000000000000060ea0ce89d6a4c0957ac430f759c78838f9b95fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dc95743600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7b90614d91565b60405180910390fd5b43600a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b6013544311158015612e2a57507f00000000000000000000000060ea0ce89d6a4c0957ac430f759c78838f9b95fa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e765750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f17576001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b6000612f22306111da565b905060006008548210159050808015612f475750600960029054906101000a900460ff165b8015612f605750600560149054906101000a900460ff16155b8015612fb65750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561300c5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130625750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130a6576001600560146101000a81548160ff02191690831515021790555061308a613ab5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff161590506000601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131615750601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9050601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132045750601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061320c5750805b1561321657600091505b600082156133c357601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327957506000601054115b156132e0576132a6606461329860105489613c0390919063ffffffff16565b613c7e90919063ffffffff16565b9050601054601154826132b99190614681565b6132c3919061470a565b601260008282546132d491906148f1565b9250508190555061339f565b601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333b57506000600e54115b1561339e57613368606461335a600e5489613c0390919063ffffffff16565b613c7e90919063ffffffff16565b9050600e54600f548261337b9190614681565b613385919061470a565b6012600082825461339691906148f1565b925050819055505b5b60008111156133b4576133b3883083613820565b5b80866133c09190614db1565b95505b6133ce888888613820565b50505050505b505050565b6000838311158290613421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613418919061405f565b60405180910390fd5b50600083856134309190614db1565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a490614e57565b60405180910390fd5b6134b982600083613cc8565b613524816040518060600160405280602281526020016151af602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357b81600254613ccd90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135df9190614246565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290614ec3565b60405180910390fd5b61366760008383613cc8565b61367c8160025461252f90919063ffffffff16565b6002819055506136d3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137739190614246565b60405180910390a35050565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388790614b49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f790614bdb565b60405180910390fd5b61390b838383613cc8565b613976816040518060600160405280602681526020016151d1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133d99092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a09816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613aa89190614246565b60405180910390a3505050565b6000613ac0306111da565b905060006012549050600080831480613ad95750600082145b15613ae657505050613c01565b6014600854613af59190614681565b831115613b0e576014600854613b0b9190614681565b92505b60008390506000479050613b2182613d17565b6000613b368247613ccd90919063ffffffff16565b90506000613b6186613b5360125485613c0390919063ffffffff16565b613c7e90919063ffffffff16565b90506000601281905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613bb190614f14565b60006040518083038185875af1925050503d8060008114613bee576040519150601f19603f3d011682016040523d82523d6000602084013e613bf3565b606091505b505080955050505050505050505b565b600080831415613c165760009050613c78565b60008284613c249190614681565b9050828482613c33919061470a565b14613c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6a90614f9b565b60405180910390fd5b809150505b92915050565b6000613cc083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f63565b905092915050565b505050565b6000613d0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133d9565b905092915050565b6000600267ffffffffffffffff811115613d3457613d33614fbb565b5b604051908082528060200260200182016040528015613d625781602001602082028036833780820191505090505b5090503081600081518110613d7a57613d79614fea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e1a57600080fd5b505afa158015613e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e52919061502e565b81600181518110613e6657613e65614fea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ecb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612595565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f2d959493929190615154565b600060405180830381600087803b158015613f4757600080fd5b505af1158015613f5b573d6000803e3d6000fd5b505050505050565b60008083118290613faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa1919061405f565b60405180910390fd5b5060008385613fb9919061470a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614000578082015181840152602081019050613fe5565b8381111561400f576000848401525b50505050565b6000601f19601f8301169050919050565b600061403182613fc6565b61403b8185613fd1565b935061404b818560208601613fe2565b61405481614015565b840191505092915050565b600060208201905081810360008301526140798184614026565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140b182614086565b9050919050565b6140c1816140a6565b81146140cc57600080fd5b50565b6000813590506140de816140b8565b92915050565b6000819050919050565b6140f7816140e4565b811461410257600080fd5b50565b600081359050614114816140ee565b92915050565b6000806040838503121561413157614130614081565b5b600061413f858286016140cf565b925050602061415085828601614105565b9150509250929050565b60008115159050919050565b61416f8161415a565b82525050565b600060208201905061418a6000830184614166565b92915050565b6000602082840312156141a6576141a5614081565b5b60006141b4848285016140cf565b91505092915050565b6000819050919050565b60006141e26141dd6141d884614086565b6141bd565b614086565b9050919050565b60006141f4826141c7565b9050919050565b6000614206826141e9565b9050919050565b614216816141fb565b82525050565b6000602082019050614231600083018461420d565b92915050565b614240816140e4565b82525050565b600060208201905061425b6000830184614237565b92915050565b60008060006060848603121561427a57614279614081565b5b6000614288868287016140cf565b9350506020614299868287016140cf565b92505060406142aa86828701614105565b9150509250925092565b6142bd8161415a565b81146142c857600080fd5b50565b6000813590506142da816142b4565b92915050565b600080604083850312156142f7576142f6614081565b5b6000614305858286016140cf565b9250506020614316858286016142cb565b9150509250929050565b600060ff82169050919050565b61433681614320565b82525050565b6000602082019050614351600083018461432d565b92915050565b614360816140a6565b82525050565b600060208201905061437b6000830184614357565b92915050565b60006020828403121561439757614396614081565b5b60006143a584828501614105565b91505092915050565b6000602082840312156143c4576143c3614081565b5b60006143d2848285016142cb565b91505092915050565b600080604083850312156143f2576143f1614081565b5b6000614400858286016140cf565b9250506020614411858286016140cf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446257607f821691505b602082108114156144765761447561441b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b2602083613fd1565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061451e601d83613fd1565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e6f74204272696467652043616c6c0000000000000000000000000000000000600082015250565b600061458a600f83613fd1565b915061459582614554565b602082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061461c603983613fd1565b9150614627826145c0565b604082019050919050565b6000602082019050818103600083015261464b8161460f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061468c826140e4565b9150614697836140e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146d0576146cf614652565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614715826140e4565b9150614720836140e4565b9250826147305761472f6146db565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614797603583613fd1565b91506147a28261473b565b604082019050919050565b600060208201905081810360008301526147c68161478a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614829603483613fd1565b9150614834826147cd565b604082019050919050565b600060208201905081810360008301526148588161481c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148bb602683613fd1565b91506148c68261485f565b604082019050919050565b600060208201905081810360008301526148ea816148ae565b9050919050565b60006148fc826140e4565b9150614907836140e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561493c5761493b614652565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061497d601b83613fd1565b915061498882614947565b602082019050919050565b600060208201905081810360008301526149ac81614970565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a0f602483613fd1565b9150614a1a826149b3565b604082019050919050565b60006020820190508181036000830152614a3e81614a02565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa1602283613fd1565b9150614aac82614a45565b604082019050919050565b60006020820190508181036000830152614ad081614a94565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b33602583613fd1565b9150614b3e82614ad7565b604082019050919050565b60006020820190508181036000830152614b6281614b26565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bc5602383613fd1565b9150614bd082614b69565b604082019050919050565b60006020820190508181036000830152614bf481614bb8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614c57603183613fd1565b9150614c6282614bfb565b604082019050919050565b60006020820190508181036000830152614c8681614c4a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cc3601683613fd1565b9150614cce82614c8d565b602082019050919050565b60006020820190508181036000830152614cf281614cb6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614d7b604983613fd1565b9150614d8682614cf9565b606082019050919050565b60006020820190508181036000830152614daa81614d6e565b9050919050565b6000614dbc826140e4565b9150614dc7836140e4565b925082821015614dda57614dd9614652565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e41602183613fd1565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614ead601f83613fd1565b9150614eb882614e77565b602082019050919050565b60006020820190508181036000830152614edc81614ea0565b9050919050565b600081905092915050565b50565b6000614efe600083614ee3565b9150614f0982614eee565b600082019050919050565b6000614f1f82614ef1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f85602183613fd1565b9150614f9082614f29565b604082019050919050565b60006020820190508181036000830152614fb481614f78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615028816140b8565b92915050565b60006020828403121561504457615043614081565b5b600061505284828501615019565b91505092915050565b6000819050919050565b600061508061507b6150768461505b565b6141bd565b6140e4565b9050919050565b61509081615065565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150cb816140a6565b82525050565b60006150dd83836150c2565b60208301905092915050565b6000602082019050919050565b600061510182615096565b61510b81856150a1565b9350615116836150b2565b8060005b8381101561514757815161512e88826150d1565b9750615139836150e9565b92505060018101905061511a565b5085935050505092915050565b600060a0820190506151696000830188614237565b6151766020830187615087565b818103604083015261518881866150f6565b90506151976060830185614357565b6151a46080830184614237565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ac94adc08577821f3560f2ff4745f044e39b9a3e0dccc285206df3ac9c39c3a664736f6c63430008090033
Deployed Bytecode Sourcemap
29464:12341:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7562:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9736:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30724:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35919:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29539:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8685:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35752:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10388:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35155:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8526:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11153:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29597:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29776:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36039:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30405:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29856:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8857:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22064:148;;;;;;;;;;;;;:::i;:::-;;34522:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41566:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33285:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33084:148;;;;;;;;;;;;;:::i;:::-;;41327:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21420:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29670:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34412:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7782:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35299:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30371:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30476:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30442:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33752:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29701:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11875:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9198:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30947:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29816:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34964:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30286:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33926:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30335:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9437:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32906:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29736:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33609:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34739:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22368:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33413:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7562:100;7616:13;7649:5;7642:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7562:100;:::o;9736:169::-;9819:4;9836:39;9845:12;:10;:12::i;:::-;9859:7;9868:6;9836:8;:39::i;:::-;9893:4;9886:11;;9736:169;;;;:::o;30724:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;35919:112::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36014:9:::1;35998:13;;:25;;;;;;;;;;;;;;;;;;35919:112:::0;:::o;29539:51::-;;;:::o;8685:108::-;8746:7;8773:12;;8766:19;;8685:108;:::o;35752:157::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35859:9:::1;;;;;;;;;;;35831:38;;35848:9;35831:38;;;;;;;;;;;;35892:9;35880;;:21;;;;;;;;;;;;;;;;;;35752:157:::0;:::o;10388:355::-;10528:4;10545:36;10555:6;10563:9;10574:6;10545:9;:36::i;:::-;10592:121;10601:6;10609:12;:10;:12::i;:::-;10623:89;10661:6;10623:89;;;;;;;;;;;;;;;;;:11;:19;10635:6;10623:19;;;;;;;;;;;;;;;:33;10643:12;:10;:12::i;:::-;10623:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10592:8;:121::i;:::-;10731:4;10724:11;;10388:355;;;;;:::o;35155:135::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35269:13:::1;35247:10;:19;35258:7;35247:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35155:135:::0;;:::o;8526:93::-;8584:5;8609:2;8602:9;;8526:93;:::o;11153:218::-;11241:4;11258:83;11267:12;:10;:12::i;:::-;11281:7;11290:50;11329:10;11290:11;:25;11302:12;:10;:12::i;:::-;11290:25;;;;;;;;;;;;;;;:34;11316:7;11290:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11258:8;:83::i;:::-;11359:4;11352:11;;11153:218;;;;:::o;29597:38::-;;;:::o;29776:33::-;;;;;;;;;;;;;:::o;36039:125::-;36104:4;36128:19;:28;36148:7;36128:28;;;;;;;;;;;;;;;;;;;;;;;;;36121:35;;36039:125;;;:::o;30405:28::-;;;;:::o;29856:31::-;;;;;;;;;;;;;:::o;8857:127::-;8931:7;8958:9;:18;8968:7;8958:18;;;;;;;;;;;;;;;;8951:25;;8857:127;;;:::o;22064:148::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22134:40;;22155:6;;;;;;;;;;;22134:40;;;;;;;;;;;;22202:1;22185:6;;:19;;;;;;;;;;;;;;;;;;22064:148::o:0;34522:208::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34609:7:::1;34597:9;:19;;;;34642:9;;34627:12;:24;;;;34686:2;34670:12;;:18;;34662:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34522:208:::0;:::o;41566:219::-;41662:13;;;;;;;;;;;41648:27;;:10;:27;;;41640:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41710:19;41716:4;41722:6;41710:5;:19::i;:::-;41760:4;41749:24;;;41766:6;41749:24;;;;;;:::i;:::-;;;;;;;;41566:219;;:::o;33285:120::-;33337:4;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33370:5:::1;33353:14;;:22;;;;;;;;;;;;;;;;;;33393:4;33386:11;;33285:120:::0;:::o;33084:148::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33155:4:::1;33139:13;;:20;;;;;;;;;;;;;;;;;;33184:4;33170:11;;:18;;;;;;;;;;;;;;;;;;33212:12;33199:10;:25;;;;33084:148::o:0;41327:219::-;41423:13;;;;;;;;;;;41409:27;;:10;:27;;;41401:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41471:19;41477:4;41483:6;41471:5;:19::i;:::-;41521:4;41510:24;;;41527:6;41510:24;;;;;;:::i;:::-;;;;;;;;41327:219;;:::o;21420:79::-;21458:7;21485:6;;;;;;;;;;;21478:13;;21420:79;:::o;29670:24::-;;;;;;;;;;;;;:::o;34412:101::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34498:7:::1;34484:11;;:21;;;;;;;;;;;;;;;;;;34412:101:::0;:::o;7782:104::-;7838:13;7871:7;7864:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7782:104;:::o;35299:244::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35408:13:::1;35400:21;;:4;:21;;;;35392:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35494:41;35523:4;35529:5;35494:28;:41::i;:::-;35299:244:::0;;:::o;30371:24::-;;;;:::o;30476:27::-;;;;:::o;30442:25::-;;;;:::o;33752:102::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33841:5:::1;33820:18;;:26;;;;;;;;;;;;;;;;;;33752:102:::0;:::o;29701:28::-;;;;;;;;;;;;;:::o;11875:269::-;11968:4;11985:129;11994:12;:10;:12::i;:::-;12008:7;12017:96;12056:15;12017:96;;;;;;;;;;;;;;;;;:11;:25;12029:12;:10;:12::i;:::-;12017:25;;;;;;;;;;;;;;;:34;12043:7;12017:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11985:8;:129::i;:::-;12132:4;12125:11;;11875:269;;;;:::o;29894:37::-;;;;;;;;;;;;;:::o;9198:175::-;9284:4;9301:42;9311:12;:10;:12::i;:::-;9325:9;9336:6;9301:9;:42::i;:::-;9361:4;9354:11;;9198:175;;;;:::o;30947:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29816:33::-;;;;;;;;;;;;;:::o;34964:182::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35080:8:::1;35049:19;:28;35069:7;35049:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35120:7;35104:34;;;35129:8;35104:34;;;;;;:::i;:::-;;;;;;;;34964:182:::0;;:::o;30286:39::-;;;;;;;;;;;;;:::o;33926:387::-;34007:4;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34064:6:::1;34060:1;34044:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34031:9;:39;;34023:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34181:4;34176:2;34160:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;34147:9;:38;;34139:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34274:9;34253:18;:30;;;;34301:4;34294:11;;33926:387:::0;;;:::o;30335:27::-;;;;:::o;9437:151::-;9526:7;9553:11;:18;9565:5;9553:18;;;;;;;;;;;;;;;:27;9572:7;9553:27;;;;;;;;;;;;;;;;9546:34;;9437:151;;;;:::o;32906:123::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33014:7:::1;32992:10;:19;33003:7;32992:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32906:123:::0;;:::o;29736:33::-;;;;:::o;33609:134::-;33669:4;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33708:5:::1;33685:20;;:28;;;;;;;;;;;;;;;;;;33731:4;33724:11;;33609:134:::0;:::o;34739:216::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34831:7:::1;34818:10;:20;;;;34865:10;;34849:13;:26;;;;34911:2;34894:13;;:19;;34886:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34739:216:::0;:::o;22368:244::-;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22477:1:::1;22457:22;;:8;:22;;;;22449:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22567:8;22538:38;;22559:6;;;;;;;;;;;22538:38;;;;;;;;;;;;22596:8;22587:6;;:17;;;;;;;;;;;;;;;;;;22368:244:::0;:::o;33413:132::-;33477:4;21643:12;:10;:12::i;:::-;21633:22;;:6;;;;;;;;;;;:22;;;21625:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33511:4:::1;33494:14;;:21;;;;;;;;;;;;;;;;;;33533:4;33526:11;;33413:132:::0;:::o;16452:182::-;16510:7;16530:9;16546:1;16542;:5;;;;:::i;:::-;16530:17;;16571:1;16566;:6;;16558:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16625:1;16618:8;;;16452:182;;;;:::o;164:98::-;217:7;244:10;237:17;;164:98;:::o;15071:381::-;15224:1;15207:19;;:5;:19;;;;15199:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15305:1;15286:21;;:7;:21;;;;15278:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15390:6;15360:11;:18;15372:5;15360:18;;;;;;;;;;;;;;;:27;15379:7;15360:27;;;;;;;;;;;;;;;:36;;;;15428:7;15412:32;;15421:5;15412:32;;;15437:6;15412:32;;;;;;:::i;:::-;;;;;;;;15071:381;;;:::o;36224:3586::-;36372:1;36356:18;;:4;:18;;;;36348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36449:1;36435:16;;:2;:16;;;;36427:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36511:10;:14;36522:2;36511:14;;;;;;;;;;;;;;;;;;;;;;;;;36510:15;:36;;;;;36530:10;:16;36541:4;36530:16;;;;;;;;;;;;;;;;;;;;;;;;;36529:17;36510:36;36502:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;36625:1;36615:6;:11;36612:92;;;36643:28;36659:4;36665:2;36669:1;36643:15;:28::i;:::-;36686:7;;36612:92;36720:14;;;;;;;;;;;36717:1084;;;36780:7;:5;:7::i;:::-;36772:15;;:4;:15;;;;:49;;;;;36814:7;:5;:7::i;:::-;36808:13;;:2;:13;;;;36772:49;:86;;;;;36856:1;36842:16;;:2;:16;;;;36772:86;:128;;;;;36893:6;36879:21;;:2;:21;;;;36772:128;:168;;;;;36927:13;;;;;;;;;;;36921:19;;:2;:19;;;;36772:168;:210;;;;;36969:13;;;;;;;;;;;36961:21;;:4;:21;;;;36772:210;:240;;;;;37004:8;;;;;;;;;;;37003:9;36772:240;36750:1040;;;37050:13;;;;;;;;;;;37046:148;;37095:19;:25;37115:4;37095:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37124:19;:23;37144:2;37124:23;;;;;;;;;;;;;;;;;;;;;;;;;37095:52;37087:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37046:148;37353:20;;;;;;;;;;;37349:423;;;37407:7;:5;:7::i;:::-;37401:13;;:2;:13;;;;:47;;;;;37432:15;37418:30;;:2;:30;;;;37401:47;:79;;;;;37466:13;37452:28;;:2;:28;;;;37401:79;37397:356;;;37558:12;37516:28;:39;37545:9;37516:39;;;;;;;;;;;;;;;;:54;37508:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:12;37675:28;:39;37704:9;37675:39;;;;;;;;;;;;;;;:54;;;;37397:356;37349:423;36750:1040;36717:1084;37862:10;;37845:12;:28;;:69;;;;;37901:13;37895:19;;:2;:19;;;;37845:69;:148;;;;;37950:42;37936:57;;:2;:57;;;;37845:148;37841:252;;;38042:4;38025:10;:14;38036:2;38025:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38078:2;38066:15;;;;;;;;;;;;37841:252;38108:28;38139:24;38157:4;38139:9;:24::i;:::-;38108:55;;38177:12;38216:18;;38192:20;:42;;38177:57;;38266:7;:35;;;;;38290:11;;;;;;;;;;;38266:35;:61;;;;;38319:8;;;;;;;;;;;38318:9;38266:61;:110;;;;;38345:25;:31;38371:4;38345:31;;;;;;;;;;;;;;;;;;;;;;;;;38344:32;38266:110;:153;;;;;38394:19;:25;38414:4;38394:25;;;;;;;;;;;;;;;;;;;;;;;;;38393:26;38266:153;:194;;;;;38437:19;:23;38457:2;38437:23;;;;;;;;;;;;;;;;;;;;;;;;;38436:24;38266:194;38248:328;;;38498:4;38487:8;;:15;;;;;;;;;;;;;;;;;;38520:10;:8;:10::i;:::-;38559:5;38548:8;;:16;;;;;;;;;;;;;;;;;;38248:328;38592:12;38608:8;;;;;;;;;;;38607:9;38592:24;;38629:19;38652:25;:29;38678:2;38652:29;;;;;;;;;;;;;;;;;;;;;;;;;38651:30;:66;;;;;38686:25;:31;38712:4;38686:31;;;;;;;;;;;;;;;;;;;;;;;;;38685:32;38651:66;38629:88;;38816:19;:25;38836:4;38816:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38845:19;:23;38865:2;38845:23;;;;;;;;;;;;;;;;;;;;;;;;;38816:52;:70;;;;38872:14;38816:70;38813:117;;;38913:5;38903:15;;38813:117;38943:12;39047:7;39044:712;;;39098:25;:29;39124:2;39098:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39147:1;39131:13;;:17;39098:50;39094:509;;;39175:34;39205:3;39175:25;39186:13;;39175:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39168:41;;39281:13;;39268:10;;39261:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39245:12;;:49;;;;;;;:::i;:::-;;;;;;;;39094:509;;;39390:25;:31;39416:4;39390:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39440:1;39425:12;;:16;39390:51;39387:216;;;39469:33;39498:3;39469:24;39480:12;;39469:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39462:40;;39573:12;;39561:9;;39554:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39538:12;;:47;;;;;;;:::i;:::-;;;;;;;;39387:216;39094:509;39630:1;39623:4;:8;39620:93;;;39655:42;39671:4;39685;39692;39655:15;:42::i;:::-;39620:93;39740:4;39730:14;;;;;:::i;:::-;;;39044:712;39769:33;39785:4;39791:2;39795:6;39769:15;:33::i;:::-;36337:3473;;;;;36224:3586;;;;:::o;17358:193::-;17444:7;17477:1;17472;:6;;17480:12;17464:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17504:9;17520:1;17516;:5;;;;:::i;:::-;17504:17;;17542:1;17535:8;;;17358:193;;;;;:::o;14212:420::-;14315:1;14296:21;;:7;:21;;;;14288:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14369:49;14390:7;14407:1;14411:6;14369:20;:49::i;:::-;14453:68;14476:6;14453:68;;;;;;;;;;;;;;;;;:9;:18;14463:7;14453:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14432:9;:18;14442:7;14432:18;;;;;;;;;;;;;;;:89;;;;14547:24;14564:6;14547:12;;:16;;:24;;;;:::i;:::-;14532:12;:39;;;;14613:1;14587:37;;14596:7;14587:37;;;14617:6;14587:37;;;;;;:::i;:::-;;;;;;;;14212:420;;:::o;13498:380::-;13601:1;13582:21;;:7;:21;;;;13574:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13653:49;13682:1;13686:7;13695:6;13653:20;:49::i;:::-;13731:24;13748:6;13731:12;;:16;;:24;;;;:::i;:::-;13716:12;:39;;;;13787:30;13810:6;13787:9;:18;13797:7;13787:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;13766:9;:18;13776:7;13766:18;;;;;;;;;;;;;;;:51;;;;13854:7;13833:37;;13850:1;13833:37;;;13863:6;13833:37;;;;;;:::i;:::-;;;;;;;;13498:380;;:::o;35552:188::-;35671:5;35637:25;:31;35663:4;35637:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35726:5;35692:40;;35720:4;35692:40;;;;;;;;;;;;35552:188;;:::o;12635:575::-;12793:1;12775:20;;:6;:20;;;;12767:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12877:1;12856:23;;:9;:23;;;;12848:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12933:47;12954:6;12962:9;12973:6;12933:20;:47::i;:::-;13014:71;13036:6;13014:71;;;;;;;;;;;;;;;;;:9;:17;13024:6;13014:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12994:9;:17;13004:6;12994:17;;;;;;;;;;;;;;;:91;;;;13119:32;13144:6;13119:9;:20;13129:9;13119:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13096:9;:20;13106:9;13096:20;;;;;;;;;;;;;;;:55;;;;13184:9;13167:35;;13176:6;13167:35;;;13195:6;13167:35;;;;;;:::i;:::-;;;;;;;;12635:575;;;:::o;40436:873::-;40475:23;40501:24;40519:4;40501:9;:24::i;:::-;40475:50;;40536:25;40564:12;;40536:40;;40587:12;40635:1;40616:15;:20;:46;;;;40661:1;40640:17;:22;40616:46;40613:60;;;40665:7;;;;;40613:60;40728:2;40707:18;;:23;;;;:::i;:::-;40689:15;:41;40686:111;;;40783:2;40762:18;;:23;;;;:::i;:::-;40744:41;;40686:111;40868:26;40897:15;40868:44;;40926:25;40954:21;40926:49;;40989:36;41006:18;40989:16;:36::i;:::-;41040:18;41061:44;41087:17;41061:21;:25;;:44;;;;:::i;:::-;41040:65;;41116:17;41136:51;41169:17;41136:28;41151:12;;41136:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;41116:71;;41221:1;41206:12;:16;;;;41259:9;;;;;;;;;;;41251:23;;41282:9;41251:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41238:58;;;;;40464:845;;;;;;;40436:873;:::o;17811:473::-;17869:7;18119:1;18114;:6;18110:47;;;18144:1;18137:8;;;;18110:47;18170:9;18186:1;18182;:5;;;;:::i;:::-;18170:17;;18215:1;18210;18206;:5;;;;:::i;:::-;:10;18198:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18275:1;18268:8;;;17811:473;;;;;:::o;18761:132::-;18819:7;18846:39;18850:1;18853;18846:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18839:46;;18761:132;;;;:::o;16056:125::-;;;;:::o;16918:136::-;16976:7;17003:43;17007:1;17010;17003:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16996:50;;16918:136;;;;:::o;39819:597::-;39948:21;39986:1;39972:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39948:40;;40017:4;39999;40004:1;39999:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40043:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40033:4;40038:1;40033:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40079:62;40096:4;40111:15;40129:11;40079:8;:62::i;:::-;40181:15;:66;;;40262:11;40288:1;40332:4;40359;40379:15;40181:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39874:542;39819:597;:::o;19390:279::-;19476:7;19508:1;19504;:5;19511:12;19496:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19535:9;19551:1;19547;:5;;;;:::i;:::-;19535:17;;19660:1;19653:8;;;19390:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:116::-;5854:21;5869:5;5854:21;:::i;:::-;5847:5;5844:32;5834:60;;5890:1;5887;5880:12;5834:60;5784:116;:::o;5906:133::-;5949:5;5987:6;5974:20;5965:29;;6003:30;6027:5;6003:30;:::i;:::-;5906:133;;;;:::o;6045:468::-;6110:6;6118;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:53;6363:7;6354:6;6343:9;6339:22;6318:53;:::i;:::-;6308:63;;6264:117;6420:2;6446:50;6488:7;6479:6;6468:9;6464:22;6446:50;:::i;:::-;6436:60;;6391:115;6045:468;;;;;:::o;6519:86::-;6554:7;6594:4;6587:5;6583:16;6572:27;;6519:86;;;:::o;6611:112::-;6694:22;6710:5;6694:22;:::i;:::-;6689:3;6682:35;6611:112;;:::o;6729:214::-;6818:4;6856:2;6845:9;6841:18;6833:26;;6869:67;6933:1;6922:9;6918:17;6909:6;6869:67;:::i;:::-;6729:214;;;;:::o;6949:118::-;7036:24;7054:5;7036:24;:::i;:::-;7031:3;7024:37;6949:118;;:::o;7073:222::-;7166:4;7204:2;7193:9;7189:18;7181:26;;7217:71;7285:1;7274:9;7270:17;7261:6;7217:71;:::i;:::-;7073:222;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:179::-;10082:31;10078:1;10070:6;10066:14;10059:55;9942:179;:::o;10127:366::-;10269:3;10290:67;10354:2;10349:3;10290:67;:::i;:::-;10283:74;;10366:93;10455:3;10366:93;:::i;:::-;10484:2;10479:3;10475:12;10468:19;;10127:366;;;:::o;10499:419::-;10665:4;10703:2;10692:9;10688:18;10680:26;;10752:9;10746:4;10742:20;10738:1;10727:9;10723:17;10716:47;10780:131;10906:4;10780:131;:::i;:::-;10772:139;;10499:419;;;:::o;10924:165::-;11064:17;11060:1;11052:6;11048:14;11041:41;10924:165;:::o;11095:366::-;11237:3;11258:67;11322:2;11317:3;11258:67;:::i;:::-;11251:74;;11334:93;11423:3;11334:93;:::i;:::-;11452:2;11447:3;11443:12;11436:19;;11095:366;;;:::o;11467:419::-;11633:4;11671:2;11660:9;11656:18;11648:26;;11720:9;11714:4;11710:20;11706:1;11695:9;11691:17;11684:47;11748:131;11874:4;11748:131;:::i;:::-;11740:139;;11467:419;;;:::o;11892:244::-;12032:34;12028:1;12020:6;12016:14;12009:58;12101:27;12096:2;12088:6;12084:15;12077:52;11892:244;:::o;12142:366::-;12284:3;12305:67;12369:2;12364:3;12305:67;:::i;:::-;12298:74;;12381:93;12470:3;12381:93;:::i;:::-;12499:2;12494:3;12490:12;12483:19;;12142:366;;;:::o;12514:419::-;12680:4;12718:2;12707:9;12703:18;12695:26;;12767:9;12761:4;12757:20;12753:1;12742:9;12738:17;12731:47;12795:131;12921:4;12795:131;:::i;:::-;12787:139;;12514:419;;;:::o;12939:180::-;12987:77;12984:1;12977:88;13084:4;13081:1;13074:15;13108:4;13105:1;13098:15;13125:348;13165:7;13188:20;13206:1;13188:20;:::i;:::-;13183:25;;13222:20;13240:1;13222:20;:::i;:::-;13217:25;;13410:1;13342:66;13338:74;13335:1;13332:81;13327:1;13320:9;13313:17;13309:105;13306:131;;;13417:18;;:::i;:::-;13306:131;13465:1;13462;13458:9;13447:20;;13125:348;;;;:::o;13479:180::-;13527:77;13524:1;13517:88;13624:4;13621:1;13614:15;13648:4;13645:1;13638:15;13665:185;13705:1;13722:20;13740:1;13722:20;:::i;:::-;13717:25;;13756:20;13774:1;13756:20;:::i;:::-;13751:25;;13795:1;13785:35;;13800:18;;:::i;:::-;13785:35;13842:1;13839;13835:9;13830:14;;13665:185;;;;:::o;13856:240::-;13996:34;13992:1;13984:6;13980:14;13973:58;14065:23;14060:2;14052:6;14048:15;14041:48;13856:240;:::o;14102:366::-;14244:3;14265:67;14329:2;14324:3;14265:67;:::i;:::-;14258:74;;14341:93;14430:3;14341:93;:::i;:::-;14459:2;14454:3;14450:12;14443:19;;14102:366;;;:::o;14474:419::-;14640:4;14678:2;14667:9;14663:18;14655:26;;14727:9;14721:4;14717:20;14713:1;14702:9;14698:17;14691:47;14755:131;14881:4;14755:131;:::i;:::-;14747:139;;14474:419;;;:::o;14899:239::-;15039:34;15035:1;15027:6;15023:14;15016:58;15108:22;15103:2;15095:6;15091:15;15084:47;14899:239;:::o;15144:366::-;15286:3;15307:67;15371:2;15366:3;15307:67;:::i;:::-;15300:74;;15383:93;15472:3;15383:93;:::i;:::-;15501:2;15496:3;15492:12;15485:19;;15144:366;;;:::o;15516:419::-;15682:4;15720:2;15709:9;15705:18;15697:26;;15769:9;15763:4;15759:20;15755:1;15744:9;15740:17;15733:47;15797:131;15923:4;15797:131;:::i;:::-;15789:139;;15516:419;;;:::o;15941:225::-;16081:34;16077:1;16069:6;16065:14;16058:58;16150:8;16145:2;16137:6;16133:15;16126:33;15941:225;:::o;16172:366::-;16314:3;16335:67;16399:2;16394:3;16335:67;:::i;:::-;16328:74;;16411:93;16500:3;16411:93;:::i;:::-;16529:2;16524:3;16520:12;16513:19;;16172:366;;;:::o;16544:419::-;16710:4;16748:2;16737:9;16733:18;16725:26;;16797:9;16791:4;16787:20;16783:1;16772:9;16768:17;16761:47;16825:131;16951:4;16825:131;:::i;:::-;16817:139;;16544:419;;;:::o;16969:305::-;17009:3;17028:20;17046:1;17028:20;:::i;:::-;17023:25;;17062:20;17080:1;17062:20;:::i;:::-;17057:25;;17216:1;17148:66;17144:74;17141:1;17138:81;17135:107;;;17222:18;;:::i;:::-;17135:107;17266:1;17263;17259:9;17252:16;;16969:305;;;;:::o;17280:177::-;17420:29;17416:1;17408:6;17404:14;17397:53;17280:177;:::o;17463:366::-;17605:3;17626:67;17690:2;17685:3;17626:67;:::i;:::-;17619:74;;17702:93;17791:3;17702:93;:::i;:::-;17820:2;17815:3;17811:12;17804:19;;17463:366;;;:::o;17835:419::-;18001:4;18039:2;18028:9;18024:18;18016:26;;18088:9;18082:4;18078:20;18074:1;18063:9;18059:17;18052:47;18116:131;18242:4;18116:131;:::i;:::-;18108:139;;17835:419;;;:::o;18260:223::-;18400:34;18396:1;18388:6;18384:14;18377:58;18469:6;18464:2;18456:6;18452:15;18445:31;18260:223;:::o;18489:366::-;18631:3;18652:67;18716:2;18711:3;18652:67;:::i;:::-;18645:74;;18728:93;18817:3;18728:93;:::i;:::-;18846:2;18841:3;18837:12;18830:19;;18489:366;;;:::o;18861:419::-;19027:4;19065:2;19054:9;19050:18;19042:26;;19114:9;19108:4;19104:20;19100:1;19089:9;19085:17;19078:47;19142:131;19268:4;19142:131;:::i;:::-;19134:139;;18861:419;;;:::o;19286:221::-;19426:34;19422:1;19414:6;19410:14;19403:58;19495:4;19490:2;19482:6;19478:15;19471:29;19286:221;:::o;19513:366::-;19655:3;19676:67;19740:2;19735:3;19676:67;:::i;:::-;19669:74;;19752:93;19841:3;19752:93;:::i;:::-;19870:2;19865:3;19861:12;19854:19;;19513:366;;;:::o;19885:419::-;20051:4;20089:2;20078:9;20074:18;20066:26;;20138:9;20132:4;20128:20;20124:1;20113:9;20109:17;20102:47;20166:131;20292:4;20166:131;:::i;:::-;20158:139;;19885:419;;;:::o;20310:224::-;20450:34;20446:1;20438:6;20434:14;20427:58;20519:7;20514:2;20506:6;20502:15;20495:32;20310:224;:::o;20540:366::-;20682:3;20703:67;20767:2;20762:3;20703:67;:::i;:::-;20696:74;;20779:93;20868:3;20779:93;:::i;:::-;20897:2;20892:3;20888:12;20881:19;;20540:366;;;:::o;20912:419::-;21078:4;21116:2;21105:9;21101:18;21093:26;;21165:9;21159:4;21155:20;21151:1;21140:9;21136:17;21129:47;21193:131;21319:4;21193:131;:::i;:::-;21185:139;;20912:419;;;:::o;21337:222::-;21477:34;21473:1;21465:6;21461:14;21454:58;21546:5;21541:2;21533:6;21529:15;21522:30;21337:222;:::o;21565:366::-;21707:3;21728:67;21792:2;21787:3;21728:67;:::i;:::-;21721:74;;21804:93;21893:3;21804:93;:::i;:::-;21922:2;21917:3;21913:12;21906:19;;21565:366;;;:::o;21937:419::-;22103:4;22141:2;22130:9;22126:18;22118:26;;22190:9;22184:4;22180:20;22176:1;22165:9;22161:17;22154:47;22218:131;22344:4;22218:131;:::i;:::-;22210:139;;21937:419;;;:::o;22362:236::-;22502:34;22498:1;22490:6;22486:14;22479:58;22571:19;22566:2;22558:6;22554:15;22547:44;22362:236;:::o;22604:366::-;22746:3;22767:67;22831:2;22826:3;22767:67;:::i;:::-;22760:74;;22843:93;22932:3;22843:93;:::i;:::-;22961:2;22956:3;22952:12;22945:19;;22604:366;;;:::o;22976:419::-;23142:4;23180:2;23169:9;23165:18;23157:26;;23229:9;23223:4;23219:20;23215:1;23204:9;23200:17;23193:47;23257:131;23383:4;23257:131;:::i;:::-;23249:139;;22976:419;;;:::o;23401:172::-;23541:24;23537:1;23529:6;23525:14;23518:48;23401:172;:::o;23579:366::-;23721:3;23742:67;23806:2;23801:3;23742:67;:::i;:::-;23735:74;;23818:93;23907:3;23818:93;:::i;:::-;23936:2;23931:3;23927:12;23920:19;;23579:366;;;:::o;23951:419::-;24117:4;24155:2;24144:9;24140:18;24132:26;;24204:9;24198:4;24194:20;24190:1;24179:9;24175:17;24168:47;24232:131;24358:4;24232:131;:::i;:::-;24224:139;;23951:419;;;:::o;24376:297::-;24516:34;24512:1;24504:6;24500:14;24493:58;24585:34;24580:2;24572:6;24568:15;24561:59;24654:11;24649:2;24641:6;24637:15;24630:36;24376:297;:::o;24679:366::-;24821:3;24842:67;24906:2;24901:3;24842:67;:::i;:::-;24835:74;;24918:93;25007:3;24918:93;:::i;:::-;25036:2;25031:3;25027:12;25020:19;;24679:366;;;:::o;25051:419::-;25217:4;25255:2;25244:9;25240:18;25232:26;;25304:9;25298:4;25294:20;25290:1;25279:9;25275:17;25268:47;25332:131;25458:4;25332:131;:::i;:::-;25324:139;;25051:419;;;:::o;25476:191::-;25516:4;25536:20;25554:1;25536:20;:::i;:::-;25531:25;;25570:20;25588:1;25570:20;:::i;:::-;25565:25;;25609:1;25606;25603:8;25600:34;;;25614:18;;:::i;:::-;25600:34;25659:1;25656;25652:9;25644:17;;25476:191;;;;:::o;25673:220::-;25813:34;25809:1;25801:6;25797:14;25790:58;25882:3;25877:2;25869:6;25865:15;25858:28;25673:220;:::o;25899:366::-;26041:3;26062:67;26126:2;26121:3;26062:67;:::i;:::-;26055:74;;26138:93;26227:3;26138:93;:::i;:::-;26256:2;26251:3;26247:12;26240:19;;25899:366;;;:::o;26271:419::-;26437:4;26475:2;26464:9;26460:18;26452:26;;26524:9;26518:4;26514:20;26510:1;26499:9;26495:17;26488:47;26552:131;26678:4;26552:131;:::i;:::-;26544:139;;26271:419;;;:::o;26696:181::-;26836:33;26832:1;26824:6;26820:14;26813:57;26696:181;:::o;26883:366::-;27025:3;27046:67;27110:2;27105:3;27046:67;:::i;:::-;27039:74;;27122:93;27211:3;27122:93;:::i;:::-;27240:2;27235:3;27231:12;27224:19;;26883:366;;;:::o;27255:419::-;27421:4;27459:2;27448:9;27444:18;27436:26;;27508:9;27502:4;27498:20;27494:1;27483:9;27479:17;27472:47;27536:131;27662:4;27536:131;:::i;:::-;27528:139;;27255:419;;;:::o;27680:147::-;27781:11;27818:3;27803:18;;27680:147;;;;:::o;27833:114::-;;:::o;27953:398::-;28112:3;28133:83;28214:1;28209:3;28133:83;:::i;:::-;28126:90;;28225:93;28314:3;28225:93;:::i;:::-;28343:1;28338:3;28334:11;28327:18;;27953:398;;;:::o;28357:379::-;28541:3;28563:147;28706:3;28563:147;:::i;:::-;28556:154;;28727:3;28720:10;;28357:379;;;:::o;28742:220::-;28882:34;28878:1;28870:6;28866:14;28859:58;28951:3;28946:2;28938:6;28934:15;28927:28;28742:220;:::o;28968:366::-;29110:3;29131:67;29195:2;29190:3;29131:67;:::i;:::-;29124:74;;29207:93;29296:3;29207:93;:::i;:::-;29325:2;29320:3;29316:12;29309:19;;28968:366;;;:::o;29340:419::-;29506:4;29544:2;29533:9;29529:18;29521:26;;29593:9;29587:4;29583:20;29579:1;29568:9;29564:17;29557:47;29621:131;29747:4;29621:131;:::i;:::-;29613:139;;29340:419;;;:::o;29765:180::-;29813:77;29810:1;29803:88;29910:4;29907:1;29900:15;29934:4;29931:1;29924:15;29951:180;29999:77;29996:1;29989:88;30096:4;30093:1;30086:15;30120:4;30117:1;30110:15;30137:143;30194:5;30225:6;30219:13;30210:22;;30241:33;30268:5;30241:33;:::i;:::-;30137:143;;;;:::o;30286:351::-;30356:6;30405:2;30393:9;30384:7;30380:23;30376:32;30373:119;;;30411:79;;:::i;:::-;30373:119;30531:1;30556:64;30612:7;30603:6;30592:9;30588:22;30556:64;:::i;:::-;30546:74;;30502:128;30286:351;;;;:::o;30643:85::-;30688:7;30717:5;30706:16;;30643:85;;;:::o;30734:158::-;30792:9;30825:61;30843:42;30852:32;30878:5;30852:32;:::i;:::-;30843:42;:::i;:::-;30825:61;:::i;:::-;30812:74;;30734:158;;;:::o;30898:147::-;30993:45;31032:5;30993:45;:::i;:::-;30988:3;30981:58;30898:147;;:::o;31051:114::-;31118:6;31152:5;31146:12;31136:22;;31051:114;;;:::o;31171:184::-;31270:11;31304:6;31299:3;31292:19;31344:4;31339:3;31335:14;31320:29;;31171:184;;;;:::o;31361:132::-;31428:4;31451:3;31443:11;;31481:4;31476:3;31472:14;31464:22;;31361:132;;;:::o;31499:108::-;31576:24;31594:5;31576:24;:::i;:::-;31571:3;31564:37;31499:108;;:::o;31613:179::-;31682:10;31703:46;31745:3;31737:6;31703:46;:::i;:::-;31781:4;31776:3;31772:14;31758:28;;31613:179;;;;:::o;31798:113::-;31868:4;31900;31895:3;31891:14;31883:22;;31798:113;;;:::o;31947:732::-;32066:3;32095:54;32143:5;32095:54;:::i;:::-;32165:86;32244:6;32239:3;32165:86;:::i;:::-;32158:93;;32275:56;32325:5;32275:56;:::i;:::-;32354:7;32385:1;32370:284;32395:6;32392:1;32389:13;32370:284;;;32471:6;32465:13;32498:63;32557:3;32542:13;32498:63;:::i;:::-;32491:70;;32584:60;32637:6;32584:60;:::i;:::-;32574:70;;32430:224;32417:1;32414;32410:9;32405:14;;32370:284;;;32374:14;32670:3;32663:10;;32071:608;;;31947:732;;;;:::o;32685:831::-;32948:4;32986:3;32975:9;32971:19;32963:27;;33000:71;33068:1;33057:9;33053:17;33044:6;33000:71;:::i;:::-;33081:80;33157:2;33146:9;33142:18;33133:6;33081:80;:::i;:::-;33208:9;33202:4;33198:20;33193:2;33182:9;33178:18;33171:48;33236:108;33339:4;33330:6;33236:108;:::i;:::-;33228:116;;33354:72;33422:2;33411:9;33407:18;33398:6;33354:72;:::i;:::-;33436:73;33504:3;33493:9;33489:19;33480:6;33436:73;:::i;:::-;32685:831;;;;;;;;:::o
Swarm Source
ipfs://ac94adc08577821f3560f2ff4745f044e39b9a3e0dccc285206df3ac9c39c3a6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.