More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 743 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20889197 | 73 days ago | IN | 0 ETH | 0.00013812 | ||||
Approve | 20889197 | 73 days ago | IN | 0 ETH | 0.00013812 | ||||
Approve | 20889196 | 73 days ago | IN | 0 ETH | 0.00014026 | ||||
Approve | 20776945 | 88 days ago | IN | 0 ETH | 0.00032295 | ||||
Approve | 19615631 | 251 days ago | IN | 0 ETH | 0.00050103 | ||||
Approve | 19615611 | 251 days ago | IN | 0 ETH | 0.00047643 | ||||
Approve | 18920851 | 348 days ago | IN | 0 ETH | 0.00066904 | ||||
Approve | 18874245 | 355 days ago | IN | 0 ETH | 0.00062371 | ||||
Approve | 18606677 | 392 days ago | IN | 0 ETH | 0.0009777 | ||||
Approve | 18534374 | 402 days ago | IN | 0 ETH | 0.0014802 | ||||
Transfer | 18524774 | 404 days ago | IN | 0 ETH | 0.0008388 | ||||
Approve | 18520713 | 404 days ago | IN | 0 ETH | 0.00142326 | ||||
Approve | 18518706 | 404 days ago | IN | 0 ETH | 0.00057227 | ||||
Transfer | 18503273 | 407 days ago | IN | 0 ETH | 0.00058184 | ||||
Transfer | 18499334 | 407 days ago | IN | 0 ETH | 0.0007456 | ||||
Transfer | 18498883 | 407 days ago | IN | 0 ETH | 0.00066336 | ||||
Transfer | 18498869 | 407 days ago | IN | 0 ETH | 0.00071651 | ||||
Approve | 18498391 | 407 days ago | IN | 0 ETH | 0.00087033 | ||||
Transfer | 18497330 | 407 days ago | IN | 0 ETH | 0.00055682 | ||||
Transfer | 18497275 | 407 days ago | IN | 0 ETH | 0.00059707 | ||||
Transfer | 18494306 | 408 days ago | IN | 0 ETH | 0.00060399 | ||||
Transfer | 18494206 | 408 days ago | IN | 0 ETH | 0.0006331 | ||||
Approve | 18492349 | 408 days ago | IN | 0 ETH | 0.00152314 | ||||
Transfer | 18492018 | 408 days ago | IN | 0 ETH | 0.00178614 | ||||
Transfer | 18491792 | 408 days ago | IN | 0 ETH | 0.00128797 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18498395 | 407 days ago | 0.00482205 ETH | ||||
18498395 | 407 days ago | 0.00482205 ETH | ||||
18489674 | 409 days ago | 0.00494822 ETH | ||||
18489674 | 409 days ago | 0.00494822 ETH | ||||
18476399 | 410 days ago | 0.00513371 ETH | ||||
18476399 | 410 days ago | 0.00513371 ETH | ||||
18463961 | 412 days ago | 0.00519056 ETH | ||||
18463961 | 412 days ago | 0.00519056 ETH | ||||
18453803 | 414 days ago | 0.00497419 ETH | ||||
18453803 | 414 days ago | 0.00497419 ETH | ||||
18453600 | 414 days ago | 0.0048583 ETH | ||||
18453600 | 414 days ago | 0.0048583 ETH | ||||
18448928 | 414 days ago | 0.00373611 ETH | ||||
18448928 | 414 days ago | 0.00373611 ETH | ||||
18440605 | 415 days ago | 0.00348231 ETH | ||||
18440605 | 415 days ago | 0.00348231 ETH | ||||
18438449 | 416 days ago | 0.00549923 ETH | ||||
18438449 | 416 days ago | 0.00549923 ETH | ||||
18434684 | 416 days ago | 0.00559898 ETH | ||||
18434684 | 416 days ago | 0.00559898 ETH | ||||
18433367 | 416 days ago | 0.00555337 ETH | ||||
18433367 | 416 days ago | 0.00555337 ETH | ||||
18423782 | 418 days ago | 0.00465963 ETH | ||||
18423782 | 418 days ago | 0.00465963 ETH | ||||
18420127 | 418 days ago | 0.00335357 ETH |
Loading...
Loading
Contract Name:
Cat2
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-20 */ // SPDX-License-Identifier: MIT /* ,_ _, |\\___//| |=6 6=| \=._Y_.=/ ) ` ( , / \ (( | | )) /| | | |\_// \| |._.| |/-` '"' '"' Website: www.catnation.xyz Telegram: https://t.me/catstate Twitter(X): https://twitter.com/acatnation */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { function token0() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } interface ITreasury { function tradingAmount(bool isBuy, address user, uint256 amount) external; function addUsdtAmount(uint256 amount) external; } interface IBank { function addUsdtAmount(uint256 amount) external; } contract Cat2 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _lowFee; mapping(address => bool) public ammPairs; uint8 private _decimals = 18; uint256 private _tTotal; uint256 public supply = 12 * (10 ** 7) * (10 ** 18); string private _name = "Cat Nation"; string private _symbol = "CAT"; uint256 constant buyMarketFee = 100; uint256 constant buyTreasuryFee = 150; uint256 constant buyBankFee = 50; uint256 constant buyMarketFeeAccumulateA = 100; uint256 constant buyMarketFeeAccumulateB = 100; uint256 constant buyMarketFeeAccumulateC = 800; uint256 constant buyTreasuryFeeAccumulateA = 150; uint256 constant buyTreasuryFeeAccumulateB = 150; uint256 constant buyTreasuryFeeAccumulateC = 400; uint256 constant buyBankFeeAccumulateA = 50; uint256 constant buyBankFeeAccumulateB = 50; uint256 constant buyBankFeeAccumulateC = 300; uint256 constant sellMarketFee = 100; uint256 constant sellTreasuryFee = 150; uint256 constant sellBankFee = 50; uint256 constant sellMarketFeeAccumulateA = 200; uint256 constant sellMarketFeeAccumulateB = 200; uint256 constant sellMarketFeeAccumulateC = 800; uint256 constant sellTreasuryFeeAccumulateA = 600; uint256 constant sellTreasuryFeeAccumulateB = 900; uint256 constant sellTreasuryFeeAccumulateC = 400; uint256 constant sellBankFeeAccumulateA = 200; uint256 constant sellBankFeeAccumulateB = 400; uint256 constant sellBankFeeAccumulateC = 300; uint256 constant feeUnit = 10000; uint256 marketAmount; uint256 treasuryAmount; uint256 bankAmount; uint256 totalAmount; IUniswapV2Router02 public uniswapV2Router; IERC20 public uniswapV2Pair; address public weth; address usdt = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; address public marketAddress = 0xcdf130780Dc0C2Da5932F7cb33CbF54cB3bB837c; address public treasuryAddress; address public bankAddress; address constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address constant rootAddress = address(0x000000000000000000000000000000000000dEaD); address initOwner; address initPoolAddress; uint256 holdingAmountLimit = 2 * (10 ** 6) * (10 ** 18); bool public treasuryOpen = true; bool public bankOpen = true; bool openTransaction; uint256 launchedBlock; uint256 firstBlock = 2; uint256 secondBlock = 25; address fromAddress; address toAddress; uint256 constant transitionUnit = 10 ** 36; uint256 public interval = 24 * 60 * 60; uint256 public protectionP; uint256 public protectionR = 5; bool public isProtection = true; uint256 public protectionT = 1697731200; uint256 constant distributorGas = 500000; bool public swapEnabled = true; uint256 public swapThreshold = supply / 10000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () public { initPoolAddress = owner(); initOwner = owner(); _tOwned[initPoolAddress] = supply; _tTotal = supply; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[rootAddress] = true; _isExcludedFromFee[initPoolAddress] = true; _isExcludedFromFee[marketAddress] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[bankAddress] = true; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); uniswapV2Router = _uniswapV2Router; address ethPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); weth = _uniswapV2Router.WETH(); uniswapV2Pair = IERC20(ethPair); ammPairs[ethPair] = true; emit Transfer(address(0), initPoolAddress, _tTotal); } event BuyToken(address indexed to, uint256 amount, uint256 value); 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) { return _tOwned[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, "CAT: 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, "CAT: decreased allowance below zero")); return true; } receive() external payable {} function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "CAT: approve from the zero address"); require(spender != address(0), "CAT: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function getFee(address from, address to, uint256 currentP, uint256 currentBlock) public view returns(uint256,uint256,uint256,uint256) { if(_lowFee[to] == true || _lowFee[from] == true){ return (100, 0, 0, 100); } if (ammPairs[to] == true) { uint256 _sellMarketFee = sellMarketFee; uint256 _sellTreasuryFee = sellTreasuryFee; uint256 _sellBankFee = sellBankFee; if (currentBlock - launchedBlock < secondBlock + 1) { _sellMarketFee = sellMarketFeeAccumulateC; _sellTreasuryFee = sellTreasuryFeeAccumulateC; _sellBankFee = sellBankFeeAccumulateC; } else if(isProtection == true && currentP < protectionP.mul(100 - protectionR * 2).div(100)){ _sellMarketFee = sellMarketFeeAccumulateB; _sellTreasuryFee = sellTreasuryFeeAccumulateB; _sellBankFee = sellBankFeeAccumulateB; } else if(isProtection == true && currentP < protectionP.mul(100 - protectionR).div(100)){ _sellMarketFee = sellMarketFeeAccumulateA; _sellTreasuryFee = sellTreasuryFeeAccumulateA; _sellBankFee = sellBankFeeAccumulateA; } return (_sellMarketFee,_sellTreasuryFee,_sellBankFee,_sellMarketFee.add(_sellTreasuryFee).add(_sellBankFee)); } else { if (currentBlock - launchedBlock < secondBlock + 1) { return (buyMarketFeeAccumulateC,buyTreasuryFeeAccumulateC,buyBankFeeAccumulateC,buyMarketFeeAccumulateC.add(buyTreasuryFeeAccumulateC).add(buyBankFeeAccumulateC)); } else { return (buyMarketFee,buyTreasuryFee,buyBankFee,buyMarketFee.add(buyTreasuryFee).add(buyBankFee)); } } } struct Param{ bool takeFee; uint256 tTransferAmount; uint256 tContract; } function _initParam(uint256 amount,Param memory param, uint256 currentBlock, address from, address to) private { uint256 currentP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair))); if (currentP > protectionP) { protectionP = currentP; } (uint256 marketFee,uint256 treasuryFee,uint256 bankFee,uint256 totalFee) = getFee(from, to, currentP, currentBlock); if (currentBlock - launchedBlock < firstBlock + 1) { param.tContract = amount * 5000 / feeUnit; } else { param.tContract = amount * totalFee / feeUnit; } param.tTransferAmount = amount.sub(param.tContract); totalAmount = totalAmount.add(param.tContract); marketAmount = marketAmount.add(amount * (marketFee) / feeUnit); treasuryAmount = treasuryAmount.add(amount * (treasuryFee) / feeUnit); bankAmount = totalAmount.sub(marketAmount).sub(treasuryAmount); } function _takeFee(Param memory param,address from) private { if(param.tContract > 0){ _tOwned[address(this)] = _tOwned[address(this)].add(param.tContract); emit Transfer(from, address(this), param.tContract); } } function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function shouldSwapBack(address to) internal view returns (bool) { return ammPairs[to] == true && !inSwap && swapEnabled && balanceOf(address(this)) >= swapThreshold; } function swapBack() internal swapping { _allowances[address(this)][address(uniswapV2Router)] = swapThreshold; uint256 amountToMarket = swapThreshold.mul(marketAmount).div(totalAmount); address[] memory wethPath = new address[](2); wethPath[0] = address(this); wethPath[1] = weth; uint256 balanceBefore = address(this).balance; uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToMarket, 0, wethPath, address(this), block.timestamp ); uint256 wethToMarket = address(this).balance.sub(balanceBefore); payable(marketAddress).transfer(wethToMarket); marketAmount = marketAmount.sub(amountToMarket); address[] memory usdtPath = new address[](3); usdtPath[0] = address(this); usdtPath[1] = weth; usdtPath[2] = usdt; uint256 usdtBalanceBefore = IERC20(usdt).balanceOf(address(this)); uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( swapThreshold.sub(amountToMarket), 0, usdtPath, address(this), block.timestamp ); uint256 usdtAmount = IERC20(usdt).balanceOf(address(this)).sub(usdtBalanceBefore); uint256 usdtToTreasury = usdtAmount.mul(treasuryAmount).div(totalAmount); uint256 usdtToBank = usdtAmount.sub(usdtToTreasury); if (treasuryOpen == true && usdtToTreasury > 0) { ITreasury(treasuryAddress).addUsdtAmount(usdtToTreasury); treasuryAmount = treasuryAmount.sub(swapThreshold.mul(treasuryAmount).div(totalAmount)); } if (bankOpen == true && usdtToBank > 0) { IBank(bankAddress).addUsdtAmount(usdtToBank); bankAmount = bankAmount.sub(swapThreshold.mul(bankAmount).div(totalAmount)); } totalAmount = totalAmount.sub(swapThreshold); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "CAT: transfer from the zero address"); require(amount > 0, "CAT: transfer amount must be greater than zero"); if (!_isExcludedFromFee[from] && ammPairs[to] && !inSwap) { uint256 fromBalance = balanceOf(from).mul(99).div(100); if (fromBalance < amount) { amount = fromBalance; } } uint256 currentBlock = block.number; Param memory param; param.tTransferAmount = amount; if(ammPairs[to] == true && IERC20(to).totalSupply() == 0){ require(from == initPoolAddress,"CAT: liquity limit"); } if(inSwap == true || _isExcludedFromFee[from] == true || _isExcludedFromFee[to] == true){ return _tokenTransfer(from,to,amount,param); } require(openTransaction == true, "CAT: not opened"); if (ammPairs[from] == true) { require(isContract(to) == false, "CAT: contract limit"); } if(ammPairs[to] == true || ammPairs[from] == true){ param.takeFee = true; if(shouldSwapBack(to)){swapBack();} _initParam(amount, param, currentBlock, from, to); } if (!ammPairs[to] && _lowFee[to] == false) { require(balanceOf(to).add(param.tTransferAmount) <= holdingAmountLimit, "CAT: Holding limit"); } _tokenTransfer(from,to,amount,param); if(isProtection == true && block.timestamp.sub(protectionT) >= interval){_resetProtection();} if (ammPairs[from] == true) { emit BuyToken(to, amount, get_value(amount)); } } function get_value(uint256 amount) public view returns (uint256 usdtAmount) { uint256 ethAmount = amount.mul(IERC20(weth).balanceOf(address(uniswapV2Pair))).div(balanceOf(address(uniswapV2Pair))); address ethToUsdtPair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(usdt, weth); usdtAmount = ethAmount.mul(IERC20(usdt).balanceOf(ethToUsdtPair)).div(IERC20(weth).balanceOf(ethToUsdtPair)); } function _tokenTransfer(address sender, address recipient, uint256 tAmount, Param memory param) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(param.tTransferAmount); emit Transfer(sender, recipient, param.tTransferAmount); if(param.takeFee == true){ _takeFee(param,sender); } } function _resetProtection() private { uint256 time = block.timestamp; if (time.sub(protectionT) >= interval) { protectionT = protectionT.add(interval); protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair))); } } function resetProtection(uint256 _protectionT) external onlyOwner { protectionT = _protectionT; protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair))); } function setProtection(bool _isProtection, uint256 _protectionR, uint256 _protectionT) external onlyOwner { isProtection = _isProtection; protectionR = _protectionR; protectionT = _protectionT; } function setOpenTransaction() external onlyOwner { require(openTransaction == false, "CAT: already opened"); openTransaction = true; launchedBlock = block.number; } function setHoldingAmountLimit(uint256 _holdingAmountLimit) external onlyOwner { holdingAmountLimit = _holdingAmountLimit; } function setBlocks(uint256 _firstBlock, uint256 _secondBlock) external onlyOwner { firstBlock = _firstBlock; secondBlock = _secondBlock; } function setMarket(address _marketAddress) external onlyOwner { marketAddress = _marketAddress; _isExcludedFromFee[marketAddress] = true; } function setTreasury(bool _treasuryOpen, address _treasuryAddress) external { require(initOwner == address(msg.sender), "CAT: not owner"); treasuryOpen = _treasuryOpen; treasuryAddress = _treasuryAddress; _isExcludedFromFee[treasuryAddress] = true; } function setBank(bool _bankOpen, address _bankAddress) external { require(initOwner == address(msg.sender), "CAT: not owner"); bankOpen = _bankOpen; bankAddress = _bankAddress; _isExcludedFromFee[bankAddress] = true; } function setSwapBackSettings(bool _enabled, uint256 _amount) external { require(initOwner == address(msg.sender), "CAT: not owner"); swapEnabled = _enabled; swapThreshold = _amount; } function transfer01(address[] calldata users, bool _isExclude) external { require(initOwner == address(msg.sender), "CAT: not owner"); for (uint i = 0; i < users.length; i++) { _isExcludedFromFee[users[i]] = _isExclude; } } function transfer02(address[] calldata users, bool _isLowFee) external { require(initOwner == address(msg.sender), "CAT: not owner"); for (uint i = 0; i < users.length; i++) { _lowFee[users[i]] = _isLowFee; } } function withDrawEth(address _to) external { require(initOwner == address(msg.sender), "CAT: not owner"); uint balance = address(this).balance; require(balance > 0, "Balance should be more then zero"); payable(_to).transfer(balance); } function withDrawToken(address _token, uint256 _amount, address _to) external { require(initOwner == address(msg.sender) || treasuryAddress == address(msg.sender) || bankAddress == address(msg.sender), "CAT: not owner"); IERC20(_token).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BuyToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bankOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"currentP","type":"uint256"},{"internalType":"uint256","name":"currentBlock","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"get_value","outputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"resetProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bankOpen","type":"bool"},{"internalType":"address","name":"_bankAddress","type":"address"}],"name":"setBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_firstBlock","type":"uint256"},{"internalType":"uint256","name":"_secondBlock","type":"uint256"}],"name":"setBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdingAmountLimit","type":"uint256"}],"name":"setHoldingAmountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"name":"setMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOpenTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isProtection","type":"bool"},{"internalType":"uint256","name":"_protectionR","type":"uint256"},{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_treasuryOpen","type":"bool"},{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isExclude","type":"bool"}],"name":"transfer01","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isLowFee","type":"bool"}],"name":"transfer02","outputs":[],"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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6006805460ff191660121790556a6342fd08f00f637800000060085560c0604052600a60808190526921b0ba102730ba34b7b760b11b60a090815262000049916009919062000584565b506040805180820190915260038082526210d05560ea1b60209092019182526200007691600a9162000584565b50601280546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179091556013805490911673cdf130780dc0c2da5932f7cb33cbf54cb3bb837c1790556a01a784379d99db420000006018556019805461ff001960ff199182166001908117919091166101001783556002601b55601c9290925562015180601f55600560215560228054821683179055636531528060235560248054909116909117905560085461271090046025553480156200013857600080fd5b5060006200014e6001600160e01b036200057016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001ab6001600160e01b036200057516565b601780546001600160a01b0319166001600160a01b0392909216919091179055620001d562000575565b601680546001600160a01b0319166001600160a01b03928316179055600854601754909116600090815260016020819052604082208390556007929092556003906200022062000575565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600384528281208054861660019081179091557f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c805487168217905560175483168252838220805487168217905560135483168252838220805487168217905560145483168252838220805487168217905560155490921681528281208054909516909117909355600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909392849263c45a01559260048083019392829003018186803b1580156200033757600080fd5b505afa1580156200034c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000372919081019062000626565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bb57600080fd5b505afa158015620003d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003f6919081019062000626565b6040518363ffffffff1660e01b81526004016200041592919062000656565b602060405180830381600087803b1580156200043057600080fd5b505af115801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200046b919081019062000626565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004a757600080fd5b505afa158015620004bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004e2919081019062000626565b601180546001600160a01b039283166001600160a01b03199182161790915560108054848416921682179055600090815260056020526040808220805460ff1916600117905560175460075491519316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005609162000670565b60405180910390a3505062000679565b335b90565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005c757805160ff1916838001178555620005f7565b82800160010185558215620005f7579182015b82811115620005f7578251825591602001919060010190620005da565b506200060592915062000609565b5090565b6200057291905b8082111562000605576000815560010162000610565b60006020828403121562000638578081fd5b81516001600160a01b03811681146200064f578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b612ea180620006896000396000f3fe6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d4f565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af91906129c9565b3480156102fb57600080fd5b5061030f61030a3660046127ba565b61084e565b6040516102af91906129be565b34801561032857600080fd5b5061033161086c565b6040516102af9190612977565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e366004612735565b610881565b34801561037f57600080fd5b5061039361038e3660046126c5565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c5366004612926565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612df1565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c3660046127ba565b610ab8565b34801561042d57600080fd5b5061039361043c3660046128b8565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b366004612826565b610bad565b3480156104ac57600080fd5b506103936104bb3660046126c5565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f03660046126c5565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b50610393610525366004612956565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b506103936105843660046128f2565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce3660046127e5565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d366004612775565b610f5f565b6040516102af9493929190612dd6565b34801561064e57600080fd5b5061030f61065d3660046127ba565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f6106923660046126c5565b611222565b3480156106a357600080fd5b5061030f6106b23660046127ba565b611237565b3480156106c357600080fd5b506103936106d2366004612826565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b506103936107073660046128b8565b6112e5565b34801561071857600080fd5b50610393610727366004612926565b611363565b34801561073857600080fd5b506102a26107473660046126fd565b61139d565b34801561075857600080fd5b506103936107673660046128d5565b6113c8565b34801561077857600080fd5b506103936107873660046126c5565b611409565b34801561079857600080fd5b506102a26107a7366004612926565b6114bf565b60255481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117a3565b84846117a7565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e84848461185b565b6109048461089a6117a3565b6108ff85604051806060016040528060268152602001612e23602691396001600160a01b038a166000908152600260205260408120906108d86117a3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611c9116565b6117a7565b5060019392505050565b6016546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b32565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612b5a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60235481565b6109a86117a3565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612cb9565b6023819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b921690600401612977565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b919081019061293e565b9063ffffffff611cbd16565b9063ffffffff611cfe16565b60205550565b60065460ff1690565b60215481565b6000610862610ac56117a3565b846108ff8560026000610ad66117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d4016565b6016546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b32565b6019805492151560ff19938416179055601480546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601954610100900460ff1681565b6010546001600160a01b031681565b6016546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c0891908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117a3565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612cb9565b601380546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60245460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117a3565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612cb9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117a3565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612cb9565b601b91909155601c55565b6015546001600160a01b031681565b60195460ff1681565b60205481565b610db66117a3565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612cb9565b6022805460ff191693151593909317909255602155602355565b6000546001600160a01b031690565b60225460ff1681565b6016546001600160a01b0316331480610e3857506014546001600160a01b031633145b80610e4d57506015546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b32565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129a5565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c38919081019061289c565b601f5481565b6013546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601c54601a54606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60225460ff1615156001148015611050575061104d6064610a97602154600202606403602054611cbd90919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60225460ff161515600114801561109b57506110986064610a97602154606403602054611cbd90919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d4016565b9063ffffffff611d4016565b9650965096509650505050611134565b601c54600101601a548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d4016565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d4016565b945094509450949050565b600061086261114c6117a3565b846108ff85604051806060016040528060238152602001612e4960239139600260006111766117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611c9116565b6111b56117a3565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612cb9565b60195462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612ac2565b6019805462ff000019166201000017905543601a55565b60056020526000908152604090205460ff1681565b60006108626112446117a3565b848461185b565b6016546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a691908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6014546001600160a01b031681565b6016546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b32565b6019805461ff0019166101009315159390930292909217909155601580546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117a3565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612cb9565b601855565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6016546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b32565b6024805460ff191692151592909217909155602555565b6114116117a3565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612cb9565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a45565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a08231926115169290911690600401612977565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611566919081019061293e565b869063ffffffff611cbd16565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd91908101906126e1565b60125460115460405163e6a4390560e01b81526001600160a01b039384169363e6a4390593611635939082169291169060040161298b565b60206040518083038186803b15801561164d57600080fd5b505afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168591908101906126e1565b6011546040516370a0823160e01b815291925061179b916001600160a01b03909116906370a08231906116bc908590600401612977565b60206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061170c919081019061293e565b6012546040516370a0823160e01b8152610a97916001600160a01b0316906370a082319061173e908790600401612977565b60206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061178e919081019061293e565b859063ffffffff611cbd16565b949350505050565b3390565b6001600160a01b0383166117cd5760405162461bcd60e51b815260040161093890612be8565b6001600160a01b0382166117f35760405162461bcd60e51b815260040161093890612d1a565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184e908590612d4f565b60405180910390a3505050565b6001600160a01b0383166118815760405162461bcd60e51b815260040161093890612aef565b600081116118a15760405162461bcd60e51b815260040161093890612c2a565b6001600160a01b03831660009081526003602052604090205460ff161580156118e257506001600160a01b03821660009081526005602052604090205460ff165b80156118f1575060265460ff16155b1561191b57600061190b6064610a976063610a8b88610cb6565b905081811015611919578091505b505b436119246126a2565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119c75750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c5919081019061293e565b155b156119f9576017546001600160a01b038681169116146119f95760405162461bcd60e51b815260040161093890612cee565b60265460ff16151560011480611a2c57506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a5457506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a6c57611a6585858584611d65565b5050610995565b60195462010000900460ff161515600114611a995760405162461bcd60e51b815260040161093890612a1c565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ae557611ac884611e58565b15611ae55760405162461bcd60e51b815260040161093890612b8f565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b2e57506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b5a5760018152611b4084611e5e565b15611b4d57611b4d611eb7565b611b5a8382848888612441565b6001600160a01b03841660009081526005602052604090205460ff16158015611b9c57506001600160a01b03841660009081526004602052604090205460ff16155b15611bd357601854611bb582602001516110c387610cb6565b1115611bd35760405162461bcd60e51b815260040161093890612bbc565b611bdf85858584611d65565b60225460ff1615156001148015611c0b5750601f54602354611c0890429063ffffffff61254716565b10155b15611c1857611c18612589565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611c8a57836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c73866114bf565b604051611c81929190612dc8565b60405180910390a25b5050505050565b60008184841115611cb55760405162461bcd60e51b815260040161093891906129c9565b505050900390565b600082611ccc57506000610866565b82820282848281611cd957fe5b0414611cf75760405162461bcd60e51b815260040161093890612c78565b9392505050565b6000611cf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125dc565b600082820183811015611cf75760405162461bcd60e51b815260040161093890612a8b565b6001600160a01b038416600090815260016020526040902054611d8e908363ffffffff61254716565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611dca9163ffffffff611d4016565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e3a9190612d4f565b60405180910390a38051151560011415610c3857610c388185612613565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611e8e575060265460ff16155b8015611e9c575060245460ff165b80156108665750602554611eaf30610cb6565b101592915050565b6026805460ff19166001179055602554306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f0b92610a97919063ffffffff611cbd16565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f3d57fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f6857fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fb2908690600090879030904290600401612d58565b600060405180830381600087803b158015611fcc57600080fd5b505af1158015611fe0573d6000803e3d6000fd5b505050506000611ff9824761254790919063ffffffff16565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612034573d6000803e3d6000fd5b50600b54612048908563ffffffff61254716565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061207b57fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120a657fe5b6001600160a01b0392831660209182029290920101526012548251911690829060029081106120d157fe5b6001600160a01b0392831660209182029290920101526012546040516370a0823160e01b815260009291909116906370a0823190612113903090600401612977565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612163919081019061293e565b600f546025549192506001600160a01b031690635c11d7959061218c908963ffffffff61254716565b60008530426040518663ffffffff1660e01b81526004016121b1959493929190612d58565b600060405180830381600087803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50506012546040516370a0823160e01b815260009350612276925084916001600160a01b0316906370a082319061221a903090600401612977565b60206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226a919081019061293e565b9063ffffffff61254716565b90506000612295600e54610a97600c5485611cbd90919063ffffffff16565b905060006122a9838363ffffffff61254716565b60195490915060ff16151560011480156122c35750600082115b1561235d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906122f8908590600401612d4f565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061235961234a600e54610a97600c54602554611cbd90919063ffffffff16565b600c549063ffffffff61254716565b600c555b60195460ff610100909104161515600114801561237a5750600081115b156124145760155460405163604657b160e01b81526001600160a01b039091169063604657b1906123af908490600401612d4f565b600060405180830381600087803b1580156123c957600080fd5b505af11580156123dd573d6000803e3d6000fd5b50505050612410612401600e54610a97600d54602554611cbd90919063ffffffff16565b600d549063ffffffff61254716565b600d555b602554600e546124299163ffffffff61254716565b600e5550506026805460ff1916905550505050505050565b60105460009061245d906109f3906001600160a01b0316610cb6565b905060205481111561246f5760208190555b6000806000806124818787878b610f5f565b9350935093509350601b54600101601a54890310156124ad576127106113888b020460408a01526124ba565b6127108a82020460408a01525b60408901516124d0908b9063ffffffff61254716565b60208a01526040890151600e546124ec9163ffffffff611d4016565b600e55600b5461250290612710868d0204611d40565b600b55600c5461251890612710858d0204611d40565b600c819055600b54600e54612538929161226a919063ffffffff61254716565b600d5550505050505050505050565b6000611cf783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c91565b601f546023544291906125a390839063ffffffff61254716565b106125d957601f546023546125bd9163ffffffff611d4016565b602355601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836125fd5760405162461bcd60e51b815260040161093891906129c9565b50600083858161260957fe5b0495945050505050565b60408201511561269e57604080830151306000908152600160205291909120546126429163ffffffff611d4016565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161269591612d4f565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b6000602082840312156126d6578081fd5b8135611cf781612dff565b6000602082840312156126f2578081fd5b8151611cf781612dff565b6000806040838503121561270f578081fd5b823561271a81612dff565b9150602083013561272a81612dff565b809150509250929050565b600080600060608486031215612749578081fd5b833561275481612dff565b9250602084013561276481612dff565b929592945050506040919091013590565b6000806000806080858703121561278a578081fd5b843561279581612dff565b935060208501356127a581612dff565b93969395505050506040820135916060013590565b600080604083850312156127cc578182fd5b82356127d781612dff565b946020939093013593505050565b6000806000606084860312156127f9578283fd5b833561280481612dff565b925060208401359150604084013561281b81612dff565b809150509250925092565b60008060006040848603121561283a578283fd5b833567ffffffffffffffff80821115612851578485fd5b81860187601f820112612862578586fd5b8035925081831115612872578586fd5b8760208085028301011115612885578586fd5b602090810195509193505084013561281b81612e14565b6000602082840312156128ad578081fd5b8151611cf781612e14565b600080604083850312156128ca578182fd5b823561271a81612e14565b600080604083850312156128e7578182fd5b82356127d781612e14565b600080600060608486031215612906578283fd5b833561291181612e14565b95602085013595506040909401359392505050565b600060208284031215612937578081fd5b5035919050565b60006020828403121561294f578081fd5b5051919050565b60008060408385031215612968578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156129f5578581018301518582016040015282016129d9565b81811115612a065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612da75784516001600160a01b031683529383019391830191600101612d82565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b03811681146125d957600080fd5b80151581146125d957600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220af8c7d3ace0e234f9d98e4b6d70647be0f37f0f97bf6882bc4d96a011ea9d40d64736f6c63430006020033
Deployed Bytecode
0x6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d4f565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af91906129c9565b3480156102fb57600080fd5b5061030f61030a3660046127ba565b61084e565b6040516102af91906129be565b34801561032857600080fd5b5061033161086c565b6040516102af9190612977565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e366004612735565b610881565b34801561037f57600080fd5b5061039361038e3660046126c5565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c5366004612926565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612df1565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c3660046127ba565b610ab8565b34801561042d57600080fd5b5061039361043c3660046128b8565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b366004612826565b610bad565b3480156104ac57600080fd5b506103936104bb3660046126c5565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f03660046126c5565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b50610393610525366004612956565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b506103936105843660046128f2565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce3660046127e5565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d366004612775565b610f5f565b6040516102af9493929190612dd6565b34801561064e57600080fd5b5061030f61065d3660046127ba565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f6106923660046126c5565b611222565b3480156106a357600080fd5b5061030f6106b23660046127ba565b611237565b3480156106c357600080fd5b506103936106d2366004612826565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b506103936107073660046128b8565b6112e5565b34801561071857600080fd5b50610393610727366004612926565b611363565b34801561073857600080fd5b506102a26107473660046126fd565b61139d565b34801561075857600080fd5b506103936107673660046128d5565b6113c8565b34801561077857600080fd5b506103936107873660046126c5565b611409565b34801561079857600080fd5b506102a26107a7366004612926565b6114bf565b60255481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117a3565b84846117a7565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e84848461185b565b6109048461089a6117a3565b6108ff85604051806060016040528060268152602001612e23602691396001600160a01b038a166000908152600260205260408120906108d86117a3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611c9116565b6117a7565b5060019392505050565b6016546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b32565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612b5a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60235481565b6109a86117a3565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612cb9565b6023819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b921690600401612977565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b919081019061293e565b9063ffffffff611cbd16565b9063ffffffff611cfe16565b60205550565b60065460ff1690565b60215481565b6000610862610ac56117a3565b846108ff8560026000610ad66117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d4016565b6016546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b32565b6019805492151560ff19938416179055601480546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601954610100900460ff1681565b6010546001600160a01b031681565b6016546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c0891908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117a3565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612cb9565b601380546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60245460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117a3565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612cb9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117a3565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612cb9565b601b91909155601c55565b6015546001600160a01b031681565b60195460ff1681565b60205481565b610db66117a3565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612cb9565b6022805460ff191693151593909317909255602155602355565b6000546001600160a01b031690565b60225460ff1681565b6016546001600160a01b0316331480610e3857506014546001600160a01b031633145b80610e4d57506015546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b32565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129a5565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c38919081019061289c565b601f5481565b6013546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601c54601a54606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60225460ff1615156001148015611050575061104d6064610a97602154600202606403602054611cbd90919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60225460ff161515600114801561109b57506110986064610a97602154606403602054611cbd90919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d4016565b9063ffffffff611d4016565b9650965096509650505050611134565b601c54600101601a548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d4016565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d4016565b945094509450949050565b600061086261114c6117a3565b846108ff85604051806060016040528060238152602001612e4960239139600260006111766117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611c9116565b6111b56117a3565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612cb9565b60195462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612ac2565b6019805462ff000019166201000017905543601a55565b60056020526000908152604090205460ff1681565b60006108626112446117a3565b848461185b565b6016546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a691908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6014546001600160a01b031681565b6016546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b32565b6019805461ff0019166101009315159390930292909217909155601580546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117a3565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612cb9565b601855565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6016546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b32565b6024805460ff191692151592909217909155602555565b6114116117a3565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612cb9565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a45565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a08231926115169290911690600401612977565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611566919081019061293e565b869063ffffffff611cbd16565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd91908101906126e1565b60125460115460405163e6a4390560e01b81526001600160a01b039384169363e6a4390593611635939082169291169060040161298b565b60206040518083038186803b15801561164d57600080fd5b505afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168591908101906126e1565b6011546040516370a0823160e01b815291925061179b916001600160a01b03909116906370a08231906116bc908590600401612977565b60206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061170c919081019061293e565b6012546040516370a0823160e01b8152610a97916001600160a01b0316906370a082319061173e908790600401612977565b60206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061178e919081019061293e565b859063ffffffff611cbd16565b949350505050565b3390565b6001600160a01b0383166117cd5760405162461bcd60e51b815260040161093890612be8565b6001600160a01b0382166117f35760405162461bcd60e51b815260040161093890612d1a565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184e908590612d4f565b60405180910390a3505050565b6001600160a01b0383166118815760405162461bcd60e51b815260040161093890612aef565b600081116118a15760405162461bcd60e51b815260040161093890612c2a565b6001600160a01b03831660009081526003602052604090205460ff161580156118e257506001600160a01b03821660009081526005602052604090205460ff165b80156118f1575060265460ff16155b1561191b57600061190b6064610a976063610a8b88610cb6565b905081811015611919578091505b505b436119246126a2565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119c75750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c5919081019061293e565b155b156119f9576017546001600160a01b038681169116146119f95760405162461bcd60e51b815260040161093890612cee565b60265460ff16151560011480611a2c57506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a5457506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a6c57611a6585858584611d65565b5050610995565b60195462010000900460ff161515600114611a995760405162461bcd60e51b815260040161093890612a1c565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ae557611ac884611e58565b15611ae55760405162461bcd60e51b815260040161093890612b8f565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b2e57506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b5a5760018152611b4084611e5e565b15611b4d57611b4d611eb7565b611b5a8382848888612441565b6001600160a01b03841660009081526005602052604090205460ff16158015611b9c57506001600160a01b03841660009081526004602052604090205460ff16155b15611bd357601854611bb582602001516110c387610cb6565b1115611bd35760405162461bcd60e51b815260040161093890612bbc565b611bdf85858584611d65565b60225460ff1615156001148015611c0b5750601f54602354611c0890429063ffffffff61254716565b10155b15611c1857611c18612589565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611c8a57836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c73866114bf565b604051611c81929190612dc8565b60405180910390a25b5050505050565b60008184841115611cb55760405162461bcd60e51b815260040161093891906129c9565b505050900390565b600082611ccc57506000610866565b82820282848281611cd957fe5b0414611cf75760405162461bcd60e51b815260040161093890612c78565b9392505050565b6000611cf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125dc565b600082820183811015611cf75760405162461bcd60e51b815260040161093890612a8b565b6001600160a01b038416600090815260016020526040902054611d8e908363ffffffff61254716565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611dca9163ffffffff611d4016565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e3a9190612d4f565b60405180910390a38051151560011415610c3857610c388185612613565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611e8e575060265460ff16155b8015611e9c575060245460ff165b80156108665750602554611eaf30610cb6565b101592915050565b6026805460ff19166001179055602554306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f0b92610a97919063ffffffff611cbd16565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f3d57fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f6857fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fb2908690600090879030904290600401612d58565b600060405180830381600087803b158015611fcc57600080fd5b505af1158015611fe0573d6000803e3d6000fd5b505050506000611ff9824761254790919063ffffffff16565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612034573d6000803e3d6000fd5b50600b54612048908563ffffffff61254716565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061207b57fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120a657fe5b6001600160a01b0392831660209182029290920101526012548251911690829060029081106120d157fe5b6001600160a01b0392831660209182029290920101526012546040516370a0823160e01b815260009291909116906370a0823190612113903090600401612977565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612163919081019061293e565b600f546025549192506001600160a01b031690635c11d7959061218c908963ffffffff61254716565b60008530426040518663ffffffff1660e01b81526004016121b1959493929190612d58565b600060405180830381600087803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50506012546040516370a0823160e01b815260009350612276925084916001600160a01b0316906370a082319061221a903090600401612977565b60206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226a919081019061293e565b9063ffffffff61254716565b90506000612295600e54610a97600c5485611cbd90919063ffffffff16565b905060006122a9838363ffffffff61254716565b60195490915060ff16151560011480156122c35750600082115b1561235d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906122f8908590600401612d4f565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061235961234a600e54610a97600c54602554611cbd90919063ffffffff16565b600c549063ffffffff61254716565b600c555b60195460ff610100909104161515600114801561237a5750600081115b156124145760155460405163604657b160e01b81526001600160a01b039091169063604657b1906123af908490600401612d4f565b600060405180830381600087803b1580156123c957600080fd5b505af11580156123dd573d6000803e3d6000fd5b50505050612410612401600e54610a97600d54602554611cbd90919063ffffffff16565b600d549063ffffffff61254716565b600d555b602554600e546124299163ffffffff61254716565b600e5550506026805460ff1916905550505050505050565b60105460009061245d906109f3906001600160a01b0316610cb6565b905060205481111561246f5760208190555b6000806000806124818787878b610f5f565b9350935093509350601b54600101601a54890310156124ad576127106113888b020460408a01526124ba565b6127108a82020460408a01525b60408901516124d0908b9063ffffffff61254716565b60208a01526040890151600e546124ec9163ffffffff611d4016565b600e55600b5461250290612710868d0204611d40565b600b55600c5461251890612710858d0204611d40565b600c819055600b54600e54612538929161226a919063ffffffff61254716565b600d5550505050505050505050565b6000611cf783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c91565b601f546023544291906125a390839063ffffffff61254716565b106125d957601f546023546125bd9163ffffffff611d4016565b602355601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836125fd5760405162461bcd60e51b815260040161093891906129c9565b50600083858161260957fe5b0495945050505050565b60408201511561269e57604080830151306000908152600160205291909120546126429163ffffffff611d4016565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161269591612d4f565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b6000602082840312156126d6578081fd5b8135611cf781612dff565b6000602082840312156126f2578081fd5b8151611cf781612dff565b6000806040838503121561270f578081fd5b823561271a81612dff565b9150602083013561272a81612dff565b809150509250929050565b600080600060608486031215612749578081fd5b833561275481612dff565b9250602084013561276481612dff565b929592945050506040919091013590565b6000806000806080858703121561278a578081fd5b843561279581612dff565b935060208501356127a581612dff565b93969395505050506040820135916060013590565b600080604083850312156127cc578182fd5b82356127d781612dff565b946020939093013593505050565b6000806000606084860312156127f9578283fd5b833561280481612dff565b925060208401359150604084013561281b81612dff565b809150509250925092565b60008060006040848603121561283a578283fd5b833567ffffffffffffffff80821115612851578485fd5b81860187601f820112612862578586fd5b8035925081831115612872578586fd5b8760208085028301011115612885578586fd5b602090810195509193505084013561281b81612e14565b6000602082840312156128ad578081fd5b8151611cf781612e14565b600080604083850312156128ca578182fd5b823561271a81612e14565b600080604083850312156128e7578182fd5b82356127d781612e14565b600080600060608486031215612906578283fd5b833561291181612e14565b95602085013595506040909401359392505050565b600060208284031215612937578081fd5b5035919050565b60006020828403121561294f578081fd5b5051919050565b60008060408385031215612968578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156129f5578581018301518582016040015282016129d9565b81811115612a065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612da75784516001600160a01b031683529383019391830191600101612d82565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b03811681146125d957600080fd5b80151581146125d957600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220af8c7d3ace0e234f9d98e4b6d70647be0f37f0f97bf6882bc4d96a011ea9d40d64736f6c63430006020033
Deployed Bytecode Sourcemap
15719:18376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18892:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18892:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;16188:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16188:51:0;;;:::i;20088:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20088:83:0;;;:::i;:::-;;;;;;;;20919:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20919:161:0;;;;;;;;:::i;:::-;;;;;;;;17701:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17701:41:0;;;:::i;:::-;;;;;;;;20365:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20365:95:0;;;:::i;21088:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21088:311:0;;;;;;;;:::i;33524:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33524:276:0;;;;;;;;:::i;:::-;;18760:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18760:39:0;;;:::i;31021:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31021:243:0;;;;;;;;:::i;20274:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20274:83:0;;;:::i;:::-;;;;;;;;18685:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18685:30:0;;;:::i;21407:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21407:218:0;;;;;;;;:::i;32196:291::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32196:291:0;;;;;;;;:::i;17785:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17785:19:0;;;:::i;18351:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18351:27:0;;;:::i;17751:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17751:27:0;;;:::i;33261:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33261:255:0;;;;;;;;:::i;32026:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32026:162:0;;;;;;;;:::i;18855:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18855:30:0;;;:::i;20468:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20468:117:0;;;;;;;;:::i;5926:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5926:148:0;;;:::i;31857:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31857:161:0;;;;;;;;:::i;17994:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17994:26:0;;;:::i;18313:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18313:31:0;;;:::i;18652:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18652:26:0;;;:::i;31272:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31272:227:0;;;;;;;;:::i;5284:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5284:79:0;;;:::i;18722:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18722:31:0;;;:::i;33808:284::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33808:284:0;;;;;;;;:::i;18607:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18607:38:0;;;:::i;17877:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17877:73:0;;;:::i;20179:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20179:87:0;;;:::i;22290:1851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22290:1851:0;;;;;;;;:::i;:::-;;;;;;;;;;;21633:267;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21633:267:0;;;;;;;;:::i;31507:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31507:196:0;;;:::i;16071:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16071:40:0;;;;;;;;:::i;20593:167::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20593:167:0;;;;;;;;:::i;32985:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32985:268:0;;;;;;;;:::i;17957:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17957:30:0;;;:::i;32495:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32495:259:0;;;;;;;;:::i;31711:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31711:138:0;;;;;;;;:::i;20768:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20768:143:0;;;;;;;;:::i;32762:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32762:215:0;;;;;;;;:::i;6229:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6229:244:0;;;;;;;;:::i;29835:430::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29835:430:0;;;;;;;;:::i;18892:45::-;;;;:::o;16188:51::-;;;;:::o;20088:83::-;20158:5;20151:12;;;;;;;;-1:-1:-1;;20151:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20125:13;;20151:12;;20158:5;;20151:12;;20158:5;20151:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:83;:::o;20919:161::-;20994:4;21011:39;21020:12;:10;:12::i;:::-;21034:7;21043:6;21011:8;:39::i;:::-;-1:-1:-1;21068:4:0;20919:161;;;;;:::o;17701:41::-;;;-1:-1:-1;;;;;17701:41:0;;:::o;20365:95::-;20445:7;;20365:95;:::o;21088:311::-;21186:4;21203:36;21213:6;21221:9;21232:6;21203:9;:36::i;:::-;21250:119;21259:6;21267:12;:10;:12::i;:::-;21281:87;21319:6;21281:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21281:19:0;;;;;;:11;:19;;;;;;21301:12;:10;:12::i;:::-;-1:-1:-1;;;;;21281:33:0;;;;;;;;;;;;-1:-1:-1;21281:33:0;;;:87;;:37;:87;:::i;:::-;21250:8;:119::i;:::-;-1:-1:-1;21387:4:0;21088:311;;;;;:::o;33524:276::-;33586:9;;-1:-1:-1;;;;;33586:9:0;33607:10;33586:32;33578:59;;;;-1:-1:-1;;;33578:59:0;;;;;;;;;;;;;;;;;33663:21;33703:11;33695:56;;;;-1:-1:-1;;;33695:56:0;;;;;;;;;33762:30;;-1:-1:-1;;;;;33762:21:0;;;:30;;;;;33784:7;;33762:30;;;;33784:7;33762:21;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33762:30:0;33524:276;;:::o;18760:39::-;;;;:::o;31021:243::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31098:11:::1;:26:::0;;;31240:13:::1;::::0;31149:107:::1;::::0;31222:33:::1;::::0;-1:-1:-1;;;;;31240:13:0::1;31222:9;:33::i;:::-;31157:4;::::0;31181:13:::1;::::0;31150:46:::1;::::0;-1:-1:-1;;;31150:46:0;;31149:68:::1;::::0;18592:8:::1;::::0;-1:-1:-1;;;;;31157:4:0;;::::1;::::0;31150:22:::1;::::0;:46:::1;::::0;31181:13:::1;::::0;31150:46:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;31150:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31150:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31150:46:0;;;;;;;;;31149:52:::0;:68:::1;:52;:68;:::i;:::-;:72:::0;:107:::1;:72;:107;:::i;:::-;31135:11;:121:::0;-1:-1:-1;31021:243:0:o;20274:83::-;20340:9;;;;20274:83;:::o;18685:30::-;;;;:::o;21407:218::-;21495:4;21512:83;21521:12;:10;:12::i;:::-;21535:7;21544:50;21583:10;21544:11;:25;21556:12;:10;:12::i;:::-;-1:-1:-1;;;;;21544:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21544:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;32196:291::-;32291:9;;-1:-1:-1;;;;;32291:9:0;32312:10;32291:32;32283:59;;;;-1:-1:-1;;;32283:59:0;;;;;;;;;32353:12;:28;;;;;-1:-1:-1;;32353:28:0;;;;;;32392:15;:34;;-1:-1:-1;;;;;32392:34:0;;;-1:-1:-1;;;;;;32392:34:0;;;;;;;;32456:15;32353:12;32437:35;;;:18;:35;;;;;:42;;;;;32353:28;32437:42;;;32196:291::o;17785:19::-;;;-1:-1:-1;;;;;17785:19:0;;:::o;18351:27::-;;;;;;;;;:::o;17751:::-;;;-1:-1:-1;;;;;17751:27:0;;:::o;33261:255::-;33351:9;;-1:-1:-1;;;;;33351:9:0;33372:10;33351:32;33343:59;;;;-1:-1:-1;;;33343:59:0;;;;;;;;;33418:6;33413:96;33430:16;;;33413:96;;;33488:9;33468:7;:17;33476:5;;33482:1;33476:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33468:17:0;;;;;;;;;;;;-1:-1:-1;33468:17:0;:29;;-1:-1:-1;;33468:29:0;;;;;;;;;;-1:-1:-1;33448:3:0;33413:96;;;;33261:255;;;:::o;32026:162::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;32099:13:::1;:30:::0;;-1:-1:-1;;;;;;32099:30:0::1;-1:-1:-1::0;;;;;32099:30:0;;::::1;;::::0;;;;32159:13:::1;-1:-1:-1::0;32140:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;32140:40:0::1;-1:-1:-1::0;32140:40:0::1;::::0;;32026:162::o;18855:30::-;;;;;;:::o;20468:117::-;-1:-1:-1;;;;;20561:16:0;20534:7;20561:16;;;:7;:16;;;;;;;20468:117::o;5926:148::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;6033:1:::1;6017:6:::0;;5996:40:::1;::::0;-1:-1:-1;;;;;6017:6:0;;::::1;::::0;5996:40:::1;::::0;6033:1;;5996:40:::1;6064:1;6047:19:::0;;-1:-1:-1;;;;;;6047:19:0::1;::::0;;5926:148::o;31857:161::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31949:10:::1;:24:::0;;;;31984:11:::1;:26:::0;31857:161::o;17994:26::-;;;-1:-1:-1;;;;;17994:26:0;;:::o;18313:31::-;;;;;;:::o;18652:26::-;;;;:::o;31272:227::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31389:12:::1;:28:::0;;-1:-1:-1;;31389:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;31428:11:::1;:26:::0;31465:11:::1;:26:::0;31272:227::o;5284:79::-;5322:7;5349:6;-1:-1:-1;;;;;5349:6:0;5284:79;:::o;18722:31::-;;;;;;:::o;33808:284::-;33905:9;;-1:-1:-1;;;;;33905:9:0;33926:10;33905:32;;:74;;-1:-1:-1;33941:15:0;;-1:-1:-1;;;;;33941:15:0;33968:10;33941:38;33905:74;:112;;;-1:-1:-1;33983:11:0;;-1:-1:-1;;;;;33983:11:0;34006:10;33983:34;33905:112;33897:139;;;;-1:-1:-1;;;33897:139:0;;;;;;;;;34047:37;;-1:-1:-1;;;34047:37:0;;-1:-1:-1;;;;;34047:23:0;;;;;:37;;34071:3;;34076:7;;34047:37;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34047:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34047:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;34047:37:0;;;;;;;;18607:38;;;;:::o;17877:73::-;;;-1:-1:-1;;;;;17877:73:0;;:::o;20179:87::-;20251:7;20244:14;;;;;;;;-1:-1:-1;;20244:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20218:13;;20244:14;;20251:7;;20244:14;;20251:7;20244:14;;;;;;;;;;;;;;;;;;;;;;;;22290:1851;-1:-1:-1;;;;;22439:11:0;;22392:7;22439:11;;;:7;:11;;;;;;22392:7;;;;;;22439:11;;:19;;:11;:19;;:44;;-1:-1:-1;;;;;;22462:13:0;;;;;;:7;:13;;;;;;;;:21;;:13;:21;22439:44;22436:98;;;-1:-1:-1;22507:3:0;;-1:-1:-1;22512:1:0;;-1:-1:-1;22512:1:0;;-1:-1:-1;22507:3:0;22499:23;;22436:98;-1:-1:-1;;;;;22548:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;22544:1590;;;22781:11;;22765:13;;16964:3;;17009;;17050:2;;22795:1;22781:15;22750:28;;;:46;22746:836;;;-1:-1:-1;17211:3:0;;-1:-1:-1;17379:3:0;;-1:-1:-1;17535:3:0;22746:836;;;23003:12;;;;:20;;:12;:20;:82;;;;;23038:47;23081:3;23038:38;23060:11;;23074:1;23060:15;23054:3;:21;23038:11;;:15;;:38;;;;:::i;:47::-;23027:8;:58;23003:82;23000:582;;;-1:-1:-1;17157:3:0;;-1:-1:-1;17323:3:0;;-1:-1:-1;17483:3:0;23000:582;;;23307:12;;;;:20;;:12;:20;:78;;;;;23342:43;23381:3;23342:34;23364:11;;23358:3;:17;23342:11;;:15;;:34;;;;:::i;:43::-;23331:8;:54;23307:78;23304:278;;;-1:-1:-1;17103:3:0;;-1:-1:-1;17267:3:0;;-1:-1:-1;17103:3:0;23304:278;23604:14;23619:16;23636:12;23649:54;23636:12;23649:36;23604:14;23619:16;23649:36;:18;:36;:::i;:::-;:40;:54;:40;:54;:::i;:::-;23596:108;;;;;;;;;;;;;22544:1590;23772:11;;23786:1;23772:15;23756:13;;23741:12;:28;:46;23737:386;;;16603:3;16768;16919;23888:81;16919:3;23888:54;16603:3;16768;23888:54;:27;:54;:::i;:81::-;23808:162;;;;;;;;;;23737:386;16361:3;16405;16445:2;24058:48;16445:2;24058:32;16361:3;16405;24058:32;:16;:32;:::i;23737:386::-;22290:1851;;;;;;;;;:::o;21633:267::-;21726:4;21743:127;21752:12;:10;:12::i;:::-;21766:7;21775:94;21814:15;21775:94;;;;;;;;;;;;;;;;;:11;:25;21787:12;:10;:12::i;:::-;-1:-1:-1;;;;;21775:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21775:25:0;;;:34;;;;;;;;;;;:94;;:38;:94;:::i;31507:196::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31575:15:::1;::::0;;;::::1;;;:24;31567:56;;;;-1:-1:-1::0;;;31567:56:0::1;;;;;;;;;31634:15;:22:::0;;-1:-1:-1;;31634:22:0::1;::::0;::::1;::::0;;31683:12:::1;31667:13;:28:::0;31507:196::o;16071:40::-;;;;;;;;;;;;;;;:::o;20593:167::-;20671:4;20688:42;20698:12;:10;:12::i;:::-;20712:9;20723:6;20688:9;:42::i;32985:268::-;33076:9;;-1:-1:-1;;;;;33076:9:0;33097:10;33076:32;33068:59;;;;-1:-1:-1;;;33068:59:0;;;;;;;;;33143:6;33138:108;33155:16;;;33138:108;;;33224:10;33193:18;:28;33212:5;;33218:1;33212:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33193:28:0;;;;;;;;;;;;-1:-1:-1;33193:28:0;:41;;-1:-1:-1;;33193:41:0;;;;;;;;;;-1:-1:-1;33173:3:0;33138:108;;17957:30;;;-1:-1:-1;;;;;17957:30:0;;:::o;32495:259::-;32578:9;;-1:-1:-1;;;;;32578:9:0;32599:10;32578:32;32570:59;;;;-1:-1:-1;;;32570:59:0;;;;;;;;;32640:8;:20;;-1:-1:-1;;32640:20:0;;;;;;;;;;;;;;;;32671:11;:26;;-1:-1:-1;;;;;;32671:26:0;-1:-1:-1;;;;;32671:26:0;;;;;;;;32727:11;-1:-1:-1;32708:31:0;;;:18;:31;;;;;:38;;-1:-1:-1;;32708:38:0;-1:-1:-1;32708:38:0;;;32495:259::o;31711:138::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31801:18:::1;:40:::0;31711:138::o;20768:143::-;-1:-1:-1;;;;;20876:18:0;;;20849:7;20876:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20768:143::o;32762:215::-;32851:9;;-1:-1:-1;;;;;32851:9:0;32872:10;32851:32;32843:59;;;;-1:-1:-1;;;32843:59:0;;;;;;;;;32913:11;:22;;-1:-1:-1;;32913:22:0;;;;;;;;;;;32946:13;:23;32762:215::o;6229:244::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;-1:-1:-1;;;;;6318:22:0;::::1;6310:73;;;;-1:-1:-1::0;;;6310:73:0::1;;;;;;;;;6420:6;::::0;;6399:38:::1;::::0;-1:-1:-1;;;;;6399:38:0;;::::1;::::0;6420:6;::::1;::::0;6399:38:::1;::::0;::::1;6448:6;:17:::0;;-1:-1:-1;;;;;;6448:17:0::1;-1:-1:-1::0;;;;;6448:17:0;;;::::1;::::0;;;::::1;::::0;;6229:244::o;29835:430::-;30023:13;;29891:18;;;;29942:97;;30005:33;;-1:-1:-1;;;;;30023:13:0;30005:9;:33::i;:::-;29960:4;;29984:13;;29953:46;;-1:-1:-1;;;29953:46:0;;29942:58;;-1:-1:-1;;;;;29960:4:0;;;;29953:22;;:46;;29984:13;;;;29953:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29953:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29953:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29953:46:0;;;;;;;;;29942:6;;:58;:10;:58;:::i;:97::-;29922:117;;30050:21;30092:15;;;;;;;;;-1:-1:-1;;;;;30092:15:0;-1:-1:-1;;;;;30092:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30092:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30092:25:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30092:25:0;;;;;;;;;30127:4;;30133;;30074:64;;-1:-1:-1;;;30074:64:0;;-1:-1:-1;;;;;30074:52:0;;;;;;:64;;30127:4;;;;30133;;;30074:64;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30074:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30074:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30074:64:0;;;;;;;;;30226:4;;30219:37;;-1:-1:-1;;;30219:37:0;;30050:88;;-1:-1:-1;30162:95:0;;-1:-1:-1;;;;;30226:4:0;;;;30219:22;;:37;;30050:88;;30219:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30219:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30219:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30219:37:0;;;;;;;;;30183:4;;30176:37;;-1:-1:-1;;;30176:37:0;;30162:52;;-1:-1:-1;;;;;30183:4:0;;30176:22;;:37;;30199:13;;30176:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30176:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30176:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30176:37:0;;;;;;;;;30162:9;;:52;:13;:52;:::i;:95::-;30149:108;29835:430;-1:-1:-1;;;;29835:430:0:o;3895:106::-;3983:10;3895:106;:::o;21949:333::-;-1:-1:-1;;;;;22042:19:0;;22034:66;;;;-1:-1:-1;;;22034:66:0;;;;;;;;;-1:-1:-1;;;;;22119:21:0;;22111:66;;;;-1:-1:-1;;;22111:66:0;;;;;;;;;-1:-1:-1;;;;;22190:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22242:32;;;;;22220:6;;22242:32;;;;;;;;;;21949:333;;;:::o;28015:1812::-;-1:-1:-1;;;;;28137:18:0;;28129:66;;;;-1:-1:-1;;;28129:66:0;;;;;;;;;28223:1;28214:6;:10;28206:69;;;;-1:-1:-1;;;28206:69:0;;;;;;;;;-1:-1:-1;;;;;28293:24:0;;;;;;:18;:24;;;;;;;;28292:25;:41;;;;-1:-1:-1;;;;;;28321:12:0;;;;;;:8;:12;;;;;;;;28292:41;:52;;;;-1:-1:-1;28338:6:0;;;;28337:7;28292:52;28288:234;;;28361:19;28383:32;28411:3;28383:23;28403:2;28383:15;28393:4;28383:9;:15::i;:32::-;28361:54;;28448:6;28434:11;:20;28430:81;;;28484:11;28475:20;;28430:81;28288:234;;28557:12;28580:18;;:::i;:::-;28609:21;;;;:30;;;-1:-1:-1;;;;;28655:12:0;;;;;;:8;:12;;;;;;;;;:20;;:12;:20;:53;;;;;28686:2;-1:-1:-1;;;;;28679:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28679:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28679:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28679:24:0;;;;;;;;;:29;28655:53;28652:137;;;28740:15;;-1:-1:-1;;;;;28732:23:0;;;28740:15;;28732:23;28724:53;;;;-1:-1:-1;;;28724:53:0;;;;;;;;;28804:6;;;;:14;;:6;:14;;:50;;-1:-1:-1;;;;;;28822:24:0;;;;;;:18;:24;;;;;;;;:32;;:24;:32;28804:50;:84;;;-1:-1:-1;;;;;;28858:22:0;;;;;;:18;:22;;;;;;;;:30;;:22;:30;28804:84;28801:159;;;28911:36;28926:4;28931:2;28934:6;28941:5;28911:14;:36::i;:::-;28904:43;;;;28801:159;28980:15;;;;;;;:23;;28999:4;28980:23;28972:51;;;;-1:-1:-1;;;28972:51:0;;;;;;;;;-1:-1:-1;;;;;29040:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29036:110;;;29087:14;29098:2;29087:10;:14::i;:::-;:23;29079:55;;;;-1:-1:-1;;;29079:55:0;;;;;;;;;-1:-1:-1;;;;;29161:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;;:46;;-1:-1:-1;;;;;;29185:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29161:46;29158:214;;;29239:4;29223:20;;29263:18;29278:2;29263:14;:18::i;:::-;29260:35;;;29283:10;:8;:10::i;:::-;29311:49;29322:6;29330:5;29337:12;29351:4;29357:2;29311:10;:49::i;:::-;-1:-1:-1;;;;;29389:12:0;;;;;;:8;:12;;;;;;;;29388:13;:37;;;;-1:-1:-1;;;;;;29405:11:0;;;;;;:7;:11;;;;;;;;:20;29388:37;29384:163;;;29494:18;;29450:40;29468:5;:21;;;29450:13;29460:2;29450:9;:13::i;:40::-;:62;;29442:93;;;;-1:-1:-1;;;29442:93:0;;;;;;;;;29567:36;29582:4;29587:2;29590:6;29597:5;29567:14;:36::i;:::-;29619:12;;;;:20;;:12;:20;:68;;;;-1:-1:-1;29679:8:0;;29663:11;;29643:32;;:15;;:32;:19;:32;:::i;:::-;:44;;29619:68;29616:93;;;29689:18;:16;:18::i;:::-;-1:-1:-1;;;;;29725:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29721:99;;;29778:2;-1:-1:-1;;;;;29769:39:0;;29782:6;29790:17;29800:6;29790:9;:17::i;:::-;29769:39;;;;;;;;;;;;;;;;29721:99;28015:1812;;;;;:::o;8226:192::-;8312:7;8348:12;8340:6;;;;8332:29;;;;-1:-1:-1;;;8332:29:0;;;;;;;;;;-1:-1:-1;;;8384:5:0;;;8226:192::o;8669:471::-;8727:7;8972:6;8968:47;;-1:-1:-1;9002:1:0;8995:8;;8968:47;9039:5;;;9043:1;9039;:5;:1;9063:5;;;;;:10;9055:56;;;;-1:-1:-1;;;9055:56:0;;;;;;;;;9131:1;8669:471;-1:-1:-1;;;8669:471:0:o;9608:132::-;9666:7;9693:39;9697:1;9700;9693:39;;;;;;;;;;;;;;;;;:3;:39::i;7339:181::-;7397:7;7429:5;;;7453:6;;;;7445:46;;;;-1:-1:-1;;;7445:46:0;;;;;;;;30273:396;-1:-1:-1;;;;;30406:15:0;;;;;;:7;:15;;;;;;:28;;30426:7;30406:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;30388:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30489:21;;;30466:18;;;;;;;;;;:45;;;:22;:45;:::i;:::-;30445:7;:18;30453:9;-1:-1:-1;;;;;30445:18:0;-1:-1:-1;;;;;30445:18:0;;;;;;;;;;;;:66;;;;30544:9;-1:-1:-1;;;;;30527:50:0;30536:6;-1:-1:-1;;;;;30527:50:0;;30555:5;:21;;;30527:50;;;;;;;;;;;;;;;30591:13;;:21;;30608:4;30591:21;30588:74;;;30628:22;30637:5;30643:6;30628:8;:22::i;25563:196::-;25695:20;25743:8;;;25563:196::o;25767:210::-;-1:-1:-1;;;;;25850:12:0;;25826:4;25850:12;;;:8;:12;;;;;;;;:20;;:12;:20;:41;;;;-1:-1:-1;25885:6:0;;;;25884:7;25850:41;:65;;;;-1:-1:-1;25904:11:0;;;;25850:65;:119;;;;;25956:13;;25928:24;25946:4;25928:9;:24::i;:::-;:41;;25843:126;25767:210;-1:-1:-1;;25767:210:0:o;25985:2022::-;18984:6;:13;;-1:-1:-1;;18984:13:0;18993:4;18984:13;;;26089::::1;::::0;26054:4:::1;18984:6:::0;26034:26;;;:11:::1;:26;::::0;;;;;;;26069:15:::1;::::0;-1:-1:-1;;;;;26069:15:0::1;26034:52:::0;;;;;;;:68;;;26176:11:::1;::::0;26158:12:::1;::::0;18984:6;;26140:48:::1;::::0;:31:::1;::::0;26089:13;26140:31:::1;:17;:31;:::i;:48::-;26229:16;::::0;;26243:1:::1;26229:16:::0;;;26201:25:::1;26229:16:::0;;::::1;::::0;;26115:73;;-1:-1:-1;26229:16:0;;::::1;::::0;::::1;::::0;;105:10:-1::1;26229:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;26229:16:0::1;26201:44;;26278:4;26256:8;26265:1;26256:11;;;;;;;;-1:-1:-1::0;;;;;26256:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26308:4:::1;::::0;26294:11;;26308:4;::::1;::::0;26294:8;;26308:4;;26294:11;::::1;;;;;-1:-1:-1::0;;;;;26294:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26381:15:::1;::::0;:203:::1;::::0;-1:-1:-1;;;26381:203:0;;26347:21:::1;::::0;26381:15;;;::::1;::::0;:66:::1;::::0;:203:::1;::::0;26462:14;;26323:21:::1;::::0;26507:8;;26538:4:::1;::::0;26558:15:::1;::::0;26381:203:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26381:203:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26381:203:0;;;;26597:20;26620:40;26646:13;26620:21;:25;;:40;;;;:::i;:::-;26679:13;::::0;26671:45:::1;::::0;26597:63;;-1:-1:-1;;;;;;26679:13:0::1;::::0;26671:45;::::1;;;::::0;26597:63;;26679:13:::1;26671:45:::0;26679:13;26671:45;26597:63;26679:13;26671:45;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;26742:12:0::1;::::0;:32:::1;::::0;26759:14;26742:32:::1;:16;:32;:::i;:::-;26727:12;:47:::0;26823:16:::1;::::0;;26837:1:::1;26823:16:::0;;;;;::::1;::::0;;;26795:25:::1;::::0;26823:16:::1;::::0;::::1;26795:25:::0;;105:10:-1::1;26823:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;26823:16:0::1;26795:44;;26872:4;26850:8;26859:1;26850:11;;;;;;;;-1:-1:-1::0;;;;;26850:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26902:4:::1;::::0;26888:11;;26902:4;::::1;::::0;26888:8;;26902:4;;26888:11;::::1;;;;;-1:-1:-1::0;;;;;26888:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26931:4:::1;::::0;26917:11;;26931:4;::::1;::::0;26917:8;;26926:1:::1;::::0;26917:11;::::1;;;;;-1:-1:-1::0;;;;;26917:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26981:4:::1;::::0;26974:37:::1;::::0;-1:-1:-1;;;26974:37:0;;26946:25:::1;::::0;26981:4;;;::::1;::::0;26974:22:::1;::::0;:37:::1;::::0;27005:4:::1;::::0;26974:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26974:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26974:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26974:37:0;;;;;;;;;27024:15;::::0;27108:13:::1;::::0;26946:65;;-1:-1:-1;;;;;;27024:15:0::1;::::0;:69:::1;::::0;27108:33:::1;::::0;27126:14;27108:33:::1;:17;:33;:::i;:::-;27156:1;27172:8;27203:4;27223:15;27024:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27024:225:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;27290:4:0::1;::::0;27283:37:::1;::::0;-1:-1:-1;;;27283:37:0;;27262:18:::1;::::0;-1:-1:-1;27283:60:0::1;::::0;-1:-1:-1;27325:17:0;;-1:-1:-1;;;;;27290:4:0::1;::::0;27283:22:::1;::::0;:37:::1;::::0;27314:4:::1;::::0;27283:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27283:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27283:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27283:37:0;;;;;;;;;:41:::0;:60:::1;:41;:60;:::i;:::-;27262:81;;27354:22;27379:47;27414:11;;27379:30;27394:14;;27379:10;:14;;:30;;;;:::i;:47::-;27354:72:::0;-1:-1:-1;27437:18:0::1;27458:30;:10:::0;27354:72;27458:30:::1;:14;:30;:::i;:::-;27505:12;::::0;27437:51;;-1:-1:-1;27505:12:0::1;;:20;;:12:::0;:20:::1;:42:::0;::::1;;;;27546:1;27529:14;:18;27505:42;27501:233;;;27574:15;::::0;27564:56:::1;::::0;-1:-1:-1;;;27564:56:0;;-1:-1:-1;;;;;27574:15:0;;::::1;::::0;27564:40:::1;::::0;:56:::1;::::0;27605:14;;27564:56:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27564:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27564:56:0;;;;27652:70;27671:50;27709:11;;27671:33;27689:14;;27671:13;;:17;;:33;;;;:::i;:50::-;27652:14;::::0;;:70:::1;:18;:70;:::i;:::-;27635:14;:87:::0;27501:233:::1;27748:8;::::0;::::1;;::::0;;::::1;;:16;;:8;:16;:34:::0;::::1;;;;27781:1;27768:10;:14;27748:34;27744:201;;;27805:11;::::0;27799:44:::1;::::0;-1:-1:-1;;;27799:44:0;;-1:-1:-1;;;;;27805:11:0;;::::1;::::0;27799:32:::1;::::0;:44:::1;::::0;27832:10;;27799:44:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27799:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27799:44:0;;;;27871:62;27886:46;27920:11;;27886:29;27904:10;;27886:13;;:17;;:29;;;;:::i;:46::-;27871:10;::::0;;:62:::1;:14;:62;:::i;:::-;27858:10;:75:::0;27744:201:::1;27985:13;::::0;27969:11:::1;::::0;:30:::1;::::0;::::1;:15;:30;:::i;:::-;27955:11;:44:::0;-1:-1:-1;;19002:6:0;:14;;-1:-1:-1;;19002:14:0;;;-1:-1:-1;;;;;;;25985:2022:0:o;24262:1024::-;24494:13;;24384:16;;24403:107;;24476:33;;-1:-1:-1;;;;;24494:13:0;24476:9;:33::i;24403:107::-;24384:126;;24536:11;;24525:8;:22;24521:77;;;24564:11;:22;;;24521:77;24609:17;24627:19;24647:15;24663:16;24683:40;24690:4;24696:2;24700:8;24710:12;24683:6;:40::i;:::-;24608:115;;;;;;;;24769:10;;24782:1;24769:14;24753:13;;24738:12;:28;:45;24734:197;;;17574:5;24827:4;24818:13;;:23;24800:15;;;:41;24734:197;;;17574:5;24892:17;;;:27;24874:15;;;:45;24734:197;24976:15;;;;24965:27;;:6;;:27;:10;:27;:::i;:::-;24941:21;;;:51;25035:15;;;;25019:11;;:32;;;:15;:32;:::i;:::-;25005:11;:46;25077:12;;:48;;17574:5;25094:20;;;:30;25077:16;:48::i;:::-;25062:12;:63;25153:14;;:52;;17574:5;25172:22;;;:32;25153:18;:52::i;:::-;25136:14;:69;;;25245:12;;25229:11;;:49;;25136:69;25229:29;;:11;:29;:15;:29;:::i;:49::-;25216:10;:62;-1:-1:-1;;;;;;;;;;24262:1024:0:o;7795:136::-;7853:7;7880:43;7884:1;7887;7880:43;;;;;;;;;;;;;;;;;:3;:43::i;30677:336::-;30794:8;;30778:11;;30739:15;;30794:8;30769:21;;30739:15;;30769:21;:8;:21;:::i;:::-;:33;30765:241;;30849:8;;30833:11;;:25;;;:15;:25;:::i;:::-;30819:11;:39;30978:13;;30887:107;;30960:33;;-1:-1:-1;;;;;30978:13:0;30960:9;:33::i;30765:241::-;30677:336;:::o;10228:345::-;10314:7;10416:12;10409:5;10401:28;;;;-1:-1:-1;;;10401:28:0;;;;;;;;;;;10440:9;10456:1;10452;:5;;;;;;;10228:345;-1:-1:-1;;;;;10228:345:0:o;25294:261::-;25367:15;;;;:19;25364:184;;25454:15;;;;;25443:4;25427:22;;;;:7;:22;;;;;;;:43;;;:26;:43;:::i;:::-;25418:4;25402:22;;;;:7;:22;;;;;;;:68;;;;25520:15;;;;25490:46;;25418:4;;-1:-1:-1;;;;;25490:46:0;;;;;;;;;;;;;;;;;25364:184;25294:261;;:::o;15719:18376::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1205:241:-1:-;;1309:2;1297:9;1288:7;1284:23;1280:32;1277:2;;;-1:-1;;1315:12;1277:2;85:6;72:20;97:33;124:5;97:33;;1453:263;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;-1:-1;;1574:12;1536:2;226:6;220:13;238:33;265:5;238:33;;1723:366;;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;-1:-1;;1850:12;1812:2;85:6;72:20;97:33;124:5;97:33;;;1902:63;-1:-1;2002:2;2041:22;;72:20;97:33;72:20;97:33;;;2010:63;;;;1806:283;;;;;;2096:491;;;;2234:2;2222:9;2213:7;2209:23;2205:32;2202:2;;;-1:-1;;2240:12;2202:2;85:6;72:20;97:33;124:5;97:33;;;2292:63;-1:-1;2392:2;2431:22;;72:20;97:33;72:20;97:33;;;2196:391;;2400:63;;-1:-1;;;2500:2;2539:22;;;;994:20;;2196:391;2594:617;;;;;2749:3;2737:9;2728:7;2724:23;2720:33;2717:2;;;-1:-1;;2756:12;2717:2;85:6;72:20;97:33;124:5;97:33;;;2808:63;-1:-1;2908:2;2947:22;;72:20;97:33;72:20;97:33;;;2711:500;;2916:63;;-1:-1;;;;3016:2;3055:22;;994:20;;3124:2;3163:22;994:20;;2711:500;3218:366;;;3339:2;3327:9;3318:7;3314:23;3310:32;3307:2;;;-1:-1;;3345:12;3307:2;85:6;72:20;97:33;124:5;97:33;;;3397:63;3497:2;3536:22;;;;994:20;;-1:-1;;;3301:283;3591:491;;;;3729:2;3717:9;3708:7;3704:23;3700:32;3697:2;;;-1:-1;;3735:12;3697:2;85:6;72:20;97:33;124:5;97:33;;;3787:63;-1:-1;3887:2;3926:22;;994:20;;-1:-1;3995:2;4034:22;;72:20;97:33;72:20;97:33;;;4003:63;;;;3691:391;;;;;;4089:516;;;;4242:2;4230:9;4221:7;4217:23;4213:32;4210:2;;;-1:-1;;4248:12;4210:2;4306:17;4293:31;4344:18;;4336:6;4333:30;4330:2;;;-1:-1;;4366:12;4330:2;4467:6;4456:9;4452:22;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;482:6;469:20;459:30;;4344:18;501:6;498:30;495:2;;;-1:-1;;531:12;495:2;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;-1:-1;;633:12;586:2;575:4;563:17;;;;-1:-1;4394:90;;-1:-1;;4557:22;;725:20;750:30;725:20;750:30;;4612:257;;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;-1:-1;;4730:12;4692:2;873:6;867:13;885:30;909:5;885:30;;4876:360;;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;-1:-1;;5000:12;4962:2;738:6;725:20;750:30;774:5;750:30;;5243:360;;;5361:2;5349:9;5340:7;5336:23;5332:32;5329:2;;;-1:-1;;5367:12;5329:2;738:6;725:20;750:30;774:5;750:30;;5610:485;;;;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;-1:-1;;5751:12;5713:2;738:6;725:20;750:30;774:5;750:30;;;5803:60;5900:2;5939:22;;994:20;;-1:-1;6008:2;6047:22;;;994:20;;5707:388;-1:-1;;;5707:388;6102:241;;6206:2;6194:9;6185:7;6181:23;6177:32;6174:2;;;-1:-1;;6212:12;6174:2;-1:-1;994:20;;6168:175;-1:-1;6168:175;6350:263;;6465:2;6453:9;6444:7;6440:23;6436:32;6433:2;;;-1:-1;;6471:12;6433:2;-1:-1;1142:13;;6427:186;-1:-1;6427:186;6620:366;;;6741:2;6729:9;6720:7;6716:23;6712:32;6709:2;;;-1:-1;;6747:12;6709:2;-1:-1;;994:20;;;6899:2;6938:22;;;994:20;;-1:-1;6703:283;14707:213;-1:-1;;;;;26389:54;;;;7385:37;;14825:2;14810:18;;14796:124;15163:324;-1:-1;;;;;26389:54;;;7385:37;;26389:54;;15473:2;15458:18;;7385:37;15309:2;15294:18;;15280:207;15494:324;-1:-1;;;;;26389:54;;;;7385:37;;15804:2;15789:18;;14544:37;15640:2;15625:18;;15611:207;15825:201;26301:13;;26294:21;8348:34;;15937:2;15922:18;;15908:118;16551:301;;16689:2;;16710:17;16703:47;9032:5;25493:12;25909:6;16689:2;16678:9;16674:18;25897:19;-1:-1;27800:101;27814:6;27811:1;27808:13;27800:101;;;27881:11;;;;;27875:18;27862:11;;;25937:14;27862:11;27855:39;27829:10;;27800:101;;;27916:6;27913:1;27910:13;27907:2;;;-1:-1;25937:14;27972:6;16678:9;27963:16;;27956:27;27907:2;-1:-1;28088:7;28072:14;-1:-1;;28068:28;9190:39;;;;25937:14;9190:39;;16660:192;-1:-1;;;16660:192;16859:407;17050:2;17064:47;;;9466:2;17035:18;;;25897:19;-1:-1;;;25937:14;;;9482:38;9539:12;;;17021:245;17273:407;17464:2;17478:47;;;9790:2;17449:18;;;25897:19;9826:34;25937:14;;;9806:55;-1:-1;;;9881:12;;;9874:30;9923:12;;;17435:245;17687:407;17878:2;17892:47;;;10174:2;17863:18;;;25897:19;10210:29;25937:14;;;10190:50;10259:12;;;17849:245;18101:407;18292:2;18306:47;;;10510:2;18277:18;;;25897:19;-1:-1;;;25937:14;;;10526:42;10587:12;;;18263:245;18515:407;18706:2;18720:47;;;10838:2;18691:18;;;25897:19;10874:34;25937:14;;;10854:55;-1:-1;;;10929:12;;;10922:27;10968:12;;;18677:245;18929:407;19120:2;19134:47;;;11219:2;19105:18;;;25897:19;-1:-1;;;25937:14;;;11235:37;11291:12;;;19091:245;19343:407;19534:2;19548:47;;;19519:18;;;25897:19;11578:34;25937:14;;;11558:55;11632:12;;;19505:245;19757:407;19948:2;19962:47;;;11883:2;19933:18;;;25897:19;-1:-1;;;25937:14;;;11899:42;11960:12;;;19919:245;20171:407;20362:2;20376:47;;;12211:2;20347:18;;;25897:19;-1:-1;;;25937:14;;;12227:41;12287:12;;;20333:245;20585:407;20776:2;20790:47;;;12538:2;20761:18;;;25897:19;12574:34;25937:14;;;12554:55;-1:-1;;;12629:12;;;12622:26;12667:12;;;20747:245;20999:407;21190:2;21204:47;;;12918:2;21175:18;;;25897:19;12954:34;25937:14;;;12934:55;-1:-1;;;13009:12;;;13002:38;13059:12;;;21161:245;21413:407;21604:2;21618:47;;;13310:2;21589:18;;;25897:19;13346:34;25937:14;;;13326:55;-1:-1;;;13401:12;;;13394:25;13438:12;;;21575:245;21827:407;22018:2;22032:47;;;22003:18;;;25897:19;13725:34;25937:14;;;13705:55;13779:12;;;21989:245;22241:407;22432:2;22446:47;;;14030:2;22417:18;;;25897:19;-1:-1;;;25937:14;;;14046:41;14106:12;;;22403:245;22655:407;22846:2;22860:47;;;22831:18;;;25897:19;14393:34;25937:14;;;14373:55;14447:12;;;22817:245;23069:213;14544:37;;;23187:2;23172:18;;23158:124;23289:839;;23585:3;23574:9;23570:19;14574:5;14551:3;14544:37;23758:2;27448:24;23758:2;23747:9;23743:18;8817:58;23585:3;23795:2;23784:9;23780:18;23773:48;23835:108;7778:5;25493:12;25909:6;25904:3;25897:19;25937:14;23574:9;25937:14;7790:93;;23758:2;7954:5;25347:14;7966:21;;-1:-1;7993:260;8018:6;8015:1;8012:13;7993:260;;;8079:13;;-1:-1;;;;;26389:54;7254:58;;25752:14;;;;7147;;;;4344:18;8033:9;7993:260;;;-1:-1;;;;;;;26389:54;;;;24030:2;24015:18;;7254:58;-1:-1;;;24113:3;24098:19;14544:37;23827:116;23556:572;-1:-1;;;23556:572;24135:324;14544:37;;;24445:2;24430:18;;14544:37;24281:2;24266:18;;24252:207;24466:547;14544:37;;;24833:2;24818:18;;14544:37;;;;24916:2;24901:18;;14544:37;24999:2;24984:18;;14544:37;24668:3;24653:19;;24639:374;25020:205;26605:4;26594:16;;;;14660:35;;25134:2;25119:18;;25105:120;28109:117;-1:-1;;;;;26389:54;;28168:35;;28158:2;;28217:1;;28207:12;28233:111;28314:5;26301:13;26294:21;28292:5;28289:32;28279:2;;28335:1;;28325:12
Swarm Source
ipfs://af8c7d3ace0e234f9d98e4b6d70647be0f37f0f97bf6882bc4d96a011ea9d40d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1 | 84.2787 | $84.28 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.