Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000,000 CORGIB🍑
Holders
79
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,058,922,793.151894236 CORGIB🍑Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Corgibutt
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-27 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards 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). * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract Corgibutt is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address constant public burnAddr = 0x000000000000000000000000000000000000dEaD; address constant public zeroAddr = address(0); 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 = 1000000000000 * 10**12; // 1Q uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'Corgi Butt'; string private _symbol = unicode'CORGIB🍑'; uint8 private _decimals = 9; // Tax and team fees will start at 0 so we don't have a big impact when deploying to Uniswap // Team wallet address is null but the method to set the address is exposed uint256 private _taxFee = 2; uint256 private _burnFee = 1; uint256 private _teamFee = 3; uint256 private _previousTaxFee = _taxFee; uint256 private _previousBurnFee = _burnFee; uint256 private _previousTeamFee = _teamFee; address payable public _tWallet; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwap = false; bool public swapEnabled = true; uint256 private _maxTxAmount = 500000000 * 10**4 * 10**18; // 5T uint256 private _numOfTokensToExchangeForTeam = 5 * 10**6; // 5M bool private isCooldownEnabled = true; mapping(address => uint256) private buycooldown; mapping(address => uint256) private sellcooldown; mapping(address => uint256) private firstsell; mapping(address => uint256) private sellnumber; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor (address payable tWallet) public { _tWallet = tWallet; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network // 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; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[tWallet] = true; emit Transfer(zeroAddr, _msgSender(), _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 isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { 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 excludeAccount(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(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 removeAllFee() private { _previousTaxFee = _taxFee; _previousBurnFee = _burnFee; _previousTeamFee = _teamFee; _taxFee = 0; _burnFee = 0; _teamFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _burnFee = _previousBurnFee; _teamFee = _previousTeamFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != zeroAddr, "ERC20: approve from the zero address"); require(spender != zeroAddr, "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != zeroAddr, "ERC20: transfer from the zero address"); require(recipient != zeroAddr, "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // Enforce the max transfer amount only if // - the sender/recipient is NOT the contract owner. // - the receipient is NOT the team wallet if(sender != owner() && recipient != owner() && recipient != _tWallet) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } // Require buyers to wait at least 30 seconds between transactions. if (isCooldownEnabled && sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcluded[recipient]) { require(buycooldown[recipient] < block.timestamp); buycooldown[recipient] = block.timestamp + (30 seconds); } // If this is a sell transaction, index the sell number // and cooldown period. // // NOTE This just enforces cooldown, it does NOT enforce // higher fees. if (isCooldownEnabled && sender != uniswapV2Pair && sender != address(uniswapV2Router)) { require(sellcooldown[sender] < block.timestamp); if(firstsell[sender] + (1 days) < block.timestamp){ sellnumber[sender] = 0; } if (sellnumber[sender] == 0) { sellnumber[sender]++; firstsell[sender] = block.timestamp; sellcooldown[sender] = block.timestamp + (1 hours); } else if (sellnumber[sender] == 1) { sellnumber[sender]++; sellcooldown[sender] = block.timestamp + (2 hours); } else if (sellnumber[sender] == 2) { sellnumber[sender]++; sellcooldown[sender] = block.timestamp + (6 hours); } else if (sellnumber[sender] == 3) { sellnumber[sender]++; sellcooldown[sender] = firstsell[sender] + (1 days); } } // If the contract holds _enough_ tokens collected from the team fees, // then swap them for ETH and transfer to the wallet. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeam; if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) { // We need to swap the current tokens to ETH and send to the team wallet swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToTeam(address(this).balance); } } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //transfer amount, it will take tax and team fee _tokenTransfer(sender,recipient,amount,takeFee); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{ // 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 sendETHToTeam(uint256 amount) private { _tWallet.transfer(amount); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() external onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHToTeam(contractETHBalance); } function setSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) 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(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tTeam) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee, rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tTeam) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee, rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tTeam) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee, rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rBurn, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tTeam) = _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); _takeTeam(tTeam); _reflectFee(rFee, tFee, rBurn, tBurn); emit Transfer(sender, recipient, tTransferAmount); } function _takeTeam(uint256 tTeam) private { uint256 currentRate = _getRate(); uint256 rTeam = tTeam.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tTeam); } function _reflectFee(uint256 rFee, uint256 tFee, uint256 rBurn, uint256 tBurn) private { _rTotal = _rTotal.sub(rFee).sub(rBurn); _tFeeTotal = _tFeeTotal.add(tFee); _rOwned[burnAddr] = _rOwned[burnAddr].add(rBurn); _tOwned[burnAddr] = _tOwned[burnAddr].add(tBurn); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tTeam) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount) = _getRValues(tAmount, tFee, tBurn.mul(_getRate())); return (rAmount, rTransferAmount, tFee.mul(_getRate()), tBurn.mul(_getRate()), tTransferAmount, tFee, tBurn, tTeam); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = tAmount.mul(_taxFee).div(100); uint256 tBurn = tAmount.mul(_burnFee).div(100); uint256 tTeam = tAmount.mul(_teamFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(tTeam); return (tTransferAmount, tFee, tBurn, tTeam); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 rBurn) private view returns (uint256, uint256) { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); uint256 rTransferAmount = rAmount.sub(tFee.mul(currentRate)).sub(rBurn); return (rAmount, rTransferAmount); } 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 _getTaxFee() private view returns(uint256) { return _taxFee; } function _getMaxTxAmount() private view returns(uint256) { return _maxTxAmount; } function _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner() { require(taxFee >= 1 && taxFee <= 25, 'taxFee should be in 1 - 25'); _taxFee = taxFee; } function _setTeamFee(uint256 teamFee) external onlyOwner() { require(teamFee >= 1 && teamFee <= 25, 'teamFee should be in 1 - 25'); _teamFee = teamFee; } function _setTeamWallet(address payable tWallet) external onlyOwner() { _tWallet = tWallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= 100000000000000e9 , 'maxTxAmount should be greater than 100000000000000e9'); _maxTxAmount = maxTxAmount; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.div(10**2).mul(maxTxPercent); } function setCooldown(bool onoff) external onlyOwner() { isCooldownEnabled = onoff; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"tWallet","type":"address"}],"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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"}],"name":"_setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"tWallet","type":"address"}],"name":"_setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"burnAddr","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"bool","name":"onoff","type":"bool"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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"},{"inputs":[],"name":"zeroAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405269d3c21bcecceda10000006007556007546000196200002491906200093a565b60001962000033919062000877565b6008556040518060400160405280600a81526020017f436f726769204275747400000000000000000000000000000000000000000000815250600a908051906020019062000083929190620006d5565b506040518060400160405280600a81526020017f434f52474942f09f8d9100000000000000000000000000000000000000000000815250600b9080519060200190620000d1929190620006d5565b506009600c60006101000a81548160ff021916908360ff1602179055506002600d556001600e556003600f55600d54601055600e54601155600f546012556000601360146101000a81548160ff0219169083151502179055506001601360156101000a81548160ff0219169083151502179055506c3f1bdf10116048a59340000000601455624c4b406015556001601660006101000a81548160ff0219169083151502179055503480156200018557600080fd5b506040516200664b3803806200664b8339818101604052810190620001ab9190620007df565b6000620001bd620006a460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460016000620002b3620006a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035157600080fd5b505afa15801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c9190620007b3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ef57600080fd5b505afa15801562000404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042a9190620007b3565b6040518363ffffffff1660e01b8152600401620004499291906200082d565b602060405180830381600087803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049f9190620007b3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060016004600062000522620006ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000633620006a460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200069491906200085a565b60405180910390a3505062000a33565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006e39062000904565b90600052602060002090601f01602090048101928262000707576000855562000753565b82601f106200072257805160ff191683800117855562000753565b8280016001018555821562000753579182015b828111156200075257825182559160200191906001019062000735565b5b50905062000762919062000766565b5090565b5b808211156200078157600081600090555060010162000767565b5090565b6000815190506200079681620009ff565b92915050565b600081519050620007ad8162000a19565b92915050565b600060208284031215620007c657600080fd5b6000620007d68482850162000785565b91505092915050565b600060208284031215620007f257600080fd5b600062000802848285016200079c565b91505092915050565b6200081681620008b2565b82525050565b6200082781620008fa565b82525050565b60006040820190506200084460008301856200080b565b6200085360208301846200080b565b9392505050565b60006020820190506200087160008301846200081c565b92915050565b60006200088482620008fa565b91506200089183620008fa565b925082821015620008a757620008a662000972565b5b828203905092915050565b6000620008bf82620008da565b9050919050565b6000620008d382620008da565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200091d57607f821691505b60208210811415620009345762000933620009d0565b5b50919050565b60006200094782620008fa565b91506200095483620008fa565b925082620009675762000966620009a1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000a0a81620008b2565b811462000a1657600080fd5b50565b62000a2481620008c6565b811462000a3057600080fd5b50565b60805160601c60a05160601c615bb462000a976000396000818161108201528181612783015281816129390152612f7c0152600081816109fb015281816127da01528181612991015281816133290152818161343f01526134660152615bb46000f3fe6080604052600436106102345760003560e01c80636e204cfd1161012e578063cba0e996116100ab578063f2cc0c181161006f578063f2cc0c1814610882578063f2fde38b146108ab578063f4293890146108d4578063f815a842146108eb578063f84354f1146109165761023b565b8063cba0e9961461078b578063d246d411146107c8578063d543dbeb146107f3578063dd62ed3e1461081c578063e01af92c146108595761023b565b8063a457c2d7116100f2578063a457c2d714610694578063a86f42cb146106d1578063a9059cbb146106fc578063af9549e014610739578063b80ec98d146107625761023b565b80636e204cfd146105bf57806370a08231146105ea578063715018a6146106275780638da5cb5b1461063e57806395d89b41146106695761023b565b80632d838119116101bc57806349bd5a5e1161018057806349bd5a5e146104ec57806351bc3c85146105175780635342acb41461052e5780635880b8731461056b5780636ddd1713146105945761023b565b80632d838119146103e1578063313ce5671461041e57806339509351146104495780633bd5d173146104865780634549b039146104af5761023b565b806316d624a51161020357806316d624a5146102fe57806318160ddd146103275780631bbae6e01461035257806323b872dd1461037b57806328667162146103b85761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561093f565b604051610262919061509e565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190614c11565b6109d1565b60405161029f9190615068565b60405180910390f35b3480156102b457600080fd5b506102bd6109ef565b6040516102ca91906152c0565b60405180910390f35b3480156102df57600080fd5b506102e86109f9565b6040516102f59190615083565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190614c4d565b610a1d565b005b34801561033357600080fd5b5061033c610ab6565b60405161034991906152c0565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614c76565b610ac0565b005b34801561038757600080fd5b506103a2600480360381019061039d9190614b86565b610b93565b6040516103af9190615068565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190614c76565b610c6c565b005b3480156103ed57600080fd5b5061040860048036038101906104039190614c76565b610d43565b60405161041591906152c0565b60405180910390f35b34801561042a57600080fd5b50610433610db1565b6040516104409190615335565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190614c11565b610dc8565b60405161047d9190615068565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190614c76565b610e7b565b005b3480156104bb57600080fd5b506104d660048036038101906104d19190614c9f565b610ff8565b6040516104e391906152c0565b60405180910390f35b3480156104f857600080fd5b50610501611080565b60405161050e9190615032565b60405180910390f35b34801561052357600080fd5b5061052c6110a4565b005b34801561053a57600080fd5b5061055560048036038101906105509190614acf565b611139565b6040516105629190615068565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190614c76565b61118f565b005b3480156105a057600080fd5b506105a9611266565b6040516105b69190615068565b60405180910390f35b3480156105cb57600080fd5b506105d4611279565b6040516105e1919061504d565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190614acf565b61129f565b60405161061e91906152c0565b60405180910390f35b34801561063357600080fd5b5061063c61138a565b005b34801561064a57600080fd5b506106536114c4565b6040516106609190615032565b60405180910390f35b34801561067557600080fd5b5061067e6114ed565b60405161068b919061509e565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190614c11565b61157f565b6040516106c89190615068565b60405180910390f35b3480156106dd57600080fd5b506106e661164c565b6040516106f39190615032565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614c11565b611651565b6040516107309190615068565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190614bd5565b61166f565b005b34801561076e57600080fd5b5061078960048036038101906107849190614b21565b611746565b005b34801561079757600080fd5b506107b260048036038101906107ad9190614acf565b611806565b6040516107bf9190615068565b60405180910390f35b3480156107d457600080fd5b506107dd61185c565b6040516107ea9190615032565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190614c76565b611862565b005b34801561082857600080fd5b50610843600480360381019061083e9190614b4a565b61190f565b60405161085091906152c0565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614c4d565b611996565b005b34801561088e57600080fd5b506108a960048036038101906108a49190614acf565b611a2f565b005b3480156108b757600080fd5b506108d260048036038101906108cd9190614acf565b611d4d565b005b3480156108e057600080fd5b506108e9611ef6565b005b3480156108f757600080fd5b50610900611f83565b60405161090d91906152c0565b60405180910390f35b34801561092257600080fd5b5061093d60048036038101906109389190614acf565b611f8b565b005b6060600a805461094e9061558a565b80601f016020809104026020016040519081016040528092919081815260200182805461097a9061558a565b80156109c75780601f1061099c576101008083540402835291602001916109c7565b820191906000526020600020905b8154815290600101906020018083116109aa57829003601f168201915b5050505050905090565b60006109e56109de612359565b8484612361565b6001905092915050565b6000600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a25612359565b73ffffffffffffffffffffffffffffffffffffffff16610a436114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906151e0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000600754905090565b610ac8612359565b73ffffffffffffffffffffffffffffffffffffffff16610ae66114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906151e0565b60405180910390fd5b69152d02c7e14af6800000811015610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090615180565b60405180910390fd5b8060148190555050565b6000610ba084848461252c565b610c6184610bac612359565b610c5c85604051806060016040528060288152602001615b3260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c12612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130b89092919063ffffffff16565b612361565b600190509392505050565b610c74612359565b73ffffffffffffffffffffffffffffffffffffffff16610c926114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf906151e0565b60405180910390fd5b60018110158015610cfa575060198111155b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090615140565b60405180910390fd5b80600f8190555050565b6000600854821115610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906150e0565b60405180910390fd5b6000610d9461310d565b9050610da9818461313890919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610e71610dd5612359565b84610e6c8560036000610de6612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b612361565b6001905092915050565b6000610e85612359565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906152a0565b60405180910390fd5b6000610f1f83613164565b505050505050509050610f7a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fd28160085461320d90919063ffffffff16565b600881905550610fed8360095461314e90919063ffffffff16565b600981905550505050565b600060075483111561103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906151a0565b60405180910390fd5b8161106157600061104f84613164565b5050505050505090508091505061107a565b600061106c84613164565b505050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110ac612359565b73ffffffffffffffffffffffffffffffffffffffff166110ca6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611117906151e0565b60405180910390fd5b600061112b3061129f565b905061113681613223565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611197612359565b73ffffffffffffffffffffffffffffffffffffffff166111b56114c4565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906151e0565b60405180910390fd5b6001811015801561121d575060198111155b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390615260565b60405180910390fd5b80600d8190555050565b601360159054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561133a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611385565b611382600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d43565b90505b919050565b611392612359565b73ffffffffffffffffffffffffffffffffffffffff166113b06114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546114fc9061558a565b80601f01602080910402602001604051908101604052809291908181526020018280546115289061558a565b80156115755780601f1061154a57610100808354040283529160200191611575565b820191906000526020600020905b81548152906001019060200180831161155857829003601f168201915b5050505050905090565b600061164261158c612359565b8461163d85604051806060016040528060258152602001615b5a60259139600360006115b6612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130b89092919063ffffffff16565b612361565b6001905092915050565b600081565b600061166561165e612359565b848461252c565b6001905092915050565b611677612359565b73ffffffffffffffffffffffffffffffffffffffff166116956114c4565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906151e0565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61174e612359565b73ffffffffffffffffffffffffffffffffffffffff1661176c6114c4565b73ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906151e0565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61dead81565b61186a612359565b73ffffffffffffffffffffffffffffffffffffffff166118886114c4565b73ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d5906151e0565b60405180910390fd5b611906816118f8606460075461313890919063ffffffff16565b61351790919063ffffffff16565b60148190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61199e612359565b73ffffffffffffffffffffffffffffffffffffffff166119bc6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a09906151e0565b60405180910390fd5b80601360156101000a81548160ff02191690831515021790555050565b611a37612359565b73ffffffffffffffffffffffffffffffffffffffff16611a556114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906151e0565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590615280565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290615160565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c8f57611c4b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d43565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d55612359565b73ffffffffffffffffffffffffffffffffffffffff16611d736114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090615100565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611efe612359565b73ffffffffffffffffffffffffffffffffffffffff16611f1c6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906151e0565b60405180910390fd5b6000479050611f808161352d565b50565b600047905090565b611f93612359565b73ffffffffffffffffffffffffffffffffffffffff16611fb16114c4565b73ffffffffffffffffffffffffffffffffffffffff1614612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe906151e0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90615160565b60405180910390fd5b60005b600680549050811015612355578173ffffffffffffffffffffffffffffffffffffffff16600682815481106120f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612342576006600160068054905061214f9190615486565b81548110612186577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106121eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480612308577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612355565b808061234d906155bc565b915050612096565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890615240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890615120565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161251f91906152c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390615220565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906150c0565b60405180910390fd5b6000811161264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690615200565b60405180910390fd5b6126576114c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126c557506126956114c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271f5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561276a57601454811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906151c0565b60405180910390fd5b5b601660009054906101000a900460ff1680156127d157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561282957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561287f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129205742601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128cf57600080fd5b601e426128dc91906153a5565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660009054906101000a900460ff16801561298857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f1b5742601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a3057600080fd5b4262015180601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a7f91906153a5565b1015612acb576000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c0257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612b63906155bc565b919050555042601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e1042612bba91906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f1a565b6001601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612cf557601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612c9a906155bc565b9190505550611c2042612cad91906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f19565b6002601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612de857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612d8d906155bc565b919050555061546042612da091906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f18565b6003601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612f1757601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612e80906155bc565b919050555062015180601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed391906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b5b6000612f263061129f565b90506014548110612f375760145490505b60006015548210159050601360149054906101000a900460ff16158015612f6a5750601360159054906101000a900460ff165b8015612f735750805b8015612fcb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ff357612fd982613223565b60004790506000811115612ff157612ff04761352d565b5b505b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061309a5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130a457600090505b6130b086868684613599565b505050505050565b6000838311158290613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f7919061509e565b60405180910390fd5b5082840390509392505050565b600080600061311a6138aa565b91509150613131818361313890919063ffffffff16565b9250505090565b6000818361314691906153fb565b905092915050565b6000818361315c91906153a5565b905092915050565b60008060008060008060008060008060008061317f8d613bf5565b93509350935093506000806131ae8f866131a961319a61310d565b8861351790919063ffffffff16565b613cd1565b9150915081816131ce6131bf61310d565b8861351790919063ffffffff16565b6131e86131d961310d565b8861351790919063ffffffff16565b898989899d509d509d509d509d509d509d509d50505050505050919395975091939597565b6000818361321b9190615486565b905092915050565b6001601360146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613281577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156132af5781602001602082028036833780820191505090505b50905030816000815181106132ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338d57600080fd5b505afa1580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190614af8565b816001815181106133ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613464307f000000000000000000000000000000000000000000000000000000000000000084612361565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134c69594939291906152db565b600060405180830381600087803b1580156134e057600080fd5b505af11580156134f4573d6000803e3d6000fd5b50505050506000601360146101000a81548160ff02191690831515021790555050565b60008183613525919061542c565b905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613595573d6000803e3d6000fd5b5050565b806135a7576135a6613d43565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365f5761365a848484613d78565b613896565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137025750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371757613712848484613fe3565b613895565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137bb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137d0576137cb84848461424e565b613894565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138725750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561388757613882848484614424565b613893565b61389284848461424e565b5b5b5b5b806138a4576138a3614724565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613bb85782600160006006848154811061390a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1e57508160026000600684815481106139b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a355760085460075494509450505050613bf1565b613aeb6001600060068481548110613a76577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461320d90919063ffffffff16565b9250613ba36002600060068481548110613b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361320d90919063ffffffff16565b91508080613bb0906155bc565b9150506138be565b50613bd060075460085461313890919063ffffffff16565b821015613be857600854600754935093505050613bf1565b81819350935050505b9091565b6000806000806000613c256064613c17600d548961351790919063ffffffff16565b61313890919063ffffffff16565b90506000613c516064613c43600e548a61351790919063ffffffff16565b61313890919063ffffffff16565b90506000613c7d6064613c6f600f548b61351790919063ffffffff16565b61313890919063ffffffff16565b90506000613cb882613caa85613c9c888e61320d90919063ffffffff16565b61320d90919063ffffffff16565b61320d90919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000613cde61310d565b90506000613cf5828861351790919063ffffffff16565b90506000613d3086613d22613d13868b61351790919063ffffffff16565b8561320d90919063ffffffff16565b61320d90919063ffffffff16565b9050818194509450505050935093915050565b600d54601081905550600e54601181905550600f546012819055506000600d819055506000600e819055506000600f81905550565b600080600080600080600080613d8d89613164565b97509750975097509750975097509750613def89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e8488600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1987600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f6581614741565b613f71868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613fce91906152c0565b60405180910390a35050505050505050505050565b600080600080600080600080613ff889613164565b9750975097509750975097509750975061405a88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ef84600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d081614741565b6141dc868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161423991906152c0565b60405180910390a35050505050505050505050565b60008060008060008060008061426389613164565b975097509750975097509750975097506142c588600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a681614741565b6143b2868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161440f91906152c0565b60405180910390a35050505050505050505050565b60008060008060008060008061443989613164565b9750975097509750975097509750975061449b89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453088600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145c584600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146a681614741565b6146b2868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161470f91906152c0565b60405180910390a35050505050505050505050565b601054600d81905550601154600e81905550601254600f81905550565b600061474b61310d565b90506000614762828461351790919063ffffffff16565b90506147b681600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156148e15761489d83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61490d826148ff8660085461320d90919063ffffffff16565b61320d90919063ffffffff16565b6008819055506149288360095461314e90919063ffffffff16565b600981905550614982826001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b6001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b816002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b600081359050614a7581615ad5565b92915050565b600081519050614a8a81615ad5565b92915050565b600081359050614a9f81615aec565b92915050565b600081359050614ab481615b03565b92915050565b600081359050614ac981615b1a565b92915050565b600060208284031215614ae157600080fd5b6000614aef84828501614a66565b91505092915050565b600060208284031215614b0a57600080fd5b6000614b1884828501614a7b565b91505092915050565b600060208284031215614b3357600080fd5b6000614b4184828501614a90565b91505092915050565b60008060408385031215614b5d57600080fd5b6000614b6b85828601614a66565b9250506020614b7c85828601614a66565b9150509250929050565b600080600060608486031215614b9b57600080fd5b6000614ba986828701614a66565b9350506020614bba86828701614a66565b9250506040614bcb86828701614aba565b9150509250925092565b60008060408385031215614be857600080fd5b6000614bf685828601614a66565b9250506020614c0785828601614aa5565b9150509250929050565b60008060408385031215614c2457600080fd5b6000614c3285828601614a66565b9250506020614c4385828601614aba565b9150509250929050565b600060208284031215614c5f57600080fd5b6000614c6d84828501614aa5565b91505092915050565b600060208284031215614c8857600080fd5b6000614c9684828501614aba565b91505092915050565b60008060408385031215614cb257600080fd5b6000614cc085828601614aba565b9250506020614cd185828601614aa5565b9150509250929050565b6000614ce78383614d02565b60208301905092915050565b614cfc816154cc565b82525050565b614d0b816154ba565b82525050565b614d1a816154ba565b82525050565b6000614d2b82615360565b614d358185615383565b9350614d4083615350565b8060005b83811015614d71578151614d588882614cdb565b9750614d6383615376565b925050600181019050614d44565b5085935050505092915050565b614d87816154de565b82525050565b614d9681615521565b82525050565b614da581615545565b82525050565b6000614db68261536b565b614dc08185615394565b9350614dd0818560208601615557565b614dd981615692565b840191505092915050565b6000614df1602383615394565b9150614dfc826156a3565b604082019050919050565b6000614e14602a83615394565b9150614e1f826156f2565b604082019050919050565b6000614e37602683615394565b9150614e4282615741565b604082019050919050565b6000614e5a602283615394565b9150614e6582615790565b604082019050919050565b6000614e7d601b83615394565b9150614e88826157df565b602082019050919050565b6000614ea0601b83615394565b9150614eab82615808565b602082019050919050565b6000614ec3603483615394565b9150614ece82615831565b604082019050919050565b6000614ee6601f83615394565b9150614ef182615880565b602082019050919050565b6000614f09602883615394565b9150614f14826158a9565b604082019050919050565b6000614f2c602083615394565b9150614f37826158f8565b602082019050919050565b6000614f4f602983615394565b9150614f5a82615921565b604082019050919050565b6000614f72602583615394565b9150614f7d82615970565b604082019050919050565b6000614f95602483615394565b9150614fa0826159bf565b604082019050919050565b6000614fb8601a83615394565b9150614fc382615a0e565b602082019050919050565b6000614fdb602283615394565b9150614fe682615a37565b604082019050919050565b6000614ffe602c83615394565b915061500982615a86565b604082019050919050565b61501d8161550a565b82525050565b61502c81615514565b82525050565b60006020820190506150476000830184614d11565b92915050565b60006020820190506150626000830184614cf3565b92915050565b600060208201905061507d6000830184614d7e565b92915050565b60006020820190506150986000830184614d8d565b92915050565b600060208201905081810360008301526150b88184614dab565b905092915050565b600060208201905081810360008301526150d981614de4565b9050919050565b600060208201905081810360008301526150f981614e07565b9050919050565b6000602082019050818103600083015261511981614e2a565b9050919050565b6000602082019050818103600083015261513981614e4d565b9050919050565b6000602082019050818103600083015261515981614e70565b9050919050565b6000602082019050818103600083015261517981614e93565b9050919050565b6000602082019050818103600083015261519981614eb6565b9050919050565b600060208201905081810360008301526151b981614ed9565b9050919050565b600060208201905081810360008301526151d981614efc565b9050919050565b600060208201905081810360008301526151f981614f1f565b9050919050565b6000602082019050818103600083015261521981614f42565b9050919050565b6000602082019050818103600083015261523981614f65565b9050919050565b6000602082019050818103600083015261525981614f88565b9050919050565b6000602082019050818103600083015261527981614fab565b9050919050565b6000602082019050818103600083015261529981614fce565b9050919050565b600060208201905081810360008301526152b981614ff1565b9050919050565b60006020820190506152d56000830184615014565b92915050565b600060a0820190506152f06000830188615014565b6152fd6020830187614d9c565b818103604083015261530f8186614d20565b905061531e6060830185614d11565b61532b6080830184615014565b9695505050505050565b600060208201905061534a6000830184615023565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153b08261550a565b91506153bb8361550a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153f0576153ef615605565b5b828201905092915050565b60006154068261550a565b91506154118361550a565b92508261542157615420615634565b5b828204905092915050565b60006154378261550a565b91506154428361550a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561547b5761547a615605565b5b828202905092915050565b60006154918261550a565b915061549c8361550a565b9250828210156154af576154ae615605565b5b828203905092915050565b60006154c5826154ea565b9050919050565b60006154d7826154ea565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061552c82615533565b9050919050565b600061553e826154ea565b9050919050565b60006155508261550a565b9050919050565b60005b8381101561557557808201518184015260208101905061555a565b83811115615584576000848401525b50505050565b600060028204905060018216806155a257607f821691505b602082108114156155b6576155b5615663565b5b50919050565b60006155c78261550a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155fa576155f9615605565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2031202d2032350000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f7461784665652073686f756c6420626520696e2031202d203235000000000000600082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b615ade816154ba565b8114615ae957600080fd5b50565b615af5816154cc565b8114615b0057600080fd5b50565b615b0c816154de565b8114615b1757600080fd5b50565b615b238161550a565b8114615b2e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f9fe918dc56d63794085ed0266c56eec834b405f2a8807bb423678b7863d897b64736f6c6343000804003300000000000000000000000025e95629a3387e5132fc778b8fb4e82718128fc0
Deployed Bytecode
0x6080604052600436106102345760003560e01c80636e204cfd1161012e578063cba0e996116100ab578063f2cc0c181161006f578063f2cc0c1814610882578063f2fde38b146108ab578063f4293890146108d4578063f815a842146108eb578063f84354f1146109165761023b565b8063cba0e9961461078b578063d246d411146107c8578063d543dbeb146107f3578063dd62ed3e1461081c578063e01af92c146108595761023b565b8063a457c2d7116100f2578063a457c2d714610694578063a86f42cb146106d1578063a9059cbb146106fc578063af9549e014610739578063b80ec98d146107625761023b565b80636e204cfd146105bf57806370a08231146105ea578063715018a6146106275780638da5cb5b1461063e57806395d89b41146106695761023b565b80632d838119116101bc57806349bd5a5e1161018057806349bd5a5e146104ec57806351bc3c85146105175780635342acb41461052e5780635880b8731461056b5780636ddd1713146105945761023b565b80632d838119146103e1578063313ce5671461041e57806339509351146104495780633bd5d173146104865780634549b039146104af5761023b565b806316d624a51161020357806316d624a5146102fe57806318160ddd146103275780631bbae6e01461035257806323b872dd1461037b57806328667162146103b85761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561093f565b604051610262919061509e565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190614c11565b6109d1565b60405161029f9190615068565b60405180910390f35b3480156102b457600080fd5b506102bd6109ef565b6040516102ca91906152c0565b60405180910390f35b3480156102df57600080fd5b506102e86109f9565b6040516102f59190615083565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190614c4d565b610a1d565b005b34801561033357600080fd5b5061033c610ab6565b60405161034991906152c0565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614c76565b610ac0565b005b34801561038757600080fd5b506103a2600480360381019061039d9190614b86565b610b93565b6040516103af9190615068565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190614c76565b610c6c565b005b3480156103ed57600080fd5b5061040860048036038101906104039190614c76565b610d43565b60405161041591906152c0565b60405180910390f35b34801561042a57600080fd5b50610433610db1565b6040516104409190615335565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190614c11565b610dc8565b60405161047d9190615068565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190614c76565b610e7b565b005b3480156104bb57600080fd5b506104d660048036038101906104d19190614c9f565b610ff8565b6040516104e391906152c0565b60405180910390f35b3480156104f857600080fd5b50610501611080565b60405161050e9190615032565b60405180910390f35b34801561052357600080fd5b5061052c6110a4565b005b34801561053a57600080fd5b5061055560048036038101906105509190614acf565b611139565b6040516105629190615068565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190614c76565b61118f565b005b3480156105a057600080fd5b506105a9611266565b6040516105b69190615068565b60405180910390f35b3480156105cb57600080fd5b506105d4611279565b6040516105e1919061504d565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190614acf565b61129f565b60405161061e91906152c0565b60405180910390f35b34801561063357600080fd5b5061063c61138a565b005b34801561064a57600080fd5b506106536114c4565b6040516106609190615032565b60405180910390f35b34801561067557600080fd5b5061067e6114ed565b60405161068b919061509e565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190614c11565b61157f565b6040516106c89190615068565b60405180910390f35b3480156106dd57600080fd5b506106e661164c565b6040516106f39190615032565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614c11565b611651565b6040516107309190615068565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190614bd5565b61166f565b005b34801561076e57600080fd5b5061078960048036038101906107849190614b21565b611746565b005b34801561079757600080fd5b506107b260048036038101906107ad9190614acf565b611806565b6040516107bf9190615068565b60405180910390f35b3480156107d457600080fd5b506107dd61185c565b6040516107ea9190615032565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190614c76565b611862565b005b34801561082857600080fd5b50610843600480360381019061083e9190614b4a565b61190f565b60405161085091906152c0565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614c4d565b611996565b005b34801561088e57600080fd5b506108a960048036038101906108a49190614acf565b611a2f565b005b3480156108b757600080fd5b506108d260048036038101906108cd9190614acf565b611d4d565b005b3480156108e057600080fd5b506108e9611ef6565b005b3480156108f757600080fd5b50610900611f83565b60405161090d91906152c0565b60405180910390f35b34801561092257600080fd5b5061093d60048036038101906109389190614acf565b611f8b565b005b6060600a805461094e9061558a565b80601f016020809104026020016040519081016040528092919081815260200182805461097a9061558a565b80156109c75780601f1061099c576101008083540402835291602001916109c7565b820191906000526020600020905b8154815290600101906020018083116109aa57829003601f168201915b5050505050905090565b60006109e56109de612359565b8484612361565b6001905092915050565b6000600954905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610a25612359565b73ffffffffffffffffffffffffffffffffffffffff16610a436114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906151e0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000600754905090565b610ac8612359565b73ffffffffffffffffffffffffffffffffffffffff16610ae66114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906151e0565b60405180910390fd5b69152d02c7e14af6800000811015610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090615180565b60405180910390fd5b8060148190555050565b6000610ba084848461252c565b610c6184610bac612359565b610c5c85604051806060016040528060288152602001615b3260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c12612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130b89092919063ffffffff16565b612361565b600190509392505050565b610c74612359565b73ffffffffffffffffffffffffffffffffffffffff16610c926114c4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf906151e0565b60405180910390fd5b60018110158015610cfa575060198111155b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090615140565b60405180910390fd5b80600f8190555050565b6000600854821115610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906150e0565b60405180910390fd5b6000610d9461310d565b9050610da9818461313890919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6000610e71610dd5612359565b84610e6c8560036000610de6612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b612361565b6001905092915050565b6000610e85612359565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906152a0565b60405180910390fd5b6000610f1f83613164565b505050505050509050610f7a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fd28160085461320d90919063ffffffff16565b600881905550610fed8360095461314e90919063ffffffff16565b600981905550505050565b600060075483111561103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906151a0565b60405180910390fd5b8161106157600061104f84613164565b5050505050505090508091505061107a565b600061106c84613164565b505050505050915050809150505b92915050565b7f00000000000000000000000095c893e6b5f81067cac4d46ffd453617e31a7d9a81565b6110ac612359565b73ffffffffffffffffffffffffffffffffffffffff166110ca6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611117906151e0565b60405180910390fd5b600061112b3061129f565b905061113681613223565b50565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611197612359565b73ffffffffffffffffffffffffffffffffffffffff166111b56114c4565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906151e0565b60405180910390fd5b6001811015801561121d575060198111155b61125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390615260565b60405180910390fd5b80600d8190555050565b601360159054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561133a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611385565b611382600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d43565b90505b919050565b611392612359565b73ffffffffffffffffffffffffffffffffffffffff166113b06114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546114fc9061558a565b80601f01602080910402602001604051908101604052809291908181526020018280546115289061558a565b80156115755780601f1061154a57610100808354040283529160200191611575565b820191906000526020600020905b81548152906001019060200180831161155857829003601f168201915b5050505050905090565b600061164261158c612359565b8461163d85604051806060016040528060258152602001615b5a60259139600360006115b6612359565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130b89092919063ffffffff16565b612361565b6001905092915050565b600081565b600061166561165e612359565b848461252c565b6001905092915050565b611677612359565b73ffffffffffffffffffffffffffffffffffffffff166116956114c4565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906151e0565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61174e612359565b73ffffffffffffffffffffffffffffffffffffffff1661176c6114c4565b73ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906151e0565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61dead81565b61186a612359565b73ffffffffffffffffffffffffffffffffffffffff166118886114c4565b73ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d5906151e0565b60405180910390fd5b611906816118f8606460075461313890919063ffffffff16565b61351790919063ffffffff16565b60148190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61199e612359565b73ffffffffffffffffffffffffffffffffffffffff166119bc6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a09906151e0565b60405180910390fd5b80601360156101000a81548160ff02191690831515021790555050565b611a37612359565b73ffffffffffffffffffffffffffffffffffffffff16611a556114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa2906151e0565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590615280565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290615160565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c8f57611c4b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d43565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d55612359565b73ffffffffffffffffffffffffffffffffffffffff16611d736114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090615100565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611efe612359565b73ffffffffffffffffffffffffffffffffffffffff16611f1c6114c4565b73ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906151e0565b60405180910390fd5b6000479050611f808161352d565b50565b600047905090565b611f93612359565b73ffffffffffffffffffffffffffffffffffffffff16611fb16114c4565b73ffffffffffffffffffffffffffffffffffffffff1614612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe906151e0565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90615160565b60405180910390fd5b60005b600680549050811015612355578173ffffffffffffffffffffffffffffffffffffffff16600682815481106120f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612342576006600160068054905061214f9190615486565b81548110612186577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106121eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480612308577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612355565b808061234d906155bc565b915050612096565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890615240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890615120565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161251f91906152c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390615220565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906150c0565b60405180910390fd5b6000811161264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690615200565b60405180910390fd5b6126576114c4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126c557506126956114c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271f5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561276a57601454811115612769576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612760906151c0565b60405180910390fd5b5b601660009054906101000a900460ff1680156127d157507f00000000000000000000000095c893e6b5f81067cac4d46ffd453617e31a7d9a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b801561282957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561287f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129205742601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128cf57600080fd5b601e426128dc91906153a5565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660009054906101000a900460ff16801561298857507f00000000000000000000000095c893e6b5f81067cac4d46ffd453617e31a7d9a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129e057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612f1b5742601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a3057600080fd5b4262015180601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a7f91906153a5565b1015612acb576000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612c0257601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612b63906155bc565b919050555042601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e1042612bba91906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f1a565b6001601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612cf557601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612c9a906155bc565b9190505550611c2042612cad91906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f19565b6002601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612de857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612d8d906155bc565b919050555061546042612da091906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f18565b6003601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612f1757601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612e80906155bc565b919050555062015180601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed391906153a5565b601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b5b6000612f263061129f565b90506014548110612f375760145490505b60006015548210159050601360149054906101000a900460ff16158015612f6a5750601360159054906101000a900460ff165b8015612f735750805b8015612fcb57507f00000000000000000000000095c893e6b5f81067cac4d46ffd453617e31a7d9a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ff357612fd982613223565b60004790506000811115612ff157612ff04761352d565b5b505b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061309a5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130a457600090505b6130b086868684613599565b505050505050565b6000838311158290613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f7919061509e565b60405180910390fd5b5082840390509392505050565b600080600061311a6138aa565b91509150613131818361313890919063ffffffff16565b9250505090565b6000818361314691906153fb565b905092915050565b6000818361315c91906153a5565b905092915050565b60008060008060008060008060008060008061317f8d613bf5565b93509350935093506000806131ae8f866131a961319a61310d565b8861351790919063ffffffff16565b613cd1565b9150915081816131ce6131bf61310d565b8861351790919063ffffffff16565b6131e86131d961310d565b8861351790919063ffffffff16565b898989899d509d509d509d509d509d509d509d50505050505050919395975091939597565b6000818361321b9190615486565b905092915050565b6001601360146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613281577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156132af5781602001602082028036833780820191505090505b50905030816000815181106132ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338d57600080fd5b505afa1580156133a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c59190614af8565b816001815181106133ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613464307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612361565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134c69594939291906152db565b600060405180830381600087803b1580156134e057600080fd5b505af11580156134f4573d6000803e3d6000fd5b50505050506000601360146101000a81548160ff02191690831515021790555050565b60008183613525919061542c565b905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613595573d6000803e3d6000fd5b5050565b806135a7576135a6613d43565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364a5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365f5761365a848484613d78565b613896565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137025750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371757613712848484613fe3565b613895565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137bb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137d0576137cb84848461424e565b613894565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138725750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561388757613882848484614424565b613893565b61389284848461424e565b5b5b5b5b806138a4576138a3614724565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613bb85782600160006006848154811061390a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a1e57508160026000600684815481106139b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a355760085460075494509450505050613bf1565b613aeb6001600060068481548110613a76577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461320d90919063ffffffff16565b9250613ba36002600060068481548110613b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361320d90919063ffffffff16565b91508080613bb0906155bc565b9150506138be565b50613bd060075460085461313890919063ffffffff16565b821015613be857600854600754935093505050613bf1565b81819350935050505b9091565b6000806000806000613c256064613c17600d548961351790919063ffffffff16565b61313890919063ffffffff16565b90506000613c516064613c43600e548a61351790919063ffffffff16565b61313890919063ffffffff16565b90506000613c7d6064613c6f600f548b61351790919063ffffffff16565b61313890919063ffffffff16565b90506000613cb882613caa85613c9c888e61320d90919063ffffffff16565b61320d90919063ffffffff16565b61320d90919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000613cde61310d565b90506000613cf5828861351790919063ffffffff16565b90506000613d3086613d22613d13868b61351790919063ffffffff16565b8561320d90919063ffffffff16565b61320d90919063ffffffff16565b9050818194509450505050935093915050565b600d54601081905550600e54601181905550600f546012819055506000600d819055506000600e819055506000600f81905550565b600080600080600080600080613d8d89613164565b97509750975097509750975097509750613def89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e8488600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1987600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f6581614741565b613f71868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613fce91906152c0565b60405180910390a35050505050505050505050565b600080600080600080600080613ff889613164565b9750975097509750975097509750975061405a88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ef84600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d081614741565b6141dc868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161423991906152c0565b60405180910390a35050505050505050505050565b60008060008060008060008061426389613164565b975097509750975097509750975097506142c588600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a681614741565b6143b2868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161440f91906152c0565b60405180910390a35050505050505050505050565b60008060008060008060008061443989613164565b9750975097509750975097509750975061449b89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453088600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145c584600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061465a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146a681614741565b6146b2868487856148e6565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161470f91906152c0565b60405180910390a35050505050505050505050565b601054600d81905550601154600e81905550601254600f81905550565b600061474b61310d565b90506000614762828461351790919063ffffffff16565b90506147b681600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156148e15761489d83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61490d826148ff8660085461320d90919063ffffffff16565b61320d90919063ffffffff16565b6008819055506149288360095461314e90919063ffffffff16565b600981905550614982826001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b6001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1b816002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461314e90919063ffffffff16565b6002600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b600081359050614a7581615ad5565b92915050565b600081519050614a8a81615ad5565b92915050565b600081359050614a9f81615aec565b92915050565b600081359050614ab481615b03565b92915050565b600081359050614ac981615b1a565b92915050565b600060208284031215614ae157600080fd5b6000614aef84828501614a66565b91505092915050565b600060208284031215614b0a57600080fd5b6000614b1884828501614a7b565b91505092915050565b600060208284031215614b3357600080fd5b6000614b4184828501614a90565b91505092915050565b60008060408385031215614b5d57600080fd5b6000614b6b85828601614a66565b9250506020614b7c85828601614a66565b9150509250929050565b600080600060608486031215614b9b57600080fd5b6000614ba986828701614a66565b9350506020614bba86828701614a66565b9250506040614bcb86828701614aba565b9150509250925092565b60008060408385031215614be857600080fd5b6000614bf685828601614a66565b9250506020614c0785828601614aa5565b9150509250929050565b60008060408385031215614c2457600080fd5b6000614c3285828601614a66565b9250506020614c4385828601614aba565b9150509250929050565b600060208284031215614c5f57600080fd5b6000614c6d84828501614aa5565b91505092915050565b600060208284031215614c8857600080fd5b6000614c9684828501614aba565b91505092915050565b60008060408385031215614cb257600080fd5b6000614cc085828601614aba565b9250506020614cd185828601614aa5565b9150509250929050565b6000614ce78383614d02565b60208301905092915050565b614cfc816154cc565b82525050565b614d0b816154ba565b82525050565b614d1a816154ba565b82525050565b6000614d2b82615360565b614d358185615383565b9350614d4083615350565b8060005b83811015614d71578151614d588882614cdb565b9750614d6383615376565b925050600181019050614d44565b5085935050505092915050565b614d87816154de565b82525050565b614d9681615521565b82525050565b614da581615545565b82525050565b6000614db68261536b565b614dc08185615394565b9350614dd0818560208601615557565b614dd981615692565b840191505092915050565b6000614df1602383615394565b9150614dfc826156a3565b604082019050919050565b6000614e14602a83615394565b9150614e1f826156f2565b604082019050919050565b6000614e37602683615394565b9150614e4282615741565b604082019050919050565b6000614e5a602283615394565b9150614e6582615790565b604082019050919050565b6000614e7d601b83615394565b9150614e88826157df565b602082019050919050565b6000614ea0601b83615394565b9150614eab82615808565b602082019050919050565b6000614ec3603483615394565b9150614ece82615831565b604082019050919050565b6000614ee6601f83615394565b9150614ef182615880565b602082019050919050565b6000614f09602883615394565b9150614f14826158a9565b604082019050919050565b6000614f2c602083615394565b9150614f37826158f8565b602082019050919050565b6000614f4f602983615394565b9150614f5a82615921565b604082019050919050565b6000614f72602583615394565b9150614f7d82615970565b604082019050919050565b6000614f95602483615394565b9150614fa0826159bf565b604082019050919050565b6000614fb8601a83615394565b9150614fc382615a0e565b602082019050919050565b6000614fdb602283615394565b9150614fe682615a37565b604082019050919050565b6000614ffe602c83615394565b915061500982615a86565b604082019050919050565b61501d8161550a565b82525050565b61502c81615514565b82525050565b60006020820190506150476000830184614d11565b92915050565b60006020820190506150626000830184614cf3565b92915050565b600060208201905061507d6000830184614d7e565b92915050565b60006020820190506150986000830184614d8d565b92915050565b600060208201905081810360008301526150b88184614dab565b905092915050565b600060208201905081810360008301526150d981614de4565b9050919050565b600060208201905081810360008301526150f981614e07565b9050919050565b6000602082019050818103600083015261511981614e2a565b9050919050565b6000602082019050818103600083015261513981614e4d565b9050919050565b6000602082019050818103600083015261515981614e70565b9050919050565b6000602082019050818103600083015261517981614e93565b9050919050565b6000602082019050818103600083015261519981614eb6565b9050919050565b600060208201905081810360008301526151b981614ed9565b9050919050565b600060208201905081810360008301526151d981614efc565b9050919050565b600060208201905081810360008301526151f981614f1f565b9050919050565b6000602082019050818103600083015261521981614f42565b9050919050565b6000602082019050818103600083015261523981614f65565b9050919050565b6000602082019050818103600083015261525981614f88565b9050919050565b6000602082019050818103600083015261527981614fab565b9050919050565b6000602082019050818103600083015261529981614fce565b9050919050565b600060208201905081810360008301526152b981614ff1565b9050919050565b60006020820190506152d56000830184615014565b92915050565b600060a0820190506152f06000830188615014565b6152fd6020830187614d9c565b818103604083015261530f8186614d20565b905061531e6060830185614d11565b61532b6080830184615014565b9695505050505050565b600060208201905061534a6000830184615023565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153b08261550a565b91506153bb8361550a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153f0576153ef615605565b5b828201905092915050565b60006154068261550a565b91506154118361550a565b92508261542157615420615634565b5b828204905092915050565b60006154378261550a565b91506154428361550a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561547b5761547a615605565b5b828202905092915050565b60006154918261550a565b915061549c8361550a565b9250828210156154af576154ae615605565b5b828203905092915050565b60006154c5826154ea565b9050919050565b60006154d7826154ea565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061552c82615533565b9050919050565b600061553e826154ea565b9050919050565b60006155508261550a565b9050919050565b60005b8381101561557557808201518184015260208101905061555a565b83811115615584576000848401525b50505050565b600060028204905060018216806155a257607f821691505b602082108114156155b6576155b5615663565b5b50919050565b60006155c78261550a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155fa576155f9615605565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7465616d4665652073686f756c6420626520696e2031202d2032350000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f6d61785478416d6f756e742073686f756c64206265206772656174657220746860008201527f616e203130303030303030303030303030306539000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f7461784665652073686f756c6420626520696e2031202d203235000000000000600082015250565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b615ade816154ba565b8114615ae957600080fd5b50565b615af5816154cc565b8114615b0057600080fd5b50565b615b0c816154de565b8114615b1757600080fd5b50565b615b238161550a565b8114615b2e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f9fe918dc56d63794085ed0266c56eec834b405f2a8807bb423678b7863d897b64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000025e95629a3387e5132fc778b8fb4e82718128fc0
-----Decoded View---------------
Arg [0] : tWallet (address): 0x25e95629A3387e5132Fc778B8Fb4e82718128fC0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000025e95629a3387e5132fc778b8fb4e82718128fc0
Deployed Bytecode Sourcemap
18103:20136:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21964:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23220:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19496:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38142:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21329:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37767:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22133:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37468:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24150:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21238:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22454:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23315:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23702:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19554:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:156;;;;;;;;;;;;;:::i;:::-;;25739:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37291:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19627:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19456:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21432:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16787:148;;;;;;;;;;;;;:::i;:::-;;16136:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22680:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18308:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21638:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23075:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37652:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22957:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37996:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21813:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30905:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24411:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17090:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30741:156;;;;;;;;;;;;;:::i;:::-;;37173:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24862:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21052:83;21089:13;21122:5;21115:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:83;:::o;21964:161::-;22039:4;22056:39;22065:12;:10;:12::i;:::-;22079:7;22088:6;22056:8;:39::i;:::-;22113:4;22106:11;;21964:161;;;;:::o;23220:87::-;23262:7;23289:10;;23282:17;;23220:87;:::o;19496:51::-;;;:::o;38142:94::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38223:5:::1;38203:17;;:25;;;;;;;;;;;;;;;;;;38142:94:::0;:::o;21329:95::-;21382:7;21409;;21402:14;;21329:95;:::o;37767:221::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37868:17:::1;37853:11;:32;;37845:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;37969:11;37954:12;:26;;;;37767:221:::0;:::o;22133:313::-;22231:4;22248:36;22258:6;22266:9;22277:6;22248:9;:36::i;:::-;22295:121;22304:6;22312:12;:10;:12::i;:::-;22326:89;22364:6;22326:89;;;;;;;;;;;;;;;;;:11;:19;22338:6;22326:19;;;;;;;;;;;;;;;:33;22346:12;:10;:12::i;:::-;22326:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22295:8;:121::i;:::-;22434:4;22427:11;;22133:313;;;;;:::o;37468:176::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37557:1:::1;37546:7;:12;;:29;;;;;37573:2;37562:7;:13;;37546:29;37538:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37629:7;37618:8;:18;;;;37468:176:::0;:::o;24150:253::-;24216:7;24255;;24244;:18;;24236:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24320:19;24343:10;:8;:10::i;:::-;24320:33;;24371:24;24383:11;24371:7;:11;;:24;;;;:::i;:::-;24364:31;;;24150:253;;;:::o;21238:83::-;21279:5;21304:9;;;;;;;;;;;21297:16;;21238:83;:::o;22454:218::-;22542:4;22559:83;22568:12;:10;:12::i;:::-;22582:7;22591:50;22630:10;22591:11;:25;22603:12;:10;:12::i;:::-;22591:25;;;;;;;;;;;;;;;:34;22617:7;22591:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;22559:8;:83::i;:::-;22660:4;22653:11;;22454:218;;;;:::o;23315:379::-;23367:14;23384:12;:10;:12::i;:::-;23367:29;;23416:11;:19;23428:6;23416:19;;;;;;;;;;;;;;;;;;;;;;;;;23415:20;23407:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:15;23522:19;23533:7;23522:10;:19::i;:::-;23495:46;;;;;;;;;23570:28;23590:7;23570;:15;23578:6;23570:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23552:7;:15;23560:6;23552:15;;;;;;;;;;;;;;;:46;;;;23619:20;23631:7;23619;;:11;;:20;;;;:::i;:::-;23609:7;:30;;;;23663:23;23678:7;23663:10;;:14;;:23;;;;:::i;:::-;23650:10;:36;;;;23315:379;;;:::o;23702:440::-;23792:7;23831;;23820;:18;;23812:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23890:17;23885:250;;23925:15;23951:19;23962:7;23951:10;:19::i;:::-;23924:46;;;;;;;;;23992:7;23985:14;;;;;23885:250;24034:23;24067:19;24078:7;24067:10;:19::i;:::-;24032:54;;;;;;;;;24108:15;24101:22;;;23702:440;;;;;:::o;19554:38::-;;;:::o;30577:156::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30631:23:::1;30657:24;30675:4;30657:9;:24::i;:::-;30631:50;;30692:33;30709:15;30692:16;:33::i;:::-;16427:1;30577:156::o:0;25739:123::-;25803:4;25827:18;:27;25846:7;25827:27;;;;;;;;;;;;;;;;;;;;;;;;;25820:34;;25739:123;;;:::o;37291:169::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37377:1:::1;37367:6;:11;;:27;;;;;37392:2;37382:6;:12;;37367:27;37359:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37446:6;37436:7;:16;;;;37291:169:::0;:::o;19627:30::-;;;;;;;;;;;;;:::o;19456:31::-;;;;;;;;;;;;;:::o;21432:198::-;21498:7;21522:11;:20;21534:7;21522:20;;;;;;;;;;;;;;;;;;;;;;;;;21518:49;;;21551:7;:16;21559:7;21551:16;;;;;;;;;;;;;;;;21544:23;;;;21518:49;21585:37;21605:7;:16;21613:7;21605:16;;;;;;;;;;;;;;;;21585:19;:37::i;:::-;21578:44;;21432:198;;;;:::o;16787:148::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16894:1:::1;16857:40;;16878:6;::::0;::::1;;;;;;;;16857:40;;;;;;;;;;;;16925:1;16908:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16787:148::o:0;16136:87::-;16182:7;16209:6;;;;;;;;;;;16202:13;;16136:87;:::o;21143:::-;21182:13;21215:7;21208:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21143:87;:::o;22680:269::-;22773:4;22790:129;22799:12;:10;:12::i;:::-;22813:7;22822:96;22861:15;22822:96;;;;;;;;;;;;;;;;;:11;:25;22834:12;:10;:12::i;:::-;22822:25;;;;;;;;;;;;;;;:34;22848:7;22822:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;22790:8;:129::i;:::-;22937:4;22930:11;;22680:269;;;;:::o;18308:45::-;18351:1;18308:45;:::o;21638:167::-;21716:4;21733:42;21743:12;:10;:12::i;:::-;21757:9;21768:6;21733:9;:42::i;:::-;21793:4;21786:11;;21638:167;;;;:::o;23075:137::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23196:8:::1;23166:18;:27;23185:7;23166:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23075:137:::0;;:::o;37652:107::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37744:7:::1;37733:8;;:18;;;;;;;;;;;;;;;;;;37652:107:::0;:::o;22957:110::-;23015:4;23039:11;:20;23051:7;23039:20;;;;;;;;;;;;;;;;;;;;;;;;;23032:27;;22957:110;;;:::o;18224:77::-;18259:42;18224:77;:::o;37996:138::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38090:36:::1;38113:12;38090:18;38102:5;38090:7;;:11;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;38075:12;:51;;;;37996:138:::0;:::o;21813:143::-;21894:7;21921:11;:18;21933:5;21921:18;;;;;;;;;;;;;;;:27;21940:7;21921:27;;;;;;;;;;;;;;;;21914:34;;21813:143;;;;:::o;30905:98::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30988:7:::1;30974:11;;:21;;;;;;;;;;;;;;;;;;30905:98:::0;:::o;24411:443::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24503:42:::1;24492:53;;:7;:53;;;;24484:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24604:11;:20;24616:7;24604:20;;;;;;;;;;;;;;;;;;;;;;;;;24603:21;24595:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24689:1;24670:7;:16;24678:7;24670:16;;;;;;;;;;;;;;;;:20;24667:108;;;24726:37;24746:7;:16;24754:7;24746:16;;;;;;;;;;;;;;;;24726:19;:37::i;:::-;24707:7;:16;24715:7;24707:16;;;;;;;;;;;;;;;:56;;;;24667:108;24808:4;24785:11;:20;24797:7;24785:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24823:9;24838:7;24823:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24411:443:::0;:::o;17090:244::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17199:1:::1;17179:22;;:8;:22;;;;17171:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17289:8;17260:38;;17281:6;::::0;::::1;;;;;;;;17260:38;;;;;;;;;;;;17318:8;17309:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17090:244:::0;:::o;30741:156::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30795:26:::1;30824:21;30795:50;;30856:33;30870:18;30856:13;:33::i;:::-;16427:1;30741:156::o:0;37173:110::-;37219:15;37254:21;37247:28;;37173:110;:::o;24862:478::-;16367:12;:10;:12::i;:::-;16356:23;;:7;:5;:7::i;:::-;:23;;;16348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24943:11:::1;:20;24955:7;24943:20;;;;;;;;;;;;;;;;;;;;;;;;;24935:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25011:9;25006:327;25030:9;:16;;;;25026:1;:20;25006:327;;;25088:7;25072:23;;:9;25082:1;25072:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;25068:254;;;25131:9;25160:1;25141:9;:16;;;;:20;;;;:::i;:::-;25131:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25116:9;25126:1;25116:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25200:1;25181:7;:16;25189:7;25181:16;;;;;;;;;;;;;;;:20;;;;25243:5;25220:11;:20;25232:7;25220:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25267:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25301:5;;25068:254;25048:3;;;;;:::i;:::-;;;;25006:327;;;;24862:478:::0;:::o;100:98::-;153:7;180:10;173:17;;100:98;:::o;25870:333::-;18351:1;25963:17;;:5;:17;;;;25955:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18351:1;26040:19;;:7;:19;;;;26032:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26141:6;26111:11;:18;26123:5;26111:18;;;;;;;;;;;;;;;:27;26130:7;26111:27;;;;;;;;;;;;;;;:36;;;;26179:7;26163:32;;26172:5;26163:32;;;26188:6;26163:32;;;;;;:::i;:::-;;;;;;;;25870:333;;;:::o;26211:3509::-;18351:1;26308:18;;:6;:18;;;;26300:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18351:1;26387:21;;:9;:21;;;;26379:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26476:1;26467:6;:10;26459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26719:7;:5;:7::i;:::-;26709:17;;:6;:17;;;;:41;;;;;26743:7;:5;:7::i;:::-;26730:20;;:9;:20;;;;26709:41;:66;;;;;26767:8;;;;;;;;;;;26754:21;;:9;:21;;;;26709:66;26706:173;;;26810:12;;26800:6;:22;;26792:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26706:173;26972:17;;;;;;;;;;;:44;;;;;27003:13;26993:23;;:6;:23;;;26972:44;:85;;;;;27041:15;27020:37;;:9;:37;;;;26972:85;:112;;;;;27062:11;:22;27074:9;27062:22;;;;;;;;;;;;;;;;;;;;;;;;;27061:23;26972:112;26968:264;;;27134:15;27109:11;:22;27121:9;27109:22;;;;;;;;;;;;;;;;:40;27101:49;;;;;;27209:10;27190:15;:30;;;;:::i;:::-;27165:11;:22;27177:9;27165:22;;;;;;;;;;;;;;;:55;;;;26968:264;27449:17;;;;;;;;;;;:44;;;;;27480:13;27470:23;;:6;:23;;;;27449:44;:82;;;;;27515:15;27497:34;;:6;:34;;;;27449:82;27445:1021;;;27579:15;27556:12;:20;27569:6;27556:20;;;;;;;;;;;;;;;;:38;27548:47;;;;;;27644:15;27634:6;27613:9;:17;27623:6;27613:17;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:46;27610:107;;;27700:1;27679:10;:18;27690:6;27679:18;;;;;;;;;;;;;;;:22;;;;27610:107;27757:1;27735:10;:18;27746:6;27735:18;;;;;;;;;;;;;;;;:23;27731:724;;;27779:10;:18;27790:6;27779:18;;;;;;;;;;;;;;;;:20;;;;;;;;;:::i;:::-;;;;;;27838:15;27818:9;:17;27828:6;27818:17;;;;;;;;;;;;;;;:35;;;;27914:7;27895:15;:27;;;;:::i;:::-;27872:12;:20;27885:6;27872:20;;;;;;;;;;;;;;;:50;;;;27731:724;;;27983:1;27961:10;:18;27972:6;27961:18;;;;;;;;;;;;;;;;:23;27957:498;;;28005:10;:18;28016:6;28005:18;;;;;;;;;;;;;;;;:20;;;;;;;;;:::i;:::-;;;;;;28086:7;28067:15;:27;;;;:::i;:::-;28044:12;:20;28057:6;28044:20;;;;;;;;;;;;;;;:50;;;;27957:498;;;28155:1;28133:10;:18;28144:6;28133:18;;;;;;;;;;;;;;;;:23;28129:326;;;28177:10;:18;28188:6;28177:18;;;;;;;;;;;;;;;;:20;;;;;;;;;:::i;:::-;;;;;;28258:7;28239:15;:27;;;;:::i;:::-;28216:12;:20;28229:6;28216:20;;;;;;;;;;;;;;;:50;;;;28129:326;;;28327:1;28305:10;:18;28316:6;28305:18;;;;;;;;;;;;;;;;:23;28301:154;;;28349:10;:18;28360:6;28349:18;;;;;;;;;;;;;;;;:20;;;;;;;;;:::i;:::-;;;;;;28432:6;28411:9;:17;28421:6;28411:17;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;28388:12;:20;28401:6;28388:20;;;;;;;;;;;;;;;:51;;;;28301:154;28129:326;27957:498;27731:724;27445:1021;28621:28;28652:24;28670:4;28652:9;:24::i;:::-;28621:55;;28714:12;;28690:20;:36;28687:103;;28766:12;;28743:35;;28687:103;28802:24;28853:29;;28829:20;:53;;28802:80;;28898:6;;;;;;;;;;;28897:7;:22;;;;;28908:11;;;;;;;;;;;28897:22;:45;;;;;28923:19;28897:45;:72;;;;;28956:13;28946:23;;:6;:23;;;;28897:72;28893:408;;;29072:38;29089:20;29072:16;:38::i;:::-;29127:26;29156:21;29127:50;;29216:1;29195:18;:22;29192:98;;;29238:36;29252:21;29238:13;:36::i;:::-;29192:98;28893:408;;29374:12;29389:4;29374:19;;29493:18;:26;29512:6;29493:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;29523:18;:29;29542:9;29523:29;;;;;;;;;;;;;;;;;;;;;;;;;29493:59;29490:105;;;29578:5;29568:15;;29490:105;29665:47;29680:6;29687:9;29697:6;29704:7;29665:14;:47::i;:::-;26211:3509;;;;;;:::o;5755:206::-;5841:7;5899:1;5894;:6;;5902:12;5886:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5941:1;5937;:5;5930:12;;5755:206;;;;;:::o;36243:163::-;36284:7;36305:15;36322;36341:19;:17;:19::i;:::-;36304:56;;;;36378:20;36390:7;36378;:11;;:20;;;;:::i;:::-;36371:27;;;;36243:163;:::o;4613:98::-;4671:7;4702:1;4698;:5;;;;:::i;:::-;4691:12;;4613:98;;;;:::o;3476:::-;3534:7;3565:1;3561;:5;;;;:::i;:::-;3554:12;;3476:98;;;;:::o;35004:473::-;35063:7;35072;35081;35090;35099;35108;35117;35126;35147:23;35172:12;35186:13;35201;35218:20;35230:7;35218:11;:20::i;:::-;35146:92;;;;;;;;35250:15;35267:23;35294:49;35306:7;35315:4;35321:21;35331:10;:8;:10::i;:::-;35321:5;:9;;:21;;;;:::i;:::-;35294:11;:49::i;:::-;35249:94;;;;35362:7;35371:15;35388:20;35397:10;:8;:10::i;:::-;35388:4;:8;;:20;;;;:::i;:::-;35410:21;35420:10;:8;:10::i;:::-;35410:5;:9;;:21;;;;:::i;:::-;35433:15;35450:4;35456:5;35463;35354:115;;;;;;;;;;;;;;;;;;;;;;35004:473;;;;;;;;;:::o;3857:98::-;3915:7;3946:1;3942;:5;;;;:::i;:::-;3935:12;;3857:98;;;;:::o;29728:600::-;20224:4;20215:6;;:13;;;;;;;;;;;;;;;;;;29865:21:::1;29903:1;29889:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29865:40;;29934:4;29916;29921:1;29916:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;29960:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29950:4;29955:1;29950:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;29995:62;30012:4;30027:15;30045:11;29995:8;:62::i;:::-;30096:15;:66;;;30177:11;30203:1;30247:4;30274;30294:15;30096:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20239:1;20260:5:::0;20251:6;;:14;;;;;;;;;;;;;;;;;;29728:600;:::o;4214:98::-;4272:7;4303:1;4299;:5;;;;:::i;:::-;4292:12;;4214:98;;;;:::o;30336:91::-;30394:8;;;;;;;;;;;:17;;:25;30412:6;30394:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30336:91;:::o;31011:819::-;31123:7;31119:40;;31145:14;:12;:14::i;:::-;31119:40;31176:11;:19;31188:6;31176:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31200:11;:22;31212:9;31200:22;;;;;;;;;;;;;;;;;;;;;;;;;31199:23;31176:46;31172:597;;;31239:48;31261:6;31269:9;31280:6;31239:21;:48::i;:::-;31172:597;;;31310:11;:19;31322:6;31310:19;;;;;;;;;;;;;;;;;;;;;;;;;31309:20;:46;;;;;31333:11;:22;31345:9;31333:22;;;;;;;;;;;;;;;;;;;;;;;;;31309:46;31305:464;;;31372:46;31392:6;31400:9;31411:6;31372:19;:46::i;:::-;31305:464;;;31441:11;:19;31453:6;31441:19;;;;;;;;;;;;;;;;;;;;;;;;;31440:20;:47;;;;;31465:11;:22;31477:9;31465:22;;;;;;;;;;;;;;;;;;;;;;;;;31464:23;31440:47;31436:333;;;31504:44;31522:6;31530:9;31541:6;31504:17;:44::i;:::-;31436:333;;;31570:11;:19;31582:6;31570:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;31593:11;:22;31605:9;31593:22;;;;;;;;;;;;;;;;;;;;;;;;;31570:45;31566:203;;;31632:48;31654:6;31662:9;31673:6;31632:21;:48::i;:::-;31566:203;;;31713:44;31731:6;31739:9;31750:6;31713:17;:44::i;:::-;31566:203;31436:333;31305:464;31172:597;31785:7;31781:41;;31807:15;:13;:15::i;:::-;31781:41;31011:819;;;;:::o;36414:555::-;36464:7;36473;36493:15;36511:7;;36493:25;;36529:15;36547:7;;36529:25;;36570:9;36565:289;36589:9;:16;;;;36585:1;:20;36565:289;;;36655:7;36631;:21;36639:9;36649:1;36639:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36631:21;;;;;;;;;;;;;;;;:31;:66;;;;36690:7;36666;:21;36674:9;36684:1;36674:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36666:21;;;;;;;;;;;;;;;;:31;36631:66;36627:97;;;36707:7;;36716;;36699:25;;;;;;;;;36627:97;36749:34;36761:7;:21;36769:9;36779:1;36769:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36761:21;;;;;;;;;;;;;;;;36749:7;:11;;:34;;;;:::i;:::-;36739:44;;36808:34;36820:7;:21;36828:9;36838:1;36828:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36820:21;;;;;;;;;;;;;;;;36808:7;:11;;:34;;;;:::i;:::-;36798:44;;36607:3;;;;;:::i;:::-;;;;36565:289;;;;36878:20;36890:7;;36878;;:11;;:20;;;;:::i;:::-;36868:7;:30;36864:61;;;36908:7;;36917;;36900:25;;;;;;;;36864:61;36944:7;36953;36936:25;;;;;;36414:555;;;:::o;35485:404::-;35545:7;35554;35563;35572;35592:12;35607:29;35632:3;35607:20;35619:7;;35607;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;35592:44;;35647:13;35663:30;35689:3;35663:21;35675:8;;35663:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;35647:46;;35704:13;35720:30;35746:3;35720:21;35732:8;;35720:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;35704:46;;35761:23;35787:39;35820:5;35787:28;35809:5;35787:17;35799:4;35787:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;35761:65;;35845:15;35862:4;35868:5;35875;35837:44;;;;;;;;;;;;35485:404;;;;;:::o;35897:338::-;35986:7;35995;36015:19;36038:10;:8;:10::i;:::-;36015:33;;36059:15;36077:24;36089:11;36077:7;:11;;:24;;;;:::i;:::-;36059:42;;36112:23;36138:45;36177:5;36138:34;36150:21;36159:11;36150:4;:8;;:21;;;;:::i;:::-;36138:7;:11;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;36112:71;;36202:7;36211:15;36194:33;;;;;;;35897:338;;;;;;:::o;25348:222::-;25409:7;;25391:15;:25;;;;25446:8;;25427:16;:27;;;;25484:8;;25465:16;:27;;;;25515:1;25505:7;:11;;;;25538:1;25527:8;:12;;;;25561:1;25550:8;:12;;;;25348:222::o;32989:592::-;33092:15;33109:23;33134:12;33148:13;33163:23;33188:12;33202:13;33217;33234:19;33245:7;33234:10;:19::i;:::-;33091:162;;;;;;;;;;;;;;;;33282:28;33302:7;33282;:15;33290:6;33282:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33264:7;:15;33272:6;33264:15;;;;;;;;;;;;;;;:46;;;;33339:28;33359:7;33339;:15;33347:6;33339:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33321:7;:15;33329:6;33321:15;;;;;;;;;;;;;;;:46;;;;33399:39;33422:15;33399:7;:18;33407:9;33399:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33378:7;:18;33386:9;33378:18;;;;;;;;;;;;;;;:60;;;;33449:16;33459:5;33449:9;:16::i;:::-;33476:37;33488:4;33494;33500:5;33507;33476:11;:37::i;:::-;33546:9;33529:44;;33538:6;33529:44;;;33557:15;33529:44;;;;;;:::i;:::-;;;;;;;;32989:592;;;;;;;;;;;:::o;32377:604::-;32478:15;32495:23;32520:12;32534:13;32549:23;32574:12;32588:13;32603;32620:19;32631:7;32620:10;:19::i;:::-;32477:162;;;;;;;;;;;;;;;;32668:28;32688:7;32668;:15;32676:6;32668:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32650:7;:15;32658:6;32650:15;;;;;;;;;;;;;;;:46;;;;32728:39;32751:15;32728:7;:18;32736:9;32728:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32707:7;:18;32715:9;32707:18;;;;;;;;;;;;;;;:60;;;;32799:39;32822:15;32799:7;:18;32807:9;32799:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32778:7;:18;32786:9;32778:18;;;;;;;;;;;;;;;:60;;;;32849:16;32859:5;32849:9;:16::i;:::-;32876:37;32888:4;32894;32900:5;32907;32876:11;:37::i;:::-;32946:9;32929:44;;32938:6;32929:44;;;32957:15;32929:44;;;;;;:::i;:::-;;;;;;;;32377:604;;;;;;;;;;;:::o;31838:531::-;31937:15;31954:23;31979:12;31993:13;32008:23;32033:12;32047:13;32062;32079:19;32090:7;32079:10;:19::i;:::-;31936:162;;;;;;;;;;;;;;;;32127:28;32147:7;32127;:15;32135:6;32127:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32109:7;:15;32117:6;32109:15;;;;;;;;;;;;;;;:46;;;;32187:39;32210:15;32187:7;:18;32195:9;32187:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32166:7;:18;32174:9;32166:18;;;;;;;;;;;;;;;:60;;;;32237:16;32247:5;32237:9;:16::i;:::-;32264:37;32276:4;32282;32288:5;32295;32264:11;:37::i;:::-;32334:9;32317:44;;32326:6;32317:44;;;32345:15;32317:44;;;;;;:::i;:::-;;;;;;;;31838:531;;;;;;;;;;;:::o;33589:663::-;33692:15;33709:23;33734:12;33748:13;33763:23;33788:12;33802:13;33817;33834:19;33845:7;33834:10;:19::i;:::-;33691:162;;;;;;;;;;;;;;;;33882:28;33902:7;33882;:15;33890:6;33882:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33864:7;:15;33872:6;33864:15;;;;;;;;;;;;;;;:46;;;;33939:28;33959:7;33939;:15;33947:6;33939:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33921:7;:15;33929:6;33921:15;;;;;;;;;;;;;;;:46;;;;33999:39;34022:15;33999:7;:18;34007:9;33999:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33978:7;:18;33986:9;33978:18;;;;;;;;;;;;;;;:60;;;;34070:39;34093:15;34070:7;:18;34078:9;34070:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34049:7;:18;34057:9;34049:18;;;;;;;;;;;;;;;:60;;;;34120:16;34130:5;34120:9;:16::i;:::-;34147:37;34159:4;34165;34171:5;34178;34147:11;:37::i;:::-;34217:9;34200:44;;34209:6;34200:44;;;34228:15;34200:44;;;;;;:::i;:::-;;;;;;;;33589:663;;;;;;;;;;;:::o;25578:153::-;25632:15;;25622:7;:25;;;;25669:16;;25658:8;:27;;;;25707:16;;25696:8;:27;;;;25578:153::o;34260:325::-;34313:19;34336:10;:8;:10::i;:::-;34313:33;;34357:13;34373:22;34383:11;34373:5;:9;;:22;;;;:::i;:::-;34357:38;;34431:33;34458:5;34431:7;:22;34447:4;34431:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;34406:7;:22;34422:4;34406:22;;;;;;;;;;;;;;;:58;;;;34478:11;:26;34498:4;34478:26;;;;;;;;;;;;;;;;;;;;;;;;;34475:102;;;34544:33;34571:5;34544:7;:22;34560:4;34544:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;34519:7;:22;34535:4;34519:22;;;;;;;;;;;;;;;:58;;;;34475:102;34260:325;;;:::o;34593:306::-;34701:28;34723:5;34701:17;34713:4;34701:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;34691:7;:38;;;;34753:20;34768:4;34753:10;;:14;;:20;;;;:::i;:::-;34740:10;:33;;;;34804:28;34826:5;34804:7;:17;18259:42;34804:17;;;;;;;;;;;;;;;;:21;;:28;;;;:::i;:::-;34784:7;:17;18259:42;34784:17;;;;;;;;;;;;;;;:48;;;;34863:28;34885:5;34863:7;:17;18259:42;34863:17;;;;;;;;;;;;;;;;:21;;:28;;;;:::i;:::-;34843:7;:17;18259:42;34843:17;;;;;;;;;;;;;;;:48;;;;34593:306;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;511:84;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;653:87;;;;:::o;746:262::-;805:6;854:2;842:9;833:7;829:23;825:32;822:2;;;870:1;867;860:12;822:2;913:1;938:53;983:7;974:6;963:9;959:22;938:53;:::i;:::-;928:63;;884:117;812:196;;;;:::o;1014:284::-;1084:6;1133:2;1121:9;1112:7;1108:23;1104:32;1101:2;;;1149:1;1146;1139:12;1101:2;1192:1;1217:64;1273:7;1264:6;1253:9;1249:22;1217:64;:::i;:::-;1207:74;;1163:128;1091:207;;;;:::o;1304:278::-;1371:6;1420:2;1408:9;1399:7;1395:23;1391:32;1388:2;;;1436:1;1433;1426:12;1388:2;1479:1;1504:61;1557:7;1548:6;1537:9;1533:22;1504:61;:::i;:::-;1494:71;;1450:125;1378:204;;;;:::o;1588:407::-;1656:6;1664;1713:2;1701:9;1692:7;1688:23;1684:32;1681:2;;;1729:1;1726;1719:12;1681:2;1772:1;1797:53;1842:7;1833:6;1822:9;1818:22;1797:53;:::i;:::-;1787:63;;1743:117;1899:2;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1870:118;1671:324;;;;;:::o;2001:552::-;2078:6;2086;2094;2143:2;2131:9;2122:7;2118:23;2114:32;2111:2;;;2159:1;2156;2149:12;2111:2;2202:1;2227:53;2272:7;2263:6;2252:9;2248:22;2227:53;:::i;:::-;2217:63;;2173:117;2329:2;2355:53;2400:7;2391:6;2380:9;2376:22;2355:53;:::i;:::-;2345:63;;2300:118;2457:2;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2428:118;2101:452;;;;;:::o;2559:401::-;2624:6;2632;2681:2;2669:9;2660:7;2656:23;2652:32;2649:2;;;2697:1;2694;2687:12;2649:2;2740:1;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;:::i;:::-;2755:63;;2711:117;2867:2;2893:50;2935:7;2926:6;2915:9;2911:22;2893:50;:::i;:::-;2883:60;;2838:115;2639:321;;;;;:::o;2966:407::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:2;;;3107:1;3104;3097:12;3059:2;3150:1;3175:53;3220:7;3211:6;3200:9;3196:22;3175:53;:::i;:::-;3165:63;;3121:117;3277:2;3303:53;3348:7;3339:6;3328:9;3324:22;3303:53;:::i;:::-;3293:63;;3248:118;3049:324;;;;;:::o;3379:256::-;3435:6;3484:2;3472:9;3463:7;3459:23;3455:32;3452:2;;;3500:1;3497;3490:12;3452:2;3543:1;3568:50;3610:7;3601:6;3590:9;3586:22;3568:50;:::i;:::-;3558:60;;3514:114;3442:193;;;;:::o;3641:262::-;3700:6;3749:2;3737:9;3728:7;3724:23;3720:32;3717:2;;;3765:1;3762;3755:12;3717:2;3808:1;3833:53;3878:7;3869:6;3858:9;3854:22;3833:53;:::i;:::-;3823:63;;3779:117;3707:196;;;;:::o;3909:401::-;3974:6;3982;4031:2;4019:9;4010:7;4006:23;4002:32;3999:2;;;4047:1;4044;4037:12;3999:2;4090:1;4115:53;4160:7;4151:6;4140:9;4136:22;4115:53;:::i;:::-;4105:63;;4061:117;4217:2;4243:50;4285:7;4276:6;4265:9;4261:22;4243:50;:::i;:::-;4233:60;;4188:115;3989:321;;;;;:::o;4316:179::-;4385:10;4406:46;4448:3;4440:6;4406:46;:::i;:::-;4484:4;4479:3;4475:14;4461:28;;4396:99;;;;:::o;4501:142::-;4604:32;4630:5;4604:32;:::i;:::-;4599:3;4592:45;4582:61;;:::o;4649:108::-;4726:24;4744:5;4726:24;:::i;:::-;4721:3;4714:37;4704:53;;:::o;4763:118::-;4850:24;4868:5;4850:24;:::i;:::-;4845:3;4838:37;4828:53;;:::o;4917:732::-;5036:3;5065:54;5113:5;5065:54;:::i;:::-;5135:86;5214:6;5209:3;5135:86;:::i;:::-;5128:93;;5245:56;5295:5;5245:56;:::i;:::-;5324:7;5355:1;5340:284;5365:6;5362:1;5359:13;5340:284;;;5441:6;5435:13;5468:63;5527:3;5512:13;5468:63;:::i;:::-;5461:70;;5554:60;5607:6;5554:60;:::i;:::-;5544:70;;5400:224;5387:1;5384;5380:9;5375:14;;5340:284;;;5344:14;5640:3;5633:10;;5041:608;;;;;;;:::o;5655:109::-;5736:21;5751:5;5736:21;:::i;:::-;5731:3;5724:34;5714:50;;:::o;5770:183::-;5883:63;5940:5;5883:63;:::i;:::-;5878:3;5871:76;5861:92;;:::o;5959:147::-;6054:45;6093:5;6054:45;:::i;:::-;6049:3;6042:58;6032:74;;:::o;6112:364::-;6200:3;6228:39;6261:5;6228:39;:::i;:::-;6283:71;6347:6;6342:3;6283:71;:::i;:::-;6276:78;;6363:52;6408:6;6403:3;6396:4;6389:5;6385:16;6363:52;:::i;:::-;6440:29;6462:6;6440:29;:::i;:::-;6435:3;6431:39;6424:46;;6204:272;;;;;:::o;6482:366::-;6624:3;6645:67;6709:2;6704:3;6645:67;:::i;:::-;6638:74;;6721:93;6810:3;6721:93;:::i;:::-;6839:2;6834:3;6830:12;6823:19;;6628:220;;;:::o;6854:366::-;6996:3;7017:67;7081:2;7076:3;7017:67;:::i;:::-;7010:74;;7093:93;7182:3;7093:93;:::i;:::-;7211:2;7206:3;7202:12;7195:19;;7000:220;;;:::o;7226:366::-;7368:3;7389:67;7453:2;7448:3;7389:67;:::i;:::-;7382:74;;7465:93;7554:3;7465:93;:::i;:::-;7583:2;7578:3;7574:12;7567:19;;7372:220;;;:::o;7598:366::-;7740:3;7761:67;7825:2;7820:3;7761:67;:::i;:::-;7754:74;;7837:93;7926:3;7837:93;:::i;:::-;7955:2;7950:3;7946:12;7939:19;;7744:220;;;:::o;7970:366::-;8112:3;8133:67;8197:2;8192:3;8133:67;:::i;:::-;8126:74;;8209:93;8298:3;8209:93;:::i;:::-;8327:2;8322:3;8318:12;8311:19;;8116:220;;;:::o;8342:366::-;8484:3;8505:67;8569:2;8564:3;8505:67;:::i;:::-;8498:74;;8581:93;8670:3;8581:93;:::i;:::-;8699:2;8694:3;8690:12;8683:19;;8488:220;;;:::o;8714:366::-;8856:3;8877:67;8941:2;8936:3;8877:67;:::i;:::-;8870:74;;8953:93;9042:3;8953:93;:::i;:::-;9071:2;9066:3;9062:12;9055:19;;8860:220;;;:::o;9086:366::-;9228:3;9249:67;9313:2;9308:3;9249:67;:::i;:::-;9242:74;;9325:93;9414:3;9325:93;:::i;:::-;9443:2;9438:3;9434:12;9427:19;;9232:220;;;:::o;9458:366::-;9600:3;9621:67;9685:2;9680:3;9621:67;:::i;:::-;9614:74;;9697:93;9786:3;9697:93;:::i;:::-;9815:2;9810:3;9806:12;9799:19;;9604:220;;;:::o;9830:366::-;9972:3;9993:67;10057:2;10052:3;9993:67;:::i;:::-;9986:74;;10069:93;10158:3;10069:93;:::i;:::-;10187:2;10182:3;10178:12;10171:19;;9976:220;;;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10348:220;;;:::o;10574:366::-;10716:3;10737:67;10801:2;10796:3;10737:67;:::i;:::-;10730:74;;10813:93;10902:3;10813:93;:::i;:::-;10931:2;10926:3;10922:12;10915:19;;10720:220;;;:::o;10946:366::-;11088:3;11109:67;11173:2;11168:3;11109:67;:::i;:::-;11102:74;;11185:93;11274:3;11185:93;:::i;:::-;11303:2;11298:3;11294:12;11287:19;;11092:220;;;:::o;11318:366::-;11460:3;11481:67;11545:2;11540:3;11481:67;:::i;:::-;11474:74;;11557:93;11646:3;11557:93;:::i;:::-;11675:2;11670:3;11666:12;11659:19;;11464:220;;;:::o;11690:366::-;11832:3;11853:67;11917:2;11912:3;11853:67;:::i;:::-;11846:74;;11929:93;12018:3;11929:93;:::i;:::-;12047:2;12042:3;12038:12;12031:19;;11836:220;;;:::o;12062:366::-;12204:3;12225:67;12289:2;12284:3;12225:67;:::i;:::-;12218:74;;12301:93;12390:3;12301:93;:::i;:::-;12419:2;12414:3;12410:12;12403:19;;12208:220;;;:::o;12434:118::-;12521:24;12539:5;12521:24;:::i;:::-;12516:3;12509:37;12499:53;;:::o;12558:112::-;12641:22;12657:5;12641:22;:::i;:::-;12636:3;12629:35;12619:51;;:::o;12676:222::-;12769:4;12807:2;12796:9;12792:18;12784:26;;12820:71;12888:1;12877:9;12873:17;12864:6;12820:71;:::i;:::-;12774:124;;;;:::o;12904:254::-;13013:4;13051:2;13040:9;13036:18;13028:26;;13064:87;13148:1;13137:9;13133:17;13124:6;13064:87;:::i;:::-;13018:140;;;;:::o;13164:210::-;13251:4;13289:2;13278:9;13274:18;13266:26;;13302:65;13364:1;13353:9;13349:17;13340:6;13302:65;:::i;:::-;13256:118;;;;:::o;13380:274::-;13499:4;13537:2;13526:9;13522:18;13514:26;;13550:97;13644:1;13633:9;13629:17;13620:6;13550:97;:::i;:::-;13504:150;;;;:::o;13660:313::-;13773:4;13811:2;13800:9;13796:18;13788:26;;13860:9;13854:4;13850:20;13846:1;13835:9;13831:17;13824:47;13888:78;13961:4;13952:6;13888:78;:::i;:::-;13880:86;;13778:195;;;;:::o;13979:419::-;14145:4;14183:2;14172:9;14168:18;14160:26;;14232:9;14226:4;14222:20;14218:1;14207:9;14203:17;14196:47;14260:131;14386:4;14260:131;:::i;:::-;14252:139;;14150:248;;;:::o;14404:419::-;14570:4;14608:2;14597:9;14593:18;14585:26;;14657:9;14651:4;14647:20;14643:1;14632:9;14628:17;14621:47;14685:131;14811:4;14685:131;:::i;:::-;14677:139;;14575:248;;;:::o;14829:419::-;14995:4;15033:2;15022:9;15018:18;15010:26;;15082:9;15076:4;15072:20;15068:1;15057:9;15053:17;15046:47;15110:131;15236:4;15110:131;:::i;:::-;15102:139;;15000:248;;;:::o;15254:419::-;15420:4;15458:2;15447:9;15443:18;15435:26;;15507:9;15501:4;15497:20;15493:1;15482:9;15478:17;15471:47;15535:131;15661:4;15535:131;:::i;:::-;15527:139;;15425:248;;;:::o;15679:419::-;15845:4;15883:2;15872:9;15868:18;15860:26;;15932:9;15926:4;15922:20;15918:1;15907:9;15903:17;15896:47;15960:131;16086:4;15960:131;:::i;:::-;15952:139;;15850:248;;;:::o;16104:419::-;16270:4;16308:2;16297:9;16293:18;16285:26;;16357:9;16351:4;16347:20;16343:1;16332:9;16328:17;16321:47;16385:131;16511:4;16385:131;:::i;:::-;16377:139;;16275:248;;;:::o;16529:419::-;16695:4;16733:2;16722:9;16718:18;16710:26;;16782:9;16776:4;16772:20;16768:1;16757:9;16753:17;16746:47;16810:131;16936:4;16810:131;:::i;:::-;16802:139;;16700:248;;;:::o;16954:419::-;17120:4;17158:2;17147:9;17143:18;17135:26;;17207:9;17201:4;17197:20;17193:1;17182:9;17178:17;17171:47;17235:131;17361:4;17235:131;:::i;:::-;17227:139;;17125:248;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17550:248;;;:::o;17804:419::-;17970:4;18008:2;17997:9;17993:18;17985:26;;18057:9;18051:4;18047:20;18043:1;18032:9;18028:17;18021:47;18085:131;18211:4;18085:131;:::i;:::-;18077:139;;17975:248;;;:::o;18229:419::-;18395:4;18433:2;18422:9;18418:18;18410:26;;18482:9;18476:4;18472:20;18468:1;18457:9;18453:17;18446:47;18510:131;18636:4;18510:131;:::i;:::-;18502:139;;18400:248;;;:::o;18654:419::-;18820:4;18858:2;18847:9;18843:18;18835:26;;18907:9;18901:4;18897:20;18893:1;18882:9;18878:17;18871:47;18935:131;19061:4;18935:131;:::i;:::-;18927:139;;18825:248;;;:::o;19079:419::-;19245:4;19283:2;19272:9;19268:18;19260:26;;19332:9;19326:4;19322:20;19318:1;19307:9;19303:17;19296:47;19360:131;19486:4;19360:131;:::i;:::-;19352:139;;19250:248;;;:::o;19504:419::-;19670:4;19708:2;19697:9;19693:18;19685:26;;19757:9;19751:4;19747:20;19743:1;19732:9;19728:17;19721:47;19785:131;19911:4;19785:131;:::i;:::-;19777:139;;19675:248;;;:::o;19929:419::-;20095:4;20133:2;20122:9;20118:18;20110:26;;20182:9;20176:4;20172:20;20168:1;20157:9;20153:17;20146:47;20210:131;20336:4;20210:131;:::i;:::-;20202:139;;20100:248;;;:::o;20354:419::-;20520:4;20558:2;20547:9;20543:18;20535:26;;20607:9;20601:4;20597:20;20593:1;20582:9;20578:17;20571:47;20635:131;20761:4;20635:131;:::i;:::-;20627:139;;20525:248;;;:::o;20779:222::-;20872:4;20910:2;20899:9;20895:18;20887:26;;20923:71;20991:1;20980:9;20976:17;20967:6;20923:71;:::i;:::-;20877:124;;;;:::o;21007:831::-;21270:4;21308:3;21297:9;21293:19;21285:27;;21322:71;21390:1;21379:9;21375:17;21366:6;21322:71;:::i;:::-;21403:80;21479:2;21468:9;21464:18;21455:6;21403:80;:::i;:::-;21530:9;21524:4;21520:20;21515:2;21504:9;21500:18;21493:48;21558:108;21661:4;21652:6;21558:108;:::i;:::-;21550:116;;21676:72;21744:2;21733:9;21729:18;21720:6;21676:72;:::i;:::-;21758:73;21826:3;21815:9;21811:19;21802:6;21758:73;:::i;:::-;21275:563;;;;;;;;:::o;21844:214::-;21933:4;21971:2;21960:9;21956:18;21948:26;;21984:67;22048:1;22037:9;22033:17;22024:6;21984:67;:::i;:::-;21938:120;;;;:::o;22064:132::-;22131:4;22154:3;22146:11;;22184:4;22179:3;22175:14;22167:22;;22136:60;;;:::o;22202:114::-;22269:6;22303:5;22297:12;22287:22;;22276:40;;;:::o;22322:99::-;22374:6;22408:5;22402:12;22392:22;;22381:40;;;:::o;22427:113::-;22497:4;22529;22524:3;22520:14;22512:22;;22502:38;;;:::o;22546:184::-;22645:11;22679:6;22674:3;22667:19;22719:4;22714:3;22710:14;22695:29;;22657:73;;;;:::o;22736:169::-;22820:11;22854:6;22849:3;22842:19;22894:4;22889:3;22885:14;22870:29;;22832:73;;;;:::o;22911:305::-;22951:3;22970:20;22988:1;22970:20;:::i;:::-;22965:25;;23004:20;23022:1;23004:20;:::i;:::-;22999:25;;23158:1;23090:66;23086:74;23083:1;23080:81;23077:2;;;23164:18;;:::i;:::-;23077:2;23208:1;23205;23201:9;23194:16;;22955:261;;;;:::o;23222:185::-;23262:1;23279:20;23297:1;23279:20;:::i;:::-;23274:25;;23313:20;23331:1;23313:20;:::i;:::-;23308:25;;23352:1;23342:2;;23357:18;;:::i;:::-;23342:2;23399:1;23396;23392:9;23387:14;;23264:143;;;;:::o;23413:348::-;23453:7;23476:20;23494:1;23476:20;:::i;:::-;23471:25;;23510:20;23528:1;23510:20;:::i;:::-;23505:25;;23698:1;23630:66;23626:74;23623:1;23620:81;23615:1;23608:9;23601:17;23597:105;23594:2;;;23705:18;;:::i;:::-;23594:2;23753:1;23750;23746:9;23735:20;;23461:300;;;;:::o;23767:191::-;23807:4;23827:20;23845:1;23827:20;:::i;:::-;23822:25;;23861:20;23879:1;23861:20;:::i;:::-;23856:25;;23900:1;23897;23894:8;23891:2;;;23905:18;;:::i;:::-;23891:2;23950:1;23947;23943:9;23935:17;;23812:146;;;;:::o;23964:96::-;24001:7;24030:24;24048:5;24030:24;:::i;:::-;24019:35;;24009:51;;;:::o;24066:104::-;24111:7;24140:24;24158:5;24140:24;:::i;:::-;24129:35;;24119:51;;;:::o;24176:90::-;24210:7;24253:5;24246:13;24239:21;24228:32;;24218:48;;;:::o;24272:126::-;24309:7;24349:42;24342:5;24338:54;24327:65;;24317:81;;;:::o;24404:77::-;24441:7;24470:5;24459:16;;24449:32;;;:::o;24487:86::-;24522:7;24562:4;24555:5;24551:16;24540:27;;24530:43;;;:::o;24579:178::-;24655:9;24688:63;24745:5;24688:63;:::i;:::-;24675:76;;24665:92;;;:::o;24763:139::-;24839:9;24872:24;24890:5;24872:24;:::i;:::-;24859:37;;24849:53;;;:::o;24908:121::-;24966:9;24999:24;25017:5;24999:24;:::i;:::-;24986:37;;24976:53;;;:::o;25035:307::-;25103:1;25113:113;25127:6;25124:1;25121:13;25113:113;;;25212:1;25207:3;25203:11;25197:18;25193:1;25188:3;25184:11;25177:39;25149:2;25146:1;25142:10;25137:15;;25113:113;;;25244:6;25241:1;25238:13;25235:2;;;25324:1;25315:6;25310:3;25306:16;25299:27;25235:2;25084:258;;;;:::o;25348:320::-;25392:6;25429:1;25423:4;25419:12;25409:22;;25476:1;25470:4;25466:12;25497:18;25487:2;;25553:4;25545:6;25541:17;25531:27;;25487:2;25615;25607:6;25604:14;25584:18;25581:38;25578:2;;;25634:18;;:::i;:::-;25578:2;25399:269;;;;:::o;25674:233::-;25713:3;25736:24;25754:5;25736:24;:::i;:::-;25727:33;;25782:66;25775:5;25772:77;25769:2;;;25852:18;;:::i;:::-;25769:2;25899:1;25892:5;25888:13;25881:20;;25717:190;;;:::o;25913:180::-;25961:77;25958:1;25951:88;26058:4;26055:1;26048:15;26082:4;26079:1;26072:15;26099:180;26147:77;26144:1;26137:88;26244:4;26241:1;26234:15;26268:4;26265:1;26258:15;26285:180;26333:77;26330:1;26323:88;26430:4;26427:1;26420:15;26454:4;26451:1;26444:15;26471:102;26512:6;26563:2;26559:7;26554:2;26547:5;26543:14;26539:28;26529:38;;26519:54;;;:::o;26579:222::-;26719:34;26715:1;26707:6;26703:14;26696:58;26788:5;26783:2;26775:6;26771:15;26764:30;26685:116;:::o;26807:229::-;26947:34;26943:1;26935:6;26931:14;26924:58;27016:12;27011:2;27003:6;26999:15;26992:37;26913:123;:::o;27042:225::-;27182:34;27178:1;27170:6;27166:14;27159:58;27251:8;27246:2;27238:6;27234:15;27227:33;27148:119;:::o;27273:221::-;27413:34;27409:1;27401:6;27397:14;27390:58;27482:4;27477:2;27469:6;27465:15;27458:29;27379:115;:::o;27500:177::-;27640:29;27636:1;27628:6;27624:14;27617:53;27606:71;:::o;27683:177::-;27823:29;27819:1;27811:6;27807:14;27800:53;27789:71;:::o;27866:239::-;28006:34;28002:1;27994:6;27990:14;27983:58;28075:22;28070:2;28062:6;28058:15;28051:47;27972:133;:::o;28111:181::-;28251:33;28247:1;28239:6;28235:14;28228:57;28217:75;:::o;28298:227::-;28438:34;28434:1;28426:6;28422:14;28415:58;28507:10;28502:2;28494:6;28490:15;28483:35;28404:121;:::o;28531:182::-;28671:34;28667:1;28659:6;28655:14;28648:58;28637:76;:::o;28719:228::-;28859:34;28855:1;28847:6;28843:14;28836:58;28928:11;28923:2;28915:6;28911:15;28904:36;28825:122;:::o;28953:224::-;29093:34;29089:1;29081:6;29077:14;29070:58;29162:7;29157:2;29149:6;29145:15;29138:32;29059:118;:::o;29183:223::-;29323:34;29319:1;29311:6;29307:14;29300:58;29392:6;29387:2;29379:6;29375:15;29368:31;29289:117;:::o;29412:176::-;29552:28;29548:1;29540:6;29536:14;29529:52;29518:70;:::o;29594:221::-;29734:34;29730:1;29722:6;29718:14;29711:58;29803:4;29798:2;29790:6;29786:15;29779:29;29700:115;:::o;29821:231::-;29961:34;29957:1;29949:6;29945:14;29938:58;30030:14;30025:2;30017:6;30013:15;30006:39;29927:125;:::o;30058:122::-;30131:24;30149:5;30131:24;:::i;:::-;30124:5;30121:35;30111:2;;30170:1;30167;30160:12;30111:2;30101:79;:::o;30186:138::-;30267:32;30293:5;30267:32;:::i;:::-;30260:5;30257:43;30247:2;;30314:1;30311;30304:12;30247:2;30237:87;:::o;30330:116::-;30400:21;30415:5;30400:21;:::i;:::-;30393:5;30390:32;30380:2;;30436:1;30433;30426:12;30380:2;30370:76;:::o;30452:122::-;30525:24;30543:5;30525:24;:::i;:::-;30518:5;30515:35;30505:2;;30564:1;30561;30554:12;30505:2;30495:79;:::o
Swarm Source
ipfs://f9fe918dc56d63794085ed0266c56eec834b405f2a8807bb423678b7863d897b
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.