Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 $BONZA
Holders
152
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
11,725.240293421800897641 $BONZAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bonanza
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IERC20 { 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); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * 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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ 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; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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 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 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 Bonanza is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000 * (10**18); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "b0nanza"; string private _symbol = "$BONZA"; uint8 private _decimals = 18; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 0; uint256 private _previousBurnFee = _burnFee; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public _marketingFee = 2; uint256 private _previousMarketingFee = _marketingFee; address payable public marketingWallet = payable(0x8868B5637E24946744A01666137aE2A5db4C6D67); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public numTokensSellToAddToLiquidity = 50000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet router address //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(); // testnet router address // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) private { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); require(account != deadAddress, "cannot exclude"); require(account != uniswapV2Pair, "cannot exclude"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0 && _burnFee==0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousBurnFee = _burnFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingFee = _previousMarketingFee; } function _approve(address owner, address spender, uint256 amount) private { 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); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled && _marketingFee > 0 && _liquidityFee > 0 ) { //add liquidity and send bnb to marketing wallet swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 liquidityTokens = contractTokenBalance.mul(_liquidityFee).div(_liquidityFee.add(_marketingFee)); // split the contract balance into halves uint256 half = liquidityTokens.div(2); uint256 otherHalf = liquidityTokens.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); swapTokensForEth(contractTokenBalance.sub(liquidityTokens)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ removeAllFee(); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = takeBurn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_burnFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tBurn = tAmount.div(100).mul(_burnFee); uint256 rBurn = tBurn.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rBurn); tTransferAmount = tTransferAmount.sub(tBurn); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); emit Transfer(sender, deadAddress, tBurn); return(tTransferAmount, rTransferAmount); } function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_marketingFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tMarketing = tAmount.div(100).mul(_marketingFee); uint256 rMarketing = tMarketing.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rMarketing); tTransferAmount = tTransferAmount.sub(tMarketing); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); emit Transfer(sender, address(this), tMarketing); return(tTransferAmount, rTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function setMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function setFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { _taxFee = taxFee; _liquidityFee = liquidityFee; _marketingFee = marketingFee; _burnFee = burnFee; } function setNumTokensSellToAddToLiquidity(uint256 newAmount) external onlyOwner() { numTokensSellToAddToLiquidity = newAmount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600060156101000a81548160ff0219169083151502179055506a52b7d2dcc80cd2e400000060075560075460001962000040919062000737565b6000196200004f91906200079e565b6008556040518060400160405280600781526020017f62306e616e7a6100000000000000000000000000000000000000000000000000815250600a908162000098919062000a49565b506040518060400160405280600681526020017f24424f4e5a410000000000000000000000000000000000000000000000000000815250600b9081620000df919062000a49565b506012600c60006101000a81548160ff021916908360ff1602179055506000600d55600d54600e556001600f55600f54601055600060115560115460125561dead601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002601455601454601555738868b5637e24946744a01666137ae2a5db4c6d67601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550690a968163f0a57b400000601955348015620001db57600080fd5b50620001fc620001f06200060960201b60201c565b6200061160201b60201c565b6008546001600062000213620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dc919062000b9a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000b9a565b6040518363ffffffff1660e01b81526004016200038992919062000bdd565b6020604051808303816000875af1158015620003a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cf919062000b9a565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600062000466620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000599620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620005fa919062000c1b565b60405180910390a35062000c38565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200074482620006fe565b91506200075183620006fe565b92508262000764576200076362000708565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007ab82620006fe565b9150620007b883620006fe565b9250828203905081811115620007d357620007d26200076f565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200085b57607f821691505b60208210810362000871576200087062000813565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200089c565b620008e786836200089c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200092a620009246200091e84620006fe565b620008ff565b620006fe565b9050919050565b6000819050919050565b620009468362000909565b6200095e620009558262000931565b848454620008a9565b825550505050565b600090565b6200097562000966565b620009828184846200093b565b505050565b5b81811015620009aa576200099e6000826200096b565b60018101905062000988565b5050565b601f821115620009f957620009c38162000877565b620009ce846200088c565b81016020851015620009de578190505b620009f6620009ed856200088c565b83018262000987565b50505b505050565b600082821c905092915050565b600062000a1e60001984600802620009fe565b1980831691505092915050565b600062000a39838362000a0b565b9150826002028217905092915050565b62000a5482620007d9565b67ffffffffffffffff81111562000a705762000a6f620007e4565b5b62000a7c825462000842565b62000a89828285620009ae565b600060209050601f83116001811462000ac1576000841562000aac578287015190505b62000ab8858262000a2b565b86555062000b28565b601f19841662000ad18662000877565b60005b8281101562000afb5784890151825560018201915060208501945060208101905062000ad4565b8683101562000b1b578489015162000b17601f89168262000a0b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b628262000b35565b9050919050565b62000b748162000b55565b811462000b8057600080fd5b50565b60008151905062000b948162000b69565b92915050565b60006020828403121562000bb35762000bb262000b30565b5b600062000bc38482850162000b83565b91505092915050565b62000bd78162000b55565b82525050565b600060408201905062000bf4600083018562000bcc565b62000c03602083018462000bcc565b9392505050565b62000c1581620006fe565b82525050565b600060208201905062000c32600083018462000c0a565b92915050565b614fd08062000c486000396000f3fe60806040526004361061021e5760003560e01c80635342acb411610123578063a457c2d7116100ab578063d38ab97d1161006f578063d38ab97d14610820578063dd62ed3e14610849578063ea2f0b3714610886578063f0f165af146108af578063f2fde38b146108d857610225565b8063a457c2d714610727578063a9059cbb14610764578063c0b0fda2146107a1578063c49b9a80146107cc578063d12a7688146107f557610225565b8063715018a6116100f2578063715018a61461065257806375f0a8741461066957806388f82020146106945780638da5cb5b146106d157806395d89b41146106fc57610225565b80635342acb4146105845780635d098b38146105c15780636bc87c3a146105ea57806370a082311461061557610225565b8063313ce567116101a6578063437823ec11610175578063437823ec1461049f5780634549b039146104c857806349bd5a5e146105055780634a74bb021461053057806352390c021461055b57610225565b8063313ce567146103e35780633685d4191461040e57806339509351146104375780633b124fe71461047457610225565b806318160ddd116101ed57806318160ddd146102e857806322976e0d1461031357806323b872dd1461033e57806327c8f8351461037b5780632d838119146103a657610225565b806306fdde031461022a578063095ea7b31461025557806313114a9d146102925780631694505e146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610901565b60405161024c9190613f78565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190614033565b610993565b604051610289919061408e565b60405180910390f35b34801561029e57600080fd5b506102a76109b1565b6040516102b491906140b8565b60405180910390f35b3480156102c957600080fd5b506102d26109bb565b6040516102df9190614132565b60405180910390f35b3480156102f457600080fd5b506102fd6109e1565b60405161030a91906140b8565b60405180910390f35b34801561031f57600080fd5b506103286109eb565b60405161033591906140b8565b60405180910390f35b34801561034a57600080fd5b506103656004803603810190610360919061414d565b6109f1565b604051610372919061408e565b60405180910390f35b34801561038757600080fd5b50610390610aca565b60405161039d91906141af565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141ca565b610af0565b6040516103da91906140b8565b60405180910390f35b3480156103ef57600080fd5b506103f8610b5e565b6040516104059190614213565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061422e565b610b75565b005b34801561044357600080fd5b5061045e60048036038101906104599190614033565b610e36565b60405161046b919061408e565b60405180910390f35b34801561048057600080fd5b50610489610ee9565b60405161049691906140b8565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061422e565b610eef565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190614287565b610f52565b6040516104fc91906140b8565b60405180910390f35b34801561051157600080fd5b5061051a610fd6565b60405161052791906141af565b60405180910390f35b34801561053c57600080fd5b50610545610ffc565b604051610552919061408e565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061422e565b61100f565b005b34801561059057600080fd5b506105ab60048036038101906105a6919061422e565b611356565b6040516105b8919061408e565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190614305565b6113ac565b005b3480156105f657600080fd5b506105ff6113f8565b60405161060c91906140b8565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061422e565b6113fe565b60405161064991906140b8565b60405180910390f35b34801561065e57600080fd5b506106676114e9565b005b34801561067557600080fd5b5061067e6114fd565b60405161068b9190614341565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b6919061422e565b611523565b6040516106c8919061408e565b60405180910390f35b3480156106dd57600080fd5b506106e6611579565b6040516106f391906141af565b60405180910390f35b34801561070857600080fd5b506107116115a2565b60405161071e9190613f78565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190614033565b611634565b60405161075b919061408e565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190614033565b611701565b604051610798919061408e565b60405180910390f35b3480156107ad57600080fd5b506107b661171f565b6040516107c391906140b8565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee919061435c565b611725565b005b34801561080157600080fd5b5061080a611781565b60405161081791906140b8565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190614389565b611787565b005b34801561085557600080fd5b50610870600480360381019061086b91906143f0565b6117b1565b60405161087d91906140b8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061422e565b611838565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906141ca565b61189b565b005b3480156108e457600080fd5b506108ff60048036038101906108fa919061422e565b6118ad565b005b6060600a80546109109061445f565b80601f016020809104026020016040519081016040528092919081815260200182805461093c9061445f565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b60006109a76109a0611930565b8484611938565b6001905092915050565b6000600954905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60145481565b60006109fe848484611b01565b610abf84610a0a611930565b610aba85604051806060016040528060288152602001614f4e60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a70611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c929092919063ffffffff16565b611938565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854821115610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90614502565b60405180910390fd5b6000610b41611cf6565b9050610b568184611d2190919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610b7d611d6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061456e565b60405180910390fd5b60005b600680549050811015610e32578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610c4457610c4361458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e1f5760066001600680549050610c9e91906145ec565b81548110610caf57610cae61458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610cee57610ced61458e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610de557610de4614620565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610e32565b8080610e2a9061464f565b915050610c0c565b5050565b6000610edf610e43611930565b84610eda8560036000610e54611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b611938565b6001905092915050565b600d5481565b610ef7611d6b565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906146e3565b60405180910390fd5b81610fb9576000610fa984611e47565b5050505050905080915050610fd0565b6000610fc484611e47565b50505050915050809150505b92915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060159054906101000a900460ff1681565b611017611d6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061456e565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b9061474f565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb9061474f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561129857611254600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610af0565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113b4611d6b565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561149957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114e4565b6114e1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610af0565b90505b919050565b6114f1611d6b565b6114fb6000611ea3565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546115b19061445f565b80601f01602080910402602001604051908101604052809291908181526020018280546115dd9061445f565b801561162a5780601f106115ff5761010080835404028352916020019161162a565b820191906000526020600020905b81548152906001019060200180831161160d57829003601f168201915b5050505050905090565b60006116f7611641611930565b846116f285604051806060016040528060258152602001614f76602591396003600061166b611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c929092919063ffffffff16565b611938565b6001905092915050565b600061171561170e611930565b8484611b01565b6001905092915050565b60115481565b61172d611d6b565b80600060156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611776919061408e565b60405180910390a150565b60195481565b61178f611d6b565b83600d8190555082600f81905550816014819055508060118190555050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611840611d6b565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118a3611d6b565b8060198190555050565b6118b5611d6b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906147e1565b60405180910390fd5b61192d81611ea3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90614905565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af491906140b8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614997565b60405180910390fd5b60008111611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614a29565b60405180910390fd5b6000611bbe306113fe565b905060006019548210159050808015611be45750600060149054906101000a900460ff16155b8015611c3d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611c555750600060159054906101000a900460ff165b8015611c6357506000601454115b8015611c7157506000600f54115b15611c8057611c7f82611f67565b5b611c8b858585612102565b5050505050565b6000838311158290611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19190613f78565b60405180910390fd5b5060008385611ce991906145ec565b9050809150509392505050565b6000806000611d036126c8565b91509150611d1a8183611d2190919063ffffffff16565b9250505090565b6000611d6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061297b565b905092915050565b611d73611930565b73ffffffffffffffffffffffffffffffffffffffff16611d91611579565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90614a95565b60405180910390fd5b565b6000808284611df89190614ab5565b905083811015611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490614b35565b60405180910390fd5b8091505092915050565b6000806000806000806000806000611e5e8a6129de565b9250925092506000806000611e7c8d8686611e77611cf6565b612a38565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600060146101000a81548160ff0219169083151502179055506000611fc1611f9e601454600f54611de990919063ffffffff16565b611fb3600f5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b90506000611fd9600283611d2190919063ffffffff16565b90506000611ff08284612b3b90919063ffffffff16565b9050600047905061200083612b85565b60006120158247612b3b90919063ffffffff16565b90506120218382612dc8565b61203c6120378688612b3b90919063ffffffff16565b612b85565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120a4573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516120d893929190614b55565b60405180910390a1505050505060008060146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121a35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121b1576121b0612ec8565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561226b5761226a612ec8565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561230e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123235761231e838383612f43565b61255a565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123c65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123db576123d68383836131a3565b612559565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561247f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124945761248f838383613403565b612558565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125365750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561254b576125468383836135f6565b612557565b612556838383613403565b5b5b5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125fb5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612609576126086138eb565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126b55750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c3576126c26138eb565b5b505050565b600080600060085490506000600754905060005b60068054905081101561293e578260016000600684815481106127025761270161458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806127f057508160026000600684815481106127885761278761458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128075760085460075494509450505050612977565b61289760016000600684815481106128225761282161458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b3b90919063ffffffff16565b925061292960026000600684815481106128b4576128b361458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b3b90919063ffffffff16565b915080806129369061464f565b9150506126dc565b50612956600754600854611d2190919063ffffffff16565b82101561296e57600854600754935093505050612977565b81819350935050505b9091565b600080831182906129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b99190613f78565b60405180910390fd5b50600083856129d19190614bbb565b9050809150509392505050565b6000806000806129ed85613911565b905060006129fa86613942565b90506000612a2382612a15858a612b3b90919063ffffffff16565b612b3b90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612a518589612ac190919063ffffffff16565b90506000612a688689612ac190919063ffffffff16565b90506000612a7f8789612ac190919063ffffffff16565b90506000612aa882612a9a8587612b3b90919063ffffffff16565b612b3b90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808303612ad35760009050612b35565b60008284612ae19190614bec565b9050828482612af09190614bbb565b14612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2790614ca0565b60405180910390fd5b809150505b92915050565b6000612b7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c92565b905092915050565b6000600267ffffffffffffffff811115612ba257612ba1614cc0565b5b604051908082528060200260200182016040528015612bd05781602001602082028036833780820191505090505b5090503081600081518110612be857612be761458e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb39190614d04565b81600181518110612cc757612cc661458e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d2e30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611938565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d92959493929190614e2a565b600060405180830381600087803b158015612dac57600080fd5b505af1158015612dc0573d6000803e3d6000fd5b505050505050565b612df530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611938565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612e7e96959493929190614e84565b60606040518083038185885af1158015612e9c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ec19190614efa565b5050505050565b6000600d54148015612edc57506000600f54145b8015612eea57506000601454145b8015612ef857506000601154145b612f4157600d54600e81905550600f546010819055506011546012819055506014546015819055506000600d819055506000600f81905550600060148190555060006011819055505b565b600080600080600080612f5587611e47565b955095509550955095509550612fb387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061304886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130dd85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061312981613973565b6131338483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161319091906140b8565b60405180910390a3505050505050505050565b6000806000806000806131b587611e47565b95509550955095509550955061321386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132a883600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338981613973565b6133938483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133f091906140b8565b60405180910390a3505050505050505050565b60008060008060008061341587611e47565b95509550955095509550955061342d8984878a613b52565b80965081945050506134418984878a613d50565b809650819450505061349b86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357c81613973565b6135868483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135e391906140b8565b60405180910390a3505050505050505050565b60008060008060008061360887611e47565b95509550955095509550955061366687600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136fb86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061382585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387181613973565b61387b8483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138d891906140b8565b60405180910390a3505050505050505050565b600e54600d81905550601054600f81905550601254601181905550601554601481905550565b600061393b606461392d600d5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b9050919050565b600061396c606461395e600f5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b9050919050565b600061397d611cf6565b905060006139948284612ac190919063ffffffff16565b90506139e881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b1357613acf83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613b2d82600854612b3b90919063ffffffff16565b600881905550613b4881600954611de990919063ffffffff16565b6009819055505050565b600080600060115403613b6a57848491509150613d47565b6000613b94601154613b86606487611d2190919063ffffffff16565b612ac190919063ffffffff16565b90506000613bb2613ba3611cf6565b83612ac190919063ffffffff16565b9050613bc78187612b3b90919063ffffffff16565b9550613bdc8288612b3b90919063ffffffff16565b9650613c528160016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b60016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d3691906140b8565b60405180910390a386869350935050505b94509492505050565b600080600060145403613d6857848491509150613edf565b6000613d92601454613d84606487611d2190919063ffffffff16565b612ac190919063ffffffff16565b90506000613db0613da1611cf6565b83612ac190919063ffffffff16565b9050613dc58187612b3b90919063ffffffff16565b9550613dda8288612b3b90919063ffffffff16565b9650613e2e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ece91906140b8565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f22578082015181840152602081019050613f07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f4a82613ee8565b613f548185613ef3565b9350613f64818560208601613f04565b613f6d81613f2e565b840191505092915050565b60006020820190508181036000830152613f928184613f3f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fca82613f9f565b9050919050565b613fda81613fbf565b8114613fe557600080fd5b50565b600081359050613ff781613fd1565b92915050565b6000819050919050565b61401081613ffd565b811461401b57600080fd5b50565b60008135905061402d81614007565b92915050565b6000806040838503121561404a57614049613f9a565b5b600061405885828601613fe8565b92505060206140698582860161401e565b9150509250929050565b60008115159050919050565b61408881614073565b82525050565b60006020820190506140a3600083018461407f565b92915050565b6140b281613ffd565b82525050565b60006020820190506140cd60008301846140a9565b92915050565b6000819050919050565b60006140f86140f36140ee84613f9f565b6140d3565b613f9f565b9050919050565b600061410a826140dd565b9050919050565b600061411c826140ff565b9050919050565b61412c81614111565b82525050565b60006020820190506141476000830184614123565b92915050565b60008060006060848603121561416657614165613f9a565b5b600061417486828701613fe8565b935050602061418586828701613fe8565b92505060406141968682870161401e565b9150509250925092565b6141a981613fbf565b82525050565b60006020820190506141c460008301846141a0565b92915050565b6000602082840312156141e0576141df613f9a565b5b60006141ee8482850161401e565b91505092915050565b600060ff82169050919050565b61420d816141f7565b82525050565b60006020820190506142286000830184614204565b92915050565b60006020828403121561424457614243613f9a565b5b600061425284828501613fe8565b91505092915050565b61426481614073565b811461426f57600080fd5b50565b6000813590506142818161425b565b92915050565b6000806040838503121561429e5761429d613f9a565b5b60006142ac8582860161401e565b92505060206142bd85828601614272565b9150509250929050565b60006142d282613f9f565b9050919050565b6142e2816142c7565b81146142ed57600080fd5b50565b6000813590506142ff816142d9565b92915050565b60006020828403121561431b5761431a613f9a565b5b6000614329848285016142f0565b91505092915050565b61433b816142c7565b82525050565b60006020820190506143566000830184614332565b92915050565b60006020828403121561437257614371613f9a565b5b600061438084828501614272565b91505092915050565b600080600080608085870312156143a3576143a2613f9a565b5b60006143b18782880161401e565b94505060206143c28782880161401e565b93505060406143d38782880161401e565b92505060606143e48782880161401e565b91505092959194509250565b6000806040838503121561440757614406613f9a565b5b600061441585828601613fe8565b925050602061442685828601613fe8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061447757607f821691505b60208210810361448a57614489614430565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144ec602a83613ef3565b91506144f782614490565b604082019050919050565b6000602082019050818103600083015261451b816144df565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614558601b83613ef3565b915061456382614522565b602082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f782613ffd565b915061460283613ffd565b925082820390508181111561461a576146196145bd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061465a82613ffd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361468c5761468b6145bd565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006146cd601f83613ef3565b91506146d882614697565b602082019050919050565b600060208201905081810360008301526146fc816146c0565b9050919050565b7f63616e6e6f74206578636c756465000000000000000000000000000000000000600082015250565b6000614739600e83613ef3565b915061474482614703565b602082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147cb602683613ef3565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061485d602483613ef3565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ef602283613ef3565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614981602583613ef3565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614a13602983613ef3565b9150614a1e826149b7565b604082019050919050565b60006020820190508181036000830152614a4281614a06565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a7f602083613ef3565b9150614a8a82614a49565b602082019050919050565b60006020820190508181036000830152614aae81614a72565b9050919050565b6000614ac082613ffd565b9150614acb83613ffd565b9250828201905080821115614ae357614ae26145bd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b1f601b83613ef3565b9150614b2a82614ae9565b602082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b6000606082019050614b6a60008301866140a9565b614b7760208301856140a9565b614b8460408301846140a9565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc682613ffd565b9150614bd183613ffd565b925082614be157614be0614b8c565b5b828204905092915050565b6000614bf782613ffd565b9150614c0283613ffd565b9250828202614c1081613ffd565b91508282048414831517614c2757614c266145bd565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c8a602183613ef3565b9150614c9582614c2e565b604082019050919050565b60006020820190508181036000830152614cb981614c7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614cfe81613fd1565b92915050565b600060208284031215614d1a57614d19613f9a565b5b6000614d2884828501614cef565b91505092915050565b6000819050919050565b6000614d56614d51614d4c84614d31565b6140d3565b613ffd565b9050919050565b614d6681614d3b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614da181613fbf565b82525050565b6000614db38383614d98565b60208301905092915050565b6000602082019050919050565b6000614dd782614d6c565b614de18185614d77565b9350614dec83614d88565b8060005b83811015614e1d578151614e048882614da7565b9750614e0f83614dbf565b925050600181019050614df0565b5085935050505092915050565b600060a082019050614e3f60008301886140a9565b614e4c6020830187614d5d565b8181036040830152614e5e8186614dcc565b9050614e6d60608301856141a0565b614e7a60808301846140a9565b9695505050505050565b600060c082019050614e9960008301896141a0565b614ea660208301886140a9565b614eb36040830187614d5d565b614ec06060830186614d5d565b614ecd60808301856141a0565b614eda60a08301846140a9565b979650505050505050565b600081519050614ef481614007565b92915050565b600080600060608486031215614f1357614f12613f9a565b5b6000614f2186828701614ee5565b9350506020614f3286828701614ee5565b9250506040614f4386828701614ee5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220076137939becd1043ee774f15f726a9bb76003d89eb5adb80ab8f43dee778a3464736f6c63430008120033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c80635342acb411610123578063a457c2d7116100ab578063d38ab97d1161006f578063d38ab97d14610820578063dd62ed3e14610849578063ea2f0b3714610886578063f0f165af146108af578063f2fde38b146108d857610225565b8063a457c2d714610727578063a9059cbb14610764578063c0b0fda2146107a1578063c49b9a80146107cc578063d12a7688146107f557610225565b8063715018a6116100f2578063715018a61461065257806375f0a8741461066957806388f82020146106945780638da5cb5b146106d157806395d89b41146106fc57610225565b80635342acb4146105845780635d098b38146105c15780636bc87c3a146105ea57806370a082311461061557610225565b8063313ce567116101a6578063437823ec11610175578063437823ec1461049f5780634549b039146104c857806349bd5a5e146105055780634a74bb021461053057806352390c021461055b57610225565b8063313ce567146103e35780633685d4191461040e57806339509351146104375780633b124fe71461047457610225565b806318160ddd116101ed57806318160ddd146102e857806322976e0d1461031357806323b872dd1461033e57806327c8f8351461037b5780632d838119146103a657610225565b806306fdde031461022a578063095ea7b31461025557806313114a9d146102925780631694505e146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610901565b60405161024c9190613f78565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190614033565b610993565b604051610289919061408e565b60405180910390f35b34801561029e57600080fd5b506102a76109b1565b6040516102b491906140b8565b60405180910390f35b3480156102c957600080fd5b506102d26109bb565b6040516102df9190614132565b60405180910390f35b3480156102f457600080fd5b506102fd6109e1565b60405161030a91906140b8565b60405180910390f35b34801561031f57600080fd5b506103286109eb565b60405161033591906140b8565b60405180910390f35b34801561034a57600080fd5b506103656004803603810190610360919061414d565b6109f1565b604051610372919061408e565b60405180910390f35b34801561038757600080fd5b50610390610aca565b60405161039d91906141af565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141ca565b610af0565b6040516103da91906140b8565b60405180910390f35b3480156103ef57600080fd5b506103f8610b5e565b6040516104059190614213565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061422e565b610b75565b005b34801561044357600080fd5b5061045e60048036038101906104599190614033565b610e36565b60405161046b919061408e565b60405180910390f35b34801561048057600080fd5b50610489610ee9565b60405161049691906140b8565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c1919061422e565b610eef565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190614287565b610f52565b6040516104fc91906140b8565b60405180910390f35b34801561051157600080fd5b5061051a610fd6565b60405161052791906141af565b60405180910390f35b34801561053c57600080fd5b50610545610ffc565b604051610552919061408e565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061422e565b61100f565b005b34801561059057600080fd5b506105ab60048036038101906105a6919061422e565b611356565b6040516105b8919061408e565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190614305565b6113ac565b005b3480156105f657600080fd5b506105ff6113f8565b60405161060c91906140b8565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061422e565b6113fe565b60405161064991906140b8565b60405180910390f35b34801561065e57600080fd5b506106676114e9565b005b34801561067557600080fd5b5061067e6114fd565b60405161068b9190614341565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b6919061422e565b611523565b6040516106c8919061408e565b60405180910390f35b3480156106dd57600080fd5b506106e6611579565b6040516106f391906141af565b60405180910390f35b34801561070857600080fd5b506107116115a2565b60405161071e9190613f78565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190614033565b611634565b60405161075b919061408e565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190614033565b611701565b604051610798919061408e565b60405180910390f35b3480156107ad57600080fd5b506107b661171f565b6040516107c391906140b8565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee919061435c565b611725565b005b34801561080157600080fd5b5061080a611781565b60405161081791906140b8565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190614389565b611787565b005b34801561085557600080fd5b50610870600480360381019061086b91906143f0565b6117b1565b60405161087d91906140b8565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061422e565b611838565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906141ca565b61189b565b005b3480156108e457600080fd5b506108ff60048036038101906108fa919061422e565b6118ad565b005b6060600a80546109109061445f565b80601f016020809104026020016040519081016040528092919081815260200182805461093c9061445f565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b60006109a76109a0611930565b8484611938565b6001905092915050565b6000600954905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60145481565b60006109fe848484611b01565b610abf84610a0a611930565b610aba85604051806060016040528060288152602001614f4e60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a70611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c929092919063ffffffff16565b611938565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854821115610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90614502565b60405180910390fd5b6000610b41611cf6565b9050610b568184611d2190919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b610b7d611d6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061456e565b60405180910390fd5b60005b600680549050811015610e32578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610c4457610c4361458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e1f5760066001600680549050610c9e91906145ec565b81548110610caf57610cae61458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610cee57610ced61458e565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610de557610de4614620565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610e32565b8080610e2a9061464f565b915050610c0c565b5050565b6000610edf610e43611930565b84610eda8560036000610e54611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b611938565b6001905092915050565b600d5481565b610ef7611d6b565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906146e3565b60405180910390fd5b81610fb9576000610fa984611e47565b5050505050905080915050610fd0565b6000610fc484611e47565b50505050915050809150505b92915050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060159054906101000a900460ff1681565b611017611d6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b9061456e565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b9061474f565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb9061474f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561129857611254600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610af0565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113b4611d6b565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561149957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114e4565b6114e1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610af0565b90505b919050565b6114f1611d6b565b6114fb6000611ea3565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546115b19061445f565b80601f01602080910402602001604051908101604052809291908181526020018280546115dd9061445f565b801561162a5780601f106115ff5761010080835404028352916020019161162a565b820191906000526020600020905b81548152906001019060200180831161160d57829003601f168201915b5050505050905090565b60006116f7611641611930565b846116f285604051806060016040528060258152602001614f76602591396003600061166b611930565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c929092919063ffffffff16565b611938565b6001905092915050565b600061171561170e611930565b8484611b01565b6001905092915050565b60115481565b61172d611d6b565b80600060156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611776919061408e565b60405180910390a150565b60195481565b61178f611d6b565b83600d8190555082600f81905550816014819055508060118190555050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611840611d6b565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118a3611d6b565b8060198190555050565b6118b5611d6b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b906147e1565b60405180910390fd5b61192d81611ea3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90614873565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90614905565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611af491906140b8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6790614997565b60405180910390fd5b60008111611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614a29565b60405180910390fd5b6000611bbe306113fe565b905060006019548210159050808015611be45750600060149054906101000a900460ff16155b8015611c3d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611c555750600060159054906101000a900460ff165b8015611c6357506000601454115b8015611c7157506000600f54115b15611c8057611c7f82611f67565b5b611c8b858585612102565b5050505050565b6000838311158290611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19190613f78565b60405180910390fd5b5060008385611ce991906145ec565b9050809150509392505050565b6000806000611d036126c8565b91509150611d1a8183611d2190919063ffffffff16565b9250505090565b6000611d6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061297b565b905092915050565b611d73611930565b73ffffffffffffffffffffffffffffffffffffffff16611d91611579565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90614a95565b60405180910390fd5b565b6000808284611df89190614ab5565b905083811015611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490614b35565b60405180910390fd5b8091505092915050565b6000806000806000806000806000611e5e8a6129de565b9250925092506000806000611e7c8d8686611e77611cf6565b612a38565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600060146101000a81548160ff0219169083151502179055506000611fc1611f9e601454600f54611de990919063ffffffff16565b611fb3600f5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b90506000611fd9600283611d2190919063ffffffff16565b90506000611ff08284612b3b90919063ffffffff16565b9050600047905061200083612b85565b60006120158247612b3b90919063ffffffff16565b90506120218382612dc8565b61203c6120378688612b3b90919063ffffffff16565b612b85565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120a4573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516120d893929190614b55565b60405180910390a1505050505060008060146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121a35750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121b1576121b0612ec8565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561226b5761226a612ec8565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561230e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123235761231e838383612f43565b61255a565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123c65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123db576123d68383836131a3565b612559565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561247f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124945761248f838383613403565b612558565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125365750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561254b576125468383836135f6565b612557565b612556838383613403565b5b5b5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125fb5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612609576126086138eb565b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126b55750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c3576126c26138eb565b5b505050565b600080600060085490506000600754905060005b60068054905081101561293e578260016000600684815481106127025761270161458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806127f057508160026000600684815481106127885761278761458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128075760085460075494509450505050612977565b61289760016000600684815481106128225761282161458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b3b90919063ffffffff16565b925061292960026000600684815481106128b4576128b361458e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b3b90919063ffffffff16565b915080806129369061464f565b9150506126dc565b50612956600754600854611d2190919063ffffffff16565b82101561296e57600854600754935093505050612977565b81819350935050505b9091565b600080831182906129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b99190613f78565b60405180910390fd5b50600083856129d19190614bbb565b9050809150509392505050565b6000806000806129ed85613911565b905060006129fa86613942565b90506000612a2382612a15858a612b3b90919063ffffffff16565b612b3b90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080612a518589612ac190919063ffffffff16565b90506000612a688689612ac190919063ffffffff16565b90506000612a7f8789612ac190919063ffffffff16565b90506000612aa882612a9a8587612b3b90919063ffffffff16565b612b3b90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808303612ad35760009050612b35565b60008284612ae19190614bec565b9050828482612af09190614bbb565b14612b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2790614ca0565b60405180910390fd5b809150505b92915050565b6000612b7d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c92565b905092915050565b6000600267ffffffffffffffff811115612ba257612ba1614cc0565b5b604051908082528060200260200182016040528015612bd05781602001602082028036833780820191505090505b5090503081600081518110612be857612be761458e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb39190614d04565b81600181518110612cc757612cc661458e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d2e30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611938565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612d92959493929190614e2a565b600060405180830381600087803b158015612dac57600080fd5b505af1158015612dc0573d6000803e3d6000fd5b505050505050565b612df530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611938565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612e7e96959493929190614e84565b60606040518083038185885af1158015612e9c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ec19190614efa565b5050505050565b6000600d54148015612edc57506000600f54145b8015612eea57506000601454145b8015612ef857506000601154145b612f4157600d54600e81905550600f546010819055506011546012819055506014546015819055506000600d819055506000600f81905550600060148190555060006011819055505b565b600080600080600080612f5587611e47565b955095509550955095509550612fb387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061304886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130dd85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061312981613973565b6131338483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161319091906140b8565b60405180910390a3505050505050505050565b6000806000806000806131b587611e47565b95509550955095509550955061321386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132a883600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338981613973565b6133938483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133f091906140b8565b60405180910390a3505050505050505050565b60008060008060008061341587611e47565b95509550955095509550955061342d8984878a613b52565b80965081945050506134418984878a613d50565b809650819450505061349b86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357c81613973565b6135868483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135e391906140b8565b60405180910390a3505050505050505050565b60008060008060008061360887611e47565b95509550955095509550955061366687600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136fb86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3b90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061382585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387181613973565b61387b8483613b18565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138d891906140b8565b60405180910390a3505050505050505050565b600e54600d81905550601054600f81905550601254601181905550601554601481905550565b600061393b606461392d600d5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b9050919050565b600061396c606461395e600f5485612ac190919063ffffffff16565b611d2190919063ffffffff16565b9050919050565b600061397d611cf6565b905060006139948284612ac190919063ffffffff16565b90506139e881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613b1357613acf83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613b2d82600854612b3b90919063ffffffff16565b600881905550613b4881600954611de990919063ffffffff16565b6009819055505050565b600080600060115403613b6a57848491509150613d47565b6000613b94601154613b86606487611d2190919063ffffffff16565b612ac190919063ffffffff16565b90506000613bb2613ba3611cf6565b83612ac190919063ffffffff16565b9050613bc78187612b3b90919063ffffffff16565b9550613bdc8288612b3b90919063ffffffff16565b9650613c528160016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b60016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d3691906140b8565b60405180910390a386869350935050505b94509492505050565b600080600060145403613d6857848491509150613edf565b6000613d92601454613d84606487611d2190919063ffffffff16565b612ac190919063ffffffff16565b90506000613db0613da1611cf6565b83612ac190919063ffffffff16565b9050613dc58187612b3b90919063ffffffff16565b9550613dda8288612b3b90919063ffffffff16565b9650613e2e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ece91906140b8565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f22578082015181840152602081019050613f07565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f4a82613ee8565b613f548185613ef3565b9350613f64818560208601613f04565b613f6d81613f2e565b840191505092915050565b60006020820190508181036000830152613f928184613f3f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fca82613f9f565b9050919050565b613fda81613fbf565b8114613fe557600080fd5b50565b600081359050613ff781613fd1565b92915050565b6000819050919050565b61401081613ffd565b811461401b57600080fd5b50565b60008135905061402d81614007565b92915050565b6000806040838503121561404a57614049613f9a565b5b600061405885828601613fe8565b92505060206140698582860161401e565b9150509250929050565b60008115159050919050565b61408881614073565b82525050565b60006020820190506140a3600083018461407f565b92915050565b6140b281613ffd565b82525050565b60006020820190506140cd60008301846140a9565b92915050565b6000819050919050565b60006140f86140f36140ee84613f9f565b6140d3565b613f9f565b9050919050565b600061410a826140dd565b9050919050565b600061411c826140ff565b9050919050565b61412c81614111565b82525050565b60006020820190506141476000830184614123565b92915050565b60008060006060848603121561416657614165613f9a565b5b600061417486828701613fe8565b935050602061418586828701613fe8565b92505060406141968682870161401e565b9150509250925092565b6141a981613fbf565b82525050565b60006020820190506141c460008301846141a0565b92915050565b6000602082840312156141e0576141df613f9a565b5b60006141ee8482850161401e565b91505092915050565b600060ff82169050919050565b61420d816141f7565b82525050565b60006020820190506142286000830184614204565b92915050565b60006020828403121561424457614243613f9a565b5b600061425284828501613fe8565b91505092915050565b61426481614073565b811461426f57600080fd5b50565b6000813590506142818161425b565b92915050565b6000806040838503121561429e5761429d613f9a565b5b60006142ac8582860161401e565b92505060206142bd85828601614272565b9150509250929050565b60006142d282613f9f565b9050919050565b6142e2816142c7565b81146142ed57600080fd5b50565b6000813590506142ff816142d9565b92915050565b60006020828403121561431b5761431a613f9a565b5b6000614329848285016142f0565b91505092915050565b61433b816142c7565b82525050565b60006020820190506143566000830184614332565b92915050565b60006020828403121561437257614371613f9a565b5b600061438084828501614272565b91505092915050565b600080600080608085870312156143a3576143a2613f9a565b5b60006143b18782880161401e565b94505060206143c28782880161401e565b93505060406143d38782880161401e565b92505060606143e48782880161401e565b91505092959194509250565b6000806040838503121561440757614406613f9a565b5b600061441585828601613fe8565b925050602061442685828601613fe8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061447757607f821691505b60208210810361448a57614489614430565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006144ec602a83613ef3565b91506144f782614490565b604082019050919050565b6000602082019050818103600083015261451b816144df565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614558601b83613ef3565b915061456382614522565b602082019050919050565b600060208201905081810360008301526145878161454b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f782613ffd565b915061460283613ffd565b925082820390508181111561461a576146196145bd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061465a82613ffd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361468c5761468b6145bd565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006146cd601f83613ef3565b91506146d882614697565b602082019050919050565b600060208201905081810360008301526146fc816146c0565b9050919050565b7f63616e6e6f74206578636c756465000000000000000000000000000000000000600082015250565b6000614739600e83613ef3565b915061474482614703565b602082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147cb602683613ef3565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061485d602483613ef3565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ef602283613ef3565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614981602583613ef3565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614a13602983613ef3565b9150614a1e826149b7565b604082019050919050565b60006020820190508181036000830152614a4281614a06565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a7f602083613ef3565b9150614a8a82614a49565b602082019050919050565b60006020820190508181036000830152614aae81614a72565b9050919050565b6000614ac082613ffd565b9150614acb83613ffd565b9250828201905080821115614ae357614ae26145bd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b1f601b83613ef3565b9150614b2a82614ae9565b602082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b6000606082019050614b6a60008301866140a9565b614b7760208301856140a9565b614b8460408301846140a9565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc682613ffd565b9150614bd183613ffd565b925082614be157614be0614b8c565b5b828204905092915050565b6000614bf782613ffd565b9150614c0283613ffd565b9250828202614c1081613ffd565b91508282048414831517614c2757614c266145bd565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c8a602183613ef3565b9150614c9582614c2e565b604082019050919050565b60006020820190508181036000830152614cb981614c7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614cfe81613fd1565b92915050565b600060208284031215614d1a57614d19613f9a565b5b6000614d2884828501614cef565b91505092915050565b6000819050919050565b6000614d56614d51614d4c84614d31565b6140d3565b613ffd565b9050919050565b614d6681614d3b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614da181613fbf565b82525050565b6000614db38383614d98565b60208301905092915050565b6000602082019050919050565b6000614dd782614d6c565b614de18185614d77565b9350614dec83614d88565b8060005b83811015614e1d578151614e048882614da7565b9750614e0f83614dbf565b925050600181019050614df0565b5085935050505092915050565b600060a082019050614e3f60008301886140a9565b614e4c6020830187614d5d565b8181036040830152614e5e8186614dcc565b9050614e6d60608301856141a0565b614e7a60808301846140a9565b9695505050505050565b600060c082019050614e9960008301896141a0565b614ea660208301886140a9565b614eb36040830187614d5d565b614ec06060830186614d5d565b614ecd60808301856141a0565b614eda60a08301846140a9565b979650505050505050565b600081519050614ef481614007565b92915050565b600080600060608486031215614f1357614f12613f9a565b5b6000614f2186828701614ee5565b9350506020614f3286828701614ee5565b9250506040614f4386828701614ee5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220076137939becd1043ee774f15f726a9bb76003d89eb5adb80ab8f43dee778a3464736f6c63430008120033
Deployed Bytecode Sourcemap
24511:20624:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27319:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28231:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29352:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25900:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27596:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25700:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28400:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25620:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30277:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27505:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31001:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28721:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25348:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44176:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29833:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24658:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30538:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43923:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44299:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25435:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27699:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4749:103;;;;;;;;;;;;;:::i;:::-;;25799:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29224:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4108:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27410;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28947:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27905:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25536:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44861:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25987:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44432:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28080:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44058:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44707:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5007:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27319:83;27356:13;27389:5;27382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27319:83;:::o;28231:161::-;28306:4;28323:39;28332:12;:10;:12::i;:::-;28346:7;28355:6;28323:8;:39::i;:::-;28380:4;28373:11;;28231:161;;;;:::o;29352:87::-;29394:7;29421:10;;29414:17;;29352:87;:::o;25900:42::-;;;;;;;;;;;;;:::o;27596:95::-;27649:7;27676;;27669:14;;27596:95;:::o;25700:32::-;;;;:::o;28400:313::-;28498:4;28515:36;28525:6;28533:9;28544:6;28515:9;:36::i;:::-;28562:121;28571:6;28579:12;:10;:12::i;:::-;28593:89;28631:6;28593:89;;;;;;;;;;;;;;;;;:11;:19;28605:6;28593:19;;;;;;;;;;;;;;;:33;28613:12;:10;:12::i;:::-;28593:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28562:8;:121::i;:::-;28701:4;28694:11;;28400:313;;;;;:::o;25620:71::-;;;;;;;;;;;;;:::o;30277:253::-;30343:7;30382;;30371;:18;;30363:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30447:19;30470:10;:8;:10::i;:::-;30447:33;;30498:24;30510:11;30498:7;:11;;:24;;;;:::i;:::-;30491:31;;;30277:253;;;:::o;27505:83::-;27546:5;27571:9;;;;;;;;;;;27564:16;;27505:83;:::o;31001:479::-;3994:13;:11;:13::i;:::-;31083:11:::1;:20;31095:7;31083:20;;;;;;;;;;;;;;;;;;;;;;;;;31075:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31151:9;31146:327;31170:9;:16;;;;31166:1;:20;31146:327;;;31228:7;31212:23;;:9;31222:1;31212:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;31208:254:::1;;31271:9;31300:1;31281:9;:16;;;;:20;;;;:::i;:::-;31271:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31256:9;31266:1;31256:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31340:1;31321:7;:16;31329:7;31321:16;;;;;;;;;;;;;;;:20;;;;31383:5;31360:11;:20;31372:7;31360:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31407:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:5;;31208:254;31188:3;;;;;:::i;:::-;;;;31146:327;;;;31001:479:::0;:::o;28721:218::-;28809:4;28826:83;28835:12;:10;:12::i;:::-;28849:7;28858:50;28897:10;28858:11;:25;28870:12;:10;:12::i;:::-;28858:25;;;;;;;;;;;;;;;:34;28884:7;28858:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28826:8;:83::i;:::-;28927:4;28920:11;;28721:218;;;;:::o;25348:26::-;;;;:::o;44176:111::-;3994:13;:11;:13::i;:::-;44275:4:::1;44245:18;:27;44264:7;44245:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44176:111:::0;:::o;29833:436::-;29923:7;29962;;29951;:18;;29943:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30021:17;30016:246;;30056:15;30080:19;30091:7;30080:10;:19::i;:::-;30055:44;;;;;;;30121:7;30114:14;;;;;30016:246;30163:23;30194:19;30205:7;30194:10;:19::i;:::-;30161:52;;;;;;;30235:15;30228:22;;;29833:436;;;;;:::o;25949:29::-;;;;;;;;;;;;;:::o;24658:40::-;;;;;;;;;;;;;:::o;30538:455::-;3994:13;:11;:13::i;:::-;30621:11:::1;:20;30633:7;30621:20;;;;;;;;;;;;;;;;;;;;;;;;;30620:21;30612:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30703:11;;;;;;;;;;;30692:22;;:7;:22;;::::0;30684:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30763:13;;;;;;;;;;;30752:24;;:7;:24;;::::0;30744:51:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30828:1;30809:7;:16;30817:7;30809:16;;;;;;;;;;;;;;;;:20;30806:108;;;30865:37;30885:7;:16;30893:7;30885:16;;;;;;;;;;;;;;;;30865:19;:37::i;:::-;30846:7;:16;30854:7;30846:16;;;;;;;;;;;;;;;:56;;;;30806:108;30947:4;30924:11;:20;30936:7;30924:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30962:9;30977:7;30962:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30538:455:::0;:::o;43923:123::-;43987:4;44011:18;:27;44030:7;44011:27;;;;;;;;;;;;;;;;;;;;;;;;;44004:34;;43923:123;;;:::o;44299:122::-;3994:13;:11;:13::i;:::-;44404:9:::1;44386:15;;:27;;;;;;;;;;;;;;;;;;44299:122:::0;:::o;25435:32::-;;;;:::o;27699:198::-;27765:7;27789:11;:20;27801:7;27789:20;;;;;;;;;;;;;;;;;;;;;;;;;27785:49;;;27818:7;:16;27826:7;27818:16;;;;;;;;;;;;;;;;27811:23;;;;27785:49;27852:37;27872:7;:16;27880:7;27872:16;;;;;;;;;;;;;;;;27852:19;:37::i;:::-;27845:44;;27699:198;;;;:::o;4749:103::-;3994:13;:11;:13::i;:::-;4814:30:::1;4841:1;4814:18;:30::i;:::-;4749:103::o:0;25799:92::-;;;;;;;;;;;;;:::o;29224:120::-;29292:4;29316:11;:20;29328:7;29316:20;;;;;;;;;;;;;;;;;;;;;;;;;29309:27;;29224:120;;;:::o;4108:87::-;4154:7;4181:6;;;;;;;;;;;4174:13;;4108:87;:::o;27410:::-;27449:13;27482:7;27475:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27410:87;:::o;28947:269::-;29040:4;29057:129;29066:12;:10;:12::i;:::-;29080:7;29089:96;29128:15;29089:96;;;;;;;;;;;;;;;;;:11;:25;29101:12;:10;:12::i;:::-;29089:25;;;;;;;;;;;;;;;:34;29115:7;29089:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29057:8;:129::i;:::-;29204:4;29197:11;;28947:269;;;;:::o;27905:167::-;27983:4;28000:42;28010:12;:10;:12::i;:::-;28024:9;28035:6;28000:9;:42::i;:::-;28060:4;28053:11;;27905:167;;;;:::o;25536:27::-;;;;:::o;44861:171::-;3994:13;:11;:13::i;:::-;44962:8:::1;44938:21;;:32;;;;;;;;;;;;;;;;;;44986:38;45015:8;44986:38;;;;;;:::i;:::-;;;;;;;;44861:171:::0;:::o;25987:61::-;;;;:::o;44432:263::-;3994:13;:11;:13::i;:::-;44574:6:::1;44564:7;:16;;;;44607:12;44591:13;:28;;;;44646:12;44630:13;:28;;;;44680:7;44669:8;:18;;;;44432:263:::0;;;;:::o;28080:143::-;28161:7;28188:11;:18;28200:5;28188:18;;;;;;;;;;;;;;;:27;28207:7;28188:27;;;;;;;;;;;;;;;;28181:34;;28080:143;;;;:::o;44058:110::-;3994:13;:11;:13::i;:::-;44155:5:::1;44125:18;:27;44144:7;44125:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44058:110:::0;:::o;44707:142::-;3994:13;:11;:13::i;:::-;44832:9:::1;44800:29;:41;;;;44707:142:::0;:::o;5007:201::-;3994:13;:11;:13::i;:::-;5116:1:::1;5096:22;;:8;:22;;::::0;5088:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5172:28;5191:8;5172:18;:28::i;:::-;5007:201:::0;:::o;2668:115::-;2721:15;2764:10;2749:26;;2668:115;:::o;35591:337::-;35701:1;35684:19;;:5;:19;;;35676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35782:1;35763:21;;:7;:21;;;35755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35866:6;35836:11;:18;35848:5;35836:18;;;;;;;;;;;;;;;:27;35855:7;35836:27;;;;;;;;;;;;;;;:36;;;;35904:7;35888:32;;35897:5;35888:32;;;35913:6;35888:32;;;;;;:::i;:::-;;;;;;;;35591:337;;;:::o;35936:1184::-;36074:1;36058:18;;:4;:18;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36146:1;36137:6;:10;36129:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36488:28;36519:24;36537:4;36519:9;:24::i;:::-;36488:55;;36562:24;36613:29;;36589:20;:53;;36562:80;;36671:19;:53;;;;;36708:16;;;;;;;;;;;36707:17;36671:53;:89;;;;;36747:13;;;;;;;;;;;36741:19;;:2;:19;;;36671:89;:127;;;;;36777:21;;;;;;;;;;;36671:127;:161;;;;;36831:1;36815:13;;:17;36671:161;:195;;;;;36865:1;36849:13;;:17;36671:195;36653:364;;;36969:36;36984:20;36969:14;:36::i;:::-;36653:364;37082:30;37097:4;37102:2;37105:6;37082:14;:30::i;:::-;36039:1081;;35936:1184;;;:::o;6835:192::-;6921:7;6954:1;6949;:6;;6957:12;6941:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6981:9;6997:1;6993;:5;;;;:::i;:::-;6981:17;;7018:1;7011:8;;;6835:192;;;;;:::o;33495:163::-;33536:7;33557:15;33574;33593:19;:17;:19::i;:::-;33556:56;;;;33630:20;33642:7;33630;:11;;:20;;;;:::i;:::-;33623:27;;;;33495:163;:::o;8233:132::-;8291:7;8318:39;8322:1;8325;8318:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8311:46;;8233:132;;;;:::o;4273:::-;4348:12;:10;:12::i;:::-;4337:23;;:7;:5;:7::i;:::-;:23;;;4329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4273:132::o;5932:181::-;5990:7;6010:9;6026:1;6022;:5;;;;:::i;:::-;6010:17;;6051:1;6046;:6;;6038:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6104:1;6097:8;;;5932:181;;;;:::o;32293:419::-;32352:7;32361;32370;32379;32388;32397;32418:23;32443:12;32457:18;32479:20;32491:7;32479:11;:20::i;:::-;32417:82;;;;;;32511:15;32528:23;32553:12;32569:50;32581:7;32590:4;32596:10;32608;:8;:10::i;:::-;32569:11;:50::i;:::-;32510:109;;;;;;32638:7;32647:15;32664:4;32670:15;32687:4;32693:10;32630:74;;;;;;;;;;;;;;;;;;32293:419;;;;;;;:::o;5368:191::-;5442:16;5461:6;;;;;;;;;;;5442:25;;5487:8;5478:6;;:17;;;;;;;;;;;;;;;;;;5542:8;5511:40;;5532:8;5511:40;;;;;;;;;;;;5431:128;5368:191;:::o;37128:1219::-;26374:4;26355:16;;:23;;;;;;;;;;;;;;;;;;37213::::1;37239:77;37283:32;37301:13;;37283;;:17;;:32;;;;:::i;:::-;37239:39;37264:13;;37239:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;37213:103;;37378:12;37393:22;37413:1;37393:15;:19;;:22;;;;:::i;:::-;37378:37;;37426:17;37446:25;37466:4;37446:15;:19;;:25;;;;:::i;:::-;37426:45;;37749:22;37774:21;37749:46;;37840:22;37857:4;37840:16;:22::i;:::-;37993:18;38014:41;38040:14;38014:21;:25;;:41;;;;:::i;:::-;37993:62;;38105:35;38118:9;38129:10;38105:12;:35::i;:::-;38153:59;38170:41;38195:15;38170:20;:24;;:41;;;;:::i;:::-;38153:16;:59::i;:::-;38223:15;;;;;;;;;;;:24;;:47;38248:21;38223:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38296:43;38311:4;38317:10;38329:9;38296:43;;;;;;;;:::i;:::-;;;;;;;;37202:1145;;;;;26420:5:::0;26401:16;;:24;;;;;;;;;;;;;;;;;;37128:1219;:::o;39550:1185::-;39653:18;:26;39672:6;39653:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39683:18;:29;39702:9;39683:29;;;;;;;;;;;;;;;;;;;;;;;;;39653:59;39650:117;;;39740:14;:12;:14::i;:::-;39650:117;39790:13;;;;;;;;;;;39780:23;;:6;:23;;;;:53;;;;;39820:13;;;;;;;;;;;39807:26;;:9;:26;;;;39780:53;39777:98;;;39849:14;:12;:14::i;:::-;39777:98;39891:11;:19;39903:6;39891:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;39915:11;:22;39927:9;39915:22;;;;;;;;;;;;;;;;;;;;;;;;;39914:23;39891:46;39887:597;;;39954:48;39976:6;39984:9;39995:6;39954:21;:48::i;:::-;39887:597;;;40025:11;:19;40037:6;40025:19;;;;;;;;;;;;;;;;;;;;;;;;;40024:20;:46;;;;;40048:11;:22;40060:9;40048:22;;;;;;;;;;;;;;;;;;;;;;;;;40024:46;40020:464;;;40087:46;40107:6;40115:9;40126:6;40087:19;:46::i;:::-;40020:464;;;40156:11;:19;40168:6;40156:19;;;;;;;;;;;;;;;;;;;;;;;;;40155:20;:47;;;;;40180:11;:22;40192:9;40180:22;;;;;;;;;;;;;;;;;;;;;;;;;40179:23;40155:47;40151:333;;;40219:44;40237:6;40245:9;40256:6;40219:17;:44::i;:::-;40151:333;;;40285:11;:19;40297:6;40285:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40308:11;:22;40320:9;40308:22;;;;;;;;;;;;;;;;;;;;;;;;;40285:45;40281:203;;;40347:48;40369:6;40377:9;40388:6;40347:21;:48::i;:::-;40281:203;;;40428:44;40446:6;40454:9;40465:6;40428:17;:44::i;:::-;40281:203;40151:333;40020:464;39887:597;40507:18;:26;40526:6;40507:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40537:18;:29;40556:9;40537:29;;;;;;;;;;;;;;;;;;;;;;;;;40507:59;40504:115;;;40592:15;:13;:15::i;:::-;40504:115;40642:13;;;;;;;;;;;40632:23;;:6;:23;;;;:53;;;;;40672:13;;;;;;;;;;;40659:26;;:9;:26;;;;40632:53;40629:99;;;40701:15;:13;:15::i;:::-;40629:99;39550:1185;;;:::o;33666:561::-;33716:7;33725;33745:15;33763:7;;33745:25;;33781:15;33799:7;;33781:25;;33828:9;33823:289;33847:9;:16;;;;33843:1;:20;33823:289;;;33913:7;33889;:21;33897:9;33907:1;33897:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33889:21;;;;;;;;;;;;;;;;:31;:66;;;;33948:7;33924;:21;33932:9;33942:1;33932:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33924:21;;;;;;;;;;;;;;;;:31;33889:66;33885:97;;;33965:7;;33974;;33957:25;;;;;;;;;33885:97;34007:34;34019:7;:21;34027:9;34037:1;34027:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34019:21;;;;;;;;;;;;;;;;34007:7;:11;;:34;;;;:::i;:::-;33997:44;;34066:34;34078:7;:21;34086:9;34096:1;34086:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34078:21;;;;;;;;;;;;;;;;34066:7;:11;;:34;;;;:::i;:::-;34056:44;;33865:3;;;;;:::i;:::-;;;;33823:289;;;;34136:20;34148:7;;34136;;:11;;:20;;;;:::i;:::-;34126:7;:30;34122:61;;;34166:7;;34175;;34158:25;;;;;;;;34122:61;34202:7;34211;34194:25;;;;;;33666:561;;;:::o;8861:278::-;8947:7;8979:1;8975;:5;8982:12;8967:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9006:9;9022:1;9018;:5;;;;:::i;:::-;9006:17;;9130:1;9123:8;;;8861:278;;;;;:::o;32720:330::-;32780:7;32789;32798;32818:12;32833:24;32849:7;32833:15;:24::i;:::-;32818:39;;32868:18;32889:30;32911:7;32889:21;:30::i;:::-;32868:51;;32930:23;32956:33;32978:10;32956:17;32968:4;32956:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32930:59;;33008:15;33025:4;33031:10;33000:42;;;;;;;;;32720:330;;;;;:::o;33058:429::-;33173:7;33182;33191;33211:15;33229:24;33241:11;33229:7;:11;;:24;;;;:::i;:::-;33211:42;;33264:12;33279:21;33288:11;33279:4;:8;;:21;;;;:::i;:::-;33264:36;;33311:18;33332:27;33347:11;33332:10;:14;;:27;;;;:::i;:::-;33311:48;;33370:23;33396:33;33418:10;33396:17;33408:4;33396:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33370:59;;33448:7;33457:15;33474:4;33440:39;;;;;;;;;;33058:429;;;;;;;;:::o;7286:471::-;7344:7;7594:1;7589;:6;7585:47;;7619:1;7612:8;;;;7585:47;7644:9;7660:1;7656;:5;;;;:::i;:::-;7644:17;;7689:1;7684;7680;:5;;;;:::i;:::-;:10;7672:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7748:1;7741:8;;;7286:471;;;;;:::o;6396:136::-;6454:7;6481:43;6485:1;6488;6481:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6474:50;;6396:136;;;;:::o;38355:589::-;38481:21;38519:1;38505:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38481:40;;38550:4;38532;38537:1;38532:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38576:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38566:4;38571:1;38566:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38611:62;38628:4;38643:15;;;;;;;;;;;38661:11;38611:8;:62::i;:::-;38712:15;;;;;;;;;;;:66;;;38793:11;38819:1;38863:4;38890;38910:15;38712:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38410:534;38355:589;:::o;38952:517::-;39100:62;39117:4;39132:15;;;;;;;;;;;39150:11;39100:8;:62::i;:::-;39205:15;;;;;;;;;;;:31;;;39244:9;39277:4;39297:11;39323:1;39366;39409:11;;;;;;;;;;;39435:15;39205:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38952:517;;:::o;34942:422::-;34999:1;34988:7;;:12;:34;;;;;35021:1;35004:13;;:18;34988:34;:54;;;;;35041:1;35026:13;;:16;34988:54;:69;;;;;35056:1;35046:8;;:11;34988:69;35059:7;34985:81;35104:7;;35086:15;:25;;;;35146:13;;35122:21;:37;;;;35189:8;;35170:16;:27;;;;35232:13;;35208:21;:37;;;;35276:1;35266:7;:11;;;;35304:1;35288:13;:17;;;;35332:1;35316:13;:17;;;;35355:1;35344:8;:12;;;;34942:422;:::o;43349:566::-;43452:15;43469:23;43494:12;43508:23;43533:12;43547:18;43569:19;43580:7;43569:10;:19::i;:::-;43451:137;;;;;;;;;;;;43617:28;43637:7;43617;:15;43625:6;43617:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43599:7;:15;43607:6;43599:15;;;;;;;;;;;;;;;:46;;;;43674:28;43694:7;43674;:15;43682:6;43674:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43656:7;:15;43664:6;43656:15;;;;;;;;;;;;;;;:46;;;;43734:39;43757:15;43734:7;:18;43742:9;43734:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43713:7;:18;43721:9;43713:18;;;;;;;;;;;;;;;:60;;;;43787:26;43802:10;43787:14;:26::i;:::-;43824:23;43836:4;43842;43824:11;:23::i;:::-;43880:9;43863:44;;43872:6;43863:44;;;43891:15;43863:44;;;;;;:::i;:::-;;;;;;;;43440:475;;;;;;43349:566;;;:::o;42755:586::-;42856:15;42873:23;42898:12;42912:23;42937:12;42951:18;42973:19;42984:7;42973:10;:19::i;:::-;42855:137;;;;;;;;;;;;43021:28;43041:7;43021;:15;43029:6;43021:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43003:7;:15;43011:6;43003:15;;;;;;;;;;;;;;;:46;;;;43081:39;43104:15;43081:7;:18;43089:9;43081:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43060:7;:18;43068:9;43060:18;;;;;;;;;;;;;;;:60;;;;43152:39;43175:15;43152:7;:18;43160:9;43152:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43131:7;:18;43139:9;43131:18;;;;;;;;;;;;;;;:60;;;;43213:26;43228:10;43213:14;:26::i;:::-;43250:23;43262:4;43268;43250:11;:23::i;:::-;43306:9;43289:44;;43298:6;43289:44;;;43317:15;43289:44;;;;;;:::i;:::-;;;;;;;;42844:497;;;;;;42755:586;;;:::o;40743:721::-;40842:15;40859:23;40884:12;40898:23;40923:12;40937:18;40959:19;40970:7;40959:10;:19::i;:::-;40841:137;;;;;;;;;;;;41026:59;41035:6;41043:15;41060;41077:7;41026:8;:59::i;:::-;40989:96;;;;;;;;41133:64;41147:6;41155:15;41172;41189:7;41133:13;:64::i;:::-;41096:101;;;;;;;;41226:28;41246:7;41226;:15;41234:6;41226:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41208:7;:15;41216:6;41208:15;;;;;;;;;;;;;;;:46;;;;41286:39;41309:15;41286:7;:18;41294:9;41286:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41265:7;:18;41273:9;41265:18;;;;;;;;;;;;;;;:60;;;;41336:26;41351:10;41336:14;:26::i;:::-;41373:23;41385:4;41391;41373:11;:23::i;:::-;41429:9;41412:44;;41421:6;41412:44;;;41440:15;41412:44;;;;;;:::i;:::-;;;;;;;;40830:634;;;;;;40743:721;;;:::o;31488:642::-;31591:15;31608:23;31633:12;31647:23;31672:12;31686:18;31708:19;31719:7;31708:10;:19::i;:::-;31590:137;;;;;;;;;;;;31756:28;31776:7;31756;:15;31764:6;31756:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31738:7;:15;31746:6;31738:15;;;;;;;;;;;;;;;:46;;;;31813:28;31833:7;31813;:15;31821:6;31813:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31795:7;:15;31803:6;31795:15;;;;;;;;;;;;;;;:46;;;;31873:39;31896:15;31873:7;:18;31881:9;31873:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31852:7;:18;31860:9;31852:18;;;;;;;;;;;;;;;:60;;;;31944:39;31967:15;31944:7;:18;31952:9;31944:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31923:7;:18;31931:9;31923:18;;;;;;;;;;;;;;;:60;;;;32002:26;32017:10;32002:14;:26::i;:::-;32039:23;32051:4;32057;32039:11;:23::i;:::-;32095:9;32078:44;;32087:6;32078:44;;;32106:15;32078:44;;;;;;:::i;:::-;;;;;;;;31579:551;;;;;;31488:642;;;:::o;35376:207::-;35429:15;;35419:7;:25;;;;35470:21;;35454:13;:37;;;;35512:16;;35501:8;:27;;;;35554:21;;35538:13;:37;;;;35376:207::o;34780:154::-;34844:7;34871:55;34910:5;34871:20;34883:7;;34871;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;34864:62;;34780:154;;;:::o;34602:166::-;34672:7;34699:61;34744:5;34699:26;34711:13;;34699:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;34692:68;;34602:166;;;:::o;34239:355::-;34302:19;34325:10;:8;:10::i;:::-;34302:33;;34346:18;34367:27;34382:11;34367:10;:14;;:27;;;;:::i;:::-;34346:48;;34430:38;34457:10;34430:7;:22;34446:4;34430:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34405:7;:22;34421:4;34405:22;;;;;;;;;;;;;;;:63;;;;34482:11;:26;34502:4;34482:26;;;;;;;;;;;;;;;;;;;;;;;;;34479:107;;;34548:38;34575:10;34548:7;:22;34564:4;34548:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34523:7;:22;34539:4;34523:22;;;;;;;;;;;;;;;:63;;;;34479:107;34291:303;;34239:355;:::o;32138:147::-;32216:17;32228:4;32216:7;;:11;;:17;;;;:::i;:::-;32206:7;:27;;;;32257:20;32272:4;32257:10;;:14;;:20;;;;:::i;:::-;32244:10;:33;;;;32138:147;;:::o;41474:604::-;41597:7;41606;41639:1;41629:8;;:11;41626:62;;41652:15;41669;41645:40;;;;;;41626:62;41698:13;41714:30;41735:8;;41714:16;41726:3;41714:7;:11;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;41698:46;;41755:13;41771:21;41781:10;:8;:10::i;:::-;41771:5;:9;;:21;;;;:::i;:::-;41755:37;;41821:26;41841:5;41821:15;:19;;:26;;;;:::i;:::-;41803:44;;41876:26;41896:5;41876:15;:19;;:26;;;;:::i;:::-;41858:44;;41936:31;41961:5;41936:7;:20;41944:11;;;;;;;;;;;41936:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;41913:7;:20;41921:11;;;;;;;;;;;41913:20;;;;;;;;;;;;;;;:54;;;;42000:11;;;;;;;;;;;41983:36;;41992:6;41983:36;;;42013:5;41983:36;;;;;;:::i;:::-;;;;;;;;42037:15;42054;42030:40;;;;;;41474:604;;;;;;;;:::o;42086:661::-;42214:7;42223;42261:1;42246:13;;:16;42243:67;;42274:15;42291;42267:40;;;;;;42243:67;42320:18;42341:35;42362:13;;42341:16;42353:3;42341:7;:11;;:16;;;;:::i;:::-;:20;;:35;;;;:::i;:::-;42320:56;;42387:18;42408:26;42423:10;:8;:10::i;:::-;42408;:14;;:26;;;;:::i;:::-;42387:47;;42463:31;42483:10;42463:15;:19;;:31;;;;:::i;:::-;42445:49;;42523:31;42543:10;42523:15;:19;;:31;;;;:::i;:::-;42505:49;;42590:38;42617:10;42590:7;:22;42606:4;42590:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;42565:7;:22;42581:4;42565:22;;;;;;;;;;;;;;;:63;;;;42669:4;42644:43;;42653:6;42644:43;;;42676:10;42644:43;;;;;;:::i;:::-;;;;;;;;42705:15;42722;42698:40;;;;;;42086:661;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:329::-;5812:6;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;5753:329;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:104::-;7633:7;7662:24;7680:5;7662:24;:::i;:::-;7651:35;;7588:104;;;:::o;7698:138::-;7779:32;7805:5;7779:32;:::i;:::-;7772:5;7769:43;7759:71;;7826:1;7823;7816:12;7759:71;7698:138;:::o;7842:155::-;7896:5;7934:6;7921:20;7912:29;;7950:41;7985:5;7950:41;:::i;:::-;7842:155;;;;:::o;8003:345::-;8070:6;8119:2;8107:9;8098:7;8094:23;8090:32;8087:119;;;8125:79;;:::i;:::-;8087:119;8245:1;8270:61;8323:7;8314:6;8303:9;8299:22;8270:61;:::i;:::-;8260:71;;8216:125;8003:345;;;;:::o;8354:142::-;8457:32;8483:5;8457:32;:::i;:::-;8452:3;8445:45;8354:142;;:::o;8502:254::-;8611:4;8649:2;8638:9;8634:18;8626:26;;8662:87;8746:1;8735:9;8731:17;8722:6;8662:87;:::i;:::-;8502:254;;;;:::o;8762:323::-;8818:6;8867:2;8855:9;8846:7;8842:23;8838:32;8835:119;;;8873:79;;:::i;:::-;8835:119;8993:1;9018:50;9060:7;9051:6;9040:9;9036:22;9018:50;:::i;:::-;9008:60;;8964:114;8762:323;;;;:::o;9091:765::-;9177:6;9185;9193;9201;9250:3;9238:9;9229:7;9225:23;9221:33;9218:120;;;9257:79;;:::i;:::-;9218:120;9377:1;9402:53;9447:7;9438:6;9427:9;9423:22;9402:53;:::i;:::-;9392:63;;9348:117;9504:2;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9475:118;9632:2;9658:53;9703:7;9694:6;9683:9;9679:22;9658:53;:::i;:::-;9648:63;;9603:118;9760:2;9786:53;9831:7;9822:6;9811:9;9807:22;9786:53;:::i;:::-;9776:63;;9731:118;9091:765;;;;;;;:::o;9862:474::-;9930:6;9938;9987:2;9975:9;9966:7;9962:23;9958:32;9955:119;;;9993:79;;:::i;:::-;9955:119;10113:1;10138:53;10183:7;10174:6;10163:9;10159:22;10138:53;:::i;:::-;10128:63;;10084:117;10240:2;10266:53;10311:7;10302:6;10291:9;10287:22;10266:53;:::i;:::-;10256:63;;10211:118;9862:474;;;;;:::o;10342:180::-;10390:77;10387:1;10380:88;10487:4;10484:1;10477:15;10511:4;10508:1;10501:15;10528:320;10572:6;10609:1;10603:4;10599:12;10589:22;;10656:1;10650:4;10646:12;10677:18;10667:81;;10733:4;10725:6;10721:17;10711:27;;10667:81;10795:2;10787:6;10784:14;10764:18;10761:38;10758:84;;10814:18;;:::i;:::-;10758:84;10579:269;10528:320;;;:::o;10854:229::-;10994:34;10990:1;10982:6;10978:14;10971:58;11063:12;11058:2;11050:6;11046:15;11039:37;10854:229;:::o;11089:366::-;11231:3;11252:67;11316:2;11311:3;11252:67;:::i;:::-;11245:74;;11328:93;11417:3;11328:93;:::i;:::-;11446:2;11441:3;11437:12;11430:19;;11089:366;;;:::o;11461:419::-;11627:4;11665:2;11654:9;11650:18;11642:26;;11714:9;11708:4;11704:20;11700:1;11689:9;11685:17;11678:47;11742:131;11868:4;11742:131;:::i;:::-;11734:139;;11461:419;;;:::o;11886:177::-;12026:29;12022:1;12014:6;12010:14;12003:53;11886:177;:::o;12069:366::-;12211:3;12232:67;12296:2;12291:3;12232:67;:::i;:::-;12225:74;;12308:93;12397:3;12308:93;:::i;:::-;12426:2;12421:3;12417:12;12410:19;;12069:366;;;:::o;12441:419::-;12607:4;12645:2;12634:9;12630:18;12622:26;;12694:9;12688:4;12684:20;12680:1;12669:9;12665:17;12658:47;12722:131;12848:4;12722:131;:::i;:::-;12714:139;;12441:419;;;:::o;12866:180::-;12914:77;12911:1;12904:88;13011:4;13008:1;13001:15;13035:4;13032:1;13025:15;13052:180;13100:77;13097:1;13090:88;13197:4;13194:1;13187:15;13221:4;13218:1;13211:15;13238:194;13278:4;13298:20;13316:1;13298:20;:::i;:::-;13293:25;;13332:20;13350:1;13332:20;:::i;:::-;13327:25;;13376:1;13373;13369:9;13361:17;;13400:1;13394:4;13391:11;13388:37;;;13405:18;;:::i;:::-;13388:37;13238:194;;;;:::o;13438:180::-;13486:77;13483:1;13476:88;13583:4;13580:1;13573:15;13607:4;13604:1;13597:15;13624:233;13663:3;13686:24;13704:5;13686:24;:::i;:::-;13677:33;;13732:66;13725:5;13722:77;13719:103;;13802:18;;:::i;:::-;13719:103;13849:1;13842:5;13838:13;13831:20;;13624:233;;;:::o;13863:181::-;14003:33;13999:1;13991:6;13987:14;13980:57;13863:181;:::o;14050:366::-;14192:3;14213:67;14277:2;14272:3;14213:67;:::i;:::-;14206:74;;14289:93;14378:3;14289:93;:::i;:::-;14407:2;14402:3;14398:12;14391:19;;14050:366;;;:::o;14422:419::-;14588:4;14626:2;14615:9;14611:18;14603:26;;14675:9;14669:4;14665:20;14661:1;14650:9;14646:17;14639:47;14703:131;14829:4;14703:131;:::i;:::-;14695:139;;14422:419;;;:::o;14847:164::-;14987:16;14983:1;14975:6;14971:14;14964:40;14847:164;:::o;15017:366::-;15159:3;15180:67;15244:2;15239:3;15180:67;:::i;:::-;15173:74;;15256:93;15345:3;15256:93;:::i;:::-;15374:2;15369:3;15365:12;15358:19;;15017:366;;;:::o;15389:419::-;15555:4;15593:2;15582:9;15578:18;15570:26;;15642:9;15636:4;15632:20;15628:1;15617:9;15613:17;15606:47;15670:131;15796:4;15670:131;:::i;:::-;15662:139;;15389:419;;;:::o;15814:225::-;15954:34;15950:1;15942:6;15938:14;15931:58;16023:8;16018:2;16010:6;16006:15;15999:33;15814:225;:::o;16045:366::-;16187:3;16208:67;16272:2;16267:3;16208:67;:::i;:::-;16201:74;;16284:93;16373:3;16284:93;:::i;:::-;16402:2;16397:3;16393:12;16386:19;;16045:366;;;:::o;16417:419::-;16583:4;16621:2;16610:9;16606:18;16598:26;;16670:9;16664:4;16660:20;16656:1;16645:9;16641:17;16634:47;16698:131;16824:4;16698:131;:::i;:::-;16690:139;;16417:419;;;:::o;16842:223::-;16982:34;16978:1;16970:6;16966:14;16959:58;17051:6;17046:2;17038:6;17034:15;17027:31;16842:223;:::o;17071:366::-;17213:3;17234:67;17298:2;17293:3;17234:67;:::i;:::-;17227:74;;17310:93;17399:3;17310:93;:::i;:::-;17428:2;17423:3;17419:12;17412:19;;17071:366;;;:::o;17443:419::-;17609:4;17647:2;17636:9;17632:18;17624:26;;17696:9;17690:4;17686:20;17682:1;17671:9;17667:17;17660:47;17724:131;17850:4;17724:131;:::i;:::-;17716:139;;17443:419;;;:::o;17868:221::-;18008:34;18004:1;17996:6;17992:14;17985:58;18077:4;18072:2;18064:6;18060:15;18053:29;17868:221;:::o;18095:366::-;18237:3;18258:67;18322:2;18317:3;18258:67;:::i;:::-;18251:74;;18334:93;18423:3;18334:93;:::i;:::-;18452:2;18447:3;18443:12;18436:19;;18095:366;;;:::o;18467:419::-;18633:4;18671:2;18660:9;18656:18;18648:26;;18720:9;18714:4;18710:20;18706:1;18695:9;18691:17;18684:47;18748:131;18874:4;18748:131;:::i;:::-;18740:139;;18467:419;;;:::o;18892:224::-;19032:34;19028:1;19020:6;19016:14;19009:58;19101:7;19096:2;19088:6;19084:15;19077:32;18892:224;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:419::-;19660:4;19698:2;19687:9;19683:18;19675:26;;19747:9;19741:4;19737:20;19733:1;19722:9;19718:17;19711:47;19775:131;19901:4;19775:131;:::i;:::-;19767:139;;19494:419;;;:::o;19919:228::-;20059:34;20055:1;20047:6;20043:14;20036:58;20128:11;20123:2;20115:6;20111:15;20104:36;19919:228;:::o;20153:366::-;20295:3;20316:67;20380:2;20375:3;20316:67;:::i;:::-;20309:74;;20392:93;20481:3;20392:93;:::i;:::-;20510:2;20505:3;20501:12;20494:19;;20153:366;;;:::o;20525:419::-;20691:4;20729:2;20718:9;20714:18;20706:26;;20778:9;20772:4;20768:20;20764:1;20753:9;20749:17;20742:47;20806:131;20932:4;20806:131;:::i;:::-;20798:139;;20525:419;;;:::o;20950:182::-;21090:34;21086:1;21078:6;21074:14;21067:58;20950:182;:::o;21138:366::-;21280:3;21301:67;21365:2;21360:3;21301:67;:::i;:::-;21294:74;;21377:93;21466:3;21377:93;:::i;:::-;21495:2;21490:3;21486:12;21479:19;;21138:366;;;:::o;21510:419::-;21676:4;21714:2;21703:9;21699:18;21691:26;;21763:9;21757:4;21753:20;21749:1;21738:9;21734:17;21727:47;21791:131;21917:4;21791:131;:::i;:::-;21783:139;;21510:419;;;:::o;21935:191::-;21975:3;21994:20;22012:1;21994:20;:::i;:::-;21989:25;;22028:20;22046:1;22028:20;:::i;:::-;22023:25;;22071:1;22068;22064:9;22057:16;;22092:3;22089:1;22086:10;22083:36;;;22099:18;;:::i;:::-;22083:36;21935:191;;;;:::o;22132:177::-;22272:29;22268:1;22260:6;22256:14;22249:53;22132:177;:::o;22315:366::-;22457:3;22478:67;22542:2;22537:3;22478:67;:::i;:::-;22471:74;;22554:93;22643:3;22554:93;:::i;:::-;22672:2;22667:3;22663:12;22656:19;;22315:366;;;:::o;22687:419::-;22853:4;22891:2;22880:9;22876:18;22868:26;;22940:9;22934:4;22930:20;22926:1;22915:9;22911:17;22904:47;22968:131;23094:4;22968:131;:::i;:::-;22960:139;;22687:419;;;:::o;23112:442::-;23261:4;23299:2;23288:9;23284:18;23276:26;;23312:71;23380:1;23369:9;23365:17;23356:6;23312:71;:::i;:::-;23393:72;23461:2;23450:9;23446:18;23437:6;23393:72;:::i;:::-;23475;23543:2;23532:9;23528:18;23519:6;23475:72;:::i;:::-;23112:442;;;;;;:::o;23560:180::-;23608:77;23605:1;23598:88;23705:4;23702:1;23695:15;23729:4;23726:1;23719:15;23746:185;23786:1;23803:20;23821:1;23803:20;:::i;:::-;23798:25;;23837:20;23855:1;23837:20;:::i;:::-;23832:25;;23876:1;23866:35;;23881:18;;:::i;:::-;23866:35;23923:1;23920;23916:9;23911:14;;23746:185;;;;:::o;23937:410::-;23977:7;24000:20;24018:1;24000:20;:::i;:::-;23995:25;;24034:20;24052:1;24034:20;:::i;:::-;24029:25;;24089:1;24086;24082:9;24111:30;24129:11;24111:30;:::i;:::-;24100:41;;24290:1;24281:7;24277:15;24274:1;24271:22;24251:1;24244:9;24224:83;24201:139;;24320:18;;:::i;:::-;24201:139;23985:362;23937:410;;;;:::o;24353:220::-;24493:34;24489:1;24481:6;24477:14;24470:58;24562:3;24557:2;24549:6;24545:15;24538:28;24353:220;:::o;24579:366::-;24721:3;24742:67;24806:2;24801:3;24742:67;:::i;:::-;24735:74;;24818:93;24907:3;24818:93;:::i;:::-;24936:2;24931:3;24927:12;24920:19;;24579:366;;;:::o;24951:419::-;25117:4;25155:2;25144:9;25140:18;25132:26;;25204:9;25198:4;25194:20;25190:1;25179:9;25175:17;25168:47;25232:131;25358:4;25232:131;:::i;:::-;25224:139;;24951:419;;;:::o;25376:180::-;25424:77;25421:1;25414:88;25521:4;25518:1;25511:15;25545:4;25542:1;25535:15;25562:143;25619:5;25650:6;25644:13;25635:22;;25666:33;25693:5;25666:33;:::i;:::-;25562:143;;;;:::o;25711:351::-;25781:6;25830:2;25818:9;25809:7;25805:23;25801:32;25798:119;;;25836:79;;:::i;:::-;25798:119;25956:1;25981:64;26037:7;26028:6;26017:9;26013:22;25981:64;:::i;:::-;25971:74;;25927:128;25711:351;;;;:::o;26068:85::-;26113:7;26142:5;26131:16;;26068:85;;;:::o;26159:158::-;26217:9;26250:61;26268:42;26277:32;26303:5;26277:32;:::i;:::-;26268:42;:::i;:::-;26250:61;:::i;:::-;26237:74;;26159:158;;;:::o;26323:147::-;26418:45;26457:5;26418:45;:::i;:::-;26413:3;26406:58;26323:147;;:::o;26476:114::-;26543:6;26577:5;26571:12;26561:22;;26476:114;;;:::o;26596:184::-;26695:11;26729:6;26724:3;26717:19;26769:4;26764:3;26760:14;26745:29;;26596:184;;;;:::o;26786:132::-;26853:4;26876:3;26868:11;;26906:4;26901:3;26897:14;26889:22;;26786:132;;;:::o;26924:108::-;27001:24;27019:5;27001:24;:::i;:::-;26996:3;26989:37;26924:108;;:::o;27038:179::-;27107:10;27128:46;27170:3;27162:6;27128:46;:::i;:::-;27206:4;27201:3;27197:14;27183:28;;27038:179;;;;:::o;27223:113::-;27293:4;27325;27320:3;27316:14;27308:22;;27223:113;;;:::o;27372:732::-;27491:3;27520:54;27568:5;27520:54;:::i;:::-;27590:86;27669:6;27664:3;27590:86;:::i;:::-;27583:93;;27700:56;27750:5;27700:56;:::i;:::-;27779:7;27810:1;27795:284;27820:6;27817:1;27814:13;27795:284;;;27896:6;27890:13;27923:63;27982:3;27967:13;27923:63;:::i;:::-;27916:70;;28009:60;28062:6;28009:60;:::i;:::-;27999:70;;27855:224;27842:1;27839;27835:9;27830:14;;27795:284;;;27799:14;28095:3;28088:10;;27496:608;;;27372:732;;;;:::o;28110:831::-;28373:4;28411:3;28400:9;28396:19;28388:27;;28425:71;28493:1;28482:9;28478:17;28469:6;28425:71;:::i;:::-;28506:80;28582:2;28571:9;28567:18;28558:6;28506:80;:::i;:::-;28633:9;28627:4;28623:20;28618:2;28607:9;28603:18;28596:48;28661:108;28764:4;28755:6;28661:108;:::i;:::-;28653:116;;28779:72;28847:2;28836:9;28832:18;28823:6;28779:72;:::i;:::-;28861:73;28929:3;28918:9;28914:19;28905:6;28861:73;:::i;:::-;28110:831;;;;;;;;:::o;28947:807::-;29196:4;29234:3;29223:9;29219:19;29211:27;;29248:71;29316:1;29305:9;29301:17;29292:6;29248:71;:::i;:::-;29329:72;29397:2;29386:9;29382:18;29373:6;29329:72;:::i;:::-;29411:80;29487:2;29476:9;29472:18;29463:6;29411:80;:::i;:::-;29501;29577:2;29566:9;29562:18;29553:6;29501:80;:::i;:::-;29591:73;29659:3;29648:9;29644:19;29635:6;29591:73;:::i;:::-;29674;29742:3;29731:9;29727:19;29718:6;29674:73;:::i;:::-;28947:807;;;;;;;;;:::o;29760:143::-;29817:5;29848:6;29842:13;29833:22;;29864:33;29891:5;29864:33;:::i;:::-;29760:143;;;;:::o;29909:663::-;29997:6;30005;30013;30062:2;30050:9;30041:7;30037:23;30033:32;30030:119;;;30068:79;;:::i;:::-;30030:119;30188:1;30213:64;30269:7;30260:6;30249:9;30245:22;30213:64;:::i;:::-;30203:74;;30159:128;30326:2;30352:64;30408:7;30399:6;30388:9;30384:22;30352:64;:::i;:::-;30342:74;;30297:129;30465:2;30491:64;30547:7;30538:6;30527:9;30523:22;30491:64;:::i;:::-;30481:74;;30436:129;29909:663;;;;;:::o
Swarm Source
ipfs://076137939becd1043ee774f15f726a9bb76003d89eb5adb80ab8f43dee778a34
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.