Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15650718 | 832 days ago | IN | 0 ETH | 0.00049379 | ||||
Approve | 15650704 | 832 days ago | IN | 0 ETH | 0.00033368 | ||||
Approve | 15650697 | 832 days ago | IN | 0 ETH | 0.00093342 | ||||
Approve | 15650696 | 832 days ago | IN | 0 ETH | 0.00035003 | ||||
Approve | 15650688 | 832 days ago | IN | 0 ETH | 0.00040886 | ||||
Approve | 15650688 | 832 days ago | IN | 0 ETH | 0.00040886 | ||||
Approve | 15650688 | 832 days ago | IN | 0 ETH | 0.00040886 | ||||
Approve | 15650688 | 832 days ago | IN | 0 ETH | 0.00040886 | ||||
Approve | 15650688 | 832 days ago | IN | 0 ETH | 0.00040886 | ||||
Approve | 15650682 | 832 days ago | IN | 0 ETH | 0.00035721 | ||||
Setup Enable Tra... | 15650676 | 832 days ago | IN | 0 ETH | 0.00048407 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DonRyu
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-01 */ /** */ pragma solidity ^0.8.13; // SPDX-License-Identifier: MIT interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IUniswapV2ERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function factory() external pure returns (address); function WETH() external pure returns (address); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = msg.sender; _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() == msg.sender, "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 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 onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } ////////// Contract ///////////// contract DonRyu is IERC20, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; event antiBotBan(address indexed value); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) private _sellLock; mapping (address => uint256) private _buyLock; EnumerableSet.AddressSet private _excluded; EnumerableSet.AddressSet private _excludedFromSellLock; EnumerableSet.AddressSet private _excludedFromBuyLock; EnumerableSet.AddressSet private _excludedFromStaking; EnumerableSet.AddressSet private _isBlacklisted; //Token Info string private constant _name = 'DonRyu'; string private constant _symbol = 'Donryu'; uint8 private constant _decimals = 9; uint256 public constant InitialSupply= 100000000 * 10**_decimals;//equals 100 000 000 tokens //Used for anti-bot autoblacklist uint256 private tradingEnabledAt; //DO NOT CHANGE, THIS IS FOR HOLDING A TIMESTAMP uint256 public autoBanTime = 30; // Set to the amount of time in seconds after enable trading you want addresses to be auto blacklisted if they buy/sell/transfer in this time. uint256 public enableAutoBlacklist = 0; //Leave 1 if using, set to 0 if not using. //Divider for the MaxBalance based on circulating Supply (2%) uint8 public constant BalanceLimitDivider=50; //Divider for sellLimit based on circulating Supply (1%)) uint16 public constant SellLimitDivider=100; //Sellers get locked for MaxSellLockTime (put in seconds, works better especially if changing later) so they can't dump repeatedly uint16 public constant MaxSellLockTime= 0 seconds; //Buyers get locked for MaxBuyLockTime (put in seconds, works better especially if changing later) so they can't buy repeatedly uint16 public constant MaxBuyLockTime= 0 seconds; //The time Liquidity gets locked at start and prolonged once it gets released uint256 private constant DefaultLiquidityLockTime= 1800; //DevWallets address public Development=payable(0xd8a6FFF50A144434AA2272C6f5f0EF3D58dDD03D); address public Marketing=payable(0xd8a6FFF50A144434AA2272C6f5f0EF3D58dDD03D); //MainNet address private constant UniswapV2Router=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //variables that track balanceLimit and sellLimit, //can be updated based on circulating supply and Sell- and BalanceLimitDividers uint256 private _circulatingSupply =InitialSupply; uint256 public balanceLimit = _circulatingSupply; uint256 public sellLimit = _circulatingSupply; uint256 private MaxBuy = 2000000 * 10**_decimals; // 10,000,000 tokens //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer uint8 private _buyTax; uint8 private _sellTax; uint8 private _transferTax; uint8 private _burnTax; uint8 private _liquidityTax; uint8 private _stakingTax; address private _uniswapv2PairAddress; IUniswapV2Router02 private _uniswapv2Router; //Checks if address is in Team, is needed to give Team access even if contract is renounced //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks) function _isTeam(address addr) private view returns (bool){ return addr==owner()||addr==Development||addr==Marketing; } //Constructor/////////// constructor () { //contract creator gets 90% of the token to create LP-Pair uint256 deployerBalance=_circulatingSupply; _balances[msg.sender] = deployerBalance; emit Transfer(address(0), msg.sender, deployerBalance); // UniswapV2 Router _uniswapv2Router = IUniswapV2Router02(UniswapV2Router); //Creates a UniswapV2 Pair _uniswapv2PairAddress = IUniswapV2Factory(_uniswapv2Router.factory()).createPair(address(this), _uniswapv2Router.WETH()); //Sets Buy/Sell limits balanceLimit=InitialSupply/BalanceLimitDivider; sellLimit=InitialSupply/SellLimitDivider; //Sets sellLockTime sellLockTime=0; //Sets buyLockTime buyLockTime=0; //Set Starting Tax _buyTax=2; _sellTax=2; _transferTax=0; _burnTax=0; _liquidityTax=10; _stakingTax=90; //Team wallets and deployer are excluded from Taxes _excluded.add(Development); _excluded.add(Marketing); _excluded.add(msg.sender); //excludes UniswapV2 Router, pair, contract and burn address from staking _excludedFromStaking.add(address(_uniswapv2Router)); _excludedFromStaking.add(_uniswapv2PairAddress); _excludedFromStaking.add(address(this)); _excludedFromStaking.add(0x000000000000000000000000000000000000dEaD); } //Transfer functionality/// //transfer function, every transfer runs through this function function _transfer(address sender, address recipient, uint256 amount) private{ require(sender != address(0), "Transfer from zero"); require(recipient != address(0), "Transfer to zero"); //Manually Excluded adresses are transfering tax and lock free bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient)); //Transactions from and to the contract are always tax and lock free bool isContractTransfer=(sender==address(this) || recipient==address(this)); //transfers between UniswapV2Router and UniswapV2Pair are tax and lock free address uniswapv2Router=address(_uniswapv2Router); bool isLiquidityTransfer = ((sender == _uniswapv2PairAddress && recipient == uniswapv2Router) || (recipient == _uniswapv2PairAddress && sender == uniswapv2Router)); //differentiate between buy/sell/transfer to apply different taxes/restrictions bool isBuy=sender==_uniswapv2PairAddress|| sender == uniswapv2Router; bool isSell=recipient==_uniswapv2PairAddress|| recipient == uniswapv2Router; //Pick transfer if(isContractTransfer || isLiquidityTransfer || isExcluded){ _feelessTransfer(sender, recipient, amount); } else{ //once trading is enabled, it can't be turned off again require(tradingEnabled,"trading not yet enabled"); _taxedTransfer(sender,recipient,amount,isBuy,isSell); } } //applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{ uint256 recipientBalance = _balances[recipient]; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); uint8 tax; if(isSell){ if(!_excludedFromSellLock.contains(sender)){ //If seller sold less than sellLockTime(2h 50m) ago, sell is declined, can be disabled by Team require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock"); //Sets the time sellers get locked(2 hours 50 mins by default) _sellLock[sender]=block.timestamp+sellLockTime; } //Sells can't exceed the sell limit(21,000 Tokens at start, can be updated to circulating supply) require(amount<=sellLimit,"Dump protection"); require(_isBlacklisted.contains(sender) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_sellTax; } else if(isBuy){ if(!_excludedFromBuyLock.contains(recipient)){ //If buyer bought less than buyLockTime(2h 50m) ago, buy is declined, can be disabled by Team require(_buyLock[recipient]<=block.timestamp||buyLockDisabled,"Buyer in buyLock"); //Sets the time buyers get locked(2 hours 50 mins by default) _buyLock[recipient]=block.timestamp+buyLockTime; } //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(recipientBalance+amount<=balanceLimit,"whale protection"); require(amount <= MaxBuy,"Tx amount exceeding max buy amount"); require(_isBlacklisted.contains(recipient) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(recipient); emit antiBotBan(recipient); } tax=_buyTax; } else {//Transfer //withdraws ETH when sending less or equal to 1 Token //that way you can withdraw without connecting to any dApp. //might needs higher gas limit if(amount<=10**(_decimals)) claimETH(sender); //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(recipientBalance+amount<=balanceLimit,"whale protection"); //Transfers are disabled in sell lock, this doesn't stop someone from transfering before //selling, but there is no satisfying solution for that, and you would need to pax additional tax if(!_excludedFromSellLock.contains(sender)) require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock"); require(_isBlacklisted.contains(sender) == false, "Sender address blacklisted!"); require(_isBlacklisted.contains(recipient) == false, "Recipient address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_transferTax; } //Swapping AutoLP and MarketingETH is only possible if sender is not uniswapv2 pair, //if its not manually disabled, if its not already swapping and if its a Sell to avoid // people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens if((sender!=_uniswapv2PairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier)&&isSell) _swapContractToken(); //Calculates the exact token amount for each tax uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax); //staking and liquidity Tax get treated the same, only during conversion they get split uint256 contractToken=_calculateFee(amount, tax, _stakingTax+_liquidityTax); //Subtract the Taxed Tokens from the amount uint256 taxedAmount=amount-(tokensToBeBurnt + contractToken); //Removes token and handles staking _removeToken(sender,amount); //Adds the taxed tokens to the contract wallet _balances[address(this)] += contractToken; //Burns tokens _circulatingSupply-=tokensToBeBurnt; //Adds token and handles staking _addToken(recipient, taxedAmount); emit Transfer(sender,recipient,taxedAmount); } //Feeless transfer only transfers and autostakes function _feelessTransfer(address sender, address recipient, uint256 amount) private{ uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); //Removes token and handles staking _removeToken(sender,amount); //Adds token and handles staking _addToken(recipient, amount); emit Transfer(sender,recipient,amount); } //Calculates the token that should be taxed function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) { return (amount*tax*taxPercent) / 10000; } //ETH Autostake///////////////////////////////////////////////////////////////////////////////////////// //Autostake uses the balances of each holder to redistribute auto generated ETH. //Each transaction _addToken and _removeToken gets called for the transaction amount //WithdrawETH can be used for any holder to withdraw ETH at any time, like true Staking, //so unlike MRAT clones you can leave and forget your Token and claim after a while //lock for the withdraw bool private _isWithdrawing; //Multiplier to add some accuracy to profitPerShare uint256 private constant DistributionMultiplier = 2**64; //profit for each share a holder holds, a share equals a token. uint256 public profitPerShare; //the total reward distributed through staking, for tracking purposes uint256 public totalStakingReward; //the total payout through staking, for tracking purposes uint256 public totalPayouts; uint8 public marketingShare=100; //balance that is claimable by the team uint256 public marketingBalance; //Mapping of the already paid out(or missed) shares of each staker mapping(address => uint256) private alreadyPaidShares; //Mapping of shares that are reserved for payout mapping(address => uint256) private toBePaid; //Contract, uniswapv2 and burnAddress are excluded, other addresses like CEX //can be manually excluded, excluded list is limited to 30 entries to avoid a //out of gas exeption during sells function isExcludedFromStaking(address addr) public view returns (bool){ return _excludedFromStaking.contains(addr); } //Check if address is blacklisted function isBlacklisted(address addr) public view returns (bool){ return _isBlacklisted.contains(addr); } //Total shares equals circulating supply minus excluded Balances function _getTotalShares() public view returns (uint256){ uint256 shares=_circulatingSupply; //substracts all excluded from shares, excluded list is limited to 30 // to avoid creating a Honeypot through OutOfGas exeption for(uint i=0; i<_excludedFromStaking.length(); i++){ shares-=_balances[_excludedFromStaking.at(i)]; } return shares; } //adds Token to balances, adds new ETH to the toBePaid mapping and resets staking function _addToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]+amount; if(isExcludedFromStaking(addr)){ _balances[addr]=newAmount; return; } //gets the payout before the change uint256 payment=_newDividentsOf(addr); //resets dividents to 0 for newAmount alreadyPaidShares[addr] = profitPerShare * newAmount; //adds dividents to the toBePaid mapping toBePaid[addr]+=payment; //sets newBalance _balances[addr]=newAmount; } //removes Token, adds ETH to the toBePaid mapping and resets staking function _removeToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]-amount; if(isExcludedFromStaking(addr)){ _balances[addr]=newAmount; return; } //gets the payout before the change uint256 payment=_newDividentsOf(addr); //sets newBalance _balances[addr]=newAmount; //resets dividents to 0 for newAmount alreadyPaidShares[addr] = profitPerShare * newAmount; //adds dividents to the toBePaid mapping toBePaid[addr]+=payment; } //gets the not dividents of a staker that aren't in the toBePaid mapping //returns wrong value for excluded accounts function _newDividentsOf(address staker) private view returns (uint256) { uint256 fullPayout = profitPerShare * _balances[staker]; // if theres an overflow for some unexpected reason, return 0, instead of // an exeption to still make trades possible if(fullPayout<alreadyPaidShares[staker]) return 0; return (fullPayout - alreadyPaidShares[staker]) / DistributionMultiplier; } //distributes eth between marketing share and dividents function _distributeStake(uint256 ETHamount) private { // Deduct marketing Tax uint256 marketingSplit = (ETHamount * marketingShare) / 100; uint256 amount = ETHamount - marketingSplit; marketingBalance+=marketingSplit; if (amount > 0) { totalStakingReward += amount; uint256 totalShares=_getTotalShares(); //when there are 0 shares, add everything to marketing budget if (totalShares == 0) { marketingBalance += amount; }else{ //Increases profit per share based on current total shares profitPerShare += ((amount * DistributionMultiplier) / totalShares); } } } event OnWithdrawETH(uint256 amount, address recipient); //withdraws all dividents of address function claimETH(address addr) private{ require(!_isWithdrawing); _isWithdrawing=true; uint256 amount; if(isExcludedFromStaking(addr)){ //if excluded just withdraw remaining toBePaid ETH amount=toBePaid[addr]; toBePaid[addr]=0; } else{ uint256 newAmount=_newDividentsOf(addr); //sets payout mapping to current amount alreadyPaidShares[addr] = profitPerShare * _balances[addr]; //the amount to be paid amount=toBePaid[addr]+newAmount; toBePaid[addr]=0; } if(amount==0){//no withdraw if 0 amount _isWithdrawing=false; return; } totalPayouts+=amount; address[] memory path = new address[](2); path[0] = _uniswapv2Router.WETH(); //ETH path[1] = 0x4Fabb145d64652a948d72533023f6E7A623C7C53; //BUSD Rewards - Option to enable. _uniswapv2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, addr, block.timestamp); emit OnWithdrawETH(amount, addr); _isWithdrawing=false; } //Swap Contract Tokens////////////////////////////////////////////////////////////////////////////////// //tracks auto generated ETH, useful for ticker etc uint256 public totalLPETH; //Locks the swap if already swapping bool private _isSwappingContractModifier; modifier lockTheSwap { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } uint256 currentAmountToSwap = 400000 * 10**_decimals; // 400,000 tokens (0.4%) //swaps the token on the contract for Marketing ETH and LP Token. //always swaps the sellLimit of token to avoid a large price impact function _swapContractToken() private lockTheSwap{ uint256 contractBalance=_balances[address(this)]; uint16 totalTax=_liquidityTax+_stakingTax; uint256 tokenToSwap = currentAmountToSwap; //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0 if(contractBalance<tokenToSwap||totalTax==0){ return; } //splits the token in TokenForLiquidity and tokenForMarketing uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax; uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity; //splits tokenForLiquidity in 2 halves uint256 liqToken=tokenForLiquidity/2; uint256 liqETHToken=tokenForLiquidity-liqToken; //swaps marktetingToken and the liquidity token half for ETH uint256 swapToken=liqETHToken+tokenForMarketing; //Gets the initial ETH balance, so swap won't touch any staked ETH uint256 initialETHBalance = address(this).balance; _swapTokenForETH(swapToken); uint256 newETH=(address(this).balance - initialETHBalance); //calculates the amount of ETH belonging to the LP-Pair and converts them to LP uint256 liqETH = (newETH*liqETHToken)/swapToken; _addLiquidity(liqToken, liqETH); //Get the ETH balance after LP generation to get the //exact amount of token left for Staking uint256 distributeETH=(address(this).balance - initialETHBalance); //distributes remaining ETH between stakers and Marketing _distributeStake(distributeETH); } //swaps tokens on the contract for ETH function _swapTokenForETH(uint256 amount) private { _approve(address(this), address(_uniswapv2Router), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapv2Router.WETH(); _uniswapv2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } //Adds Liquidity directly to the contract where LP are locked(unlike safemoon forks, that transfer it to the owner) function _addLiquidity(uint256 tokenamount, uint256 ethamount) private { totalLPETH+=ethamount; _approve(address(this), address(_uniswapv2Router), tokenamount); _uniswapv2Router.addLiquidityETH{value: ethamount}( address(this), tokenamount, 0, 0, address(this), block.timestamp ); } //public functions ///////////////////////////////////////////////////////////////////////////////////// function getLiquidityReleaseTimeInSeconds() public view returns (uint256){ if(block.timestamp<_liquidityUnlockTime){ return _liquidityUnlockTime-block.timestamp; } return 0; } function getBurnedTokens() public view returns(uint256){ return (InitialSupply-_circulatingSupply)/10**_decimals; } function getLimits() public view returns(uint256 balance, uint256 sell){ return(balanceLimit/10**_decimals, sellLimit/10**_decimals); } function getTaxes() public view returns(uint256 burnTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){ return (_burnTax,_liquidityTax,_stakingTax,_buyTax,_sellTax,_transferTax); } //How long is a given address still locked from selling function getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){ uint256 lockTime=_sellLock[AddressToCheck]; if(lockTime<=block.timestamp) { return 0; } return lockTime-block.timestamp; } function getSellLockTimeInSeconds() public view returns(uint256){ return sellLockTime; } function getcurrentAmountToSwap() public view returns (uint256){ return currentAmountToSwap; } //How long is a given address still locked from buying function getAddressBuyLockTimeInSeconds(address AddressToCheck) public view returns (uint256){ uint256 lockTime=_buyLock[AddressToCheck]; if(lockTime<=block.timestamp) { return 0; } return lockTime-block.timestamp; } function getBuyLockTimeInSeconds() public view returns(uint256){ return buyLockTime; } //Functions every wallet can call //Resets sell lock of caller to the default sellLockTime should something go very wrong function AddressResetSellLock() public{ _sellLock[msg.sender]=block.timestamp+sellLockTime; } //Resets buy lock of caller to the default buyLockTime should something go very wrong function AddressResetBuyLock() public{ _buyLock[msg.sender]=block.timestamp+buyLockTime; } //withdraws dividents of sender function Rewards() public{ claimETH(msg.sender); } function getDividents(address addr) public view returns (uint256){ if(isExcludedFromStaking(addr)) return toBePaid[addr]; return _newDividentsOf(addr)+toBePaid[addr]; } //Settings////////////////////////////////////////////////////////////////////////////////////////////// bool public sellLockDisabled; uint256 public sellLockTime; bool public buyLockDisabled; uint256 public buyLockTime; bool public manualConversion; function CollectMarketingETH() public onlyOwner{ uint256 amount=marketingBalance; marketingBalance=0; payable(Development).transfer((amount*25) / 100); payable(Marketing).transfer((amount*75) / 100); } function TeamCollectXMarketingETH(uint256 amount) public onlyOwner{ require(amount<=marketingBalance); marketingBalance-=amount; payable(Development).transfer((amount*25) / 100); payable(Marketing).transfer((amount*75) / 100); } //switches autoLiquidity and marketing ETH generation during transfers function TeamSwitchManualETHConversion(bool manual) public onlyOwner{ manualConversion=manual; } function TeamChangeMaxBuy(uint256 newMaxBuy) public onlyOwner{ MaxBuy=newMaxBuy * 10**_decimals; } function TeamChangeDevelopment(address newDevelopment) public onlyOwner{ Development=payable(newDevelopment); } function TeamChangeMarketing(address newMarketing) public onlyOwner{ Marketing=payable(newMarketing); } //Disables the timeLock after selling for everyone function TeamDisableSellLock(bool disabled) public onlyOwner{ sellLockDisabled=disabled; } //Disables the timeLock after buying for everyone function TeamDisableBuyLock(bool disabled) public onlyOwner{ buyLockDisabled=disabled; } //Sets SellLockTime, needs to be lower than MaxSellLockTime function TeamSetSellLockTime(uint256 sellLockSeconds)public onlyOwner{ require(sellLockSeconds<=MaxSellLockTime,"Sell Lock time too high"); sellLockTime=sellLockSeconds; } //Sets BuyLockTime, needs to be lower than MaxBuyLockTime function TeamSetBuyLockTime(uint256 buyLockSeconds)public onlyOwner{ require(buyLockSeconds<=MaxBuyLockTime,"Buy Lock time too high"); buyLockTime=buyLockSeconds; } //Allows CA owner to change how much the contract sells to prevent massive contract sells as the token grows. function TeamUpdateAmountToSwap(uint256 newSwapAmount) public onlyOwner{ currentAmountToSwap = newSwapAmount; } //Allows wallet exclusion to be added after launch function AddWalletExclusion(address exclusionAdd) public onlyOwner{ _excluded.add(exclusionAdd); } //Sets Taxes function TeamSetTaxes(uint8 burnTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyOwner{ uint8 totalTax=burnTaxes+liquidityTaxes+stakingTaxes; require(totalTax==100, "burn+liq+marketing needs to equal 100%"); _burnTax=burnTaxes; _liquidityTax=liquidityTaxes; _stakingTax=stakingTaxes; _buyTax=buyTax; _sellTax=sellTax; _transferTax=transferTax; } //How much of the staking tax should be allocated for marketing function TeamChangeMarketingShare(uint8 newShare) public onlyOwner{ require(newShare<=100); marketingShare=newShare; } //manually converts contract token to LP and staking ETH function TeamCreateLPandETH() public onlyOwner{ _swapContractToken(); } //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot) function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) public onlyOwner{ //SellLimit needs to be below 1% to avoid a Large Price impact when generating auto LP require(newSellLimit<_circulatingSupply/100); //Adds decimals to limits newBalanceLimit=newBalanceLimit*10**_decimals; newSellLimit=newSellLimit*10**_decimals; //Calculates the target Limits based on supply uint256 targetBalanceLimit=_circulatingSupply/BalanceLimitDivider; uint256 targetSellLimit=_circulatingSupply/SellLimitDivider; require((newBalanceLimit>=targetBalanceLimit), "newBalanceLimit needs to be at least target"); require((newSellLimit>=targetSellLimit), "newSellLimit needs to be at least target"); balanceLimit = newBalanceLimit; sellLimit = newSellLimit; } //Adds address to blacklist and prevents sells, buys or transfers. function addAddressToBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.add(blacklistedAddress); } //Remove address from blacklist and allow sells, buys or transfers. function removeAddressFromBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.remove(blacklistedAddress); } //Setup Functions/////////////////////////////////////////////////////////////////////////////////////// bool public tradingEnabled; address private _liquidityTokenAddress; //Enables trading for everyone function SetupEnableTrading() public onlyOwner{ tradingEnabled=true; tradingEnabledAt=block.timestamp; } //Sets up the LP-Token Address required for LP Release function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyOwner{ _liquidityTokenAddress=liquidityTokenAddress; } //Liquidity Lock//////////////////////////////////////////////////////////////////////////////////////// //the timestamp when Liquidity unlocks uint256 private _liquidityUnlockTime; function TeamExtendLiquidityLock(uint256 secondsUntilUnlock) public onlyOwner{ _prolongLiquidityLock(secondsUntilUnlock+block.timestamp); } function _prolongLiquidityLock(uint256 newUnlockTime) private{ // require new unlock time to be longer than old one require(newUnlockTime>_liquidityUnlockTime); _liquidityUnlockTime=newUnlockTime; } //Release Liquidity Tokens once unlock time is over function REL() public onlyOwner { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IUniswapV2ERC20 liquidityToken = IUniswapV2ERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); //Liquidity release if something goes wrong at start liquidityToken.transfer(Development, amount); } //Removes Liquidity once unlock Time is over, function REM(bool addToStaking) public onlyOwner{ //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime; IUniswapV2ERC20 liquidityToken = IUniswapV2ERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); liquidityToken.approve(address(_uniswapv2Router),amount); //Removes Liquidity and either distributes liquidity ETH to stakers, or // adds them to marketing Balance //Token will be converted //to Liquidity and Staking ETH again uint256 initialETHBalance = address(this).balance; _uniswapv2Router.removeLiquidityETHSupportingFeeOnTransferTokens( address(this), amount, 0, 0, address(this), block.timestamp ); uint256 newETHBalance = address(this).balance-initialETHBalance; if(addToStaking){ _distributeStake(newETHBalance); } else{ marketingBalance+=newETHBalance; } } //Releases all remaining ETH on the contract wallet, so ETH wont be burned function TeamCollectRemainingETH() public onlyOwner{ require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime; (bool sent,) =Development.call{value: (address(this).balance)}(""); require(sent); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //external////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// receive() external payable {} fallback() external payable {} // IERC20 function getOwner() external view override returns (address) { return owner(); } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _circulatingSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } // IERC20 - Helpers function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"OnWithdrawETH","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"antiBotBan","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"exclusionAdd","type":"address"}],"name":"AddWalletExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddressResetBuyLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CollectMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Development","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxBuyLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"addToStaking","type":"bool"}],"name":"REM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Rewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopment","type":"address"}],"name":"TeamChangeDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketing","type":"address"}],"name":"TeamChangeMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"TeamChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"TeamChangeMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamCollectRemainingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamCollectXMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamCreateLPandETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableBuyLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"TeamExtendLiquidityLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLockSeconds","type":"uint256"}],"name":"TeamSetBuyLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"TeamSetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapAmount","type":"uint256"}],"name":"TeamUpdateAmountToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"blacklistedAddress","type":"address"}],"name":"addAddressToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBanTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAutoBlacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressBuyLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getDividents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getcurrentAmountToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"blacklistedAddress","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601e60105560006011556012805473d8a6fff50a144434aa2272c6f5f0ef3d58ddd03d6001600160a01b03199182168117909255601380549091169091179055620000526009600a6200060f565b62000062906305f5e10062000620565b601481905560158190556016556200007d6009600a6200060f565b6200008c90621e848062000620565b601755601d805460ff19166064179055620000aa6009600a6200060f565b620000b99062061a8062000620565b602355348015620000c957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601454336000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd919062000642565b6001600160a01b031663c9c6539630601960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000266919062000642565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000642565b601880546001600160a01b0392909216660100000000000002600160301b600160d01b03199092169190911790556032620003186009600a6200060f565b62000328906305f5e10062000620565b62000334919062000674565b6015556064620003476009600a6200060f565b62000357906305f5e10062000620565b62000363919062000674565b601655600060258190556027556018805465ffffffffffff1916655a0a00000202179055601254620003ad906005906001600160a01b03166200048a602090811b6200209c17901c565b50601354620003d4906005906001600160a01b03166200048a602090811b6200209c17901c565b50620003f03360056200048a60201b6200209c1790919060201c565b506019546200041790600b906001600160a01b03166200048a602090811b6200209c17901c565b5062000448601860069054906101000a90046001600160a01b0316600b6200048a60201b6200209c1790919060201c565b506200046430600b6200048a60201b6200209c1790919060201c565b506200048261dead600b6200048a60201b6200209c1790919060201c565b505062000697565b6000620004a1836001600160a01b038416620004aa565b90505b92915050565b6000818152600183016020526040812054620004f357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004a4565b506000620004a4565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000553578160001904821115620005375762000537620004fc565b808516156200054557918102915b93841c939080029062000517565b509250929050565b6000826200056c57506001620004a4565b816200057b57506000620004a4565b81600181146200059457600281146200059f57620005bf565b6001915050620004a4565b60ff841115620005b357620005b3620004fc565b50506001821b620004a4565b5060208310610133831016604e8410600b8410161715620005e4575081810a620004a4565b620005f0838362000512565b8060001904821115620006075762000607620004fc565b029392505050565b6000620004a160ff8416836200055b565b60008160001904831182151516156200063d576200063d620004fc565b500290565b6000602082840312156200065557600080fd5b81516001600160a01b03811681146200066d57600080fd5b9392505050565b6000826200069257634e487b7160e01b600052601260045260246000fd5b500490565b613dc180620006a76000396000f3fe6080604052600436106104315760003560e01c80637335307b11610227578063b766a3861161012d578063e68f136a116100b0578063f2c816ae11610077578063f2c816ae14610cee578063f2fde38b14610d0e578063f88b0e4614610d2e578063fe002ec214610d44578063fe575a8714610d5957005b8063e68f136a14610c63578063e69e03ee14610c83578063e803050c14610c98578063ebddcc1d14610cb8578063f00df36514610cd857005b8063d11edf74116100f4578063d11edf7414610b9d578063d51f383b14610bbd578063db886f2314610bdd578063dd62ed3e14610bfd578063e2fd002a14610c4357005b8063b766a38614610b1e578063c280895414610b3e578063c3a3c03214610b53578063c3f4f54f14610b68578063cd979a7e14610b7d57005b8063893d20e8116101b55780639bf657701161017c5780639bf6577014610a7e5780639fa62d5f14610a9e578063a457c2d714610abe578063a9059cbb14610ade578063b58a56cd14610afe57005b8063893d20e8146109ca5780638da5cb5b146109fc57806394e8075d14610a1a57806395d89b4114610a3a578063998a866814610a6957005b8063828e8b7e116101f9578063828e8b7e1461094b5780638650e92a1461096057806386d0ada8146109765780638728ecd114610990578063887c60fb146109b057005b80637335307b146108e057806373ddf08e14610900578063762bb282146109205780637b9e987a1461093657005b806335e82f3a1161033757806357ad67d1116102ba578063643daaea11610281578063643daaea1461082b5780636ea4caab1461084b5780636f89e4091461086b57806370a0823114610895578063715018a6146108cb57005b806357ad67d1146107cb57806358e55365146107eb5780635b80f625146108015780635c69f690146106b45780635ebbc3ca1461081657005b806344f3c83a116102fe57806344f3c83a1461074b57806348e53164146107615780634ada218b146107765780634cdaf0ae146107955780634f91e48c146107b557005b806335e82f3a146106c957806339509351146106e95780633cc39b7a146107095780633da56f181461071f5780634089b1701461073557005b80631eb25d13116103bf5780633054f8a3116103865780633054f8a314610651578063311a86971461066b578063313ce5671461068057806332ac487f146106945780633478154b146106b457005b80631eb25d131461058857806323b872dd1461059d578063243b529a146105bd578063269a6aae146105d25780632973ef2d146105e857005b80630fd99e16116104035780630fd99e16146104f75780631285073c1461051f57806314ddc0951461053e57806314e913771461055357806318160ddd1461057357005b80630241047b1461043a57806306fdde031461045a57806309218ee71461049b578063095ea7b3146104c757005b3661043857005b005b34801561044657600080fd5b506104386104553660046137a0565b610d79565b34801561046657600080fd5b50604080518082019091526006815265446f6e52797560d01b60208201525b60405161049291906137b9565b60405180910390f35b3480156104a757600080fd5b50601d546104b59060ff1681565b60405160ff9091168152602001610492565b3480156104d357600080fd5b506104e76104e2366004613823565b610e82565b6040519015158152602001610492565b34801561050357600080fd5b5061050c606481565b60405161ffff9091168152602001610492565b34801561052b57600080fd5b506025545b604051908152602001610492565b34801561054a57600080fd5b50602754610530565b34801561055f57600080fd5b5061043861056e36600461385d565b610e99565b34801561057f57600080fd5b50601454610530565b34801561059457600080fd5b50610530610ee5565b3480156105a957600080fd5b506104e76105b836600461387a565b610f02565b3480156105c957600080fd5b50610438610f99565b3480156105de57600080fd5b5061053060105481565b3480156105f457600080fd5b506018546040805160ff6301000000840481168252640100000000840481166020830152600160281b84048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c001610492565b34801561065d57600080fd5b506026546104e79060ff1681565b34801561067757600080fd5b506104b5603281565b34801561068c57600080fd5b5060096104b5565b3480156106a057600080fd5b506105306106af3660046138bb565b610fdc565b3480156106c057600080fd5b5061050c600081565b3480156106d557600080fd5b506104386106e43660046138bb565b611032565b3480156106f557600080fd5b506104e7610704366004613823565b611076565b34801561071557600080fd5b5061053060215481565b34801561072b57600080fd5b5061053060115481565b34801561074157600080fd5b50610530601c5481565b34801561075757600080fd5b5061053060275481565b34801561076d57600080fd5b506104386110ad565b34801561078257600080fd5b506028546104e790610100900460ff1681565b3480156107a157600080fd5b506104386107b03660046138bb565b6110cc565b3480156107c157600080fd5b5061053060165481565b3480156107d757600080fd5b506104386107e63660046138ee565b61112f565b3480156107f757600080fd5b50610530601e5481565b34801561080d57600080fd5b50602354610530565b34801561082257600080fd5b50610438611262565b34801561083757600080fd5b506104386108463660046137a0565b61132f565b34801561085757600080fd5b506104386108663660046137a0565b61137a565b34801561087757600080fd5b506108806113cf565b60408051928352602083019190915201610492565b3480156108a157600080fd5b506105306108b03660046138bb565b6001600160a01b031660009081526001602052604090205490565b3480156108d757600080fd5b5061043861140c565b3480156108ec57600080fd5b506104e76108fb3660046138bb565b61148f565b34801561090c57600080fd5b5061043861091b366004613962565b61149c565b34801561092c57600080fd5b5061053060155481565b34801561094257600080fd5b506104386114fc565b34801561095757600080fd5b5061043861154a565b34801561096c57600080fd5b50610530601a5481565b34801561098257600080fd5b506028546104e79060ff1681565b34801561099c57600080fd5b506105306109ab3660046138bb565b611569565b3480156109bc57600080fd5b506024546104e79060ff1681565b3480156109d657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610492565b348015610a0857600080fd5b506000546001600160a01b03166109e4565b348015610a2657600080fd5b506012546109e4906001600160a01b031681565b348015610a4657600080fd5b50604080518082019091526006815265446f6e72797560d01b6020820152610485565b348015610a7557600080fd5b506104386115a8565b348015610a8a57600080fd5b50610438610a9936600461385d565b6116f7565b348015610aaa57600080fd5b50610438610ab936600461397d565b611743565b348015610aca57600080fd5b506104e7610ad9366004613823565b6118c5565b348015610aea57600080fd5b506104e7610af9366004613823565b611941565b348015610b0a57600080fd5b50610438610b193660046138bb565b61194e565b348015610b2a57600080fd5b50610438610b3936600461385d565b6119a9565b348015610b4a57600080fd5b506104386119f5565b348015610b5f57600080fd5b506105306119fe565b348015610b7457600080fd5b50610530611a1e565b348015610b8957600080fd5b50610438610b983660046138bb565b611a5d565b348015610ba957600080fd5b50610438610bb83660046137a0565b611aa1565b348015610bc957600080fd5b50610438610bd83660046137a0565b611adf565b348015610be957600080fd5b506013546109e4906001600160a01b031681565b348015610c0957600080fd5b50610530610c1836600461399f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c4f57600080fd5b50610438610c5e3660046137a0565b611b6b565b348015610c6f57600080fd5b50610438610c7e3660046138bb565b611bf0565b348015610c8f57600080fd5b50610530611c4b565b348015610ca457600080fd5b50610530610cb33660046138bb565b611cb1565b348015610cc457600080fd5b50610438610cd336600461385d565b611cda565b348015610ce457600080fd5b50610530601b5481565b348015610cfa57600080fd5b50610438610d093660046138bb565b611ef4565b348015610d1a57600080fd5b50610438610d293660046138bb565b611f38565b348015610d3a57600080fd5b5061053060255481565b348015610d5057600080fd5b50610438612031565b348015610d6557600080fd5b506104e7610d743660046138bb565b61208f565b33610d8c6000546001600160a01b031690565b6001600160a01b031614610dbb5760405162461bcd60e51b8152600401610db2906139d8565b60405180910390fd5b601e54811115610dca57600080fd5b80601e6000828254610ddc9190613a23565b90915550506012546001600160a01b03166108fc6064610dfd846019613a3a565b610e079190613a59565b6040518115909202916000818181858888f19350505050158015610e2f573d6000803e3d6000fd5b506013546001600160a01b03166108fc6064610e4c84604b613a3a565b610e569190613a59565b6040518115909202916000818181858888f19350505050158015610e7e573d6000803e3d6000fd5b5050565b6000610e8f3384846120b1565b5060015b92915050565b33610eac6000546001600160a01b031690565b6001600160a01b031614610ed25760405162461bcd60e51b8152600401610db2906139d8565b6024805460ff1916911515919091179055565b610ef16009600a613b5f565b610eff906305f5e100613a3a565b81565b6000610f0f8484846121a4565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610f7a5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610db2565b610f8e8533610f898685613a23565b6120b1565b506001949350505050565b33610fac6000546001600160a01b031690565b6001600160a01b031614610fd25760405162461bcd60e51b8152600401610db2906139d8565b610fda612401565b565b6000610fe78261148f565b1561100757506001600160a01b0316600090815260208052604090205490565b6001600160a01b038216600090815260208052604090205461102883612541565b610e939190613b6e565b336110456000546001600160a01b031690565b6001600160a01b03161461106b5760405162461bcd60e51b8152600401610db2906139d8565b610e7e600d826125c7565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e8f918590610f89908690613b6e565b6025546110ba9042613b6e565b33600090815260036020526040902055565b336110df6000546001600160a01b031690565b6001600160a01b0316146111055760405162461bcd60e51b8152600401610db2906139d8565b602880546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336111426000546001600160a01b031690565b6001600160a01b0316146111685760405162461bcd60e51b8152600401610db2906139d8565b6000846111758789613b86565b61117f9190613b86565b90508060ff166064146111e35760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610db2565b506018805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b029790971665ff000000ffff199885166401000000000264ff00000000199a86166301000000029a909a1664ffff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b336112756000546001600160a01b031690565b6001600160a01b03161461129b5760405162461bcd60e51b8152600401610db2906139d8565b6029544210156112bd5760405162461bcd60e51b8152600401610db290613bab565b6112c961070842613b6e565b6029556012546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b505090508061132c57600080fd5b50565b336113426000546001600160a01b031690565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610db2906139d8565b61132c6113754283613b6e565b6125dc565b3361138d6000546001600160a01b031690565b6001600160a01b0316146113b35760405162461bcd60e51b8152600401610db2906139d8565b6113bf6009600a613b5f565b6113c99082613a3a565b60175550565b6000806113de6009600a613b5f565b6015546113eb9190613a59565b6113f76009600a613b5f565b6016546114049190613a59565b915091509091565b3361141f6000546001600160a01b031690565b6001600160a01b0316146114455760405162461bcd60e51b8152600401610db2906139d8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e93600b836125ef565b336114af6000546001600160a01b031690565b6001600160a01b0316146114d55760405162461bcd60e51b8152600401610db2906139d8565b60648160ff1611156114e657600080fd5b601d805460ff191660ff92909216919091179055565b3361150f6000546001600160a01b031690565b6001600160a01b0316146115355760405162461bcd60e51b8152600401610db2906139d8565b6028805461ff00191661010017905542600f55565b6027546115579042613b6e565b33600090815260046020526040902055565b6001600160a01b0381166000908152600360205260408120544281116115925750600092915050565b61159c4282613a23565b9392505050565b905090565b336115bb6000546001600160a01b031690565b6001600160a01b0316146115e15760405162461bcd60e51b8152600401610db2906139d8565b6029544210156116035760405162461bcd60e51b8152600401610db290613bab565b6028546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015611655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116799190613bd5565b60125460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156116ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190613bee565b505050565b3361170a6000546001600160a01b031690565b6001600160a01b0316146117305760405162461bcd60e51b8152600401610db2906139d8565b6028805460ff1916911515919091179055565b336117566000546001600160a01b031690565b6001600160a01b03161461177c5760405162461bcd60e51b8152600401610db2906139d8565b606460145461178b9190613a59565b811061179657600080fd5b6117a26009600a613b5f565b6117ac9083613a3a565b91506117ba6009600a613b5f565b6117c49082613a3a565b90506000603260ff166014546117da9190613a59565b90506000606461ffff166014546117f19190613a59565b9050818410156118575760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610db2565b808310156118b85760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610db2565b5050601591909155601655565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156119285760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610db2565b6119373385610f898685613a23565b5060019392505050565b6000610e8f3384846121a4565b336119616000546001600160a01b031690565b6001600160a01b0316146119875760405162461bcd60e51b8152600401610db2906139d8565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b336119bc6000546001600160a01b031690565b6001600160a01b0316146119e25760405162461bcd60e51b8152600401610db2906139d8565b6026805460ff1916911515919091179055565b610fda33612611565b6000602954421015611a1857426029546115a39190613a23565b50600090565b6000611a2c6009600a613b5f565b601454611a3b6009600a613b5f565b611a49906305f5e100613a3a565b611a539190613a23565b6115a39190613a59565b33611a706000546001600160a01b031690565b6001600160a01b031614611a965760405162461bcd60e51b8152600401610db2906139d8565b610e7e60058261209c565b33611ab46000546001600160a01b031690565b6001600160a01b031614611ada5760405162461bcd60e51b8152600401610db2906139d8565b602355565b33611af26000546001600160a01b031690565b6001600160a01b031614611b185760405162461bcd60e51b8152600401610db2906139d8565b8015611b665760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610db2565b602555565b33611b7e6000546001600160a01b031690565b6001600160a01b031614611ba45760405162461bcd60e51b8152600401610db2906139d8565b8015611beb5760405162461bcd60e51b8152602060048201526016602482015275084eaf24098dec6d640e8d2daca40e8dede40d0d2ced60531b6044820152606401610db2565b602755565b33611c036000546001600160a01b031690565b6001600160a01b031614611c295760405162461bcd60e51b8152600401610db2906139d8565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601454600090815b611c5d600b6128d5565b811015611cab5760016000611c73600b846128df565b6001600160a01b03168152602081019190915260400160002054611c979083613a23565b915080611ca381613c0b565b915050611c53565b50919050565b6001600160a01b0381166000908152600460205260408120544281116115925750600092915050565b33611ced6000546001600160a01b031690565b6001600160a01b031614611d135760405162461bcd60e51b8152600401610db2906139d8565b602954421015611d355760405162461bcd60e51b8152600401610db290613bab565b611d4161070842613b6e565b6029556028546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba9190613bd5565b60195460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af1158015611e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e339190613bee565b5060195460405163af2979eb60e01b815247916001600160a01b03169063af2979eb90611e6f9030908690600090819084904290600401613c24565b6020604051808303816000875af1158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190613bd5565b506000611ebf8247613a23565b90508415611ed557611ed0816128eb565b611eed565b80601e6000828254611ee79190613b6e565b90915550505b5050505050565b33611f076000546001600160a01b031690565b6001600160a01b031614611f2d5760405162461bcd60e51b8152600401610db2906139d8565b610e7e600d8261209c565b33611f4b6000546001600160a01b031690565b6001600160a01b031614611f715760405162461bcd60e51b8152600401610db2906139d8565b6001600160a01b038116611fd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610db2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336120446000546001600160a01b031690565b6001600160a01b03161461206a5760405162461bcd60e51b8152600401610db2906139d8565b601e805460009091556012546001600160a01b03166108fc6064610dfd846019613a3a565b6000610e93600d836125ef565b600061159c836001600160a01b0384166129b7565b6001600160a01b0383166120fb5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610db2565b6001600160a01b0382166121435760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610db2565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121ef5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610db2565b6001600160a01b0382166122385760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610db2565b60006122456005856125ef565b8061225657506122566005846125ef565b905060006001600160a01b03851630148061227957506001600160a01b03841630145b6019546018549192506001600160a01b0390811691600091888116600160301b909204161480156122bb5750816001600160a01b0316866001600160a01b0316145b806122f657506018546001600160a01b03878116600160301b909204161480156122f65750816001600160a01b0316876001600160a01b0316145b6018549091506000906001600160a01b03898116600160301b9092041614806123305750826001600160a01b0316886001600160a01b0316145b6018549091506000906001600160a01b03898116600160301b90920416148061236a5750836001600160a01b0316886001600160a01b0316145b905084806123755750825b8061237d5750855b156123925761238d898989612a06565b6123f6565b602854610100900460ff166123e95760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610db2565b6123f68989898585612ad1565b505050505050505050565b6022805460ff19166001908117909155306000908152602091909152604081205460185490919061244790600160281b810460ff90811691640100000000900416613b86565b60ff1690506000602354905080831080612463575061ffff8216155b1561247057505050612535565b60185460009061ffff84169061249190640100000000900460ff1684613a3a565b61249b9190613a59565b905060006124a98284613a23565b905060006124b8600284613a59565b905060006124c68285613a23565b905060006124d48483613b6e565b9050476124e082613269565b60006124ec8247613a23565b90506000836124fb8684613a3a565b6125059190613a59565b905061251186826133c2565b600061251d8447613a23565b9050612528816128eb565b5050505050505050505050505b6022805460ff19169055565b6001600160a01b038116600090815260016020526040812054601a54829161256891613a3a565b6001600160a01b0384166000908152601f60205260409020549091508110156125945750600092915050565b6001600160a01b0383166000908152601f6020526040902054600160401b906125bd9083613a23565b61159c9190613a59565b600061159c836001600160a01b038416613471565b60295481116125ea57600080fd5b602955565b6001600160a01b0381166000908152600183016020526040812054151561159c565b601954600160a01b900460ff161561262857600080fd5b6019805460ff60a01b1916600160a01b17905560006126468261148f565b1561266d57506001600160a01b0381166000908152602080526040812080549190556126ea565b600061267883612541565b6001600160a01b038416600090815260016020526040902054601a549192506126a091613a3a565b6001600160a01b0384166000908152601f6020908152604080832093909355805220546126ce908290613b6e565b6001600160a01b03841660009081526020805260408120559150505b806000036127035750506019805460ff60a01b19169055565b80601c60008282546127159190613b6e565b90915550506040805160028082526060820183526000926020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613c5f565b816000815181106127bb576127bb613c7c565b60200260200101906001600160a01b031690816001600160a01b031681525050734fabb145d64652a948d72533023f6e7a623c7c538160018151811061280357612803613c7c565b6001600160a01b03928316602091820292909201015260195460405163b6f9de9560e01b815291169063b6f9de9590849061284990600090869089904290600401613cd6565b6000604051808303818588803b15801561286257600080fd5b505af1158015612876573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f80a489adad6e8e00b344a3e9042e6aff0ae286ce1376918078a67bbce8b905b394500191506128bb9050565b60405180910390a150506019805460ff60a01b1916905550565b6000610e93825490565b600061159c838361355e565b601d546000906064906129019060ff1684613a3a565b61290b9190613a59565b905060006129198284613a23565b905081601e600082825461292d9190613b6e565b909155505080156116f25780601b600082825461294a9190613b6e565b909155506000905061295a611c4b565b9050806000036129815781601e60008282546129769190613b6e565b909155506129b19050565b80612990600160401b84613a3a565b61299a9190613a59565b601a60008282546129ab9190613b6e565b90915550505b50505050565b60008181526001830160205260408120546129fe57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e93565b506000610e93565b6001600160a01b03831660009081526001602052604090205481811015612a6a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610db2565b612a7484836135e4565b612a7e83836136a3565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ac391815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612b3f5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610db2565b60008315612cf257612b526007896125ef565b612be7576001600160a01b03881660009081526003602052604090205442101580612b7f575060245460ff165b612bc05760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610db2565b602554612bcd9042613b6e565b6001600160a01b0389166000908152600360205260409020555b601654861115612c2b5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610db2565b612c36600d896125ef565b15612c7a5760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610db2565b601054600f54612c8a9190613b6e565b4211158015612c9b57506011546001145b15612ce157612cab600d8961209c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b50601854610100900460ff16613106565b8415612f0357612d036009886125ef565b612d96576001600160a01b03871660009081526004602052604090205442101580612d30575060265460ff165b612d6f5760405162461bcd60e51b815260206004820152601060248201526f427579657220696e206275794c6f636b60801b6044820152606401610db2565b602754612d7c9042613b6e565b6001600160a01b0388166000908152600460205260409020555b601554612da38785613b6e565b1115612de45760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610db2565b601754861115612e415760405162461bcd60e51b815260206004820152602260248201527f547820616d6f756e7420657863656564696e67206d61782062757920616d6f756044820152611b9d60f21b6064820152608401610db2565b612e4c600d886125ef565b15612e905760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610db2565b601054600f54612ea09190613b6e565b4211158015612eb157506011546001145b15612ef757612ec1600d8861209c565b506040516001600160a01b038816907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060185460ff16613106565b612f0f6009600a613b5f565b8611612f1e57612f1e88612611565b601554612f2b8785613b6e565b1115612f6c5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610db2565b612f776007896125ef565b612fe1576001600160a01b03881660009081526003602052604090205442101580612fa4575060245460ff165b612fe15760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610db2565b612fec600d896125ef565b156130395760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206164647265737320626c61636b6c69737465642100000000006044820152606401610db2565b613044600d886125ef565b156130915760405162461bcd60e51b815260206004820152601e60248201527f526563697069656e74206164647265737320626c61636b6c69737465642100006044820152606401610db2565b601054600f546130a19190613b6e565b42111580156130b257506011546001145b156130f8576130c2600d8961209c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060185462010000900460ff165b6018546001600160a01b03898116600160301b909204161480159061312e575060285460ff16155b801561313d575060225460ff16155b80156131465750835b1561315357613153612401565b600061316f8783601860039054906101000a900460ff1661376c565b6018549091506000906131a3908990859061319e9060ff6401000000008204811691600160281b900416613b86565b61376c565b905060006131b18284613b6e565b6131bb908a613a23565b90506131c78b8a6135e4565b30600090815260016020526040812080548492906131e6908490613b6e565b9250508190555082601460008282546131ff9190613a23565b9091555061320f90508a826136a3565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325491815260200190565b60405180910390a35050505050505050505050565b6019546132819030906001600160a01b0316836120b1565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132b6576132b6613c7c565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561330f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133339190613c5f565b8160018151811061334657613346613c7c565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac9479061338c908590600090869030904290600401613d0b565b600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b505050505050565b80602160008282546133d49190613b6e565b90915550506019546133f19030906001600160a01b0316846120b1565b60195460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061342e9030908790600090819084904290600401613c24565b60606040518083038185885af115801561344c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611eed9190613d47565b60008181526001830160205260408120548015613554576000613495600183613a23565b85549091506000906134a990600190613a23565b905060008660000182815481106134c2576134c2613c7c565b90600052602060002001549050808760000184815481106134e5576134e5613c7c565b60009182526020808320909101929092558281526001890190915260409020849055865487908061351857613518613d75565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610e93565b6000915050610e93565b815460009082106135bc5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610db2565b8260000182815481106135d1576135d1613c7c565b9060005260206000200154905092915050565b6001600160a01b038216600090815260016020526040812054613608908390613a23565b90506136138361148f565b15613638576001600160a01b0390921660009081526001602052604090209190915550565b600061364384612541565b6001600160a01b0385166000908152600160205260409020839055601a5490915061366f908390613a3a565b6001600160a01b0385166000908152601f6020908152604080832093909355805290812080548392906129ab908490613b6e565b6001600160a01b0382166000908152600160205260408120546136c7908390613b6e565b90506136d28361148f565b156136f7576001600160a01b0390921660009081526001602052604090209190915550565b600061370284612541565b905081601a546137129190613a3a565b6001600160a01b0385166000908152601f602090815260408083209390935580529081208054839290613746908490613b6e565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006127108260ff168460ff16866137849190613a3a565b61378e9190613a3a565b6137989190613a59565b949350505050565b6000602082840312156137b257600080fd5b5035919050565b600060208083528351808285015260005b818110156137e6578581018301518582016040015282016137ca565b818111156137f8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461132c57600080fd5b6000806040838503121561383657600080fd5b82356138418161380e565b946020939093013593505050565b801515811461132c57600080fd5b60006020828403121561386f57600080fd5b813561159c8161384f565b60008060006060848603121561388f57600080fd5b833561389a8161380e565b925060208401356138aa8161380e565b929592945050506040919091013590565b6000602082840312156138cd57600080fd5b813561159c8161380e565b803560ff811681146138e957600080fd5b919050565b60008060008060008060c0878903121561390757600080fd5b613910876138d8565b955061391e602088016138d8565b945061392c604088016138d8565b935061393a606088016138d8565b9250613948608088016138d8565b915061395660a088016138d8565b90509295509295509295565b60006020828403121561397457600080fd5b61159c826138d8565b6000806040838503121561399057600080fd5b50508035926020909101359150565b600080604083850312156139b257600080fd5b82356139bd8161380e565b915060208301356139cd8161380e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613a3557613a35613a0d565b500390565b6000816000190483118215151615613a5457613a54613a0d565b500290565b600082613a7657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613ab6578160001904821115613a9c57613a9c613a0d565b80851615613aa957918102915b93841c9390800290613a80565b509250929050565b600082613acd57506001610e93565b81613ada57506000610e93565b8160018114613af05760028114613afa57613b16565b6001915050610e93565b60ff841115613b0b57613b0b613a0d565b50506001821b610e93565b5060208310610133831016604e8410600b8410161715613b39575081810a610e93565b613b438383613a7b565b8060001904821115613b5757613b57613a0d565b029392505050565b600061159c60ff841683613abe565b60008219821115613b8157613b81613a0d565b500190565b600060ff821660ff84168060ff03821115613ba357613ba3613a0d565b019392505050565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b600060208284031215613be757600080fd5b5051919050565b600060208284031215613c0057600080fd5b815161159c8161384f565b600060018201613c1d57613c1d613a0d565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208284031215613c7157600080fd5b815161159c8161380e565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613ccb5781516001600160a01b031687529582019590820190600101613ca6565b509495945050505050565b848152608060208201526000613cef6080830186613c92565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000613d2a60a0830186613c92565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613d5c57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204a62c682533e52fa592a62972613cdae39ae0a71490b0d43a732bbe3f23d070f64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106104315760003560e01c80637335307b11610227578063b766a3861161012d578063e68f136a116100b0578063f2c816ae11610077578063f2c816ae14610cee578063f2fde38b14610d0e578063f88b0e4614610d2e578063fe002ec214610d44578063fe575a8714610d5957005b8063e68f136a14610c63578063e69e03ee14610c83578063e803050c14610c98578063ebddcc1d14610cb8578063f00df36514610cd857005b8063d11edf74116100f4578063d11edf7414610b9d578063d51f383b14610bbd578063db886f2314610bdd578063dd62ed3e14610bfd578063e2fd002a14610c4357005b8063b766a38614610b1e578063c280895414610b3e578063c3a3c03214610b53578063c3f4f54f14610b68578063cd979a7e14610b7d57005b8063893d20e8116101b55780639bf657701161017c5780639bf6577014610a7e5780639fa62d5f14610a9e578063a457c2d714610abe578063a9059cbb14610ade578063b58a56cd14610afe57005b8063893d20e8146109ca5780638da5cb5b146109fc57806394e8075d14610a1a57806395d89b4114610a3a578063998a866814610a6957005b8063828e8b7e116101f9578063828e8b7e1461094b5780638650e92a1461096057806386d0ada8146109765780638728ecd114610990578063887c60fb146109b057005b80637335307b146108e057806373ddf08e14610900578063762bb282146109205780637b9e987a1461093657005b806335e82f3a1161033757806357ad67d1116102ba578063643daaea11610281578063643daaea1461082b5780636ea4caab1461084b5780636f89e4091461086b57806370a0823114610895578063715018a6146108cb57005b806357ad67d1146107cb57806358e55365146107eb5780635b80f625146108015780635c69f690146106b45780635ebbc3ca1461081657005b806344f3c83a116102fe57806344f3c83a1461074b57806348e53164146107615780634ada218b146107765780634cdaf0ae146107955780634f91e48c146107b557005b806335e82f3a146106c957806339509351146106e95780633cc39b7a146107095780633da56f181461071f5780634089b1701461073557005b80631eb25d13116103bf5780633054f8a3116103865780633054f8a314610651578063311a86971461066b578063313ce5671461068057806332ac487f146106945780633478154b146106b457005b80631eb25d131461058857806323b872dd1461059d578063243b529a146105bd578063269a6aae146105d25780632973ef2d146105e857005b80630fd99e16116104035780630fd99e16146104f75780631285073c1461051f57806314ddc0951461053e57806314e913771461055357806318160ddd1461057357005b80630241047b1461043a57806306fdde031461045a57806309218ee71461049b578063095ea7b3146104c757005b3661043857005b005b34801561044657600080fd5b506104386104553660046137a0565b610d79565b34801561046657600080fd5b50604080518082019091526006815265446f6e52797560d01b60208201525b60405161049291906137b9565b60405180910390f35b3480156104a757600080fd5b50601d546104b59060ff1681565b60405160ff9091168152602001610492565b3480156104d357600080fd5b506104e76104e2366004613823565b610e82565b6040519015158152602001610492565b34801561050357600080fd5b5061050c606481565b60405161ffff9091168152602001610492565b34801561052b57600080fd5b506025545b604051908152602001610492565b34801561054a57600080fd5b50602754610530565b34801561055f57600080fd5b5061043861056e36600461385d565b610e99565b34801561057f57600080fd5b50601454610530565b34801561059457600080fd5b50610530610ee5565b3480156105a957600080fd5b506104e76105b836600461387a565b610f02565b3480156105c957600080fd5b50610438610f99565b3480156105de57600080fd5b5061053060105481565b3480156105f457600080fd5b506018546040805160ff6301000000840481168252640100000000840481166020830152600160281b84048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c001610492565b34801561065d57600080fd5b506026546104e79060ff1681565b34801561067757600080fd5b506104b5603281565b34801561068c57600080fd5b5060096104b5565b3480156106a057600080fd5b506105306106af3660046138bb565b610fdc565b3480156106c057600080fd5b5061050c600081565b3480156106d557600080fd5b506104386106e43660046138bb565b611032565b3480156106f557600080fd5b506104e7610704366004613823565b611076565b34801561071557600080fd5b5061053060215481565b34801561072b57600080fd5b5061053060115481565b34801561074157600080fd5b50610530601c5481565b34801561075757600080fd5b5061053060275481565b34801561076d57600080fd5b506104386110ad565b34801561078257600080fd5b506028546104e790610100900460ff1681565b3480156107a157600080fd5b506104386107b03660046138bb565b6110cc565b3480156107c157600080fd5b5061053060165481565b3480156107d757600080fd5b506104386107e63660046138ee565b61112f565b3480156107f757600080fd5b50610530601e5481565b34801561080d57600080fd5b50602354610530565b34801561082257600080fd5b50610438611262565b34801561083757600080fd5b506104386108463660046137a0565b61132f565b34801561085757600080fd5b506104386108663660046137a0565b61137a565b34801561087757600080fd5b506108806113cf565b60408051928352602083019190915201610492565b3480156108a157600080fd5b506105306108b03660046138bb565b6001600160a01b031660009081526001602052604090205490565b3480156108d757600080fd5b5061043861140c565b3480156108ec57600080fd5b506104e76108fb3660046138bb565b61148f565b34801561090c57600080fd5b5061043861091b366004613962565b61149c565b34801561092c57600080fd5b5061053060155481565b34801561094257600080fd5b506104386114fc565b34801561095757600080fd5b5061043861154a565b34801561096c57600080fd5b50610530601a5481565b34801561098257600080fd5b506028546104e79060ff1681565b34801561099c57600080fd5b506105306109ab3660046138bb565b611569565b3480156109bc57600080fd5b506024546104e79060ff1681565b3480156109d657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610492565b348015610a0857600080fd5b506000546001600160a01b03166109e4565b348015610a2657600080fd5b506012546109e4906001600160a01b031681565b348015610a4657600080fd5b50604080518082019091526006815265446f6e72797560d01b6020820152610485565b348015610a7557600080fd5b506104386115a8565b348015610a8a57600080fd5b50610438610a9936600461385d565b6116f7565b348015610aaa57600080fd5b50610438610ab936600461397d565b611743565b348015610aca57600080fd5b506104e7610ad9366004613823565b6118c5565b348015610aea57600080fd5b506104e7610af9366004613823565b611941565b348015610b0a57600080fd5b50610438610b193660046138bb565b61194e565b348015610b2a57600080fd5b50610438610b3936600461385d565b6119a9565b348015610b4a57600080fd5b506104386119f5565b348015610b5f57600080fd5b506105306119fe565b348015610b7457600080fd5b50610530611a1e565b348015610b8957600080fd5b50610438610b983660046138bb565b611a5d565b348015610ba957600080fd5b50610438610bb83660046137a0565b611aa1565b348015610bc957600080fd5b50610438610bd83660046137a0565b611adf565b348015610be957600080fd5b506013546109e4906001600160a01b031681565b348015610c0957600080fd5b50610530610c1836600461399f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610c4f57600080fd5b50610438610c5e3660046137a0565b611b6b565b348015610c6f57600080fd5b50610438610c7e3660046138bb565b611bf0565b348015610c8f57600080fd5b50610530611c4b565b348015610ca457600080fd5b50610530610cb33660046138bb565b611cb1565b348015610cc457600080fd5b50610438610cd336600461385d565b611cda565b348015610ce457600080fd5b50610530601b5481565b348015610cfa57600080fd5b50610438610d093660046138bb565b611ef4565b348015610d1a57600080fd5b50610438610d293660046138bb565b611f38565b348015610d3a57600080fd5b5061053060255481565b348015610d5057600080fd5b50610438612031565b348015610d6557600080fd5b506104e7610d743660046138bb565b61208f565b33610d8c6000546001600160a01b031690565b6001600160a01b031614610dbb5760405162461bcd60e51b8152600401610db2906139d8565b60405180910390fd5b601e54811115610dca57600080fd5b80601e6000828254610ddc9190613a23565b90915550506012546001600160a01b03166108fc6064610dfd846019613a3a565b610e079190613a59565b6040518115909202916000818181858888f19350505050158015610e2f573d6000803e3d6000fd5b506013546001600160a01b03166108fc6064610e4c84604b613a3a565b610e569190613a59565b6040518115909202916000818181858888f19350505050158015610e7e573d6000803e3d6000fd5b5050565b6000610e8f3384846120b1565b5060015b92915050565b33610eac6000546001600160a01b031690565b6001600160a01b031614610ed25760405162461bcd60e51b8152600401610db2906139d8565b6024805460ff1916911515919091179055565b610ef16009600a613b5f565b610eff906305f5e100613a3a565b81565b6000610f0f8484846121a4565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610f7a5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610db2565b610f8e8533610f898685613a23565b6120b1565b506001949350505050565b33610fac6000546001600160a01b031690565b6001600160a01b031614610fd25760405162461bcd60e51b8152600401610db2906139d8565b610fda612401565b565b6000610fe78261148f565b1561100757506001600160a01b0316600090815260208052604090205490565b6001600160a01b038216600090815260208052604090205461102883612541565b610e939190613b6e565b336110456000546001600160a01b031690565b6001600160a01b03161461106b5760405162461bcd60e51b8152600401610db2906139d8565b610e7e600d826125c7565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e8f918590610f89908690613b6e565b6025546110ba9042613b6e565b33600090815260036020526040902055565b336110df6000546001600160a01b031690565b6001600160a01b0316146111055760405162461bcd60e51b8152600401610db2906139d8565b602880546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336111426000546001600160a01b031690565b6001600160a01b0316146111685760405162461bcd60e51b8152600401610db2906139d8565b6000846111758789613b86565b61117f9190613b86565b90508060ff166064146111e35760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610db2565b506018805460ff928316620100000262ff0000199484166101000261ffff19978516600160281b029790971665ff000000ffff199885166401000000000264ff00000000199a86166301000000029a909a1664ffff00000019909316929092179890981796909616959095179216919091179190911716919091179055565b336112756000546001600160a01b031690565b6001600160a01b03161461129b5760405162461bcd60e51b8152600401610db2906139d8565b6029544210156112bd5760405162461bcd60e51b8152600401610db290613bab565b6112c961070842613b6e565b6029556012546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611319576040519150601f19603f3d011682016040523d82523d6000602084013e61131e565b606091505b505090508061132c57600080fd5b50565b336113426000546001600160a01b031690565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610db2906139d8565b61132c6113754283613b6e565b6125dc565b3361138d6000546001600160a01b031690565b6001600160a01b0316146113b35760405162461bcd60e51b8152600401610db2906139d8565b6113bf6009600a613b5f565b6113c99082613a3a565b60175550565b6000806113de6009600a613b5f565b6015546113eb9190613a59565b6113f76009600a613b5f565b6016546114049190613a59565b915091509091565b3361141f6000546001600160a01b031690565b6001600160a01b0316146114455760405162461bcd60e51b8152600401610db2906139d8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000610e93600b836125ef565b336114af6000546001600160a01b031690565b6001600160a01b0316146114d55760405162461bcd60e51b8152600401610db2906139d8565b60648160ff1611156114e657600080fd5b601d805460ff191660ff92909216919091179055565b3361150f6000546001600160a01b031690565b6001600160a01b0316146115355760405162461bcd60e51b8152600401610db2906139d8565b6028805461ff00191661010017905542600f55565b6027546115579042613b6e565b33600090815260046020526040902055565b6001600160a01b0381166000908152600360205260408120544281116115925750600092915050565b61159c4282613a23565b9392505050565b905090565b336115bb6000546001600160a01b031690565b6001600160a01b0316146115e15760405162461bcd60e51b8152600401610db2906139d8565b6029544210156116035760405162461bcd60e51b8152600401610db290613bab565b6028546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015611655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116799190613bd5565b60125460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156116ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190613bee565b505050565b3361170a6000546001600160a01b031690565b6001600160a01b0316146117305760405162461bcd60e51b8152600401610db2906139d8565b6028805460ff1916911515919091179055565b336117566000546001600160a01b031690565b6001600160a01b03161461177c5760405162461bcd60e51b8152600401610db2906139d8565b606460145461178b9190613a59565b811061179657600080fd5b6117a26009600a613b5f565b6117ac9083613a3a565b91506117ba6009600a613b5f565b6117c49082613a3a565b90506000603260ff166014546117da9190613a59565b90506000606461ffff166014546117f19190613a59565b9050818410156118575760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610db2565b808310156118b85760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610db2565b5050601591909155601655565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156119285760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610db2565b6119373385610f898685613a23565b5060019392505050565b6000610e8f3384846121a4565b336119616000546001600160a01b031690565b6001600160a01b0316146119875760405162461bcd60e51b8152600401610db2906139d8565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b336119bc6000546001600160a01b031690565b6001600160a01b0316146119e25760405162461bcd60e51b8152600401610db2906139d8565b6026805460ff1916911515919091179055565b610fda33612611565b6000602954421015611a1857426029546115a39190613a23565b50600090565b6000611a2c6009600a613b5f565b601454611a3b6009600a613b5f565b611a49906305f5e100613a3a565b611a539190613a23565b6115a39190613a59565b33611a706000546001600160a01b031690565b6001600160a01b031614611a965760405162461bcd60e51b8152600401610db2906139d8565b610e7e60058261209c565b33611ab46000546001600160a01b031690565b6001600160a01b031614611ada5760405162461bcd60e51b8152600401610db2906139d8565b602355565b33611af26000546001600160a01b031690565b6001600160a01b031614611b185760405162461bcd60e51b8152600401610db2906139d8565b8015611b665760405162461bcd60e51b815260206004820152601760248201527f53656c6c204c6f636b2074696d6520746f6f20686967680000000000000000006044820152606401610db2565b602555565b33611b7e6000546001600160a01b031690565b6001600160a01b031614611ba45760405162461bcd60e51b8152600401610db2906139d8565b8015611beb5760405162461bcd60e51b8152602060048201526016602482015275084eaf24098dec6d640e8d2daca40e8dede40d0d2ced60531b6044820152606401610db2565b602755565b33611c036000546001600160a01b031690565b6001600160a01b031614611c295760405162461bcd60e51b8152600401610db2906139d8565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b601454600090815b611c5d600b6128d5565b811015611cab5760016000611c73600b846128df565b6001600160a01b03168152602081019190915260400160002054611c979083613a23565b915080611ca381613c0b565b915050611c53565b50919050565b6001600160a01b0381166000908152600460205260408120544281116115925750600092915050565b33611ced6000546001600160a01b031690565b6001600160a01b031614611d135760405162461bcd60e51b8152600401610db2906139d8565b602954421015611d355760405162461bcd60e51b8152600401610db290613bab565b611d4161070842613b6e565b6029556028546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba9190613bd5565b60195460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b3906044016020604051808303816000875af1158015611e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e339190613bee565b5060195460405163af2979eb60e01b815247916001600160a01b03169063af2979eb90611e6f9030908690600090819084904290600401613c24565b6020604051808303816000875af1158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb29190613bd5565b506000611ebf8247613a23565b90508415611ed557611ed0816128eb565b611eed565b80601e6000828254611ee79190613b6e565b90915550505b5050505050565b33611f076000546001600160a01b031690565b6001600160a01b031614611f2d5760405162461bcd60e51b8152600401610db2906139d8565b610e7e600d8261209c565b33611f4b6000546001600160a01b031690565b6001600160a01b031614611f715760405162461bcd60e51b8152600401610db2906139d8565b6001600160a01b038116611fd65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610db2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336120446000546001600160a01b031690565b6001600160a01b03161461206a5760405162461bcd60e51b8152600401610db2906139d8565b601e805460009091556012546001600160a01b03166108fc6064610dfd846019613a3a565b6000610e93600d836125ef565b600061159c836001600160a01b0384166129b7565b6001600160a01b0383166120fb5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610db2565b6001600160a01b0382166121435760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610db2565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121ef5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610db2565b6001600160a01b0382166122385760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610db2565b60006122456005856125ef565b8061225657506122566005846125ef565b905060006001600160a01b03851630148061227957506001600160a01b03841630145b6019546018549192506001600160a01b0390811691600091888116600160301b909204161480156122bb5750816001600160a01b0316866001600160a01b0316145b806122f657506018546001600160a01b03878116600160301b909204161480156122f65750816001600160a01b0316876001600160a01b0316145b6018549091506000906001600160a01b03898116600160301b9092041614806123305750826001600160a01b0316886001600160a01b0316145b6018549091506000906001600160a01b03898116600160301b90920416148061236a5750836001600160a01b0316886001600160a01b0316145b905084806123755750825b8061237d5750855b156123925761238d898989612a06565b6123f6565b602854610100900460ff166123e95760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610db2565b6123f68989898585612ad1565b505050505050505050565b6022805460ff19166001908117909155306000908152602091909152604081205460185490919061244790600160281b810460ff90811691640100000000900416613b86565b60ff1690506000602354905080831080612463575061ffff8216155b1561247057505050612535565b60185460009061ffff84169061249190640100000000900460ff1684613a3a565b61249b9190613a59565b905060006124a98284613a23565b905060006124b8600284613a59565b905060006124c68285613a23565b905060006124d48483613b6e565b9050476124e082613269565b60006124ec8247613a23565b90506000836124fb8684613a3a565b6125059190613a59565b905061251186826133c2565b600061251d8447613a23565b9050612528816128eb565b5050505050505050505050505b6022805460ff19169055565b6001600160a01b038116600090815260016020526040812054601a54829161256891613a3a565b6001600160a01b0384166000908152601f60205260409020549091508110156125945750600092915050565b6001600160a01b0383166000908152601f6020526040902054600160401b906125bd9083613a23565b61159c9190613a59565b600061159c836001600160a01b038416613471565b60295481116125ea57600080fd5b602955565b6001600160a01b0381166000908152600183016020526040812054151561159c565b601954600160a01b900460ff161561262857600080fd5b6019805460ff60a01b1916600160a01b17905560006126468261148f565b1561266d57506001600160a01b0381166000908152602080526040812080549190556126ea565b600061267883612541565b6001600160a01b038416600090815260016020526040902054601a549192506126a091613a3a565b6001600160a01b0384166000908152601f6020908152604080832093909355805220546126ce908290613b6e565b6001600160a01b03841660009081526020805260408120559150505b806000036127035750506019805460ff60a01b19169055565b80601c60008282546127159190613b6e565b90915550506040805160028082526060820183526000926020830190803683375050601954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613c5f565b816000815181106127bb576127bb613c7c565b60200260200101906001600160a01b031690816001600160a01b031681525050734fabb145d64652a948d72533023f6e7a623c7c538160018151811061280357612803613c7c565b6001600160a01b03928316602091820292909201015260195460405163b6f9de9560e01b815291169063b6f9de9590849061284990600090869089904290600401613cd6565b6000604051808303818588803b15801561286257600080fd5b505af1158015612876573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f80a489adad6e8e00b344a3e9042e6aff0ae286ce1376918078a67bbce8b905b394500191506128bb9050565b60405180910390a150506019805460ff60a01b1916905550565b6000610e93825490565b600061159c838361355e565b601d546000906064906129019060ff1684613a3a565b61290b9190613a59565b905060006129198284613a23565b905081601e600082825461292d9190613b6e565b909155505080156116f25780601b600082825461294a9190613b6e565b909155506000905061295a611c4b565b9050806000036129815781601e60008282546129769190613b6e565b909155506129b19050565b80612990600160401b84613a3a565b61299a9190613a59565b601a60008282546129ab9190613b6e565b90915550505b50505050565b60008181526001830160205260408120546129fe57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e93565b506000610e93565b6001600160a01b03831660009081526001602052604090205481811015612a6a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610db2565b612a7484836135e4565b612a7e83836136a3565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ac391815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612b3f5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610db2565b60008315612cf257612b526007896125ef565b612be7576001600160a01b03881660009081526003602052604090205442101580612b7f575060245460ff165b612bc05760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610db2565b602554612bcd9042613b6e565b6001600160a01b0389166000908152600360205260409020555b601654861115612c2b5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610db2565b612c36600d896125ef565b15612c7a5760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610db2565b601054600f54612c8a9190613b6e565b4211158015612c9b57506011546001145b15612ce157612cab600d8961209c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b50601854610100900460ff16613106565b8415612f0357612d036009886125ef565b612d96576001600160a01b03871660009081526004602052604090205442101580612d30575060265460ff165b612d6f5760405162461bcd60e51b815260206004820152601060248201526f427579657220696e206275794c6f636b60801b6044820152606401610db2565b602754612d7c9042613b6e565b6001600160a01b0388166000908152600460205260409020555b601554612da38785613b6e565b1115612de45760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610db2565b601754861115612e415760405162461bcd60e51b815260206004820152602260248201527f547820616d6f756e7420657863656564696e67206d61782062757920616d6f756044820152611b9d60f21b6064820152608401610db2565b612e4c600d886125ef565b15612e905760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610db2565b601054600f54612ea09190613b6e565b4211158015612eb157506011546001145b15612ef757612ec1600d8861209c565b506040516001600160a01b038816907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060185460ff16613106565b612f0f6009600a613b5f565b8611612f1e57612f1e88612611565b601554612f2b8785613b6e565b1115612f6c5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610db2565b612f776007896125ef565b612fe1576001600160a01b03881660009081526003602052604090205442101580612fa4575060245460ff165b612fe15760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610db2565b612fec600d896125ef565b156130395760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206164647265737320626c61636b6c69737465642100000000006044820152606401610db2565b613044600d886125ef565b156130915760405162461bcd60e51b815260206004820152601e60248201527f526563697069656e74206164647265737320626c61636b6c69737465642100006044820152606401610db2565b601054600f546130a19190613b6e565b42111580156130b257506011546001145b156130f8576130c2600d8961209c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060185462010000900460ff165b6018546001600160a01b03898116600160301b909204161480159061312e575060285460ff16155b801561313d575060225460ff16155b80156131465750835b1561315357613153612401565b600061316f8783601860039054906101000a900460ff1661376c565b6018549091506000906131a3908990859061319e9060ff6401000000008204811691600160281b900416613b86565b61376c565b905060006131b18284613b6e565b6131bb908a613a23565b90506131c78b8a6135e4565b30600090815260016020526040812080548492906131e6908490613b6e565b9250508190555082601460008282546131ff9190613a23565b9091555061320f90508a826136a3565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161325491815260200190565b60405180910390a35050505050505050505050565b6019546132819030906001600160a01b0316836120b1565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132b6576132b6613c7c565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561330f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133339190613c5f565b8160018151811061334657613346613c7c565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b815291169063791ac9479061338c908590600090869030904290600401613d0b565b600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b505050505050565b80602160008282546133d49190613b6e565b90915550506019546133f19030906001600160a01b0316846120b1565b60195460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061342e9030908790600090819084904290600401613c24565b60606040518083038185885af115801561344c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611eed9190613d47565b60008181526001830160205260408120548015613554576000613495600183613a23565b85549091506000906134a990600190613a23565b905060008660000182815481106134c2576134c2613c7c565b90600052602060002001549050808760000184815481106134e5576134e5613c7c565b60009182526020808320909101929092558281526001890190915260409020849055865487908061351857613518613d75565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610e93565b6000915050610e93565b815460009082106135bc5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610db2565b8260000182815481106135d1576135d1613c7c565b9060005260206000200154905092915050565b6001600160a01b038216600090815260016020526040812054613608908390613a23565b90506136138361148f565b15613638576001600160a01b0390921660009081526001602052604090209190915550565b600061364384612541565b6001600160a01b0385166000908152600160205260409020839055601a5490915061366f908390613a3a565b6001600160a01b0385166000908152601f6020908152604080832093909355805290812080548392906129ab908490613b6e565b6001600160a01b0382166000908152600160205260408120546136c7908390613b6e565b90506136d28361148f565b156136f7576001600160a01b0390921660009081526001602052604090209190915550565b600061370284612541565b905081601a546137129190613a3a565b6001600160a01b0385166000908152601f602090815260408083209390935580529081208054839290613746908490613b6e565b9091555050506001600160a01b0390921660009081526001602052604090209190915550565b60006127108260ff168460ff16866137849190613a3a565b61378e9190613a3a565b6137989190613a59565b949350505050565b6000602082840312156137b257600080fd5b5035919050565b600060208083528351808285015260005b818110156137e6578581018301518582016040015282016137ca565b818111156137f8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461132c57600080fd5b6000806040838503121561383657600080fd5b82356138418161380e565b946020939093013593505050565b801515811461132c57600080fd5b60006020828403121561386f57600080fd5b813561159c8161384f565b60008060006060848603121561388f57600080fd5b833561389a8161380e565b925060208401356138aa8161380e565b929592945050506040919091013590565b6000602082840312156138cd57600080fd5b813561159c8161380e565b803560ff811681146138e957600080fd5b919050565b60008060008060008060c0878903121561390757600080fd5b613910876138d8565b955061391e602088016138d8565b945061392c604088016138d8565b935061393a606088016138d8565b9250613948608088016138d8565b915061395660a088016138d8565b90509295509295509295565b60006020828403121561397457600080fd5b61159c826138d8565b6000806040838503121561399057600080fd5b50508035926020909101359150565b600080604083850312156139b257600080fd5b82356139bd8161380e565b915060208301356139cd8161380e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613a3557613a35613a0d565b500390565b6000816000190483118215151615613a5457613a54613a0d565b500290565b600082613a7657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613ab6578160001904821115613a9c57613a9c613a0d565b80851615613aa957918102915b93841c9390800290613a80565b509250929050565b600082613acd57506001610e93565b81613ada57506000610e93565b8160018114613af05760028114613afa57613b16565b6001915050610e93565b60ff841115613b0b57613b0b613a0d565b50506001821b610e93565b5060208310610133831016604e8410600b8410161715613b39575081810a610e93565b613b438383613a7b565b8060001904821115613b5757613b57613a0d565b029392505050565b600061159c60ff841683613abe565b60008219821115613b8157613b81613a0d565b500190565b600060ff821660ff84168060ff03821115613ba357613ba3613a0d565b019392505050565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b600060208284031215613be757600080fd5b5051919050565b600060208284031215613c0057600080fd5b815161159c8161384f565b600060018201613c1d57613c1d613a0d565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208284031215613c7157600080fd5b815161159c8161380e565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015613ccb5781516001600160a01b031687529582019590820190600101613ca6565b509495945050505050565b848152608060208201526000613cef6080830186613c92565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201526000613d2a60a0830186613c92565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613d5c57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204a62c682533e52fa592a62972613cdae39ae0a71490b0d43a732bbe3f23d070f64736f6c634300080d0033
Deployed Bytecode Sourcemap
27389:36299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52945:269;;;;;;;;;;-1:-1:-1;52945:269:0;;;;;:::i;:::-;;:::i;61342:94::-;;;;;;;;;;-1:-1:-1;61423:5:0;;;;;;;;;;;;-1:-1:-1;;;61423:5:0;;;;61342:94;;;;;;;:::i;:::-;;;;;;;;40800:31;;;;;;;;;;-1:-1:-1;40800:31:0;;;;;;;;;;;973:4:1;961:17;;;943:36;;931:2;916:18;40800:31:0;801:184:1;62227:161:0;;;;;;;;;;-1:-1:-1;62227:161:0;;;;;:::i;:::-;;:::i;:::-;;;1611:14:1;;1604:22;1586:41;;1574:2;1559:18;62227:161:0;1446:187:1;28931:43:0;;;;;;;;;;;;28971:3;28931:43;;;;;1812:6:1;1800:19;;;1782:38;;1770:2;1755:18;28931:43:0;1638:188:1;50954:102:0;;;;;;;;;;-1:-1:-1;51036:12:0;;50954:102;;;1977:25:1;;;1965:2;1950:18;50954:102:0;1831:177:1;51525:100:0;;;;;;;;;;-1:-1:-1;51606:11:0;;51525:100;;53857:104;;;;;;;;;;-1:-1:-1;53857:104:0;;;;;:::i;:::-;;:::i;61652:108::-;;;;;;;;;;-1:-1:-1;61734:18:0;;61652:108;;28254:64;;;;;;;;;;;;;:::i;62701:392::-;;;;;;;;;;-1:-1:-1;62701:392:0;;;;;:::i;:::-;;:::i;55914:81::-;;;;;;;;;;;;;:::i;28481:31::-;;;;;;;;;;;;;;;;50360:244;;;;;;;;;;-1:-1:-1;50531:8:0;;50360:244;;;50531:8;;;;;;3130:25:1;;50540:13:0;;;;;3186:2:1;3171:18;;3164:34;-1:-1:-1;;;50554:11:0;;;;3214:18:1;;;3207:34;;;;50566:7:0;;;3272:2:1;3257:18;;3250:34;50531:8:0;50574;;;;3315:3:1;3300:19;;3293:35;50583:12:0;;;;;3359:3:1;3344:19;;3337:35;3117:3;3102:19;50360:244:0;2843:535:1;52591:27:0;;;;;;;;;;-1:-1:-1;52591:27:0;;;;;;;;28817:44;;;;;;;;;;;;28859:2;28817:44;;61550:94;;;;;;;;;;-1:-1:-1;28246:1:0;61550:94;;52210:191;;;;;;;;;;-1:-1:-1;52210:191:0;;;;;:::i;:::-;;:::i;29117:49::-;;;;;;;;;;;;29157:9;29117:49;;57295:143;;;;;;;;;;-1:-1:-1;57295:143:0;;;;;:::i;:::-;;:::i;63128:205::-;;;;;;;;;;-1:-1:-1;63128:205:0;;;;;:::i;:::-;;:::i;46563:25::-;;;;;;;;;;;;;;;;28662:38;;;;;;;;;;;;;;;;40756:27;;;;;;;;;;;;;;;;52625:26;;;;;;;;;;;;;;;;51769:107;;;;;;;;;;;;;:::i;57566:26::-;;;;;;;;;;-1:-1:-1;57566:26:0;;;;;;;;;;;57875:146;;;;;;;;;;-1:-1:-1;57875:146:0;;;;;:::i;:::-;;:::i;30052:46::-;;;;;;;;;;;;;;;;55135:492;;;;;;;;;;-1:-1:-1;55135:492:0;;;;;:::i;:::-;;:::i;40883:31::-;;;;;;;;;;;;;;;;51068:110;;;;;;;;;;-1:-1:-1;51151:19:0;;51068:110;;60503:311;;;;;;;;;;;;;:::i;58228:153::-;;;;;;;;;;-1:-1:-1;58228:153:0;;;;;:::i;:::-;;:::i;53421:110::-;;;;;;;;;;-1:-1:-1;53421:110:0;;;;;:::i;:::-;;:::i;50203:149::-;;;;;;;;;;;;;:::i;:::-;;;;4510:25:1;;;4566:2;4551:18;;4544:34;;;;4483:18;50203:149:0;4336:248:1;61768:121:0;;;;;;;;;;-1:-1:-1;61768:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;61863:18:0;61836:7;61863:18;;;:9;:18;;;;;;;61768:121;9250:140;;;;;;;;;;;;;:::i;41367:132::-;;;;;;;;;;-1:-1:-1;41367:132:0;;;;;:::i;:::-;;:::i;55704:142::-;;;;;;;;;;-1:-1:-1;55704:142:0;;;;;:::i;:::-;;:::i;29996:49::-;;;;;;;;;;;;;;;;57680:127;;;;;;;;;;;;;:::i;51979:110::-;;;;;;;;;;;;;:::i;40542:29::-;;;;;;;;;;;;;;;;52658:28;;;;;;;;;;-1:-1:-1;52658:28:0;;;;;;;;50673:275;;;;;;;;;;-1:-1:-1;50673:275:0;;;;;:::i;:::-;;:::i;52522:28::-;;;;;;;;;;-1:-1:-1;52522:28:0;;;;;;;;61240:94;;;;;;;;;;-1:-1:-1;61292:7:0;8674:6;-1:-1:-1;;;;;8674:6:0;61240:94;;;-1:-1:-1;;;;;4940:32:1;;;4922:51;;4910:2;4895:18;61240:94:0;4776:203:1;8609:79:0;;;;;;;;;;-1:-1:-1;8647:7:0;8674:6;-1:-1:-1;;;;;8674:6:0;8609:79;;29524:78;;;;;;;;;;-1:-1:-1;29524:78:0;;;;-1:-1:-1;;;;;29524:78:0;;;61444:98;;;;;;;;;;-1:-1:-1;61527:7:0;;;;;;;;;;;;-1:-1:-1;;;61527:7:0;;;;61444:98;;58682:466;;;;;;;;;;;;;:::i;53299:110::-;;;;;;;;;;-1:-1:-1;53299:110:0;;;;;:::i;:::-;;:::i;56104:895::-;;;;;;;;;;-1:-1:-1;56104:895:0;;;;;:::i;:::-;;:::i;63341:342::-;;;;;;;;;;-1:-1:-1;63341:342:0;;;;;:::i;:::-;;:::i;61897:167::-;;;;;;;;;;-1:-1:-1;61897:167:0;;;;;:::i;:::-;;:::i;53678:115::-;;;;;;;;;;-1:-1:-1;53678:115:0;;;;;:::i;:::-;;:::i;54028:102::-;;;;;;;;;;-1:-1:-1;54028:102:0;;;;;:::i;:::-;;:::i;52138:64::-;;;;;;;;;;;;;:::i;49838:220::-;;;;;;;;;;;;;:::i;50066:129::-;;;;;;;;;;;;;:::i;54993:112::-;;;;;;;;;;-1:-1:-1;54993:112:0;;;;;:::i;:::-;;:::i;54800:125::-;;;;;;;;;;-1:-1:-1;54800:125:0;;;;;:::i;:::-;;:::i;54203:202::-;;;;;;;;;;-1:-1:-1;54203:202:0;;;;;:::i;:::-;;:::i;29609:76::-;;;;;;;;;;-1:-1:-1;29609:76:0;;;;-1:-1:-1;;;;;29609:76:0;;;62072:147;;;;;;;;;;-1:-1:-1;62072:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;62183:19:0;;;62156:7;62183:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;62072:147;54481:195;;;;;;;;;;-1:-1:-1;54481:195:0;;;;;:::i;:::-;;:::i;53543:123::-;;;;;;;;;;-1:-1:-1;53543:123:0;;;;;:::i;:::-;;:::i;41740:411::-;;;;;;;;;;;;;:::i;51246:273::-;;;;;;;;;;-1:-1:-1;51246:273:0;;;;;:::i;:::-;;:::i;59206:1211::-;;;;;;;;;;-1:-1:-1;59206:1211:0;;;;;:::i;:::-;;:::i;40653:33::-;;;;;;;;;;;;;;;;57079:135;;;;;;;;;;-1:-1:-1;57079:135:0;;;;;:::i;:::-;;:::i;9545:236::-;;;;;;;;;;-1:-1:-1;9545:236:0;;;;;:::i;:::-;;:::i;52557:27::-;;;;;;;;;;;;;;;;52696:242;;;;;;;;;;;;;:::i;41546:118::-;;;;;;;;;;-1:-1:-1;41546:118:0;;;;;:::i;:::-;;:::i;52945:269::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;;;;;;;;;53038:16:::1;;53030:6;:24;;53022:33;;;::::0;::::1;;53084:6;53066:16;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;53109:11:0::1;::::0;-1:-1:-1;;;;;53109:11:0::1;53101:48;53145:3;53132:9;:6:::0;53139:2:::1;53132:9;:::i;:::-;53131:17;;;;:::i;:::-;53101:48;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;53168:9:0::1;::::0;-1:-1:-1;;;;;53168:9:0::1;53160:46;53202:3;53189:9;:6:::0;53196:2:::1;53189:9;:::i;:::-;53188:17;;;;:::i;:::-;53160:46;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;52945:269:::0;:::o;62227:161::-;62304:4;62321:37;62330:10;62342:7;62351:6;62321:8;:37::i;:::-;-1:-1:-1;62376:4:0;62227:161;;;;;:::o;53857:104::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;53928:16:::1;:25:::0;;-1:-1:-1;;53928:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53857:104::o;28254:64::-;28305:13;28246:1;28305:2;:13;:::i;:::-;28293:25;;:9;:25;:::i;:::-;28254:64;:::o;62701:392::-;62801:4;62818:36;62828:6;62836:9;62847:6;62818:9;:36::i;:::-;-1:-1:-1;;;;;62894:19:0;;62867:24;62894:19;;;:11;:19;;;;;;;;62914:10;62894:31;;;;;;;;62944:26;;;;62936:59;;;;-1:-1:-1;;;62936:59:0;;8233:2:1;62936:59:0;;;8215:21:1;8272:2;8252:18;;;8245:30;-1:-1:-1;;;8291:18:1;;;8284:50;8351:18;;62936:59:0;8031:344:1;62936:59:0;63008:55;63017:6;63025:10;63037:25;63056:6;63037:16;:25;:::i;:::-;63008:8;:55::i;:::-;-1:-1:-1;63081:4:0;;62701:392;-1:-1:-1;;;;62701:392:0:o;55914:81::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;55967:20:::1;:18;:20::i;:::-;55914:81::o:0;52210:191::-;52267:7;52289:27;52311:4;52289:21;:27::i;:::-;52286:53;;;-1:-1:-1;;;;;;52325:14:0;;;;;:8;:14;;;;;;;52210:191::o;52286:53::-;-1:-1:-1;;;;;52379:14:0;;;;;;:8;:14;;;;;;52357:21;52388:4;52357:15;:21::i;:::-;:36;;;;:::i;57295:143::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;57389:41:::1;:14;57411:18:::0;57389:21:::1;:41::i;63128:205::-:0;63236:10;63210:4;63257:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;63257:32:0;;;;;;;;;;63210:4;;63227:76;;63248:7;;63257:45;;63292:10;;63257:45;:::i;51769:107::-;51856:12;;51840:28;;:15;:28;:::i;:::-;51828:10;51818:21;;;;:9;:21;;;;;:50;51769:107::o;57875:146::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;57969:22:::1;:44:::0;;-1:-1:-1;;;;;57969:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;57969:44:0;;::::1;::::0;;;::::1;::::0;;57875:146::o;55135:492::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;55290:14:::1;55330:12:::0;55305:24:::1;55315:14:::0;55305:9;:24:::1;:::i;:::-;:37;;;;:::i;:::-;55290:52;;55361:8;:13;;55371:3;55361:13;55353:64;;;::::0;-1:-1:-1;;;55353:64:0;;8924:2:1;55353:64:0::1;::::0;::::1;8906:21:1::0;8963:2;8943:18;;;8936:30;9002:34;8982:18;;;8975:62;-1:-1:-1;;;9053:18:1;;;9046:36;9099:19;;55353:64:0::1;8722:402:1::0;55353:64:0::1;-1:-1:-1::0;55430:8:0::1;:18:::0;;::::1;55595:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;55568:16:0;;::::1;55430:18;55568:16;-1:-1:-1::0;;55498:24:0;;::::1;-1:-1:-1::0;;;55498:24:0::1;55568:16:::0;;;;-1:-1:-1;;55459:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;55430:18:0;;::::1;::::0;::::1;55459:28:::0;;;;-1:-1:-1;;55459:28:0;;;;;;;;;;::::1;55568:16:::0;;;;;;;;55543:14;::::1;55568:16:::0;;;;;;;::::1;55595:24;::::0;;;::::1;::::0;;55135:492::o;60503:311::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;60592:20:::1;;60573:15;:39;;60565:68;;;;-1:-1:-1::0;;;60565:68:0::1;;;;;;;:::i;:::-;60665:40;29495:4;60665:15;:40;:::i;:::-;60644:20;:61:::0;60730:11:::1;::::0;:52:::1;::::0;60717:9:::1;::::0;-1:-1:-1;;;;;60730:11:0::1;::::0;60755:21:::1;::::0;60717:9;60730:52;60717:9;60730:52;60755:21;60730:11;:52:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60716:66;;;60801:4;60793:13;;;::::0;::::1;;60554:260;60503:311::o:0;58228:153::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;58316:57:::1;58338:34;58357:15;58338:18:::0;:34:::1;:::i;:::-;58316:21;:57::i;53421:110::-:0;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;53510:13:::1;28246:1;53510:2;:13;:::i;:::-;53498:25;::::0;:9;:25:::1;:::i;:::-;53491:6;:32:::0;-1:-1:-1;53421:110:0:o;50203:149::-;50244:15;;50305:13;28246:1;50305:2;:13;:::i;:::-;50292:12;;:26;;;;:::i;:::-;50330:13;28246:1;50330:2;:13;:::i;:::-;50320:9;;:23;;;;:::i;:::-;50285:59;;;;50203:149;;:::o;9250:140::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;9349:1:::1;9333:6:::0;;9312:40:::1;::::0;-1:-1:-1;;;;;9333:6:0;;::::1;::::0;9312:40:::1;::::0;9349:1;;9312:40:::1;9380:1;9363:19:::0;;-1:-1:-1;;;;;;9363:19:0::1;::::0;;9250:140::o;41367:132::-;41433:4;41456:35;:20;41486:4;41456:29;:35::i;55704:142::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;55799:3:::1;55789:8;:13;;;;55781:22;;;::::0;::::1;;55815:14;:23:::0;;-1:-1:-1;;55815:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;55704:142::o;57680:127::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;57737:14:::1;:19:::0;;-1:-1:-1;;57737:19:0::1;;;::::0;;57784:15:::1;57767:16;:32:::0;57680:127::o;51979:110::-;52064:11;;52048:27;;:15;:27;:::i;:::-;52036:10;52027:20;;;;:8;:20;;;;;:48;51979:110::o;50673:275::-;-1:-1:-1;;;;;50794:25:0;;50759:7;50794:25;;;:9;:25;;;;;;50842:15;50832:25;;50829:71;;-1:-1:-1;50888:1:0;;50673:275;-1:-1:-1;;50673:275:0:o;50829:71::-;50916:24;50925:15;50916:8;:24;:::i;:::-;50909:31;50673:275;-1:-1:-1;;;50673:275:0:o;61319:7::-;61312:14;;61240:94;:::o;58682:466::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;58810:20:::1;;58791:15;:39;;58783:68;;;;-1:-1:-1::0;;;58783:68:0::1;;;;;;;:::i;:::-;58921:22;::::0;58972:39:::1;::::0;-1:-1:-1;;;58972:39:0;;59005:4:::1;58972:39;::::0;::::1;4922:51:1::0;58921:22:0;;;::::1;-1:-1:-1::0;;;;;58921:22:0::1;::::0;58872:30:::1;::::0;58921:22;;58972:24:::1;::::0;4895:18:1;;58972:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59110:11;::::0;59086:44:::1;::::0;-1:-1:-1;;;59086:44:0;;-1:-1:-1;;;;;59110:11:0;;::::1;59086:44;::::0;::::1;10047:51:1::0;10114:18;;;10107:34;;;58955:56:0;;-1:-1:-1;59086:23:0;::::1;::::0;::::1;::::0;10020:18:1;;59086:44:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58714:434;;58682:466::o:0;53299:110::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;53378:16:::1;:23:::0;;-1:-1:-1;;53378:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53299:110::o;56104:895::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;56340:3:::1;56321:18;;:22;;;;:::i;:::-;56308:12;:35;56300:44;;;::::0;::::1;;56422:13;28246:1;56422:2;:13;:::i;:::-;56406:29;::::0;:15;:29:::1;:::i;:::-;56390:45:::0;-1:-1:-1;56472:13:0::1;28246:1;56472:2;:13;:::i;:::-;56459:26;::::0;:12;:26:::1;:::i;:::-;56446:39;;56552:26;28859:2;56579:38;;:18;;:38;;;;:::i;:::-;56552:65;;56628:23;28971:3;56652:35;;:18;;:35;;;;:::i;:::-;56628:59;;56726:18;56709:15;:35;;56700:103;;;::::0;-1:-1:-1;;;56700:103:0;;10604:2:1;56700:103:0::1;::::0;::::1;10586:21:1::0;10643:2;10623:18;;;10616:30;10682:34;10662:18;;;10655:62;-1:-1:-1;;;10733:18:1;;;10726:41;10784:19;;56700:103:0::1;10402:407:1::0;56700:103:0::1;56837:15;56823:12;:29;;56814:94;;;::::0;-1:-1:-1;;;56814:94:0;;11016:2:1;56814:94:0::1;::::0;::::1;10998:21:1::0;11055:2;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;-1:-1:-1;;;11145:18:1;;;11138:38;11193:19;;56814:94:0::1;10814:404:1::0;56814:94:0::1;-1:-1:-1::0;;56921:12:0::1;:30:::0;;;;56962:9:::1;:24:::0;56104:895::o;63341:342::-;63484:10;63428:4;63472:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;63472:32:0;;;;;;;;;;63523:35;;;;63515:60;;;;-1:-1:-1;;;63515:60:0;;11425:2:1;63515:60:0;;;11407:21:1;11464:2;11444:18;;;11437:30;-1:-1:-1;;;11483:18:1;;;11476:42;11535:18;;63515:60:0;11223:336:1;63515:60:0;63588:65;63597:10;63609:7;63618:34;63637:15;63618:16;:34;:::i;63588:65::-;-1:-1:-1;63671:4:0;;63341:342;-1:-1:-1;;;63341:342:0:o;61897:167::-;61977:4;61994:40;62004:10;62016:9;62027:6;61994:9;:40::i;53678:115::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;53754:9:::1;:31:::0;;-1:-1:-1;;;;;;53754:31:0::1;-1:-1:-1::0;;;;;53754:31:0;;;::::1;::::0;;;::::1;::::0;;53678:115::o;54028:102::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;54098:15:::1;:24:::0;;-1:-1:-1;;54098:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54028:102::o;52138:64::-;52174:20;52183:10;52174:8;:20::i;49838:220::-;49903:7;49941:20;;49925:15;:36;49922:110;;;50005:15;49984:20;;:36;;;;:::i;49922:110::-;-1:-1:-1;50049:1:0;;49838:220::o;50066:129::-;50113:7;50174:13;28246:1;50174:2;:13;:::i;:::-;50154:18;;28305:13;28246:1;28305:2;:13;:::i;:::-;28293:25;;:9;:25;:::i;:::-;50140:32;;;;:::i;:::-;50139:48;;;;:::i;54993:112::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;55070:27:::1;:9;55084:12:::0;55070:13:::1;:27::i;54800:125::-:0;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;54882:19:::1;:35:::0;54800:125::o;54203:202::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;54295:32;;54287:67:::1;;;::::0;-1:-1:-1;;;54287:67:0;;11766:2:1;54287:67:0::1;::::0;::::1;11748:21:1::0;11805:2;11785:18;;;11778:30;11844:25;11824:18;;;11817:53;11887:18;;54287:67:0::1;11564:347:1::0;54287:67:0::1;54369:12;:28:::0;54203:202::o;54481:195::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;54571:30;;54563:64:::1;;;::::0;-1:-1:-1;;;54563:64:0;;12118:2:1;54563:64:0::1;::::0;::::1;12100:21:1::0;12157:2;12137:18;;;12130:30;-1:-1:-1;;;12176:18:1;;;12169:52;12238:18;;54563:64:0::1;11916:346:1::0;54563:64:0::1;54642:11;:26:::0;54481:195::o;53543:123::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;53623:11:::1;:35:::0;;-1:-1:-1;;;;;;53623:35:0::1;-1:-1:-1::0;;;;;53623:35:0;;;::::1;::::0;;;::::1;::::0;;53543:123::o;41740:411::-;41822:18;;41788:7;;;41997:123;42013:29;:20;:27;:29::i;:::-;42011:1;:31;41997:123;;;42071:9;:37;42081:26;:20;42105:1;42081:23;:26::i;:::-;-1:-1:-1;;;;;42071:37:0;;;;;;;;;;;;-1:-1:-1;42071:37:0;;42063:45;;;;:::i;:::-;;-1:-1:-1;42044:3:0;;;;:::i;:::-;;;;41997:123;;;-1:-1:-1;42137:6:0;41740:411;-1:-1:-1;41740:411:0:o;51246:273::-;-1:-1:-1;;;;;51366:24:0;;51331:7;51366:24;;;:8;:24;;;;;;51413:15;51403:25;;51400:71;;-1:-1:-1;51459:1:0;;51246:273;-1:-1:-1;;51246:273:0:o;59206:1211::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;59350:20:::1;;59331:15;:39;;59323:68;;;;-1:-1:-1::0;;;59323:68:0::1;;;;;;;:::i;:::-;59423:40;29495:4;59423:15;:40;:::i;:::-;59402:20;:61:::0;59523:22:::1;::::0;59574:39:::1;::::0;-1:-1:-1;;;59574:39:0;;59607:4:::1;59574:39;::::0;::::1;4922:51:1::0;59523:22:0;;;::::1;-1:-1:-1::0;;;;;59523:22:0::1;::::0;59474:30:::1;::::0;59523:22;;59574:24:::1;::::0;4895:18:1;;59574:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59657:16;::::0;59626:56:::1;::::0;-1:-1:-1;;;59626:56:0;;-1:-1:-1;;;;;59657:16:0;;::::1;59626:56;::::0;::::1;10047:51:1::0;10114:18;;;10107:34;;;59557:56:0;;-1:-1:-1;59626:22:0;::::1;::::0;::::1;::::0;10020:18:1;;59626:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;59959:16:0::1;::::0;:218:::1;::::0;-1:-1:-1;;;59959:218:0;;59927:21:::1;::::0;-1:-1:-1;;;;;59959:16:0::1;::::0;:64:::1;::::0;:218:::1;::::0;60046:4:::1;::::0;60066:6;;59899:25:::1;::::0;;;60046:4;;60147:15:::1;::::0;59959:218:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;60188:21:0::1;60212:39;60234:17:::0;60212:21:::1;:39;:::i;:::-;60188:63;;60265:12;60262:146;;;60293:31;60310:13;60293:16;:31::i;:::-;60262:146;;;60383:13;60365:16;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;60262:146:0::1;59254:1163;;;;59206:1211:::0;:::o;57079:135::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;57168:38:::1;:14;57187:18:::0;57168::::1;:38::i;9545:236::-:0;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9626:22:0;::::1;9618:73;;;::::0;-1:-1:-1;;;9618:73:0;;13221:2:1;9618:73:0::1;::::0;::::1;13203:21:1::0;13260:2;13240:18;;;13233:30;13299:34;13279:18;;;13272:62;-1:-1:-1;;;13350:18:1;;;13343:36;13396:19;;9618:73:0::1;13019:402:1::0;9618:73:0::1;9728:6;::::0;;9707:38:::1;::::0;-1:-1:-1;;;;;9707:38:0;;::::1;::::0;9728:6;::::1;::::0;9707:38:::1;::::0;::::1;9756:6;:17:::0;;-1:-1:-1;;;;;;9756:17:0::1;-1:-1:-1::0;;;;;9756:17:0;;;::::1;::::0;;;::::1;::::0;;9545:236::o;52696:242::-;8832:10;8821:7;8647;8674:6;-1:-1:-1;;;;;8674:6:0;;8609:79;8821:7;-1:-1:-1;;;;;8821:21:0;;8813:66;;;;-1:-1:-1;;;8813:66:0;;;;;;;:::i;:::-;52769:16:::1;::::0;;52754:14:::1;52796:18:::0;;;52833:11:::1;::::0;-1:-1:-1;;;;;52833:11:0::1;52825:48;52869:3;52856:9;52769:16:::0;52863:2:::1;52856:9;:::i;41546:118::-:0;41604:4;41627:29;:14;41651:4;41627:23;:29::i;24296:152::-;24366:4;24390:50;24395:3;-1:-1:-1;;;;;24415:23:0;;24390:4;:50::i;62394:299::-;-1:-1:-1;;;;;62487:19:0;;62479:49;;;;-1:-1:-1;;;62479:49:0;;13628:2:1;62479:49:0;;;13610:21:1;13667:2;13647:18;;;13640:30;-1:-1:-1;;;13686:18:1;;;13679:47;13743:18;;62479:49:0;13426:341:1;62479:49:0;-1:-1:-1;;;;;62547:21:0;;62539:49;;;;-1:-1:-1;;;62539:49:0;;13974:2:1;62539:49:0;;;13956:21:1;14013:2;13993:18;;;13986:30;-1:-1:-1;;;14032:18:1;;;14025:45;14087:18;;62539:49:0;13772:339:1;62539:49:0;-1:-1:-1;;;;;62601:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;62653:32;;1977:25:1;;;62653:32:0;;1950:18:1;62653:32:0;;;;;;;62394:299;;;:::o;32548:1544::-;-1:-1:-1;;;;;32644:20:0;;32636:51;;;;-1:-1:-1;;;32636:51:0;;14318:2:1;32636:51:0;;;14300:21:1;14357:2;14337:18;;;14330:30;-1:-1:-1;;;14376:18:1;;;14369:48;14434:18;;32636:51:0;14116:342:1;32636:51:0;-1:-1:-1;;;;;32706:23:0;;32698:52;;;;-1:-1:-1;;;32698:52:0;;14665:2:1;32698:52:0;;;14647:21:1;14704:2;14684:18;;;14677:30;-1:-1:-1;;;14723:18:1;;;14716:46;14779:18;;32698:52:0;14463:340:1;32698:52:0;32843:15;32862:26;:9;32881:6;32862:18;:26::i;:::-;:59;;;-1:-1:-1;32892:29:0;:9;32911;32892:18;:29::i;:::-;32843:79;-1:-1:-1;33021:23:0;-1:-1:-1;;;;;33046:21:0;;33062:4;33046:21;;:49;;-1:-1:-1;;;;;;33071:24:0;;33090:4;33071:24;33046:49;33234:16;;33301:21;;33021:75;;-1:-1:-1;;;;;;33234:16:0;;;;33202:23;;33291:31;;;-1:-1:-1;;;33301:21:0;;;;33291:31;:63;;;;;33339:15;-1:-1:-1;;;;;33326:28:0;:9;-1:-1:-1;;;;;33326:28:0;;33291:63;33290:144;;;-1:-1:-1;33383:21:0;;-1:-1:-1;;;;;33370:34:0;;;-1:-1:-1;;;33383:21:0;;;;33370:34;:63;;;;;33418:15;-1:-1:-1;;;;;33408:25:0;:6;-1:-1:-1;;;;;33408:25:0;;33370:63;33556:21;;33262:173;;-1:-1:-1;33537:10:0;;-1:-1:-1;;;;;33548:29:0;;;-1:-1:-1;;;33556:21:0;;;;33548:29;;:57;;;33590:15;-1:-1:-1;;;;;33580:25:0;:6;-1:-1:-1;;;;;33580:25:0;;33548:57;33639:21;;33537:68;;-1:-1:-1;33616:11:0;;-1:-1:-1;;;;;33628:32:0;;;-1:-1:-1;;;33639:21:0;;;;33628:32;;:63;;;33676:15;-1:-1:-1;;;;;33663:28:0;:9;-1:-1:-1;;;;;33663:28:0;;33628:63;33616:75;;33732:18;:41;;;;33754:19;33732:41;:55;;;;33777:10;33732:55;33729:356;;;33803:43;33820:6;33828:9;33839:6;33803:16;:43::i;:::-;33729:356;;;33965:14;;;;;;;33957:49;;;;-1:-1:-1;;;33957:49:0;;15010:2:1;33957:49:0;;;14992:21:1;15049:2;15029:18;;;15022:30;15088:25;15068:18;;;15061:53;15131:18;;33957:49:0;14808:347:1;33957:49:0;34021:52;34036:6;34043:9;34053:6;34060:5;34066:6;34021:14;:52::i;:::-;32625:1467;;;;;;32548:1544;;;:::o;47051:1628::-;46716:27;:34;;-1:-1:-1;;46716:34:0;46746:4;46716:34;;;;;;47153:4:::1;46716:27:::0;47135:24;;;::::1;::::0;;;;;;;;47200:11:::1;::::0;47135:24;;46716:27;47186:25:::1;::::0;-1:-1:-1;;;47200:11:0;::::1;46716:34:::0;47200:11;;::::1;::::0;47186:13;;::::1;;:25;:::i;:::-;47170:41;;;;47222:19;47244;;47222:41;;47390:11;47374:15;:27;:40;;;-1:-1:-1::0;47403:11:0::1;::::0;::::1;::::0;47374:40:::1;47371:77;;;47430:7;;;;;47371:77;47568:13;::::0;47529:25:::1;::::0;47555:36:::1;::::0;::::1;::::0;47556:25:::1;::::0;47568:13;;::::1;;;47556:11:::0;:25:::1;:::i;:::-;47555:36;;;;:::i;:::-;47529:62:::0;-1:-1:-1;47602:25:0::1;47629:29;47529:62:::0;47629:11;:29:::1;:::i;:::-;47602:56:::0;-1:-1:-1;47719:16:0::1;47736:19;47754:1;47736:17:::0;:19:::1;:::i;:::-;47719:36:::0;-1:-1:-1;47766:19:0::1;47786:26;47719:36:::0;47786:17;:26:::1;:::i;:::-;47766:46:::0;-1:-1:-1;47895:17:0::1;47913:29;47925:17:::0;47766:46;47913:29:::1;:::i;:::-;47895:47:::0;-1:-1:-1;48057:21:0::1;48089:27;47895:47:::0;48089:16:::1;:27::i;:::-;48127:14;48143:41;48167:17:::0;48143:21:::1;:41;:::i;:::-;48127:58:::0;-1:-1:-1;48285:14:0::1;48323:9:::0;48303:18:::1;48310:11:::0;48127:58;48303:18:::1;:::i;:::-;48302:30;;;;:::i;:::-;48285:47;;48343:31;48357:8;48367:6;48343:13;:31::i;:::-;48497:21;48520:41;48544:17:::0;48520:21:::1;:41;:::i;:::-;48497:65;;48640:31;48657:13;48640:16;:31::i;:::-;47100:1579;;;;;;;;;;;;46761:1;46773:27:::0;:35;;-1:-1:-1;;46773:35:0;;;47051:1628::o;43777:427::-;-1:-1:-1;;;;;43898:17:0;;43840:7;43898:17;;;:9;:17;;;;;;43881:14;;43840:7;;43881:34;;;:::i;:::-;-1:-1:-1;;;;;44078:25:0;;;;;;:17;:25;;;;;;43860:55;;-1:-1:-1;44067:36:0;;44064:49;;;-1:-1:-1;44112:1:0;;43777:427;-1:-1:-1;;43777:427:0:o;44064:49::-;-1:-1:-1;;;;;44145:25:0;;;;;;:17;:25;;;;;;-1:-1:-1;;;40461:5:0;44132:38;;:10;:38;:::i;:::-;44131:65;;;;:::i;24624:158::-;24697:4;24721:53;24729:3;-1:-1:-1;;;;;24749:23:0;;24721:7;:53::i;58387:230::-;58543:20;;58529:13;:34;58521:43;;;;;;58575:20;:34;58387:230::o;24868:167::-;-1:-1:-1;;;;;25002:23:0;;24948:4;21677:19;;;:12;;;:19;;;;;;:24;;24972:55;21580:129;45147:1236;45206:14;;-1:-1:-1;;;45206:14:0;;;;45205:15;45197:24;;;;;;45232:14;:19;;-1:-1:-1;;;;45232:19:0;-1:-1:-1;;;45232:19:0;;;;45290:27;45312:4;45290:21;:27::i;:::-;45287:495;;;-1:-1:-1;;;;;;45404:14:0;;;;;;:8;:14;;;;;;;45433:16;;;45287:495;;;45490:17;45508:21;45524:4;45508:15;:21::i;:::-;-1:-1:-1;;;;;45640:15:0;;;;;;:9;:15;;;;;;45623:14;;45490:39;;-1:-1:-1;45623:32:0;;;:::i;:::-;-1:-1:-1;;;;;45597:23:0;;;;;;:17;:23;;;;;;;;:58;;;;45715:14;;;;:24;;45730:9;;45715:24;:::i;:::-;-1:-1:-1;;;;;45754:14:0;;45769:1;45754:14;;;:8;:14;;;;;:16;45708:31;-1:-1:-1;;45287:495:0;45795:6;45803:1;45795:9;45792:106;;-1:-1:-1;;45845:14:0;:20;;-1:-1:-1;;;;45845:20:0;;;45147:1236::o;45792:106::-;45922:6;45908:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;45963:16:0;;;45977:1;45963:16;;;;;;;;45939:21;;45963:16;;;;;;;;-1:-1:-1;;46000:16:0;;:23;;;-1:-1:-1;;;46000:23:0;;;;45939:40;;-1:-1:-1;;;;;;46000:16:0;;;;:21;;-1:-1:-1;46000:23:0;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45990:4;45995:1;45990:7;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;45990:33:0;;;-1:-1:-1;;;;;45990:33:0;;;;;46050:42;46040:4;46045:1;46040:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46040:52:0;;;:7;;;;;;;;;:52;46140:16;;:151;;-1:-1:-1;;;46140:151:0;;:16;;;:67;;46215:6;;46140:151;;:16;;46245:4;;46260;;46275:15;;46140:151;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46317:27:0;;;16835:25:1;;;-1:-1:-1;;;;;16896:32:1;;16891:2;16876:18;;16869:60;46317:27:0;;-1:-1:-1;16808:18:1;;-1:-1:-1;46317:27:0;;-1:-1:-1;16661:274:1;46317:27:0;;;;;;;;-1:-1:-1;;46355:14:0;:20;;-1:-1:-1;;;;46355:20:0;;;-1:-1:-1;45147:1236:0:o;25121:117::-;25184:7;25211:19;25219:3;21878:18;;21795:109;25582:158;25656:7;25707:22;25711:3;25723:5;25707:3;:22::i;44274:758::-;44409:14;;44371:22;;44427:3;;44397:26;;44409:14;;44397:9;:26;:::i;:::-;44396:34;;;;:::i;:::-;44371:59;-1:-1:-1;44441:14:0;44458:26;44371:59;44458:9;:26;:::i;:::-;44441:43;;44514:14;44496:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;44552:10:0;;44548:477;;44601:6;44579:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;44622:19:0;;-1:-1:-1;44642:17:0;:15;:17::i;:::-;44622:37;;44753:11;44768:1;44753:16;44749:265;;44810:6;44790:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;44749:265:0;;-1:-1:-1;44749:265:0;;44986:11;44951:31;-1:-1:-1;;;44951:6:0;:31;:::i;:::-;44950:47;;;;:::i;:::-;44931:14;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;44749:265:0;44564:461;44327:705;;44274:758;:::o;19351:414::-;19414:4;21677:19;;;:12;;;:19;;;;;;19431:327;;-1:-1:-1;19474:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19657:18;;19635:19;;;:12;;;:19;;;;;;:40;;;;19690:11;;19431:327;-1:-1:-1;19741:5:0;19734:12;;39157:440;-1:-1:-1;;;;;39276:17:0;;39252:21;39276:17;;;:9;:17;;;;;;39312:23;;;;39304:60;;;;-1:-1:-1;;;39304:60:0;;17142:2:1;39304:60:0;;;17124:21:1;17181:2;17161:18;;;17154:30;-1:-1:-1;;;17200:18:1;;;17193:54;17264:18;;39304:60:0;16940:348:1;39304:60:0;39420:27;39433:6;39440;39420:12;:27::i;:::-;39500:28;39510:9;39521:6;39500:9;:28::i;:::-;39570:9;-1:-1:-1;;;;;39554:33:0;39563:6;-1:-1:-1;;;;;39554:33:0;;39580:6;39554:33;;;;1977:25:1;;1965:2;1950:18;;1831:177;39554:33:0;;;;;;;;39241:356;39157:440;;;:::o;34193:4902::-;-1:-1:-1;;;;;34336:20:0;;;34309:24;34336:20;;;:9;:20;;;;;;;34391:17;;;;;;;;34427:23;;;;34419:60;;;;-1:-1:-1;;;34419:60:0;;17142:2:1;34419:60:0;;;17124:21:1;17181:2;17161:18;;;17154:30;-1:-1:-1;;;17200:18:1;;;17193:54;17264:18;;34419:60:0;16940:348:1;34419:60:0;34492:9;34515:6;34512:3257;;;34541:38;:21;34572:6;34541:30;:38::i;:::-;34537:427;;-1:-1:-1;;;;;34729:17:0;;;;;;:9;:17;;;;;;34748:15;-1:-1:-1;34729:34:0;;:52;;-1:-1:-1;34765:16:0;;;;34729:52;34721:82;;;;-1:-1:-1;;;34721:82:0;;17495:2:1;34721:82:0;;;17477:21:1;17534:2;17514:18;;;17507:30;-1:-1:-1;;;17553:18:1;;;17546:48;17611:18;;34721:82:0;17293:342:1;34721:82:0;34936:12;;34920:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;34902:17:0;;;;;;:9;:17;;;;;:46;34537:427;35105:9;;35097:6;:17;;35089:44;;;;-1:-1:-1;;;35089:44:0;;17842:2:1;35089:44:0;;;17824:21:1;17881:2;17861:18;;;17854:30;-1:-1:-1;;;17900:18:1;;;17893:45;17955:18;;35089:44:0;17640:339:1;35089:44:0;35156:31;:14;35180:6;35156:23;:31::i;:::-;:40;35148:73;;;;-1:-1:-1;;;35148:73:0;;18186:2:1;35148:73:0;;;18168:21:1;18225:2;18205:18;;;18198:30;-1:-1:-1;;;18244:18:1;;;18237:50;18304:18;;35148:73:0;17984:344:1;35148:73:0;35280:11;;35261:16;;:30;;;;:::i;:::-;35242:15;:49;;:77;;;;;35295:19;;35318:1;35295:24;35242:77;35238:186;;;35340:26;:14;35359:6;35340:18;:26::i;:::-;-1:-1:-1;35390:18:0;;-1:-1:-1;;;;;35390:18:0;;;;;;;;35238:186;-1:-1:-1;35444:8:0;;;;;;;34512:3257;;;35477:5;35474:2295;;;35502:40;:20;35532:9;35502:29;:40::i;:::-;35498:427;;-1:-1:-1;;;;;35691:19:0;;;;;;:8;:19;;;;;;35712:15;-1:-1:-1;35691:36:0;;:53;;-1:-1:-1;35729:15:0;;;;35691:53;35683:81;;;;-1:-1:-1;;;35683:81:0;;18535:2:1;35683:81:0;;;18517:21:1;18574:2;18554:18;;;18547:30;-1:-1:-1;;;18593:18:1;;;18586:46;18649:18;;35683:81:0;18333:340:1;35683:81:0;35898:11;;35882:27;;:15;:27;:::i;:::-;-1:-1:-1;;;;;35862:19:0;;;;;;:8;:19;;;;;:47;35498:427;36063:12;;36038:23;36055:6;36038:16;:23;:::i;:::-;:37;;36030:65;;;;-1:-1:-1;;;36030:65:0;;18880:2:1;36030:65:0;;;18862:21:1;18919:2;18899:18;;;18892:30;-1:-1:-1;;;18938:18:1;;;18931:46;18994:18;;36030:65:0;18678:340:1;36030:65:0;36128:6;;36118;:16;;36110:62;;;;-1:-1:-1;;;36110:62:0;;19225:2:1;36110:62:0;;;19207:21:1;19264:2;19244:18;;;19237:30;19303:34;19283:18;;;19276:62;-1:-1:-1;;;19354:18:1;;;19347:32;19396:19;;36110:62:0;19023:398:1;36110:62:0;36195:34;:14;36219:9;36195:23;:34::i;:::-;:43;36187:76;;;;-1:-1:-1;;;36187:76:0;;18186:2:1;36187:76:0;;;18168:21:1;18225:2;18205:18;;;18198:30;-1:-1:-1;;;18244:18:1;;;18237:50;18304:18;;36187:76:0;17984:344:1;36187:76:0;36322:11;;36303:16;;:30;;;;:::i;:::-;36284:15;:49;;:77;;;;;36337:19;;36360:1;36337:24;36284:77;36280:192;;;36382:29;:14;36401:9;36382:18;:29::i;:::-;-1:-1:-1;36435:21:0;;-1:-1:-1;;;;;36435:21:0;;;;;;;;36280:192;-1:-1:-1;36492:7:0;;;;35474:2295;;;36739:15;28246:1;36739:2;:15;:::i;:::-;36731:6;:23;36728:44;;36756:16;36765:6;36756:8;:16::i;:::-;36911:12;;36886:23;36903:6;36886:16;:23;:::i;:::-;:37;;36878:65;;;;-1:-1:-1;;;36878:65:0;;18880:2:1;36878:65:0;;;18862:21:1;18919:2;18899:18;;;18892:30;-1:-1:-1;;;18938:18:1;;;18931:46;18994:18;;36878:65:0;18678:340:1;36878:65:0;37175:38;:21;37206:6;37175:30;:38::i;:::-;37171:139;;-1:-1:-1;;;;;37240:17:0;;;;;;:9;:17;;;;;;37259:15;-1:-1:-1;37240:34:0;;:52;;-1:-1:-1;37276:16:0;;;;37240:52;37232:78;;;;-1:-1:-1;;;37232:78:0;;19628:2:1;37232:78:0;;;19610:21:1;19667:2;19647:18;;;19640:30;-1:-1:-1;;;19686:18:1;;;19679:44;19740:18;;37232:78:0;19426:338:1;37232:78:0;37347:31;:14;37371:6;37347:23;:31::i;:::-;:40;37339:80;;;;-1:-1:-1;;;37339:80:0;;19971:2:1;37339:80:0;;;19953:21:1;20010:2;19990:18;;;19983:30;20049:29;20029:18;;;20022:57;20096:18;;37339:80:0;19769:351:1;37339:80:0;37442:34;:14;37466:9;37442:23;:34::i;:::-;:43;37434:86;;;;-1:-1:-1;;;37434:86:0;;20327:2:1;37434:86:0;;;20309:21:1;20366:2;20346:18;;;20339:30;20405:32;20385:18;;;20378:60;20455:18;;37434:86:0;20125:354:1;37434:86:0;37579:11;;37560:16;;:30;;;;:::i;:::-;37541:15;:49;;:77;;;;;37594:19;;37617:1;37594:24;37541:77;37537:186;;;37639:26;:14;37658:6;37639:18;:26::i;:::-;-1:-1:-1;37689:18:0;;-1:-1:-1;;;;;37689:18:0;;;;;;;;37537:186;-1:-1:-1;37743:12:0;;;;;;;35474:2295;38106:21;;-1:-1:-1;;;;;38098:29:0;;;-1:-1:-1;;;38106:21:0;;;;38098:29;;;;38097:52;;-1:-1:-1;38132:16:0;;;;38131:17;38097:52;:84;;;;-1:-1:-1;38153:27:0;;;;38152:28;38097:84;:92;;;;;38183:6;38097:92;38094:130;;;38204:20;:18;:20::i;:::-;38293:23;38317:36;38331:6;38339:3;38344:8;;;;;;;;;;;38317:13;:36::i;:::-;38522:13;;38293:60;;-1:-1:-1;38461:21:0;;38483:53;;38497:6;;38505:3;;38510:25;;38522:13;;;;;;;-1:-1:-1;;;38510:11:0;;;:25;:::i;:::-;38483:13;:53::i;:::-;38461:75;-1:-1:-1;38600:19:0;38628:31;38461:75;38628:15;:31;:::i;:::-;38620:40;;:6;:40;:::i;:::-;38600:60;;38718:27;38731:6;38738;38718:12;:27::i;:::-;38840:4;38822:24;;;;:9;:24;;;;;:41;;38850:13;;38822:24;:41;;38850:13;;38822:41;:::i;:::-;;;;;;;;38918:15;38898:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;38988:33:0;;-1:-1:-1;38998:9:0;39009:11;38988:9;:33::i;:::-;39063:9;-1:-1:-1;;;;;39047:38:0;39056:6;-1:-1:-1;;;;;39047:38:0;;39073:11;39047:38;;;;1977:25:1;;1965:2;1950:18;;1831:177;39047:38:0;;;;;;;;34298:4797;;;;;;34193:4902;;;;;:::o;48729:461::-;48822:16;;48790:58;;48807:4;;-1:-1:-1;;;;;48822:16:0;48841:6;48790:8;:58::i;:::-;48883:16;;;48897:1;48883:16;;;;;;;;48859:21;;48883:16;;;;;;;;;;-1:-1:-1;48883:16:0;48859:40;;48928:4;48910;48915:1;48910:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48910:23:0;;;:7;;;;;;;;;;:23;;;;48954:16;;:23;;;-1:-1:-1;;;48954:23:0;;;;:16;;;;;:21;;:23;;;;;48910:7;;48954:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48944:4;48949:1;48944:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48944:33:0;;;:7;;;;;;;;;:33;48990:16;;:192;;-1:-1:-1;;;48990:192:0;;:16;;;:67;;:192;;49072:6;;48990:16;;49109:4;;49136;;49156:15;;48990:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48779:411;48729:461;:::o;49317:401::-;49411:9;49399:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;49463:16:0;;49431:63;;49448:4;;-1:-1:-1;;;;;49463:16:0;49482:11;49431:8;:63::i;:::-;49505:16;;:205;;-1:-1:-1;;;49505:205:0;;-1:-1:-1;;;;;49505:16:0;;;;:32;;49545:9;;49505:205;;49578:4;;49598:11;;49505:16;;;;49578:4;;49684:15;;49505:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19941:1553::-;20007:4;20146:19;;;:12;;;:19;;;;;;20182:15;;20178:1309;;20544:21;20568:14;20581:1;20568:10;:14;:::i;:::-;20617:18;;20544:38;;-1:-1:-1;20597:17:0;;20617:22;;20638:1;;20617:22;:::i;:::-;20597:42;;20884:17;20904:3;:11;;20916:9;20904:22;;;;;;;;:::i;:::-;;;;;;;;;20884:42;;21050:9;21021:3;:11;;21033:13;21021:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;21127:23;;;:12;;;:23;;;;;;:36;;;21288:17;;21127:3;;21288:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21383:3;:12;;:19;21396:5;21383:19;;;;;;;;;;;21376:26;;;21426:4;21419:11;;;;;;;;20178:1309;21470:5;21463:12;;;;;22248:204;22343:18;;22315:7;;22343:26;-1:-1:-1;22335:73:0;;;;-1:-1:-1;;;22335:73:0;;21716:2:1;22335:73:0;;;21698:21:1;21755:2;21735:18;;;21728:30;21794:34;21774:18;;;21767:62;-1:-1:-1;;;21845:18:1;;;21838:32;21887:19;;22335:73:0;21514:398:1;22335:73:0;22426:3;:11;;22438:5;22426:18;;;;;;;;:::i;:::-;;;;;;;;;22419:25;;22248:204;;;;:::o;42983:648::-;-1:-1:-1;;;;;43118:15:0;;43100:17;43118:15;;;:9;:15;;;;;;:22;;43134:6;;43118:22;:::i;:::-;43100:40;;43164:27;43186:4;43164:21;:27::i;:::-;43161:102;;;-1:-1:-1;;;;;43206:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;42983:648:0:o;43161:102::-;43328:15;43344:21;43360:4;43344:15;:21::i;:::-;-1:-1:-1;;;;;43403:15:0;;;;;;:9;:15;;;;;:25;;;43512:14;;43328:37;;-1:-1:-1;43512:26:0;;43419:9;;43512:26;:::i;:::-;-1:-1:-1;;;;;43486:23:0;;;;;;:17;:23;;;;;;;;:52;;;;43599:14;;;;;:23;;43615:7;;43486:23;43599;;43615:7;;43599:23;:::i;42246:645::-;-1:-1:-1;;;;;42378:15:0;;42360:17;42378:15;;;:9;:15;;;;;;:22;;42394:6;;42378:22;:::i;:::-;42360:40;;42424:27;42446:4;42424:21;:27::i;:::-;42421:102;;;-1:-1:-1;;;;;42466:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;42246:645:0:o;42421:102::-;42588:15;42604:21;42620:4;42604:15;:21::i;:::-;42588:37;;42726:9;42709:14;;:26;;;;:::i;:::-;-1:-1:-1;;;;;42683:23:0;;;;;;:17;:23;;;;;;;;:52;;;;42796:14;;;;;:23;;42812:7;;42683:23;42796;;42812:7;;42796:23;:::i;:::-;;;;-1:-1:-1;;;;;;;;42858:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;42246:645:0:o;39652:156::-;39742:7;39795:5;39781:10;39770:21;;39777:3;39770:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;39769:31;;;;:::i;:::-;39762:38;39652:156;-1:-1:-1;;;;39652:156:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;990:131::-;-1:-1:-1;;;;;1065:31:1;;1055:42;;1045:70;;1111:1;1108;1101:12;1126:315;1194:6;1202;1255:2;1243:9;1234:7;1230:23;1226:32;1223:52;;;1271:1;1268;1261:12;1223:52;1310:9;1297:23;1329:31;1354:5;1329:31;:::i;:::-;1379:5;1431:2;1416:18;;;;1403:32;;-1:-1:-1;;;1126:315:1:o;2013:118::-;2099:5;2092:13;2085:21;2078:5;2075:32;2065:60;;2121:1;2118;2111:12;2136:241;2192:6;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2300:9;2287:23;2319:28;2341:5;2319:28;:::i;2382:456::-;2459:6;2467;2475;2528:2;2516:9;2507:7;2503:23;2499:32;2496:52;;;2544:1;2541;2534:12;2496:52;2583:9;2570:23;2602:31;2627:5;2602:31;:::i;:::-;2652:5;-1:-1:-1;2709:2:1;2694:18;;2681:32;2722:33;2681:32;2722:33;:::i;:::-;2382:456;;2774:7;;-1:-1:-1;;;2828:2:1;2813:18;;;;2800:32;;2382:456::o;3383:247::-;3442:6;3495:2;3483:9;3474:7;3470:23;3466:32;3463:52;;;3511:1;3508;3501:12;3463:52;3550:9;3537:23;3569:31;3594:5;3569:31;:::i;3635:156::-;3701:20;;3761:4;3750:16;;3740:27;;3730:55;;3781:1;3778;3771:12;3730:55;3635:156;;;:::o;3796:535::-;3888:6;3896;3904;3912;3920;3928;3981:3;3969:9;3960:7;3956:23;3952:33;3949:53;;;3998:1;3995;3988:12;3949:53;4021:27;4038:9;4021:27;:::i;:::-;4011:37;;4067:36;4099:2;4088:9;4084:18;4067:36;:::i;:::-;4057:46;;4122:36;4154:2;4143:9;4139:18;4122:36;:::i;:::-;4112:46;;4177:36;4209:2;4198:9;4194:18;4177:36;:::i;:::-;4167:46;;4232:37;4264:3;4253:9;4249:19;4232:37;:::i;:::-;4222:47;;4288:37;4320:3;4309:9;4305:19;4288:37;:::i;:::-;4278:47;;3796:535;;;;;;;;:::o;4589:182::-;4646:6;4699:2;4687:9;4678:7;4674:23;4670:32;4667:52;;;4715:1;4712;4705:12;4667:52;4738:27;4755:9;4738:27;:::i;4984:248::-;5052:6;5060;5113:2;5101:9;5092:7;5088:23;5084:32;5081:52;;;5129:1;5126;5119:12;5081:52;-1:-1:-1;;5152:23:1;;;5222:2;5207:18;;;5194:32;;-1:-1:-1;4984:248:1:o;5237:388::-;5305:6;5313;5366:2;5354:9;5345:7;5341:23;5337:32;5334:52;;;5382:1;5379;5372:12;5334:52;5421:9;5408:23;5440:31;5465:5;5440:31;:::i;:::-;5490:5;-1:-1:-1;5547:2:1;5532:18;;5519:32;5560:33;5519:32;5560:33;:::i;:::-;5612:7;5602:17;;;5237:388;;;;;:::o;5630:356::-;5832:2;5814:21;;;5851:18;;;5844:30;5910:34;5905:2;5890:18;;5883:62;5977:2;5962:18;;5630:356::o;5991:127::-;6052:10;6047:3;6043:20;6040:1;6033:31;6083:4;6080:1;6073:15;6107:4;6104:1;6097:15;6123:125;6163:4;6191:1;6188;6185:8;6182:34;;;6196:18;;:::i;:::-;-1:-1:-1;6233:9:1;;6123:125::o;6253:168::-;6293:7;6359:1;6355;6351:6;6347:14;6344:1;6341:21;6336:1;6329:9;6322:17;6318:45;6315:71;;;6366:18;;:::i;:::-;-1:-1:-1;6406:9:1;;6253:168::o;6426:217::-;6466:1;6492;6482:132;;6536:10;6531:3;6527:20;6524:1;6517:31;6571:4;6568:1;6561:15;6599:4;6596:1;6589:15;6482:132;-1:-1:-1;6628:9:1;;6426:217::o;6648:422::-;6737:1;6780:5;6737:1;6794:270;6815:7;6805:8;6802:21;6794:270;;;6874:4;6870:1;6866:6;6862:17;6856:4;6853:27;6850:53;;;6883:18;;:::i;:::-;6933:7;6923:8;6919:22;6916:55;;;6953:16;;;;6916:55;7032:22;;;;6992:15;;;;6794:270;;;6798:3;6648:422;;;;;:::o;7075:806::-;7124:5;7154:8;7144:80;;-1:-1:-1;7195:1:1;7209:5;;7144:80;7243:4;7233:76;;-1:-1:-1;7280:1:1;7294:5;;7233:76;7325:4;7343:1;7338:59;;;;7411:1;7406:130;;;;7318:218;;7338:59;7368:1;7359:10;;7382:5;;;7406:130;7443:3;7433:8;7430:17;7427:43;;;7450:18;;:::i;:::-;-1:-1:-1;;7506:1:1;7492:16;;7521:5;;7318:218;;7620:2;7610:8;7607:16;7601:3;7595:4;7592:13;7588:36;7582:2;7572:8;7569:16;7564:2;7558:4;7555:12;7551:35;7548:77;7545:159;;;-1:-1:-1;7657:19:1;;;7689:5;;7545:159;7736:34;7761:8;7755:4;7736:34;:::i;:::-;7806:6;7802:1;7798:6;7794:19;7785:7;7782:32;7779:58;;;7817:18;;:::i;:::-;7855:20;;7075:806;-1:-1:-1;;;7075:806:1:o;7886:140::-;7944:5;7973:47;8014:4;8004:8;8000:19;7994:4;7973:47;:::i;8380:128::-;8420:3;8451:1;8447:6;8444:1;8441:13;8438:39;;;8457:18;;:::i;:::-;-1:-1:-1;8493:9:1;;8380:128::o;8513:204::-;8551:3;8587:4;8584:1;8580:12;8619:4;8616:1;8612:12;8654:3;8648:4;8644:14;8639:3;8636:23;8633:49;;;8662:18;;:::i;:::-;8698:13;;8513:204;-1:-1:-1;;;8513:204:1:o;9129:340::-;9331:2;9313:21;;;9370:2;9350:18;;;9343:30;-1:-1:-1;;;9404:2:1;9389:18;;9382:46;9460:2;9445:18;;9129:340::o;9684:184::-;9754:6;9807:2;9795:9;9786:7;9782:23;9778:32;9775:52;;;9823:1;9820;9813:12;9775:52;-1:-1:-1;9846:16:1;;9684:184;-1:-1:-1;9684:184:1:o;10152:245::-;10219:6;10272:2;10260:9;10251:7;10247:23;10243:32;10240:52;;;10288:1;10285;10278:12;10240:52;10320:9;10314:16;10339:28;10361:5;10339:28;:::i;12267:135::-;12306:3;12327:17;;;12324:43;;12347:18;;:::i;:::-;-1:-1:-1;12394:1:1;12383:13;;12267:135::o;12407:607::-;-1:-1:-1;;;;;12766:15:1;;;12748:34;;12813:2;12798:18;;12791:34;;;;12856:2;12841:18;;12834:34;;;;12899:2;12884:18;;12877:34;;;;12948:15;;;12942:3;12927:19;;12920:44;12728:3;12980:19;;12973:35;;;;12697:3;12682:19;;12407:607::o;15292:251::-;15362:6;15415:2;15403:9;15394:7;15390:23;15386:32;15383:52;;;15431:1;15428;15421:12;15383:52;15463:9;15457:16;15482:31;15507:5;15482:31;:::i;15548:127::-;15609:10;15604:3;15600:20;15597:1;15590:31;15640:4;15637:1;15630:15;15664:4;15661:1;15654:15;15680:461;15733:3;15771:5;15765:12;15798:6;15793:3;15786:19;15824:4;15853:2;15848:3;15844:12;15837:19;;15890:2;15883:5;15879:14;15911:1;15921:195;15935:6;15932:1;15929:13;15921:195;;;16000:13;;-1:-1:-1;;;;;15996:39:1;15984:52;;16056:12;;;;16091:15;;;;16032:1;15950:9;15921:195;;;-1:-1:-1;16132:3:1;;15680:461;-1:-1:-1;;;;;15680:461:1:o;16146:510::-;16417:6;16406:9;16399:25;16460:3;16455:2;16444:9;16440:18;16433:31;16380:4;16481:57;16533:3;16522:9;16518:19;16510:6;16481:57;:::i;:::-;-1:-1:-1;;;;;16574:32:1;;;;16569:2;16554:18;;16547:60;-1:-1:-1;16638:2:1;16623:18;16616:34;16473:65;16146:510;-1:-1:-1;;16146:510:1:o;20484:582::-;20783:6;20772:9;20765:25;20826:6;20821:2;20810:9;20806:18;20799:34;20869:3;20864:2;20853:9;20849:18;20842:31;20746:4;20890:57;20942:3;20931:9;20927:19;20919:6;20890:57;:::i;:::-;-1:-1:-1;;;;;20983:32:1;;;;20978:2;20963:18;;20956:60;-1:-1:-1;21047:3:1;21032:19;21025:35;20882:65;20484:582;-1:-1:-1;;;20484:582:1:o;21071:306::-;21159:6;21167;21175;21228:2;21216:9;21207:7;21203:23;21199:32;21196:52;;;21244:1;21241;21234:12;21196:52;21273:9;21267:16;21257:26;;21323:2;21312:9;21308:18;21302:25;21292:35;;21367:2;21356:9;21352:18;21346:25;21336:35;;21071:306;;;;;:::o;21382:127::-;21443:10;21438:3;21434:20;21431:1;21424:31;21474:4;21471:1;21464:15;21498:4;21495:1;21488:15
Swarm Source
ipfs://4a62c682533e52fa592a62972613cdae39ae0a71490b0d43a732bbe3f23d070f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.