More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 210 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16446417 | 544 days ago | IN | 0 ETH | 0.0003755 | ||||
Transfer | 16079700 | 595 days ago | IN | 0 ETH | 0.00041253 | ||||
Transfer | 16079691 | 595 days ago | IN | 0 ETH | 0.00031432 | ||||
Transfer | 16079680 | 595 days ago | IN | 0 ETH | 0.00028288 | ||||
Transfer | 16079665 | 595 days ago | IN | 0 ETH | 0.0003352 | ||||
Remove Liquidty | 15258071 | 716 days ago | IN | 0 ETH | 0.00056224 | ||||
Approve | 15228211 | 720 days ago | IN | 0 ETH | 0.00057951 | ||||
Approve | 15228194 | 720 days ago | IN | 0 ETH | 0.00098171 | ||||
Approve | 15226437 | 721 days ago | IN | 0 ETH | 0.00250525 | ||||
Approve | 15202974 | 724 days ago | IN | 0 ETH | 0.00103344 | ||||
Approve | 15199109 | 725 days ago | IN | 0 ETH | 0.00027652 | ||||
Approve | 15199030 | 725 days ago | IN | 0 ETH | 0.00014777 | ||||
Approve | 15194922 | 726 days ago | IN | 0 ETH | 0.0003867 | ||||
Approve | 15193799 | 726 days ago | IN | 0 ETH | 0.000449 | ||||
Approve | 15193794 | 726 days ago | IN | 0 ETH | 0.00085614 | ||||
Approve | 15192682 | 726 days ago | IN | 0 ETH | 0.00139947 | ||||
Approve | 15192065 | 726 days ago | IN | 0 ETH | 0.00041974 | ||||
Approve | 15191390 | 726 days ago | IN | 0 ETH | 0.00017854 | ||||
Approve | 15191372 | 726 days ago | IN | 0 ETH | 0.00049283 | ||||
Approve | 15191331 | 726 days ago | IN | 0 ETH | 0.00033218 | ||||
Approve | 15190744 | 726 days ago | IN | 0 ETH | 0.00048737 | ||||
Approve | 15189862 | 726 days ago | IN | 0 ETH | 0.00034121 | ||||
Approve | 15189585 | 726 days ago | IN | 0 ETH | 0.00058413 | ||||
Approve | 15189369 | 727 days ago | IN | 0 ETH | 0.00051514 | ||||
Approve | 15188721 | 727 days ago | IN | 0 ETH | 0.00064435 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15187996 | 727 days ago | 0.00001927 ETH | ||||
15187996 | 727 days ago | 0.00836059 ETH | ||||
15187996 | 727 days ago | 0.00836203 ETH | ||||
15187996 | 727 days ago | 0.02508609 ETH | ||||
15187996 | 727 days ago | 0.03344812 ETH | ||||
15187996 | 727 days ago | 0.07524534 ETH | ||||
15187768 | 727 days ago | 0.0000115 ETH | ||||
15187768 | 727 days ago | 0.00755938 ETH | ||||
15187768 | 727 days ago | 0.00756118 ETH | ||||
15187768 | 727 days ago | 0.02268354 ETH | ||||
15187768 | 727 days ago | 0.03024472 ETH | ||||
15187768 | 727 days ago | 0.06803446 ETH | ||||
15187737 | 727 days ago | 0.00001436 ETH | ||||
15187737 | 727 days ago | 0.0083113 ETH | ||||
15187737 | 727 days ago | 0.00831526 ETH | ||||
15187737 | 727 days ago | 0.0249458 ETH | ||||
15187737 | 727 days ago | 0.03326107 ETH | ||||
15187737 | 727 days ago | 0.07480176 ETH | ||||
15184616 | 727 days ago | 0.00003168 ETH | ||||
15184616 | 727 days ago | 0.01050269 ETH | ||||
15184616 | 727 days ago | 0.01050572 ETH | ||||
15184616 | 727 days ago | 0.03151717 ETH | ||||
15184616 | 727 days ago | 0.0420229 ETH | ||||
15184616 | 727 days ago | 0.09452429 ETH | ||||
15182198 | 728 days ago | 0.00002421 ETH |
Loading...
Loading
Contract Name:
NeedForSeed
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-18 */ // SPDX-License-Identifier: MIT /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // Dependency file: @openzeppelin/contracts/utils/Context.sol // pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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; 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity =0.8.15; contract NeedForSeed is IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isBlackedlisted; mapping(address => bool) private _isBlackedlistedCompetition; mapping(address => bool) private _word1; mapping(address => bool) private _word2; mapping(address => bool) private _word3; mapping(address => bool) private _word4; mapping(address => bool) private _word5; mapping(address => bool) private _word6; mapping(address => bool) private _word7; mapping(address => bool) private _word8; mapping(address => bool) private _word9; mapping(address => bool) private _word10; mapping(address => bool) private _word11; mapping(address => bool) private _word12; mapping(uint256 => uint256) public _entriesCount; address[] private _excluded; address payable public potAddress; address payable public marketingAddress; address payable public devAddress; address payable public buyBackWallet; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; string private _name; string private _symbol; uint8 private _decimals; uint256 public _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _marketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _potFee; uint256 private _previousPotFee = _potFee; uint256 public _devFee; uint256 private _previousDevFee = _devFee; uint256 public _extraSellFee; uint256 public _previousExtraSellFee; uint256 public _totalTaxes; uint256 private _previousTotalTaxes = _totalTaxes; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled; uint256 public numTokensSellToAddToLiquidity; uint256 private _launchTime; uint256 private _launchTimeOriginal; bool public _isLaunched; uint256 public _ETHEntryFee; uint256 public _maxWalletSize; uint256 public _numOfTokensRequiredInAccount; uint256 private randNum; address [] private players; bool private sell = false; bool public biggestBuyEnabled = false; uint256 public biggestBuy; uint256 public bigBuyStart; uint256 public bigBuyEnd; address public bigDog; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor( ) payable { _name = "Need For Seed"; _symbol = "$PHRASE"; _decimals = 9; _tTotal = 1000000000000000; _rTotal = (MAX - (MAX % _tTotal)); _maxWalletSize = 20000000000000; //%2 _numOfTokensRequiredInAccount = 2000000000000; //%0.2 _ETHEntryFee = 80000000000000000; //0.08 _taxFee = 0; _previousTaxFee = 0; _liquidityFee = 200; _previousLiquidityFee = 200; _marketingFee = 400; _previousMarketingFee = 400; _potFee = 300; _previousPotFee = 300; _devFee = 100; _previousDevFee = 100; _totalTaxes = 1000; _previousTotalTaxes = 1000; numTokensSellToAddToLiquidity = 2000000000000; // 0.2% of an ETH swapAndLiquifyEnabled = true; _rOwned[owner()] = _rTotal; address router_=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; potAddress=payable(0x6e778EE54A3275745998c96cc9C256a617561eF2); marketingAddress=payable(0xB0783Ff5f4c8c180E51eABDf2203cd63cef377A2); devAddress=payable(0x527D35212d4754f141a438f18A097d7162127690); buyBackWallet=payable(0x5E0E21053f0C05f782f2D35bc1495eC26Dee52F5); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; random(); emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function random() private { uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _msgSender()))) % 60; randNum = randomnumber + 1; } function updatePotAddress(address payable _newPotAddress) external onlyOwner { potAddress= _newPotAddress; } function updateETHFee(uint256 amount) external onlyOwner { _ETHEntryFee = amount; } function getMinNumOfTokens() external view returns (uint256) { return _numOfTokensRequiredInAccount; } function getETHEntryFee() external view returns (uint256) { return _ETHEntryFee; } function setExtraSellFee(uint256 amt) external onlyOwner { require( amt >= 0 && amt <= 10**4, "Invalid bps" ); _extraSellFee = amt; } function setWalletAddresses(address payable newDevWallet, address payable newMarketingWallet, address payable newBuyBackWallet) external onlyOwner { devAddress= newDevWallet; marketingAddress = newMarketingWallet; buyBackWallet = newBuyBackWallet; } function getPotAddress() external view returns (address) { return potAddress; } function resetGame() external onlyOwner() { for(uint256 x=0; x<players.length; x++) { _word1[players[x]]=false; _word2[players[x]]=false; _word3[players[x]]=false; _word4[players[x]]=false; _word5[players[x]]=false; _word6[players[x]]=false; _word7[players[x]]=false; _word8[players[x]]=false; _word9[players[x]]=false; _word10[players[x]]=false; _word11[players[x]]=false; _word12[players[x]]=false; } delete players; } function resetEntriesCount() external onlyOwner() { for(uint256 x=0; x<=12; x++) { _entriesCount[x]=0; } } function manualResetPlayer(address addr) external onlyOwner() { _word1[addr]=false; _word2[addr]=false; _word3[addr]=false; _word4[addr]=false; _word5[addr]=false; _word6[addr]=false; _word7[addr]=false; _word8[addr]=false; _word9[addr]=false; _word10[addr]=false; _word11[addr]=false; _word12[addr]=false; } function removeLiquidty() external onlyOwner(){ swapAndLiquifyEnabled=false; _maxWalletSize=MAX; _marketingFee=0; _devFee=0; _liquidityFee=0; _potFee=0; } function getNumOfPlayers() external view returns (uint256) { return players.length; } function checkEntry(address addr, uint256 wordNum) external view returns (bool) { if (wordNum == 1) { return _word1[addr]; } if (wordNum == 2) { return _word2[addr]; } if (wordNum == 3) { return _word3[addr]; } if (wordNum == 4) { return _word4[addr]; } if (wordNum == 5) { return _word5[addr]; } if (wordNum == 6) { return _word6[addr]; } if (wordNum == 7) { return _word7[addr]; } if (wordNum == 8) { return _word8[addr]; } if (wordNum == 9) { return _word9[addr]; } if (wordNum == 10) { return _word10[addr]; } if (wordNum == 11) { return _word11[addr]; } if (wordNum == 12) { return _word12[addr]; } return false; } function enterWord(address addr, uint256 wordNum) external { require(_isLaunched==true, "Not launched yet"); require(_isBlackedlistedCompetition[addr]!=true, "Blacklisted for competition"); require(balanceOf(addr)>=_numOfTokensRequiredInAccount, "Not enough tokens in account"); clueEnter(addr, wordNum); } function clueEnter(address addr, uint256 wordNum) internal{ if (wordNum == 1) { require(_word1[addr]!=true, "You already entered"); _word1[addr]=true; players.push(addr); _entriesCount[1]+=1; } if (wordNum == 2) { require(_word2[addr]!=true, "You already entered"); require(_word1[addr]==true, "You have not entered the previous word"); _word2[addr]=true; _entriesCount[2]+=1; } if (wordNum == 3) { require(_word3[addr]!=true, "You already entered"); require(_word2[addr]==true, "You have not entered the previous word"); _word3[addr]=true; _entriesCount[3]+=1; } if (wordNum == 4) { require(_word4[addr]!=true, "You already entered"); require(_word3[addr]==true, "You have not entered the previous word"); _word4[addr]=true; _entriesCount[4]+=1; } if (wordNum == 5) { require(_word5[addr]!=true, "You already entered"); require(_word4[addr]==true, "You have not entered the previous word"); _word5[addr]=true; _entriesCount[5]+=1; } if (wordNum == 6) { require(_word6[addr]!=true, "You already entered"); require(_word5[addr]==true, "You have not entered the previous word"); _word6[addr]=true; _entriesCount[6]+=1; } if (wordNum == 7) { require(_word7[addr]!=true, "You already entered"); require(_word6[addr]==true, "You have not entered the previous word"); _word7[addr]=true; _entriesCount[7]+=1; } if (wordNum == 8) { require(_word8[addr]!=true, "You already entered"); require(_word7[addr]==true, "You have not entered the previous word"); _word8[addr]=true; _entriesCount[8]+=1; } if (wordNum == 9) { require(_word9[addr]!=true, "You already entered"); require(_word8[addr]==true, "You have not entered the previous word"); _word9[addr]=true; _entriesCount[9]+=1; } if (wordNum == 10) { require(_word10[addr]!=true, "You already entered"); require(_word9[addr]==true, "You have not entered the previous word"); _word10[addr]=true; _entriesCount[10]+=1; } if (wordNum == 11) { require(_word11[addr]!=true, "You already entered"); require(_word10[addr]==true, "You have not entered the previous word"); _word11[addr]=true; _entriesCount[11]+=1; } if (wordNum == 12) { require(_word12[addr]!=true, "You already entered"); require(_word11[addr]==true, "You have not entered the previous word"); _word12[addr]=true; _entriesCount[12]+=1; } } function buyWord(address addr, uint256 wordNum) external payable { address payable _to = buyBackWallet; require(_isLaunched==true, "Not launched yet"); require(_isBlackedlistedCompetition[addr]!=true, "Blacklisted for competition"); require(msg.sender.balance >= _ETHEntryFee, "Not enough ETH !"); require(msg.value == _ETHEntryFee, "Incorrect amount"); (bool sent,) = _to.call{value: msg.value}(""); require(sent, "Failed to send ETH"); clueEnter(addr, wordNum); } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function removedBlacklist(address addr) external onlyOwner { _isBlackedlisted[addr]=false; } function isBlacklisted(address account) external view returns (bool) { return _isBlackedlisted[account]; } function autoBlacklist(address addr) private { _isBlackedlisted[addr]=true; _isBlackedlistedCompetition[addr]=true; } function addBlacklistCompetition(address addr) external onlyOwner { _isBlackedlistedCompetition[addr]=true; } function removedBlackListCompetition(address addr) external onlyOwner { _isBlackedlistedCompetition[addr]=false; } function isBlackListedCompetition(address account) external view returns (bool) { return _isBlackedlistedCompetition[account]; } function vamos() external onlyOwner { require (_isLaunched == false, "Already launched"); _isLaunched = true; _launchTime = block.timestamp; _launchTimeOriginal = block.timestamp; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , , , ,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) public onlyOwner { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tPot, uint256 tDev ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takePotFee(tPot); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxPercents(uint256 taxFeeBps,uint256 liquidityFeeBps, uint256 marketingFeeBps, uint256 potFeeBps, uint256 devFeeBps) external onlyOwner { require(taxFeeBps >= 0 && taxFeeBps <= 10**4, "Invalid bps"); require( liquidityFeeBps >= 0 && liquidityFeeBps <= 10**4, "Invalid bps" ); require( marketingFeeBps >= 0 && marketingFeeBps <= 10**4, "Invalid bps" ); require( potFeeBps >= 0 && potFeeBps <= 10**4, "Invalid bps" ); require( devFeeBps >= 0 && devFeeBps <= 10**4, "Invalid bps" ); _taxFee = taxFeeBps; _liquidityFee = liquidityFeeBps; _marketingFee = marketingFeeBps; _potFee = potFeeBps; _devFee = devFeeBps; _totalTaxes = _liquidityFee + _marketingFee + _taxFee + _potFee + _devFee; require( _totalTaxes >= 0 && _totalTaxes <= 20**4, "Invalid bps" ); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setSwapValue(uint256 amount) external onlyOwner { require(amount>0, "Value too low"); numTokensSellToAddToLiquidity = amount; } function setMaxWalletSize(uint256 amount) external onlyOwner { require(amount>=10000000000000, "Max wallet size is too low"); _maxWalletSize = amount; } function setNumOfTokensToHoldToEnter(uint256 amount) external onlyOwner { _numOfTokensRequiredInAccount = amount; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } struct GetValueVar { uint256 tTransferAmount; uint256 tFee; uint256 tLiquidity; uint256 tMarketing; uint256 tPot; uint256 tDev; } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256 ) { GetValueVar memory _var; ( _var.tTransferAmount, _var.tFee, _var.tLiquidity, _var.tMarketing, _var.tPot, _var.tDev ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, _var.tFee, _var.tLiquidity, _var.tMarketing, _var.tPot, _var.tDev, _getRate() ); return ( rAmount, rTransferAmount, rFee, _var.tTransferAmount, _var.tFee, _var.tLiquidity, _var.tMarketing, _var.tPot, _var.tDev ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tMarketingFee = calculatemarketingFee(tAmount); uint256 tPotFee = calculatePotFee(tAmount); uint256 tDevFee = calculateDevFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee); tTransferAmount=tTransferAmount.sub(tLiquidity); tTransferAmount=tTransferAmount.sub(tMarketingFee).sub(tPotFee).sub(tDevFee); return (tTransferAmount, tFee, tLiquidity, tMarketingFee, tPotFee, tDevFee); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tPot, uint256 tDev, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rmarketing = tMarketing.mul(currentRate); uint256 rPot = tPot.mul(currentRate); uint256 rDev = tDev.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); rTransferAmount=rTransferAmount.sub(rLiquidity); rTransferAmount=rTransferAmount.sub(rmarketing); rTransferAmount=rTransferAmount.sub(rPot); rTransferAmount=rTransferAmount.sub(rDev); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeMarketingFee(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rmarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rmarketing); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function _takePotFee(uint256 tpot) private { uint256 currentRate = _getRate(); uint256 rpot = tpot.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rpot); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tpot); } function _takeDevFee(uint256 tDev) private { uint256 currentRate = _getRate(); uint256 rDev = tDev.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rDev); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tDev); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**4); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**4); } function calculatemarketingFee(uint256 _amount) private view returns (uint256) { if(sell==true) { return _amount.mul((_marketingFee.add(_extraSellFee))).div(10**4); } return _amount.mul(_marketingFee).div(10**4); } function calculatePotFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_potFee).div(10**4); } function calculateDevFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_devFee).div(10**4); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _potFee == 0 && _devFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousMarketingFee = _marketingFee; _previousPotFee = _potFee; _previousDevFee = _devFee; _previousTotalTaxes = _totalTaxes; _previousExtraSellFee = _extraSellFee; _taxFee = 0; _liquidityFee = 0; _potFee = 0; _marketingFee = 0; _devFee = 0; _extraSellFee = 0; _totalTaxes = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _marketingFee = _previousMarketingFee; _potFee = _previousPotFee; _devFee = _previousDevFee; _extraSellFee = _previousExtraSellFee; _totalTaxes = _previousTotalTaxes; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(_isBlackedlisted[from]!=true && _isBlackedlisted[to]!=true, "Address is blacklisted"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); sell=false; if (to==uniswapV2Pair) { sell=true; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( from != uniswapV2Pair && overMinTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled ) { //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function manualETH(uint256 amountPercentage) external onlyOwner { uint256 amountETH = address(this).balance; payable(owner()).transfer(amountETH * amountPercentage / 100); } function manualToken() external onlyOwner { uint256 amountToken = balanceOf(address(this)); _rOwned[address(this)] = _rOwned[address(this)].sub(amountToken); _rOwned[owner()] = _rOwned[owner()].add(amountToken); _tOwned[address(this)] = _tOwned[address(this)].sub(amountToken); _tOwned[owner()] = _tOwned[owner()].add(amountToken); emit Transfer(address(this), owner(), (amountToken)); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 liquidityTokenPortion = contractTokenBalance.div(_totalTaxes).mul(_liquidityFee); liquidityTokenPortion = liquidityTokenPortion.div(2); uint256 otherPortion = contractTokenBalance.sub(liquidityTokenPortion); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(otherPortion); uint256 liqD = _liquidityFee.div(2); uint256 divisor = _marketingFee + _potFee + _devFee + _taxFee + liqD; // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 liquidityETHPortion = newBalance.mul(_totalTaxes).div(divisor); liquidityETHPortion = liquidityETHPortion.div(_totalTaxes).mul(liqD); uint256 newBalanceAfterLiq = address(this).balance.sub(liquidityETHPortion); uint256 total = _totalTaxes.sub(_liquidityFee); uint256 potPortion = newBalanceAfterLiq.div(total).mul(_potFee); payable(potAddress).transfer(potPortion); uint256 marketingPortion = newBalanceAfterLiq.div(total).mul(_marketingFee); payable(marketingAddress).transfer(marketingPortion); uint256 devPortion = newBalanceAfterLiq.div(total).mul(_devFee); payable(devAddress).transfer(devPortion); // add liquidity to uniswap addLiquidity(liquidityTokenPortion, liquidityETHPortion); emit SwapAndLiquify(liquidityTokenPortion, newBalanceAfterLiq, liquidityETHPortion); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function happyHourMode() external onlyOwner { swapAndLiquifyEnabled = false; _liquidityFee=0; _marketingFee=0; _devFee=0; _potFee=500; } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tPot, uint256 tDev ) = _getValues(tAmount); if (biggestBuyEnabled == true) { _checkBiggestBuy(recipient, tAmount); } if (_isLaunched !=true && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (_isLaunched==true && _launchTime + 3 minutes + randNum > block.timestamp && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (sender==owner() || recipient==owner()) { _rOwned[recipient] = _rOwned[recipient].add(rAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); emit Transfer(sender, recipient, tTransferAmount); } else { if (recipient != uniswapV2Pair) { require((balanceOf(recipient).add(tAmount)) <= _maxWalletSize , "Transfer exceeds max wallet size"); } _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takePotFee(tPot); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tPot, uint256 tDev ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takePotFee(tPot); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tPot, uint256 tDev ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeMarketingFee(tMarketing); _takePotFee(tPot); _takeDevFee(tDev); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _checkBiggestBuy( address recipient, uint256 amount ) internal { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uint256 usedEth = uniswapV2Router.getAmountsIn(amount, path)[0]; if (usedEth > biggestBuy && recipient != uniswapV2Pair) { bigDog = recipient; biggestBuy = usedEth; } } function enableBiggestBuy(bool value, uint256 endTime) public onlyOwner() { bigBuyStart = block.timestamp; bigBuyEnd = bigBuyStart + endTime; biggestBuyEnabled = value; } function resetBiggestBuy() public onlyOwner() { biggestBuy = 0; bigDog = marketingAddress; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_ETHEntryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_entriesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_extraSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_numOfTokensRequiredInAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_potFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousExtraSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addBlacklistCompetition","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigBuyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigBuyStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigDog","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"biggestBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"biggestBuyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"wordNum","type":"uint256"}],"name":"buyWord","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"wordNum","type":"uint256"}],"name":"checkEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"enableBiggestBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"wordNum","type":"uint256"}],"name":"enterWord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getETHEntryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinNumOfTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumOfPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPotAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"happyHourMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListedCompetition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"manualResetPlayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removedBlackListCompetition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removedBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetBiggestBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetEntriesCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setExtraSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumOfTokensToHoldToEnter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeBps","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeBps","type":"uint256"},{"internalType":"uint256","name":"marketingFeeBps","type":"uint256"},{"internalType":"uint256","name":"potFeeBps","type":"uint256"},{"internalType":"uint256","name":"devFeeBps","type":"uint256"}],"name":"setTaxPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"},{"internalType":"address payable","name":"newMarketingWallet","type":"address"},{"internalType":"address payable","name":"newBuyBackWallet","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateETHFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newPotAddress","type":"address"}],"name":"updatePotAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vamos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052602054602155602254602355602454602555602654602755602854602955602c54602d556039805461ffff191690556200003e3362000465565b60408051808201909152600d81526c1399595908119bdc8814d95959609a1b6020820152601d90620000719082620005be565b506040805180820190915260078152662450485241534560c81b6020820152601e906200009f9082620005be565b50601f805460ff1916600917905566038d7ea4c68000601a819055620000c8906000196200068a565b620000d690600019620006c3565b601b8190556512309ce540006035556501d1a94a2000603681905567011c37937e08000060345560006020819055602181905560c86022819055602355610190602481905560255561012c6026819055602755606460288190556029556103e8602c819055602d55603091909155602f805460ff60a81b1916600160a81b1790556001906200016d6000546001600160a01b031690565b6001600160a01b03168152602080820192909252604090810160002092909255601680546001600160a01b0319908116736e778ee54a3275745998c96cc9c256a617561ef21790915560178054821673b0783ff5f4c8c180e51eabdf2203cd63cef377a217905560188054821673527d35212d4754f141a438f18a097d716212769017905560198054909116735e0e21053f0c05f782f2d35bc1495ec26dee52f5179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d928392839263c45a01559260048082019392918290030181865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002879190620006dd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb9190620006dd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f9190620006dd565b602f80546001600160a01b03199081166001600160a01b0393841617909155602e8054909116918316919091179055600160046000620003b76000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600490925290208054909116600117905562000401620004b5565b6000546001600160a01b03166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601a546040516200045591815260200190565b60405180910390a350506200072a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805142602080830191909152448284015233606090811b6001600160601b0319169083015282516054818403018152607490920190925280519101206000906200050490603c906200068a565b9050620005138160016200070f565b60375550565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200054457607f821691505b6020821081036200056557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005b957600081815260208120601f850160051c81016020861015620005945750805b601f850160051c820191505b81811015620005b557828155600101620005a0565b5050505b505050565b81516001600160401b03811115620005da57620005da62000519565b620005f281620005eb84546200052f565b846200056b565b602080601f8311600181146200062a5760008415620006115750858301515b600019600386901b1c1916600185901b178555620005b5565b600085815260208120601f198616915b828110156200065b578886015182559484019460019091019084016200063a565b50858210156200067a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620006a857634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620006d857620006d8620006ad565b500390565b600060208284031215620006f057600080fd5b81516001600160a01b03811681146200070857600080fd5b9392505050565b60008219821115620007255762000725620006ad565b500190565b61534f806200073a6000396000f3fe6080604052600436106104775760003560e01c806388f820201161024a578063be9ace7411610139578063e1244745116100b6578063f2fde38b1161007a578063f2fde38b14610d70578063f66047e214610d90578063fb6287d214610da6578063fe2b6bc614610dc6578063fe575a8714610ddb57600080fd5b8063e124474514610cd8578063e470aee414610d05578063ea1644d514610d1b578063ea2f0b3714610d3b578063eb45e70914610d5b57600080fd5b8063d12a7688116100fd578063d12a768814610c31578063d289770714610c47578063d785f38714610c5d578063dd62ed3e14610c73578063dd84974b14610cb957600080fd5b8063be9ace7414610bb4578063bf8fcfca14610bca578063c49b9a8014610be8578063c693ec8614610c08578063c9e3c0a314610c1b57600080fd5b8063a5ece941116101c7578063ac1005431161018b578063ac10054314610b11578063ae3813a914610b31578063bb47221914610b51578063bb8f269514610b66578063bc3a002214610b9f57600080fd5b8063a5ece94114610a90578063a6af8fcf14610ab0578063a6eda4e214610ac5578063a9059cbb14610adb578063aa45026b14610afb57600080fd5b806395d89b411161020e57806395d89b4114610a0c5780639725cd5b14610a2157806397bfcda314610a365780639e0a781014610a56578063a457c2d714610a7057600080fd5b806388f82020146109695780638da5cb5b146109a25780638eb6889f146109c05780638f9a55c0146109d657806391692909146109ec57600080fd5b8063437823ec116103665780635cfde6ba116102e35780636bc87c3a116102a75780636bc87c3a146108de57806370a08231146108f4578063715018a614610914578063737fd04f146109295780637c02b7e71461094957600080fd5b80635cfde6ba1461083e57806365a5310b1461085e57806366ced6021461087e57806366e930b31461089e5780636a570249146108be57600080fd5b80635342acb41161032a5780635342acb41461079057806355739b77146107c9578063565429de146107e957806357e24968146107fe5780635ba4ccf21461081e57600080fd5b8063437823ec146106ef5780634549b0391461070f57806349bd5a5e1461072f5780634a74bb021461074f57806352390c021461077057600080fd5b80632d838119116103f457806333927289116103b857806333927289146106645780633685d4191461067957806339509351146106995780633ad10ef6146106b95780633b124fe7146106d957600080fd5b80632d838119146105d75780632f81a71f146105f75780632ffdea3f1461060c578063313ce5671461062257806331ff4c0e1461064457600080fd5b806318160ddd1161043b57806318160ddd1461054c5780631c54e92b146105615780631cd348c01461058157806322976e0d146105a157806323b872dd146105b757600080fd5b806306fdde031461048357806308a8eac8146104ae578063095ea7b3146104c557806313114a9d146104f55780631694505e1461051457600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610e14565b6040516104a59190614cd6565b60405180910390f35b3480156104ba57600080fd5b506104c3610ea6565b005b3480156104d157600080fd5b506104e56104e0366004614d40565b610efd565b60405190151581526020016104a5565b34801561050157600080fd5b50601c545b6040519081526020016104a5565b34801561052057600080fd5b50602e54610534906001600160a01b031681565b6040516001600160a01b0390911681526020016104a5565b34801561055857600080fd5b50601a54610506565b34801561056d57600080fd5b506104c361057c366004614d6c565b610f14565b34801561058d57600080fd5b50601954610534906001600160a01b031681565b3480156105ad57600080fd5b5061050660245481565b3480156105c357600080fd5b506104e56105d2366004614d89565b610ff6565b3480156105e357600080fd5b506105066105f2366004614dca565b61105f565b34801561060357600080fd5b506104c36110e3565b34801561061857600080fd5b50610506602b5481565b34801561062e57600080fd5b50601f5460405160ff90911681526020016104a5565b34801561065057600080fd5b506104c361065f366004614df8565b611136565b34801561067057600080fd5b50603654610506565b34801561068557600080fd5b506104c3610694366004614d6c565b61118f565b3480156106a557600080fd5b506104e56106b4366004614d40565b611345565b3480156106c557600080fd5b50601854610534906001600160a01b031681565b3480156106e557600080fd5b5061050660205481565b3480156106fb57600080fd5b506104c361070a366004614d6c565b61137b565b34801561071b57600080fd5b5061050661072a366004614e14565b6113c9565b34801561073b57600080fd5b50602f54610534906001600160a01b031681565b34801561075b57600080fd5b50602f546104e590600160a81b900460ff1681565b34801561077c57600080fd5b506104c361078b366004614d6c565b61145c565b34801561079c57600080fd5b506104e56107ab366004614d6c565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156107d557600080fd5b506104c36107e4366004614dca565b6115af565b3480156107f557600080fd5b50603854610506565b34801561080a57600080fd5b506104c3610819366004614dca565b61161e565b34801561082a57600080fd5b506104c3610839366004614d6c565b61164d565b34801561084a57600080fd5b506104c3610859366004614d40565b61169b565b34801561086a57600080fd5b50603d54610534906001600160a01b031681565b34801561088a57600080fd5b50601654610534906001600160a01b031681565b3480156108aa57600080fd5b506104c36108b9366004614d6c565b6117b6565b3480156108ca57600080fd5b506104c36108d9366004614dca565b611801565b3480156108ea57600080fd5b5061050660225481565b34801561090057600080fd5b5061050661090f366004614d6c565b611852565b34801561092057600080fd5b506104c36118b1565b34801561093557600080fd5b506104c3610944366004614e40565b6118e7565b34801561095557600080fd5b506104c3610964366004614d6c565b611a2e565b34801561097557600080fd5b506104e5610984366004614d6c565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156109ae57600080fd5b506000546001600160a01b0316610534565b3480156109cc57600080fd5b50610506603a5481565b3480156109e257600080fd5b5061050660355481565b3480156109f857600080fd5b506104c3610a07366004614dca565b611a7a565b348015610a1857600080fd5b50610498611aa9565b348015610a2d57600080fd5b506104c3611ab8565b348015610a4257600080fd5b506104c3610a51366004614dca565b611c50565b348015610a6257600080fd5b506033546104e59060ff1681565b348015610a7c57600080fd5b506104e5610a8b366004614d40565b611cdc565b348015610a9c57600080fd5b50601754610534906001600160a01b031681565b348015610abc57600080fd5b506104c3611d2b565b348015610ad157600080fd5b5061050660365481565b348015610ae757600080fd5b506104e5610af6366004614d40565b611d84565b348015610b0757600080fd5b5061050660285481565b348015610b1d57600080fd5b506104e5610b2c366004614d40565b611d91565b348015610b3d57600080fd5b506104c3610b4c366004614d6c565b611f94565b348015610b5d57600080fd5b506104c3611fdf565b348015610b7257600080fd5b506104e5610b81366004614d6c565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610bab57600080fd5b50603454610506565b348015610bc057600080fd5b50610506602a5481565b348015610bd657600080fd5b506016546001600160a01b0316610534565b348015610bf457600080fd5b506104c3610c03366004614e7b565b6123dc565b6104c3610c16366004614d40565b61245e565b348015610c2757600080fd5b50610506602c5481565b348015610c3d57600080fd5b5061050660305481565b348015610c5357600080fd5b50610506603c5481565b348015610c6957600080fd5b50610506603b5481565b348015610c7f57600080fd5b50610506610c8e366004614e96565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cc557600080fd5b506039546104e590610100900460ff1681565b348015610ce457600080fd5b50610506610cf3366004614dca565b60146020526000908152604090205481565b348015610d1157600080fd5b5061050660345481565b348015610d2757600080fd5b506104c3610d36366004614dca565b612656565b348015610d4757600080fd5b506104c3610d56366004614d6c565b6126db565b348015610d6757600080fd5b506104c3612726565b348015610d7c57600080fd5b506104c3610d8b366004614d6c565b612779565b348015610d9c57600080fd5b5061050660265481565b348015610db257600080fd5b506104c3610dc1366004614ecf565b612811565b348015610dd257600080fd5b506104c361287a565b348015610de757600080fd5b506104e5610df6366004614d6c565b6001600160a01b031660009081526006602052604090205460ff1690565b6060601d8054610e2390614f1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f90614f1a565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610ed090614f54565b60405180910390fd5b602f805460ff60a81b191690556000602281905560248190556028556101f4602655565b6000610f0a338484612902565b5060015b92915050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600860209081526040808320805460ff1990811690915560098352818420805482169055600a8352818420805482169055600b8352818420805482169055600c8352818420805482169055600d8352818420805482169055600e8352818420805482169055600f8352818420805482169055601083528184208054821690556011835281842080548216905560128352818420805482169055601390925290912080549091169055565b6000611003848484612a26565b6110558433611050856040518060600160405280602881526020016152ad602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612cd6565b612902565b5060019392505050565b6000601b548211156110c65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ed0565b60006110d0612d02565b90506110dc8382612d25565b9392505050565b6000546001600160a01b0316331461110d5760405162461bcd60e51b8152600401610ed090614f54565b6000603a55601754603d80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146111605760405162461bcd60e51b8152600401610ed090614f54565b42603b819055611171908290614f9f565b603c5550603980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111b95760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03811660009081526005602052604090205460ff166112215760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ed0565b60005b60155481101561134157816001600160a01b03166015828154811061124b5761124b614fb7565b6000918252602090912001546001600160a01b03160361132f576015805461127590600190614fcd565b8154811061128557611285614fb7565b600091825260209091200154601580546001600160a01b0390921691839081106112b1576112b1614fb7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055601580548061130957611309614fe4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061133981614ffa565b915050611224565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f0a9185906110509086612d31565b6000546001600160a01b031633146113a55760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000601a5483111561141d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ed0565b8161143f57600061142d84612d3d565b50969850610f0e975050505050505050565b600061144a84612d3d565b50959850610f0e975050505050505050565b6000546001600160a01b031633146114865760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03811660009081526005602052604090205460ff16156114ef5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ed0565b6001600160a01b03811660009081526001602052604090205415611549576001600160a01b03811660009081526001602052604090205461152f9061105f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556015805491820181559091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d95760405162461bcd60e51b8152600401610ed090614f54565b600081116116195760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b6044820152606401610ed0565b603055565b6000546001600160a01b031633146116485760405162461bcd60e51b8152600401610ed090614f54565b603655565b6000546001600160a01b031633146116775760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b60335460ff1615156001146116e55760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610ed0565b6001600160a01b03821660009081526007602052604090205460ff1615156001036117525760405162461bcd60e51b815260206004820152601b60248201527f426c61636b6c697374656420666f7220636f6d7065746974696f6e00000000006044820152606401610ed0565b60365461175e83611852565b10156117ac5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e206163636f756e74000000006044820152606401610ed0565b6113418282612e3c565b6000546001600160a01b031633146117e05760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610ed090614f54565b61271081111561184d5760405162461bcd60e51b8152600401610ed090615013565b602a55565b6001600160a01b03811660009081526005602052604081205460ff161561188f57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f0e9061105f565b6000546001600160a01b031633146118db5760405162461bcd60e51b8152600401610ed090614f54565b6118e56000613941565b565b6000546001600160a01b031633146119115760405162461bcd60e51b8152600401610ed090614f54565b6127108511156119335760405162461bcd60e51b8152600401610ed090615013565b6127108411156119555760405162461bcd60e51b8152600401610ed090615013565b6127108311156119775760405162461bcd60e51b8152600401610ed090615013565b6127108211156119995760405162461bcd60e51b8152600401610ed090615013565b6127108111156119bb5760405162461bcd60e51b8152600401610ed090615013565b602085905560228490556024839055602682905560288190558082866119e18688614f9f565b6119eb9190614f9f565b6119f59190614f9f565b6119ff9190614f9f565b602c5562027100602c541115611a275760405162461bcd60e51b8152600401610ed090615013565b5050505050565b6000546001600160a01b03163314611a585760405162461bcd60e51b8152600401610ed090614f54565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611aa45760405162461bcd60e51b8152600401610ed090614f54565b603455565b6060601e8054610e2390614f1a565b6000546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610ed090614f54565b6000611aed30611852565b30600090815260016020526040902054909150611b0a9082613991565b306000908152600160208190526040822092909255611b57918391611b376000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490612d31565b60016000611b6d6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526002909152902054611ba49082613991565b306000908152600260208190526040822092909255611bd1918391611b376000546001600160a01b031690565b60026000611be76000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611c136000546001600160a01b031690565b6001600160a01b0316306001600160a01b03166000805160206152d583398151915283604051611c4591815260200190565b60405180910390a350565b6000546001600160a01b03163314611c7a5760405162461bcd60e51b8152600401610ed090614f54565b47611c8d6000546001600160a01b031690565b6001600160a01b03166108fc6064611ca58585615038565b611caf9190615057565b6040518115909202916000818181858888f19350505050158015611cd7573d6000803e3d6000fd5b505050565b6000610f0a3384611050856040518060600160405280602581526020016152f5602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612cd6565b6000546001600160a01b03163314611d555760405162461bcd60e51b8152600401610ed090614f54565b60005b600c8111611d815760008181526014602052604081205580611d7981614ffa565b915050611d58565b50565b6000610f0a338484612a26565b600081600103611dbd57506001600160a01b03821660009081526008602052604090205460ff16610f0e565b81600203611de757506001600160a01b03821660009081526009602052604090205460ff16610f0e565b81600303611e1157506001600160a01b0382166000908152600a602052604090205460ff16610f0e565b81600403611e3b57506001600160a01b0382166000908152600b602052604090205460ff16610f0e565b81600503611e6557506001600160a01b0382166000908152600c602052604090205460ff16610f0e565b81600603611e8f57506001600160a01b0382166000908152600d602052604090205460ff16610f0e565b81600703611eb957506001600160a01b0382166000908152600e602052604090205460ff16610f0e565b81600803611ee357506001600160a01b0382166000908152600f602052604090205460ff16610f0e565b81600903611f0d57506001600160a01b03821660009081526010602052604090205460ff16610f0e565b81600a03611f3757506001600160a01b03821660009081526011602052604090205460ff16610f0e565b81600b03611f6157506001600160a01b03821660009081526012602052604090205460ff16610f0e565b81600c03611f8b57506001600160a01b03821660009081526013602052604090205460ff16610f0e565b50600092915050565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146120095760405162461bcd60e51b8152600401610ed090614f54565b60005b6038548110156123cf576000600860006038848154811061202f5761202f614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460099183918590811061207d5761207d614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600a918391859081106120cb576120cb614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600b9183918590811061211957612119614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600c9183918590811061216757612167614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600d918391859081106121b5576121b5614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600e9183918590811061220357612203614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600f9183918590811061225157612251614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460109183918590811061229f5761229f614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191692151592909217909155603880546011918391859081106122ed576122ed614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460129183918590811061233b5761233b614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460139183918590811061238957612389614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806123c781614ffa565b91505061200c565b506118e560386000614ca4565b6000546001600160a01b031633146124065760405162461bcd60e51b8152600401610ed090614f54565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061245390831515815260200190565b60405180910390a150565b6019546033546001600160a01b039091169060ff1615156001146124b75760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610ed0565b6001600160a01b03831660009081526007602052604090205460ff1615156001036125245760405162461bcd60e51b815260206004820152601b60248201527f426c61636b6c697374656420666f7220636f6d7065746974696f6e00000000006044820152606401610ed0565b6034543331101561256a5760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f75676820455448202160801b6044820152606401610ed0565b60345434146125ae5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610ed0565b6000816001600160a01b03163460405160006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b50509050806126465760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610ed0565b6126508484612e3c565b50505050565b6000546001600160a01b031633146126805760405162461bcd60e51b8152600401610ed090614f54565b6509184e72a0008110156126d65760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610ed0565b603555565b6000546001600160a01b031633146127055760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146127505760405162461bcd60e51b8152600401610ed090614f54565b602f805460ff60a81b191690556000196035556000602481905560288190556022819055602655565b6000546001600160a01b031633146127a35760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b0381166128085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ed0565b611d8181613941565b6000546001600160a01b0316331461283b5760405162461bcd60e51b8152600401610ed090614f54565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b6000546001600160a01b031633146128a45760405162461bcd60e51b8152600401610ed090614f54565b60335460ff16156128ea5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610ed0565b6033805460ff19166001179055426031819055603255565b6001600160a01b0383166129645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ed0565b6001600160a01b0382166129c55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ed0565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612a8a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ed0565b6001600160a01b038216612aec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ed0565b60008111612b4e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ed0565b6001600160a01b03831660009081526006602052604090205460ff161515600114801590612b9a57506001600160a01b03821660009081526006602052604090205460ff161515600114155b612bdf5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610ed0565b6000612bea30611852565b6039805460ff19169055602f549091506001600160a01b0390811690841603612c1b576039805460ff191660011790555b603054602f5490821015906001600160a01b03868116911614801590612c3e5750805b8015612c545750602f54600160a01b900460ff16155b8015612c695750602f54600160a81b900460ff165b15612c7757612c778261399d565b6001600160a01b03851660009081526004602052604090205460019060ff1680612cb957506001600160a01b03851660009081526004602052604090205460ff165b15612cc2575060005b612cce86868684613c14565b505050505050565b60008184841115612cfa5760405162461bcd60e51b8152600401610ed09190614cd6565b505050900390565b6000806000612d0f613da9565b9092509050612d1e8282612d25565b9250505090565b60006110dc8284615057565b60006110dc8284614f9f565b6000806000806000806000806000612d846040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612d8d8b613f2b565b866000018760200188604001896060018a6080018b60a0018681525086815250868152508681525086815250868152505050505050506000806000612df28e85602001518660400151876060015188608001518960a00151612ded612d02565b613fba565b92509250925082828286600001518760200151886040015189606001518a608001518b60a001519c509c509c509c509c509c509c509c509c50505050509193959799909294969850565b80600103612f25576001600160a01b03821660009081526008602052604090205460ff161515600103612e815760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660008181526008602090815260408220805460ff19166001908117909155603880548083019091557f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561990180546001600160a01b031916909417909355828252601490527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c8054909190612f1f908490614f9f565b90915550505b80600203613010576001600160a01b03821660009081526009602052604090205460ff161515600103612f6a5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526008602052604090205460ff161515600114612fa75760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526009602090815260408220805460ff191660019081179091556002835260149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a80549192909161300a908490614f9f565b90915550505b806003036130fb576001600160a01b0382166000908152600a602052604090205460ff1615156001036130555760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526009602052604090205460ff1615156001146130925760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600a602090815260408220805460ff191660019081179091556003835260149091527f63d87a887046e0430be80fdeb014107d7198c879cbf2cddf39a6df195c86cb388054919290916130f5908490614f9f565b90915550505b806004036131e6576001600160a01b0382166000908152600b602052604090205460ff1615156001036131405760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600a602052604090205460ff16151560011461317d5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600b602090815260408220805460ff191660019081179091556004835260149091527f52102136546d97ed3f65ec1070a32935d3048ea12f310d29c378dc9d6555c0d68054919290916131e0908490614f9f565b90915550505b806005036132d1576001600160a01b0382166000908152600c602052604090205460ff16151560010361322b5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600b602052604090205460ff1615156001146132685760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600c602090815260408220805460ff191660019081179091556005835260149091527f116126bec5aaa49b347e966c49378cf0c441de9121e306ea3d824584a9615aa28054919290916132cb908490614f9f565b90915550505b806006036133bc576001600160a01b0382166000908152600d602052604090205460ff1615156001036133165760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600c602052604090205460ff1615156001146133535760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600d602090815260408220805460ff191660019081179091556006835260149091527fe1f6b6a5fb7e47dad87547d4b0671e7e995a1dae22fbe5b3b5d10e2a77ed7aff8054919290916133b6908490614f9f565b90915550505b806007036134a7576001600160a01b0382166000908152600e602052604090205460ff1615156001036134015760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600d602052604090205460ff16151560011461343e5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600e602090815260408220805460ff191660019081179091556007835260149091527f904977a779b22381a36c6463d4166ef55ee8cb3392c83093cb1750f1a00c9d948054919290916134a1908490614f9f565b90915550505b80600803613592576001600160a01b0382166000908152600f602052604090205460ff1615156001036134ec5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600e602052604090205460ff1615156001146135295760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600f602090815260408220805460ff191660019081179091556008835260149091527f125fdacc24f94fb724c0c32a4eab75d67204551eb2448dadf875d535a744972680549192909161358c908490614f9f565b90915550505b8060090361367d576001600160a01b03821660009081526010602052604090205460ff1615156001036135d75760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600f602052604090205460ff1615156001146136145760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526010602090815260408220805460ff191660019081179091556009835260149091527ff517404d914a19d455440d961937db67771e4bfb0b4293ff6fd7c75855208c19805491929091613677908490614f9f565b90915550505b80600a03613768576001600160a01b03821660009081526011602052604090205460ff1615156001036136c25760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526010602052604090205460ff1615156001146136ff5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526011602090815260408220805460ff19166001908117909155600a835260149091527f65f9512343925c57130fd77667cb42fc83560c400ede0c87f3de7c6c27cf09a6805491929091613762908490614f9f565b90915550505b80600b03613853576001600160a01b03821660009081526012602052604090205460ff1615156001036137ad5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526011602052604090205460ff1615156001146137ea5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526012602090815260408220805460ff19166001908117909155600b835260149091527fdabe84bb17a8774762b6726edd7eb728da1732e1ab123804fc9345b7300e0a2e80549192909161384d908490614f9f565b90915550505b80600c03611341576001600160a01b03821660009081526013602052604090205460ff1615156001036138985760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526012602052604090205460ff1615156001146138d55760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526013602090815260408220805460ff19166001908117909155600c835260149091527f3a61d736b87fed11cf463325a3a6df55734cfb04ef5868e0125df26f708fa9c5805491929091613938908490614f9f565b90915550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006110dc8284614fcd565b602f805460ff60a01b1916600160a01b179055602254602c546000916139ce916139c8908590612d25565b90614068565b90506139db816002612d25565b905060006139e98383613991565b9050476139f582614074565b602254600090613a06906002612d25565b9050600081602054602854602654602454613a219190614f9f565b613a2b9190614f9f565b613a359190614f9f565b613a3f9190614f9f565b90506000613a4d4785613991565b90506000613a7083613a6a602c548561406890919063ffffffff16565b90612d25565b9050613a8b846139c8602c5484612d2590919063ffffffff16565b90506000613a994783613991565b90506000613ab4602254602c5461399190919063ffffffff16565b90506000613ad16026546139c88486612d2590919063ffffffff16565b6016546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613b0c573d6000803e3d6000fd5b50602454600090613b21906139c88686612d25565b6017546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613b5c573d6000803e3d6000fd5b50602854600090613b71906139c88787612d25565b6018546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613bac573d6000803e3d6000fd5b50613bb78c876141c6565b604080518d8152602081018790529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602f805460ff60a01b191690555050505050505050505050565b80613c2157613c21614294565b6001600160a01b03841660009081526005602052604090205460ff168015613c6257506001600160a01b03831660009081526005602052604090205460ff16155b15613c7757613c7284848461431d565b613d75565b6001600160a01b03841660009081526005602052604090205460ff16158015613cb857506001600160a01b03831660009081526005602052604090205460ff165b15613cc857613c7284848461446c565b6001600160a01b03841660009081526005602052604090205460ff16158015613d0a57506001600160a01b03831660009081526005602052604090205460ff16155b15613d1a57613c72848484614532565b6001600160a01b03841660009081526005602052604090205460ff168015613d5a57506001600160a01b03831660009081526005602052604090205460ff165b15613d6a57613c728484846148da565b613d75848484614532565b8061265057612650602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55565b601b54601a546000918291825b601554811015613efb57826001600060158481548110613dd857613dd8614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613e435750816002600060158481548110613e1c57613e1c614fb7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613e5957601b54601a54945094505050509091565b613e9f6001600060158481548110613e7357613e73614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613991565b9250613ee76002600060158481548110613ebb57613ebb614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613991565b915080613ef381614ffa565b915050613db6565b50601a54601b54613f0b91612d25565b821015613f2257601b54601a549350935050509091565b90939092509050565b6000806000806000806000613f3f8861496a565b90506000613f4c89614987565b90506000613f598a6149a4565b90506000613f668b6149f8565b90506000613f738c614a15565b90506000613f818d87613991565b9050613f8d8186613991565b9050613fa582613f9f85818589613991565b90613991565b9d959c50939a50919850965094509092505050565b6000808080613fc98b86614068565b90506000613fd78b87614068565b90506000613fe58b88614068565b90506000613ff38b89614068565b905060006140018b8a614068565b9050600061400f8b8b614068565b9050600061401d8787613991565b90506140298186613991565b90506140358185613991565b90506140418184613991565b905061404d8183613991565b96995095975093955050505050509750975097945050505050565b60006110dc8284615038565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106140a9576140a9614fb7565b6001600160a01b03928316602091820292909201810191909152602e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141269190615102565b8160018151811061413957614139614fb7565b6001600160a01b039283166020918202929092010152602e5461415f9130911684612902565b602e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790614198908590600090869030904290600401615163565b600060405180830381600087803b1580156141b257600080fd5b505af1158015612cce573d6000803e3d6000fd5b602e546141de9030906001600160a01b031684612902565b602e546001600160a01b031663f305d7198230856000806142076000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561426f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a27919061519f565b6020541580156142a45750602254155b80156142b05750602454155b80156142bc5750602654155b80156142c85750602854155b156142cf57565b6020805460215560228054602355602480546025556026805460275560288054602955602c8054602d55602a8054602b55600096879055948690559185905591849055908390559082905555565b60008060008060008060008060006143348a612d3d565b98509850985098509850985098509850985061437e8a600260008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b038d166000908152600260209081526040808320939093556001905220546143ad908a613991565b6001600160a01b03808e1660009081526001602052604080822093909355908d16815220546143dc9089612d31565b6001600160a01b038c166000908152600160205260409020556143fe84614a32565b61440783614a32565b61441082614a32565b61441981614a32565b6144238786614aba565b8a6001600160a01b03168c6001600160a01b03166000805160206152d58339815191528860405161445691815260200190565b60405180910390a3505050505050505050505050565b60008060008060008060008060006144838a612d3d565b9850985098509850985098509850985098506144cd89600160008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b03808e16600090815260016020908152604080832094909455918e168152600290915220546145039087612d31565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546143dc9089612d31565b60008060008060008060008060006145498a612d3d565b985098509850985098509850985098509850603960019054906101000a900460ff1615156001151503614580576145808b8b614ade565b60335460ff1615156001148015906145a65750602f546001600160a01b038c8116911614155b80156145c057506000546001600160a01b038d8116911614155b80156145da57506000546001600160a01b038c8116911614155b156146c0576001600160a01b038c16600090815260016020526040902054614602908a613991565b6001600160a01b03808e1660009081526001602052604080822093909355908d16815220546146319089612d31565b6001600160a01b03808d1660008181526001602052604090819020939093559151908e16906000805160206152d583398151915290614673908a815260200190565b60405180910390a36146bb8b6001600160a01b031660009081526006602090815260408083208054600160ff1991821681179092556007909352922080549091169091179055565b6148cc565b60335460ff16151560011480156146f157504260375460315460b46146e59190614f9f565b6146ef9190614f9f565b115b801561470b5750602f546001600160a01b038c8116911614155b801561472557506000546001600160a01b038d8116911614155b801561473f57506000546001600160a01b038c8116911614155b15614767576001600160a01b038c16600090815260016020526040902054614602908a613991565b6000546001600160a01b038d81169116148061479057506000546001600160a01b038c81169116145b15614830576001600160a01b038b166000908152600160205260409020546147b8908a612d31565b6001600160a01b03808d1660009081526001602052604080822093909355908e16815220546147e7908a613991565b6001600160a01b038d81166000818152600160209081526040918290209490945551898152918e169290916000805160206152d5833981519152910160405180910390a36148cc565b602f546001600160a01b038c81169116146148a95760355461485b8b6148558e611852565b90612d31565b11156148a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610ed0565b6001600160a01b038c166000908152600160205260409020546143ad908a613991565b505050505050505050505050565b60008060008060008060008060006148f18a612d3d565b98509850985098509850985098509850985061493b8a600260008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b038d166000908152600260209081526040808320939093556001905220546144cd908a613991565b6000610f0e612710613a6a6020548561406890919063ffffffff16565b6000610f0e612710613a6a6022548561406890919063ffffffff16565b60395460009060ff1615156001036149dd57610f0e612710613a6a6149d6602a54602454612d3190919063ffffffff16565b8590614068565b610f0e612710613a6a6024548561406890919063ffffffff16565b6000610f0e612710613a6a6026548561406890919063ffffffff16565b6000610f0e612710613a6a6028548561406890919063ffffffff16565b6000614a3c612d02565b90506000614a4a8383614068565b30600090815260016020526040902054909150614a679082612d31565b3060009081526001602090815260408083209390935560059052205460ff1615611cd75730600090815260026020526040902054614aa59084612d31565b30600090815260026020526040902055505050565b601b54614ac79083613991565b601b55601c54614ad79082612d31565b601c555050565b6040805160028082526060820183526000926020830190803683375050602e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b6c9190615102565b81600081518110614b7f57614b7f614fb7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614bb357614bb3614fb7565b6001600160a01b039283166020918202929092010152602e546040516307c0329d60e21b81526000929190911690631f00ca7490614bf790869086906004016151cd565b600060405180830381865afa158015614c14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3c91908101906151ee565b600081518110614c4e57614c4e614fb7565b60200260200101519050603a5481118015614c775750602f546001600160a01b03858116911614155b1561265057603d80546001600160a01b0386166001600160a01b0319909116179055603a81905550505050565b5080546000825590600052602060002090810190611d8191905b80821115614cd25760008155600101614cbe565b5090565b600060208083528351808285015260005b81811015614d0357858101830151858201604001528201614ce7565b81811115614d15576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d8157600080fd5b60008060408385031215614d5357600080fd5b8235614d5e81614d2b565b946020939093013593505050565b600060208284031215614d7e57600080fd5b81356110dc81614d2b565b600080600060608486031215614d9e57600080fd5b8335614da981614d2b565b92506020840135614db981614d2b565b929592945050506040919091013590565b600060208284031215614ddc57600080fd5b5035919050565b80358015158114614df357600080fd5b919050565b60008060408385031215614e0b57600080fd5b614d5e83614de3565b60008060408385031215614e2757600080fd5b82359150614e3760208401614de3565b90509250929050565b600080600080600060a08688031215614e5857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215614e8d57600080fd5b6110dc82614de3565b60008060408385031215614ea957600080fd5b8235614eb481614d2b565b91506020830135614ec481614d2b565b809150509250929050565b600080600060608486031215614ee457600080fd5b8335614eef81614d2b565b92506020840135614eff81614d2b565b91506040840135614f0f81614d2b565b809150509250925092565b600181811c90821680614f2e57607f821691505b602082108103614f4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614fb257614fb2614f89565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614fdf57614fdf614f89565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161500c5761500c614f89565b5060010190565b6020808252600b908201526a496e76616c69642062707360a81b604082015260600190565b600081600019048311821515161561505257615052614f89565b500290565b60008261507457634e487b7160e01b600052601260045260246000fd5b500490565b602080825260139082015272165bdd48185b1c9958591e48195b9d195c9959606a1b604082015260600190565b60208082526026908201527f596f752068617665206e6f7420656e7465726564207468652070726576696f756040820152651cc81ddbdc9960d21b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561511457600080fd5b81516110dc81614d2b565b600081518084526020808501945080840160005b838110156151585781516001600160a01b031687529582019590820190600101615133565b509495945050505050565b85815284602082015260a06040820152600061518260a083018661511f565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156151b457600080fd5b8351925060208401519150604084015190509250925092565b8281526040602082015260006151e6604083018461511f565b949350505050565b6000602080838503121561520157600080fd5b825167ffffffffffffffff8082111561521957600080fd5b818501915085601f83011261522d57600080fd5b81518181111561523f5761523f6150ec565b8060051b604051601f19603f83011681018181108582111715615264576152646150ec565b60405291825284820192508381018501918883111561528257600080fd5b938501935b828510156152a057845184529385019392850192615287565b9897505050505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035bf10f0cc23902203ddb57bf21dc22105ddbc0a47fd13561bb72518bc5a1d7964736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106104775760003560e01c806388f820201161024a578063be9ace7411610139578063e1244745116100b6578063f2fde38b1161007a578063f2fde38b14610d70578063f66047e214610d90578063fb6287d214610da6578063fe2b6bc614610dc6578063fe575a8714610ddb57600080fd5b8063e124474514610cd8578063e470aee414610d05578063ea1644d514610d1b578063ea2f0b3714610d3b578063eb45e70914610d5b57600080fd5b8063d12a7688116100fd578063d12a768814610c31578063d289770714610c47578063d785f38714610c5d578063dd62ed3e14610c73578063dd84974b14610cb957600080fd5b8063be9ace7414610bb4578063bf8fcfca14610bca578063c49b9a8014610be8578063c693ec8614610c08578063c9e3c0a314610c1b57600080fd5b8063a5ece941116101c7578063ac1005431161018b578063ac10054314610b11578063ae3813a914610b31578063bb47221914610b51578063bb8f269514610b66578063bc3a002214610b9f57600080fd5b8063a5ece94114610a90578063a6af8fcf14610ab0578063a6eda4e214610ac5578063a9059cbb14610adb578063aa45026b14610afb57600080fd5b806395d89b411161020e57806395d89b4114610a0c5780639725cd5b14610a2157806397bfcda314610a365780639e0a781014610a56578063a457c2d714610a7057600080fd5b806388f82020146109695780638da5cb5b146109a25780638eb6889f146109c05780638f9a55c0146109d657806391692909146109ec57600080fd5b8063437823ec116103665780635cfde6ba116102e35780636bc87c3a116102a75780636bc87c3a146108de57806370a08231146108f4578063715018a614610914578063737fd04f146109295780637c02b7e71461094957600080fd5b80635cfde6ba1461083e57806365a5310b1461085e57806366ced6021461087e57806366e930b31461089e5780636a570249146108be57600080fd5b80635342acb41161032a5780635342acb41461079057806355739b77146107c9578063565429de146107e957806357e24968146107fe5780635ba4ccf21461081e57600080fd5b8063437823ec146106ef5780634549b0391461070f57806349bd5a5e1461072f5780634a74bb021461074f57806352390c021461077057600080fd5b80632d838119116103f457806333927289116103b857806333927289146106645780633685d4191461067957806339509351146106995780633ad10ef6146106b95780633b124fe7146106d957600080fd5b80632d838119146105d75780632f81a71f146105f75780632ffdea3f1461060c578063313ce5671461062257806331ff4c0e1461064457600080fd5b806318160ddd1161043b57806318160ddd1461054c5780631c54e92b146105615780631cd348c01461058157806322976e0d146105a157806323b872dd146105b757600080fd5b806306fdde031461048357806308a8eac8146104ae578063095ea7b3146104c557806313114a9d146104f55780631694505e1461051457600080fd5b3661047e57005b600080fd5b34801561048f57600080fd5b50610498610e14565b6040516104a59190614cd6565b60405180910390f35b3480156104ba57600080fd5b506104c3610ea6565b005b3480156104d157600080fd5b506104e56104e0366004614d40565b610efd565b60405190151581526020016104a5565b34801561050157600080fd5b50601c545b6040519081526020016104a5565b34801561052057600080fd5b50602e54610534906001600160a01b031681565b6040516001600160a01b0390911681526020016104a5565b34801561055857600080fd5b50601a54610506565b34801561056d57600080fd5b506104c361057c366004614d6c565b610f14565b34801561058d57600080fd5b50601954610534906001600160a01b031681565b3480156105ad57600080fd5b5061050660245481565b3480156105c357600080fd5b506104e56105d2366004614d89565b610ff6565b3480156105e357600080fd5b506105066105f2366004614dca565b61105f565b34801561060357600080fd5b506104c36110e3565b34801561061857600080fd5b50610506602b5481565b34801561062e57600080fd5b50601f5460405160ff90911681526020016104a5565b34801561065057600080fd5b506104c361065f366004614df8565b611136565b34801561067057600080fd5b50603654610506565b34801561068557600080fd5b506104c3610694366004614d6c565b61118f565b3480156106a557600080fd5b506104e56106b4366004614d40565b611345565b3480156106c557600080fd5b50601854610534906001600160a01b031681565b3480156106e557600080fd5b5061050660205481565b3480156106fb57600080fd5b506104c361070a366004614d6c565b61137b565b34801561071b57600080fd5b5061050661072a366004614e14565b6113c9565b34801561073b57600080fd5b50602f54610534906001600160a01b031681565b34801561075b57600080fd5b50602f546104e590600160a81b900460ff1681565b34801561077c57600080fd5b506104c361078b366004614d6c565b61145c565b34801561079c57600080fd5b506104e56107ab366004614d6c565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156107d557600080fd5b506104c36107e4366004614dca565b6115af565b3480156107f557600080fd5b50603854610506565b34801561080a57600080fd5b506104c3610819366004614dca565b61161e565b34801561082a57600080fd5b506104c3610839366004614d6c565b61164d565b34801561084a57600080fd5b506104c3610859366004614d40565b61169b565b34801561086a57600080fd5b50603d54610534906001600160a01b031681565b34801561088a57600080fd5b50601654610534906001600160a01b031681565b3480156108aa57600080fd5b506104c36108b9366004614d6c565b6117b6565b3480156108ca57600080fd5b506104c36108d9366004614dca565b611801565b3480156108ea57600080fd5b5061050660225481565b34801561090057600080fd5b5061050661090f366004614d6c565b611852565b34801561092057600080fd5b506104c36118b1565b34801561093557600080fd5b506104c3610944366004614e40565b6118e7565b34801561095557600080fd5b506104c3610964366004614d6c565b611a2e565b34801561097557600080fd5b506104e5610984366004614d6c565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156109ae57600080fd5b506000546001600160a01b0316610534565b3480156109cc57600080fd5b50610506603a5481565b3480156109e257600080fd5b5061050660355481565b3480156109f857600080fd5b506104c3610a07366004614dca565b611a7a565b348015610a1857600080fd5b50610498611aa9565b348015610a2d57600080fd5b506104c3611ab8565b348015610a4257600080fd5b506104c3610a51366004614dca565b611c50565b348015610a6257600080fd5b506033546104e59060ff1681565b348015610a7c57600080fd5b506104e5610a8b366004614d40565b611cdc565b348015610a9c57600080fd5b50601754610534906001600160a01b031681565b348015610abc57600080fd5b506104c3611d2b565b348015610ad157600080fd5b5061050660365481565b348015610ae757600080fd5b506104e5610af6366004614d40565b611d84565b348015610b0757600080fd5b5061050660285481565b348015610b1d57600080fd5b506104e5610b2c366004614d40565b611d91565b348015610b3d57600080fd5b506104c3610b4c366004614d6c565b611f94565b348015610b5d57600080fd5b506104c3611fdf565b348015610b7257600080fd5b506104e5610b81366004614d6c565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610bab57600080fd5b50603454610506565b348015610bc057600080fd5b50610506602a5481565b348015610bd657600080fd5b506016546001600160a01b0316610534565b348015610bf457600080fd5b506104c3610c03366004614e7b565b6123dc565b6104c3610c16366004614d40565b61245e565b348015610c2757600080fd5b50610506602c5481565b348015610c3d57600080fd5b5061050660305481565b348015610c5357600080fd5b50610506603c5481565b348015610c6957600080fd5b50610506603b5481565b348015610c7f57600080fd5b50610506610c8e366004614e96565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cc557600080fd5b506039546104e590610100900460ff1681565b348015610ce457600080fd5b50610506610cf3366004614dca565b60146020526000908152604090205481565b348015610d1157600080fd5b5061050660345481565b348015610d2757600080fd5b506104c3610d36366004614dca565b612656565b348015610d4757600080fd5b506104c3610d56366004614d6c565b6126db565b348015610d6757600080fd5b506104c3612726565b348015610d7c57600080fd5b506104c3610d8b366004614d6c565b612779565b348015610d9c57600080fd5b5061050660265481565b348015610db257600080fd5b506104c3610dc1366004614ecf565b612811565b348015610dd257600080fd5b506104c361287a565b348015610de757600080fd5b506104e5610df6366004614d6c565b6001600160a01b031660009081526006602052604090205460ff1690565b6060601d8054610e2390614f1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f90614f1a565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610ed090614f54565b60405180910390fd5b602f805460ff60a81b191690556000602281905560248190556028556101f4602655565b6000610f0a338484612902565b5060015b92915050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600860209081526040808320805460ff1990811690915560098352818420805482169055600a8352818420805482169055600b8352818420805482169055600c8352818420805482169055600d8352818420805482169055600e8352818420805482169055600f8352818420805482169055601083528184208054821690556011835281842080548216905560128352818420805482169055601390925290912080549091169055565b6000611003848484612a26565b6110558433611050856040518060600160405280602881526020016152ad602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612cd6565b612902565b5060019392505050565b6000601b548211156110c65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ed0565b60006110d0612d02565b90506110dc8382612d25565b9392505050565b6000546001600160a01b0316331461110d5760405162461bcd60e51b8152600401610ed090614f54565b6000603a55601754603d80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031633146111605760405162461bcd60e51b8152600401610ed090614f54565b42603b819055611171908290614f9f565b603c5550603980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146111b95760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03811660009081526005602052604090205460ff166112215760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ed0565b60005b60155481101561134157816001600160a01b03166015828154811061124b5761124b614fb7565b6000918252602090912001546001600160a01b03160361132f576015805461127590600190614fcd565b8154811061128557611285614fb7565b600091825260209091200154601580546001600160a01b0390921691839081106112b1576112b1614fb7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055601580548061130957611309614fe4565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061133981614ffa565b915050611224565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610f0a9185906110509086612d31565b6000546001600160a01b031633146113a55760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000601a5483111561141d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ed0565b8161143f57600061142d84612d3d565b50969850610f0e975050505050505050565b600061144a84612d3d565b50959850610f0e975050505050505050565b6000546001600160a01b031633146114865760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03811660009081526005602052604090205460ff16156114ef5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ed0565b6001600160a01b03811660009081526001602052604090205415611549576001600160a01b03811660009081526001602052604090205461152f9061105f565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556015805491820181559091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319169091179055565b6000546001600160a01b031633146115d95760405162461bcd60e51b8152600401610ed090614f54565b600081116116195760405162461bcd60e51b815260206004820152600d60248201526c56616c756520746f6f206c6f7760981b6044820152606401610ed0565b603055565b6000546001600160a01b031633146116485760405162461bcd60e51b8152600401610ed090614f54565b603655565b6000546001600160a01b031633146116775760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b60335460ff1615156001146116e55760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610ed0565b6001600160a01b03821660009081526007602052604090205460ff1615156001036117525760405162461bcd60e51b815260206004820152601b60248201527f426c61636b6c697374656420666f7220636f6d7065746974696f6e00000000006044820152606401610ed0565b60365461175e83611852565b10156117ac5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e7320696e206163636f756e74000000006044820152606401610ed0565b6113418282612e3c565b6000546001600160a01b031633146117e05760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461182b5760405162461bcd60e51b8152600401610ed090614f54565b61271081111561184d5760405162461bcd60e51b8152600401610ed090615013565b602a55565b6001600160a01b03811660009081526005602052604081205460ff161561188f57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f0e9061105f565b6000546001600160a01b031633146118db5760405162461bcd60e51b8152600401610ed090614f54565b6118e56000613941565b565b6000546001600160a01b031633146119115760405162461bcd60e51b8152600401610ed090614f54565b6127108511156119335760405162461bcd60e51b8152600401610ed090615013565b6127108411156119555760405162461bcd60e51b8152600401610ed090615013565b6127108311156119775760405162461bcd60e51b8152600401610ed090615013565b6127108211156119995760405162461bcd60e51b8152600401610ed090615013565b6127108111156119bb5760405162461bcd60e51b8152600401610ed090615013565b602085905560228490556024839055602682905560288190558082866119e18688614f9f565b6119eb9190614f9f565b6119f59190614f9f565b6119ff9190614f9f565b602c5562027100602c541115611a275760405162461bcd60e51b8152600401610ed090615013565b5050505050565b6000546001600160a01b03163314611a585760405162461bcd60e51b8152600401610ed090614f54565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611aa45760405162461bcd60e51b8152600401610ed090614f54565b603455565b6060601e8054610e2390614f1a565b6000546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610ed090614f54565b6000611aed30611852565b30600090815260016020526040902054909150611b0a9082613991565b306000908152600160208190526040822092909255611b57918391611b376000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000205490612d31565b60016000611b6d6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526002909152902054611ba49082613991565b306000908152600260208190526040822092909255611bd1918391611b376000546001600160a01b031690565b60026000611be76000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611c136000546001600160a01b031690565b6001600160a01b0316306001600160a01b03166000805160206152d583398151915283604051611c4591815260200190565b60405180910390a350565b6000546001600160a01b03163314611c7a5760405162461bcd60e51b8152600401610ed090614f54565b47611c8d6000546001600160a01b031690565b6001600160a01b03166108fc6064611ca58585615038565b611caf9190615057565b6040518115909202916000818181858888f19350505050158015611cd7573d6000803e3d6000fd5b505050565b6000610f0a3384611050856040518060600160405280602581526020016152f5602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612cd6565b6000546001600160a01b03163314611d555760405162461bcd60e51b8152600401610ed090614f54565b60005b600c8111611d815760008181526014602052604081205580611d7981614ffa565b915050611d58565b50565b6000610f0a338484612a26565b600081600103611dbd57506001600160a01b03821660009081526008602052604090205460ff16610f0e565b81600203611de757506001600160a01b03821660009081526009602052604090205460ff16610f0e565b81600303611e1157506001600160a01b0382166000908152600a602052604090205460ff16610f0e565b81600403611e3b57506001600160a01b0382166000908152600b602052604090205460ff16610f0e565b81600503611e6557506001600160a01b0382166000908152600c602052604090205460ff16610f0e565b81600603611e8f57506001600160a01b0382166000908152600d602052604090205460ff16610f0e565b81600703611eb957506001600160a01b0382166000908152600e602052604090205460ff16610f0e565b81600803611ee357506001600160a01b0382166000908152600f602052604090205460ff16610f0e565b81600903611f0d57506001600160a01b03821660009081526010602052604090205460ff16610f0e565b81600a03611f3757506001600160a01b03821660009081526011602052604090205460ff16610f0e565b81600b03611f6157506001600160a01b03821660009081526012602052604090205460ff16610f0e565b81600c03611f8b57506001600160a01b03821660009081526013602052604090205460ff16610f0e565b50600092915050565b6000546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146120095760405162461bcd60e51b8152600401610ed090614f54565b60005b6038548110156123cf576000600860006038848154811061202f5761202f614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460099183918590811061207d5761207d614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600a918391859081106120cb576120cb614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600b9183918590811061211957612119614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600c9183918590811061216757612167614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600d918391859081106121b5576121b5614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600e9183918590811061220357612203614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560388054600f9183918590811061225157612251614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460109183918590811061229f5761229f614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191692151592909217909155603880546011918391859081106122ed576122ed614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460129183918590811061233b5761233b614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556038805460139183918590811061238957612389614fb7565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff1916911515919091179055806123c781614ffa565b91505061200c565b506118e560386000614ca4565b6000546001600160a01b031633146124065760405162461bcd60e51b8152600401610ed090614f54565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061245390831515815260200190565b60405180910390a150565b6019546033546001600160a01b039091169060ff1615156001146124b75760405162461bcd60e51b815260206004820152601060248201526f139bdd081b185d5b98da1959081e595d60821b6044820152606401610ed0565b6001600160a01b03831660009081526007602052604090205460ff1615156001036125245760405162461bcd60e51b815260206004820152601b60248201527f426c61636b6c697374656420666f7220636f6d7065746974696f6e00000000006044820152606401610ed0565b6034543331101561256a5760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f75676820455448202160801b6044820152606401610ed0565b60345434146125ae5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610ed0565b6000816001600160a01b03163460405160006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b50509050806126465760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610ed0565b6126508484612e3c565b50505050565b6000546001600160a01b031633146126805760405162461bcd60e51b8152600401610ed090614f54565b6509184e72a0008110156126d65760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610ed0565b603555565b6000546001600160a01b031633146127055760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146127505760405162461bcd60e51b8152600401610ed090614f54565b602f805460ff60a81b191690556000196035556000602481905560288190556022819055602655565b6000546001600160a01b031633146127a35760405162461bcd60e51b8152600401610ed090614f54565b6001600160a01b0381166128085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ed0565b611d8181613941565b6000546001600160a01b0316331461283b5760405162461bcd60e51b8152600401610ed090614f54565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b6000546001600160a01b031633146128a45760405162461bcd60e51b8152600401610ed090614f54565b60335460ff16156128ea5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b6044820152606401610ed0565b6033805460ff19166001179055426031819055603255565b6001600160a01b0383166129645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ed0565b6001600160a01b0382166129c55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ed0565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612a8a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ed0565b6001600160a01b038216612aec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ed0565b60008111612b4e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ed0565b6001600160a01b03831660009081526006602052604090205460ff161515600114801590612b9a57506001600160a01b03821660009081526006602052604090205460ff161515600114155b612bdf5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610ed0565b6000612bea30611852565b6039805460ff19169055602f549091506001600160a01b0390811690841603612c1b576039805460ff191660011790555b603054602f5490821015906001600160a01b03868116911614801590612c3e5750805b8015612c545750602f54600160a01b900460ff16155b8015612c695750602f54600160a81b900460ff165b15612c7757612c778261399d565b6001600160a01b03851660009081526004602052604090205460019060ff1680612cb957506001600160a01b03851660009081526004602052604090205460ff165b15612cc2575060005b612cce86868684613c14565b505050505050565b60008184841115612cfa5760405162461bcd60e51b8152600401610ed09190614cd6565b505050900390565b6000806000612d0f613da9565b9092509050612d1e8282612d25565b9250505090565b60006110dc8284615057565b60006110dc8284614f9f565b6000806000806000806000806000612d846040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612d8d8b613f2b565b866000018760200188604001896060018a6080018b60a0018681525086815250868152508681525086815250868152505050505050506000806000612df28e85602001518660400151876060015188608001518960a00151612ded612d02565b613fba565b92509250925082828286600001518760200151886040015189606001518a608001518b60a001519c509c509c509c509c509c509c509c509c50505050509193959799909294969850565b80600103612f25576001600160a01b03821660009081526008602052604090205460ff161515600103612e815760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660008181526008602090815260408220805460ff19166001908117909155603880548083019091557f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561990180546001600160a01b031916909417909355828252601490527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c8054909190612f1f908490614f9f565b90915550505b80600203613010576001600160a01b03821660009081526009602052604090205460ff161515600103612f6a5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526008602052604090205460ff161515600114612fa75760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526009602090815260408220805460ff191660019081179091556002835260149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a80549192909161300a908490614f9f565b90915550505b806003036130fb576001600160a01b0382166000908152600a602052604090205460ff1615156001036130555760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526009602052604090205460ff1615156001146130925760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600a602090815260408220805460ff191660019081179091556003835260149091527f63d87a887046e0430be80fdeb014107d7198c879cbf2cddf39a6df195c86cb388054919290916130f5908490614f9f565b90915550505b806004036131e6576001600160a01b0382166000908152600b602052604090205460ff1615156001036131405760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600a602052604090205460ff16151560011461317d5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600b602090815260408220805460ff191660019081179091556004835260149091527f52102136546d97ed3f65ec1070a32935d3048ea12f310d29c378dc9d6555c0d68054919290916131e0908490614f9f565b90915550505b806005036132d1576001600160a01b0382166000908152600c602052604090205460ff16151560010361322b5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600b602052604090205460ff1615156001146132685760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600c602090815260408220805460ff191660019081179091556005835260149091527f116126bec5aaa49b347e966c49378cf0c441de9121e306ea3d824584a9615aa28054919290916132cb908490614f9f565b90915550505b806006036133bc576001600160a01b0382166000908152600d602052604090205460ff1615156001036133165760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600c602052604090205460ff1615156001146133535760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600d602090815260408220805460ff191660019081179091556006835260149091527fe1f6b6a5fb7e47dad87547d4b0671e7e995a1dae22fbe5b3b5d10e2a77ed7aff8054919290916133b6908490614f9f565b90915550505b806007036134a7576001600160a01b0382166000908152600e602052604090205460ff1615156001036134015760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600d602052604090205460ff16151560011461343e5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600e602090815260408220805460ff191660019081179091556007835260149091527f904977a779b22381a36c6463d4166ef55ee8cb3392c83093cb1750f1a00c9d948054919290916134a1908490614f9f565b90915550505b80600803613592576001600160a01b0382166000908152600f602052604090205460ff1615156001036134ec5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600e602052604090205460ff1615156001146135295760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b0382166000908152600f602090815260408220805460ff191660019081179091556008835260149091527f125fdacc24f94fb724c0c32a4eab75d67204551eb2448dadf875d535a744972680549192909161358c908490614f9f565b90915550505b8060090361367d576001600160a01b03821660009081526010602052604090205460ff1615156001036135d75760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b0382166000908152600f602052604090205460ff1615156001146136145760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526010602090815260408220805460ff191660019081179091556009835260149091527ff517404d914a19d455440d961937db67771e4bfb0b4293ff6fd7c75855208c19805491929091613677908490614f9f565b90915550505b80600a03613768576001600160a01b03821660009081526011602052604090205460ff1615156001036136c25760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526010602052604090205460ff1615156001146136ff5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526011602090815260408220805460ff19166001908117909155600a835260149091527f65f9512343925c57130fd77667cb42fc83560c400ede0c87f3de7c6c27cf09a6805491929091613762908490614f9f565b90915550505b80600b03613853576001600160a01b03821660009081526012602052604090205460ff1615156001036137ad5760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526011602052604090205460ff1615156001146137ea5760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526012602090815260408220805460ff19166001908117909155600b835260149091527fdabe84bb17a8774762b6726edd7eb728da1732e1ab123804fc9345b7300e0a2e80549192909161384d908490614f9f565b90915550505b80600c03611341576001600160a01b03821660009081526013602052604090205460ff1615156001036138985760405162461bcd60e51b8152600401610ed090615079565b6001600160a01b03821660009081526012602052604090205460ff1615156001146138d55760405162461bcd60e51b8152600401610ed0906150a6565b6001600160a01b03821660009081526013602090815260408220805460ff19166001908117909155600c835260149091527f3a61d736b87fed11cf463325a3a6df55734cfb04ef5868e0125df26f708fa9c5805491929091613938908490614f9f565b90915550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006110dc8284614fcd565b602f805460ff60a01b1916600160a01b179055602254602c546000916139ce916139c8908590612d25565b90614068565b90506139db816002612d25565b905060006139e98383613991565b9050476139f582614074565b602254600090613a06906002612d25565b9050600081602054602854602654602454613a219190614f9f565b613a2b9190614f9f565b613a359190614f9f565b613a3f9190614f9f565b90506000613a4d4785613991565b90506000613a7083613a6a602c548561406890919063ffffffff16565b90612d25565b9050613a8b846139c8602c5484612d2590919063ffffffff16565b90506000613a994783613991565b90506000613ab4602254602c5461399190919063ffffffff16565b90506000613ad16026546139c88486612d2590919063ffffffff16565b6016546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613b0c573d6000803e3d6000fd5b50602454600090613b21906139c88686612d25565b6017546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613b5c573d6000803e3d6000fd5b50602854600090613b71906139c88787612d25565b6018546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015613bac573d6000803e3d6000fd5b50613bb78c876141c6565b604080518d8152602081018790529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602f805460ff60a01b191690555050505050505050505050565b80613c2157613c21614294565b6001600160a01b03841660009081526005602052604090205460ff168015613c6257506001600160a01b03831660009081526005602052604090205460ff16155b15613c7757613c7284848461431d565b613d75565b6001600160a01b03841660009081526005602052604090205460ff16158015613cb857506001600160a01b03831660009081526005602052604090205460ff165b15613cc857613c7284848461446c565b6001600160a01b03841660009081526005602052604090205460ff16158015613d0a57506001600160a01b03831660009081526005602052604090205460ff16155b15613d1a57613c72848484614532565b6001600160a01b03841660009081526005602052604090205460ff168015613d5a57506001600160a01b03831660009081526005602052604090205460ff165b15613d6a57613c728484846148da565b613d75848484614532565b8061265057612650602154602055602354602255602554602455602754602655602954602855602b54602a55602d54602c55565b601b54601a546000918291825b601554811015613efb57826001600060158481548110613dd857613dd8614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613e435750816002600060158481548110613e1c57613e1c614fb7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613e5957601b54601a54945094505050509091565b613e9f6001600060158481548110613e7357613e73614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613991565b9250613ee76002600060158481548110613ebb57613ebb614fb7565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613991565b915080613ef381614ffa565b915050613db6565b50601a54601b54613f0b91612d25565b821015613f2257601b54601a549350935050509091565b90939092509050565b6000806000806000806000613f3f8861496a565b90506000613f4c89614987565b90506000613f598a6149a4565b90506000613f668b6149f8565b90506000613f738c614a15565b90506000613f818d87613991565b9050613f8d8186613991565b9050613fa582613f9f85818589613991565b90613991565b9d959c50939a50919850965094509092505050565b6000808080613fc98b86614068565b90506000613fd78b87614068565b90506000613fe58b88614068565b90506000613ff38b89614068565b905060006140018b8a614068565b9050600061400f8b8b614068565b9050600061401d8787613991565b90506140298186613991565b90506140358185613991565b90506140418184613991565b905061404d8183613991565b96995095975093955050505050509750975097945050505050565b60006110dc8284615038565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106140a9576140a9614fb7565b6001600160a01b03928316602091820292909201810191909152602e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141269190615102565b8160018151811061413957614139614fb7565b6001600160a01b039283166020918202929092010152602e5461415f9130911684612902565b602e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790614198908590600090869030904290600401615163565b600060405180830381600087803b1580156141b257600080fd5b505af1158015612cce573d6000803e3d6000fd5b602e546141de9030906001600160a01b031684612902565b602e546001600160a01b031663f305d7198230856000806142076000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561426f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a27919061519f565b6020541580156142a45750602254155b80156142b05750602454155b80156142bc5750602654155b80156142c85750602854155b156142cf57565b6020805460215560228054602355602480546025556026805460275560288054602955602c8054602d55602a8054602b55600096879055948690559185905591849055908390559082905555565b60008060008060008060008060006143348a612d3d565b98509850985098509850985098509850985061437e8a600260008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b038d166000908152600260209081526040808320939093556001905220546143ad908a613991565b6001600160a01b03808e1660009081526001602052604080822093909355908d16815220546143dc9089612d31565b6001600160a01b038c166000908152600160205260409020556143fe84614a32565b61440783614a32565b61441082614a32565b61441981614a32565b6144238786614aba565b8a6001600160a01b03168c6001600160a01b03166000805160206152d58339815191528860405161445691815260200190565b60405180910390a3505050505050505050505050565b60008060008060008060008060006144838a612d3d565b9850985098509850985098509850985098506144cd89600160008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b03808e16600090815260016020908152604080832094909455918e168152600290915220546145039087612d31565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546143dc9089612d31565b60008060008060008060008060006145498a612d3d565b985098509850985098509850985098509850603960019054906101000a900460ff1615156001151503614580576145808b8b614ade565b60335460ff1615156001148015906145a65750602f546001600160a01b038c8116911614155b80156145c057506000546001600160a01b038d8116911614155b80156145da57506000546001600160a01b038c8116911614155b156146c0576001600160a01b038c16600090815260016020526040902054614602908a613991565b6001600160a01b03808e1660009081526001602052604080822093909355908d16815220546146319089612d31565b6001600160a01b03808d1660008181526001602052604090819020939093559151908e16906000805160206152d583398151915290614673908a815260200190565b60405180910390a36146bb8b6001600160a01b031660009081526006602090815260408083208054600160ff1991821681179092556007909352922080549091169091179055565b6148cc565b60335460ff16151560011480156146f157504260375460315460b46146e59190614f9f565b6146ef9190614f9f565b115b801561470b5750602f546001600160a01b038c8116911614155b801561472557506000546001600160a01b038d8116911614155b801561473f57506000546001600160a01b038c8116911614155b15614767576001600160a01b038c16600090815260016020526040902054614602908a613991565b6000546001600160a01b038d81169116148061479057506000546001600160a01b038c81169116145b15614830576001600160a01b038b166000908152600160205260409020546147b8908a612d31565b6001600160a01b03808d1660009081526001602052604080822093909355908e16815220546147e7908a613991565b6001600160a01b038d81166000818152600160209081526040918290209490945551898152918e169290916000805160206152d5833981519152910160405180910390a36148cc565b602f546001600160a01b038c81169116146148a95760355461485b8b6148558e611852565b90612d31565b11156148a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610ed0565b6001600160a01b038c166000908152600160205260409020546143ad908a613991565b505050505050505050505050565b60008060008060008060008060006148f18a612d3d565b98509850985098509850985098509850985061493b8a600260008f6001600160a01b03166001600160a01b031681526020019081526020016000205461399190919063ffffffff16565b6001600160a01b038d166000908152600260209081526040808320939093556001905220546144cd908a613991565b6000610f0e612710613a6a6020548561406890919063ffffffff16565b6000610f0e612710613a6a6022548561406890919063ffffffff16565b60395460009060ff1615156001036149dd57610f0e612710613a6a6149d6602a54602454612d3190919063ffffffff16565b8590614068565b610f0e612710613a6a6024548561406890919063ffffffff16565b6000610f0e612710613a6a6026548561406890919063ffffffff16565b6000610f0e612710613a6a6028548561406890919063ffffffff16565b6000614a3c612d02565b90506000614a4a8383614068565b30600090815260016020526040902054909150614a679082612d31565b3060009081526001602090815260408083209390935560059052205460ff1615611cd75730600090815260026020526040902054614aa59084612d31565b30600090815260026020526040902055505050565b601b54614ac79083613991565b601b55601c54614ad79082612d31565b601c555050565b6040805160028082526060820183526000926020830190803683375050602e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015614b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b6c9190615102565b81600081518110614b7f57614b7f614fb7565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110614bb357614bb3614fb7565b6001600160a01b039283166020918202929092010152602e546040516307c0329d60e21b81526000929190911690631f00ca7490614bf790869086906004016151cd565b600060405180830381865afa158015614c14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c3c91908101906151ee565b600081518110614c4e57614c4e614fb7565b60200260200101519050603a5481118015614c775750602f546001600160a01b03858116911614155b1561265057603d80546001600160a01b0386166001600160a01b0319909116179055603a81905550505050565b5080546000825590600052602060002090810190611d8191905b80821115614cd25760008155600101614cbe565b5090565b600060208083528351808285015260005b81811015614d0357858101830151858201604001528201614ce7565b81811115614d15576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d8157600080fd5b60008060408385031215614d5357600080fd5b8235614d5e81614d2b565b946020939093013593505050565b600060208284031215614d7e57600080fd5b81356110dc81614d2b565b600080600060608486031215614d9e57600080fd5b8335614da981614d2b565b92506020840135614db981614d2b565b929592945050506040919091013590565b600060208284031215614ddc57600080fd5b5035919050565b80358015158114614df357600080fd5b919050565b60008060408385031215614e0b57600080fd5b614d5e83614de3565b60008060408385031215614e2757600080fd5b82359150614e3760208401614de3565b90509250929050565b600080600080600060a08688031215614e5857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215614e8d57600080fd5b6110dc82614de3565b60008060408385031215614ea957600080fd5b8235614eb481614d2b565b91506020830135614ec481614d2b565b809150509250929050565b600080600060608486031215614ee457600080fd5b8335614eef81614d2b565b92506020840135614eff81614d2b565b91506040840135614f0f81614d2b565b809150509250925092565b600181811c90821680614f2e57607f821691505b602082108103614f4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614fb257614fb2614f89565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614fdf57614fdf614f89565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161500c5761500c614f89565b5060010190565b6020808252600b908201526a496e76616c69642062707360a81b604082015260600190565b600081600019048311821515161561505257615052614f89565b500290565b60008261507457634e487b7160e01b600052601260045260246000fd5b500490565b602080825260139082015272165bdd48185b1c9958591e48195b9d195c9959606a1b604082015260600190565b60208082526026908201527f596f752068617665206e6f7420656e7465726564207468652070726576696f756040820152651cc81ddbdc9960d21b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561511457600080fd5b81516110dc81614d2b565b600081518084526020808501945080840160005b838110156151585781516001600160a01b031687529582019590820190600101615133565b509495945050505050565b85815284602082015260a06040820152600061518260a083018661511f565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156151b457600080fd5b8351925060208401519150604084015190509250925092565b8281526040602082015260006151e6604083018461511f565b949350505050565b6000602080838503121561520157600080fd5b825167ffffffffffffffff8082111561521957600080fd5b818501915085601f83011261522d57600080fd5b81518181111561523f5761523f6150ec565b8060051b604051601f19603f83011681018181108582111715615264576152646150ec565b60405291825284820192508381018501918883111561528257600080fd5b938501935b828510156152a057845184529385019392850192615287565b9897505050505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122035bf10f0cc23902203ddb57bf21dc22105ddbc0a47fd13561bb72518bc5a1d7964736f6c634300080f0033
Deployed Bytecode Sourcemap
27116:41192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32322:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62257:191;;;;;;;;;;;;;:::i;:::-;;33307:193;;;;;;;;;;-1:-1:-1;33307:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;33307:193:0;1072:187:1;44024:87:0;;;;;;;;;;-1:-1:-1;44093:10:0;;44024:87;;;1410:25:1;;;1398:2;1383:18;44024:87:0;1264:177:1;29293:41:0;;;;;;;;;;-1:-1:-1;29293:41:0;;;;-1:-1:-1;;;;;29293:41:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;29293:41:0;1446:230:1;32599:95:0;;;;;;;;;;-1:-1:-1;32679:7:0;;32599:95;;36792:426;;;;;;;;;;-1:-1:-1;36792:426:0;;;;;:::i;:::-;;:::i;28416:36::-;;;;;;;;;;-1:-1:-1;28416:36:0;;;;-1:-1:-1;;;;;28416:36:0;;;28867:28;;;;;;;;;;;;;;;;33508:446;;;;;;;;;;-1:-1:-1;33508:446:0;;;;;:::i;:::-;;:::i;44617:322::-;;;;;;;;;;-1:-1:-1;44617:322:0;;;;;:::i;:::-;;:::i;68185:120::-;;;;;;;;;;;;;:::i;29157:36::-;;;;;;;;;;;;;;;;32508:83;;;;;;;;;;-1:-1:-1;32574:9:0;;32508:83;;32574:9;;;;2945:36:1;;2933:2;2918:18;32508:83:0;2803:184:1;67970:207:0;;;;;;;;;;-1:-1:-1;67970:207:0;;;;;:::i;:::-;;:::i;35145:121::-;;;;;;;;;;-1:-1:-1;35229:29:0;;35145:121;;45401:475;;;;;;;;;;-1:-1:-1;45401:475:0;;;;;:::i;:::-;;:::i;33962:300::-;;;;;;;;;;-1:-1:-1;33962:300:0;;;;;:::i;:::-;;:::i;28376:33::-;;;;;;;;;;-1:-1:-1;28376:33:0;;;;-1:-1:-1;;;;;28376:33:0;;;28691:22;;;;;;;;;;;;;;;;46832:111;;;;;;;;;;-1:-1:-1;46832:111:0;;;;;:::i;:::-;;:::i;44119:490::-;;;;;;;;;;-1:-1:-1;44119:490:0;;;;;:::i;:::-;;:::i;29341:28::-;;;;;;;;;;-1:-1:-1;29341:28:0;;;;-1:-1:-1;;;;;29341:28:0;;;29406:33;;;;;;;;;;-1:-1:-1;29406:33:0;;;;-1:-1:-1;;;29406:33:0;;;;;;44947:446;;;;;;;;;;-1:-1:-1;44947:446:0;;;;;:::i;:::-;;:::i;56333:124::-;;;;;;;;;;-1:-1:-1;56333:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;56422:27:0;56398:4;56422:27;;;:18;:27;;;;;;;;;56333:124;48319:161;;;;;;;;;;-1:-1:-1;48319:161:0;;;;;:::i;:::-;;:::i;37447:104::-;;;;;;;;;;-1:-1:-1;37529:7:0;:14;37447:104;;48673:131;;;;;;;;;;-1:-1:-1;48673:131:0;;;;;:::i;:::-;;:::i;43374:126::-;;;;;;;;;;-1:-1:-1;43374:126:0;;;;;:::i;:::-;;:::i;38686:368::-;;;;;;;;;;-1:-1:-1;38686:368:0;;;;;:::i;:::-;;:::i;29985:21::-;;;;;;;;;;-1:-1:-1;29985:21:0;;;;-1:-1:-1;;;;;29985:21:0;;;28290:33;;;;;;;;;;-1:-1:-1;28290:33:0;;;;-1:-1:-1;;;;;28290:33:0;;;42978:106;;;;;;;;;;-1:-1:-1;42978:106:0;;;;;:::i;:::-;;:::i;35383:200::-;;;;;;;;;;-1:-1:-1;35383:200:0;;;;;:::i;:::-;;:::i;28770:28::-;;;;;;;;;;;;;;;;32702:198;;;;;;;;;;-1:-1:-1;32702:198:0;;;;;:::i;:::-;;:::i;5174:94::-;;;;;;;;;;;;;:::i;47069:1061::-;;;;;;;;;;-1:-1:-1;47069:1061:0;;;;;:::i;:::-;;:::i;34908:123::-;;;;;;;;;;-1:-1:-1;34908:123:0;;;;;:::i;:::-;;:::i;42850:120::-;;;;;;;;;;-1:-1:-1;42850:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;42942:20:0;42918:4;42942:20;;;:11;:20;;;;;;;;;42850:120;4523:87;;;;;;;;;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;4596:6:0;4523:87;;29885:25;;;;;;;;;;;;;;;;29647:29;;;;;;;;;;;;;;;;35039:98;;;;;;;;;;-1:-1:-1;35039:98:0;;;;;:::i;:::-;;:::i;32413:87::-;;;;;;;;;;;;;:::i;58721:458::-;;;;;;;;;;;;;:::i;58519:196::-;;;;;;;;;;-1:-1:-1;58519:196:0;;;;;:::i;:::-;;:::i;29579:23::-;;;;;;;;;;-1:-1:-1;29579:23:0;;;;;;;;34270:397;;;;;;;;;;-1:-1:-1;34270:397:0;;;;;:::i;:::-;;:::i;28330:39::-;;;;;;;;;;-1:-1:-1;28330:39:0;;;;-1:-1:-1;;;;;28330:39:0;;;36628:156;;;;;;;;;;;;;:::i;29685:44::-;;;;;;;;;;;;;;;;32908:199;;;;;;;;;;-1:-1:-1;32908:199:0;;;;;:::i;:::-;;:::i;29043:22::-;;;;;;;;;;;;;;;;37559:1119;;;;;;;;;;-1:-1:-1;37559:1119:0;;;;;:::i;:::-;;:::i;43508:128::-;;;;;;;;;;-1:-1:-1;43508:128:0;;;;;:::i;:::-;;:::i;35994:626::-;;;;;;;;;;;;;:::i;43644:142::-;;;;;;;;;;-1:-1:-1;43644:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;43742:36:0;43718:4;43742:36;;;:27;:36;;;;;;;;;43644:142;35274:101;;;;;;;;;;-1:-1:-1;35355:12:0;;35274:101;;29122:28;;;;;;;;;;;;;;;;35888:98;;;;;;;;;;-1:-1:-1;35968:10:0;;-1:-1:-1;;;;;35968:10:0;35888:98;;48138:173;;;;;;;;;;-1:-1:-1;48138:173:0;;;;;:::i;:::-;;:::i;42271:571::-;;;;;;:::i;:::-;;:::i;29202:26::-;;;;;;;;;;;;;;;;29448:44;;;;;;;;;;;;;;;;29950:24;;;;;;;;;;;;;;;;29917:26;;;;;;;;;;;;;;;;33115:184;;;;;;;;;;-1:-1:-1;33115:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;33264:18:0;;;33232:7;33264:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33115:184;29839:37;;;;;;;;;;-1:-1:-1;29839:37:0;;;;;;;;;;;28197:48;;;;;;;;;;-1:-1:-1;28197:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;29611:27;;;;;;;;;;;;;;;;48488:177;;;;;;;;;;-1:-1:-1;48488:177:0;;;;;:::i;:::-;;:::i;46951:110::-;;;;;;;;;;-1:-1:-1;46951:110:0;;;;;:::i;:::-;;:::i;37226:213::-;;;;;;;;;;;;;:::i;5423:192::-;;;;;;;;;;-1:-1:-1;5423:192:0;;;;;:::i;:::-;;:::i;28964:22::-;;;;;;;;;;;;;;;;35591:289;;;;;;;;;;-1:-1:-1;35591:289:0;;;;;:::i;:::-;;:::i;43794:222::-;;;;;;;;;;;;;:::i;43092:120::-;;;;;;;;;;-1:-1:-1;43092:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;43179:25:0;43155:4;43179:25;;;:16;:25;;;;;;;;;43092:120;32322:83;32359:13;32392:5;32385:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32322:83;:::o;62257:191::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;;;;;;;;;62317:21:::1;:29:::0;;-1:-1:-1;;;;62317:29:0::1;::::0;;62341:5:::1;62357:13;:15:::0;;;62383:13:::1;:15:::0;;;62409:7:::1;:9:::0;62437:3:::1;62429:7;:11:::0;62257:191::o;33307:193::-;33409:4;33431:39;3490:10;33454:7;33463:6;33431:8;:39::i;:::-;-1:-1:-1;33488:4:0;33307:193;;;;;:::o;36792:426::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36870:12:0::1;36883:5;36870:12:::0;;;:6:::1;:12;::::0;;;;;;;:18;;-1:-1:-1;;36870:18:0;;::::1;::::0;;;36899:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;36928:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;36957:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;36986:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;37015:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;37044:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;37073:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;37102:6:::1;:12:::0;;;;;:18;;;::::1;::::0;;37131:7:::1;:13:::0;;;;;:19;;;::::1;::::0;;37161:7:::1;:13:::0;;;;;:19;;;::::1;::::0;;37191:7:::1;:13:::0;;;;;;:19;;;;::::1;::::0;;36792:426::o;33508:446::-;33640:4;33657:36;33667:6;33675:9;33686:6;33657:9;:36::i;:::-;33704:220;33727:6;3490:10;33775:138;33831:6;33775:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33775:19:0;;;;;;:11;:19;;;;;;;;3490:10;33775:33;;;;;;;;;;:37;:138::i;:::-;33704:8;:220::i;:::-;-1:-1:-1;33942:4:0;33508:446;;;;;:::o;44617:322::-;44711:7;44769;;44758;:18;;44736:110;;;;-1:-1:-1;;;44736:110:0;;6674:2:1;44736:110:0;;;6656:21:1;6713:2;6693:18;;;6686:30;6752:34;6732:18;;;6725:62;-1:-1:-1;;;6803:18:1;;;6796:40;6853:19;;44736:110:0;6472:406:1;44736:110:0;44857:19;44879:10;:8;:10::i;:::-;44857:32;-1:-1:-1;44907:24:0;:7;44857:32;44907:11;:24::i;:::-;44900:31;44617:322;-1:-1:-1;;;44617:322:0:o;68185:120::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;68260:1:::1;68247:10;:14:::0;68281:16:::1;::::0;68272:6:::1;:25:::0;;-1:-1:-1;;;;;;68272:25:0::1;-1:-1:-1::0;;;;;68281:16:0;;::::1;68272:25:::0;;;::::1;::::0;;68185:120::o;67970:207::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;68074:15:::1;68060:11;:29:::0;;;68112:21:::1;::::0;68126:7;;68112:21:::1;:::i;:::-;68100:9;:33:::0;-1:-1:-1;68144:17:0::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;68144:25:0;;::::1;::::0;;;::::1;::::0;;67970:207::o;45401:475::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45479:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;45471:60;;;::::0;-1:-1:-1;;;45471:60:0;;7350:2:1;45471:60:0::1;::::0;::::1;7332:21:1::0;7389:2;7369:18;;;7362:30;7428:29;7408:18;;;7401:57;7475:18;;45471:60:0::1;7148:351:1::0;45471:60:0::1;45547:9;45542:327;45566:9;:16:::0;45562:20;::::1;45542:327;;;45624:7;-1:-1:-1::0;;;;;45608:23:0::1;:9;45618:1;45608:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;45608:12:0::1;:23:::0;45604:254:::1;;45667:9;45677:16:::0;;:20:::1;::::0;45696:1:::1;::::0;45677:20:::1;:::i;:::-;45667:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;45652:9:::1;:12:::0;;-1:-1:-1;;;;;45667:31:0;;::::1;::::0;45662:1;;45652:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;45652:46:0::1;-1:-1:-1::0;;;;;45652:46:0;;::::1;;::::0;;45717:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;45756:11:::1;:20:::0;;;;:28;;-1:-1:-1;;45756:28:0::1;::::0;;45803:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;45803:15:0;;;;;-1:-1:-1;;;;;;45803:15:0::1;::::0;;;;;45542:327:::1;45401:475:::0;:::o;45604:254::-:1;45584:3:::0;::::1;::::0;::::1;:::i;:::-;;;;45542:327;;;;45401:475:::0;:::o;33962:300::-;3490:10;34077:4;34171:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34171:34:0;;;;;;;;;;34077:4;;34099:133;;34149:7;;34171:50;;34210:10;34171:38;:50::i;46832:111::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46901:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;46901:34:0::1;46931:4;46901:34;::::0;;46832:111::o;44119:490::-;44237:7;44281;;44270;:18;;44262:62;;;;-1:-1:-1;;;44262:62:0;;8240:2:1;44262:62:0;;;8222:21:1;8279:2;8259:18;;;8252:30;8318:33;8298:18;;;8291:61;8369:18;;44262:62:0;8038:355:1;44262:62:0;44340:17;44335:267;;44375:15;44410:19;44421:7;44410:10;:19::i;:::-;-1:-1:-1;44374:55:0;;-1:-1:-1;44444:14:0;;-1:-1:-1;;;;;;;;44444:14:0;44335:267;44494:23;44534:19;44545:7;44534:10;:19::i;:::-;-1:-1:-1;44491:62:0;;-1:-1:-1;44568:22:0;;-1:-1:-1;;;;;;;;44568:22:0;44947:446;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45142:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;45141:21;45133:61;;;::::0;-1:-1:-1;;;45133:61:0;;7350:2:1;45133:61:0::1;::::0;::::1;7332:21:1::0;7389:2;7369:18;;;7362:30;7428:29;7408:18;;;7401:57;7475:18;;45133:61:0::1;7148:351:1::0;45133:61:0::1;-1:-1:-1::0;;;;;45209:16:0;::::1;45228:1;45209:16:::0;;;:7:::1;:16;::::0;;;;;:20;45205:109:::1;;-1:-1:-1::0;;;;;45285:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;45265:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;45246:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;45205:109:::1;-1:-1:-1::0;;;;;45324:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;45324:27:0::1;45347:4;45324:27:::0;;::::1;::::0;;;45362:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;45362:23:0::1;::::0;;::::1;::::0;;44947:446::o;48319:161::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;48402:1:::1;48395:6;:8;48387:34;;;::::0;-1:-1:-1;;;48387:34:0;;8600:2:1;48387:34:0::1;::::0;::::1;8582:21:1::0;8639:2;8619:18;;;8612:30;-1:-1:-1;;;8658:18:1;;;8651:43;8711:18;;48387:34:0::1;8398:337:1::0;48387:34:0::1;48432:29;:38:::0;48319:161::o;48673:131::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;48756:29:::1;:38:::0;48673:131::o;43374:126::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43451:33:0::1;;::::0;;;:27:::1;:33;::::0;;;;:38;;-1:-1:-1;;43451:38:0::1;43485:4;43451:38;::::0;;43374:126::o;38686:368::-;38769:11;;;;:17;;:11;:17;38761:46;;;;-1:-1:-1;;;38761:46:0;;8942:2:1;38761:46:0;;;8924:21:1;8981:2;8961:18;;;8954:30;-1:-1:-1;;;9000:18:1;;;8993:46;9056:18;;38761:46:0;8740:340:1;38761:46:0;-1:-1:-1;;;;;38826:33:0;;;;;;:27;:33;;;;;;;;:39;;:33;:39;38818:79;;;;-1:-1:-1;;;38818:79:0;;9287:2:1;38818:79:0;;;9269:21:1;9326:2;9306:18;;;9299:30;9365:29;9345:18;;;9338:57;9412:18;;38818:79:0;9085:351:1;38818:79:0;38933:29;;38916:15;38926:4;38916:9;:15::i;:::-;:46;;38908:87;;;;-1:-1:-1;;;38908:87:0;;9643:2:1;38908:87:0;;;9625:21:1;9682:2;9662:18;;;9655:30;9721;9701:18;;;9694:58;9769:18;;38908:87:0;9441:352:1;38908:87:0;39006:24;39016:4;39022:7;39006:9;:24::i;42978:106::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43048:22:0::1;43071:5;43048:22:::0;;;:16:::1;:22;::::0;;;;:28;;-1:-1:-1;;43048:28:0::1;::::0;;42978:106::o;35383:200::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;35498:5:::1;35491:3;:12;;35457:85;;;;-1:-1:-1::0;;;35457:85:0::1;;;;;;;:::i;:::-;35554:13;:19:::0;35383:200::o;32702:198::-;-1:-1:-1;;;;;32792:20:0;;32768:7;32792:20;;;:11;:20;;;;;;;;32788:49;;;-1:-1:-1;;;;;;32821:16:0;;;;;:7;:16;;;;;;;32702:198::o;32788:49::-;-1:-1:-1;;;;;32875:16:0;;;;;;:7;:16;;;;;;32855:37;;:19;:37::i;5174:94::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;5239:21:::1;5257:1;5239:9;:21::i;:::-;5174:94::o:0;47069:1061::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;47269:5:::1;47256:9;:18;;47230:60;;;;-1:-1:-1::0;;;47230:60:0::1;;;;;;;:::i;:::-;47366:5;47347:15;:24;;47301:109;;;;-1:-1:-1::0;;;47301:109:0::1;;;;;;;:::i;:::-;47486:5;47467:15;:24;;47421:109;;;;-1:-1:-1::0;;;47421:109:0::1;;;;;;;:::i;:::-;47594:5;47581:9;:18;;47541:97;;;;-1:-1:-1::0;;;47541:97:0::1;;;;;;;:::i;:::-;47704:5;47691:9;:18;;47651:97;;;;-1:-1:-1::0;;;47651:97:0::1;;;;;;;:::i;:::-;47761:7;:19:::0;;;47791:13:::1;:31:::0;;;47833:13:::1;:31:::0;;;47875:7:::1;:19:::0;;;47905:7:::1;:19:::0;;;47915:9;47885;47771;47951:29:::1;47849:15:::0;47807;47951:29:::1;:::i;:::-;:39;;;;:::i;:::-;:49;;;;:::i;:::-;:59;;;;:::i;:::-;47937:11;:73:::0;48080:5:::1;48065:11;;:20;;48023:99;;;;-1:-1:-1::0;;;48023:99:0::1;;;;;;;:::i;:::-;47069:1061:::0;;;;;:::o;34908:123::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;34997:10:::1;:26:::0;;-1:-1:-1;;;;;;34997:26:0::1;-1:-1:-1::0;;;;;34997:26:0;;;::::1;::::0;;;::::1;::::0;;34908:123::o;35039:98::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;35108:12:::1;:21:::0;35039:98::o;32413:87::-;32452:13;32485:7;32478:14;;;;;:::i;58721:458::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;58784:19:::1;58806:24;58824:4;58806:9;:24::i;:::-;58882:4;58866:22;::::0;;;:7:::1;:22;::::0;;;;;58784:46;;-1:-1:-1;58866:39:0::1;::::0;58784:46;58866:26:::1;:39::i;:::-;58857:4;58841:22;::::0;;;:7:::1;:22;::::0;;;;;;:64;;;;58935:33:::1;::::0;58956:11;;58943:7:::1;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;58943:7:::1;-1:-1:-1::0;;;;;58935:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;58935:16:0;;;:20:::1;:33::i;:::-;58916:7;:16;58924:7;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;58924:7:::1;-1:-1:-1::0;;;;;58916:16:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;58916:16:0;;;:52;;;;59020:4:::1;59004:22:::0;;:7:::1;:22:::0;;;;;;:39:::1;::::0;59031:11;59004:26:::1;:39::i;:::-;58995:4;58979:22;::::0;;;:7:::1;:22;::::0;;;;;;:64;;;;59073:33:::1;::::0;59094:11;;59081:7:::1;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;59073:33:::1;59054:7;:16;59062:7;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;59062:7:::1;-1:-1:-1::0;;;;;59054:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;59054:16:0;:52;59146:7:::1;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;59146:7:::1;-1:-1:-1::0;;;;;59122:47:0::1;59139:4;-1:-1:-1::0;;;;;59122:47:0::1;-1:-1:-1::0;;;;;;;;;;;59156:11:0::1;59122:47;;;;1410:25:1::0;;1398:2;1383:18;;1264:177;59122:47:0::1;;;;;;;;58763:416;58721:458::o:0;58519:196::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;58614:21:::1;58654:7;4569::::0;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;58654:7:::1;-1:-1:-1::0;;;;;58646:25:0::1;:61;58703:3;58672:28;58684:16:::0;58672:9;:28:::1;:::i;:::-;:34;;;;:::i;:::-;58646:61;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;58583:132;58519:196:::0;:::o;34270:397::-;34387:4;34409:228;3490:10;34459:7;34481:145;34538:15;34481:145;;;;;;;;;;;;;;;;;3490:10;34481:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34481:34:0;;;;;;;;;;;;:38;:145::i;36628:156::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;36698:9:::1;36694:83;36714:2;36711:1;:5;36694:83;;36764:1;36747:16:::0;;;:13:::1;:16;::::0;;;;:18;36761:1;36718:3:::1;36761:1:::0;36718:3:::1;:::i;:::-;;;;36694:83;;;;36628:156::o:0;32908:199::-;33013:4;33035:42;3490:10;33059:9;33070:6;33035:9;:42::i;37559:1119::-;37633:4;37659:7;37670:1;37659:12;37655:72;;-1:-1:-1;;;;;;37703:12:0;;;;;;:6;:12;;;;;;;;37696:19;;37655:72;37741:7;37752:1;37741:12;37737:73;;-1:-1:-1;;;;;;37786:12:0;;;;;;:6;:12;;;;;;;;37779:19;;37737:73;37824:7;37835:1;37824:12;37820:73;;-1:-1:-1;;;;;;37869:12:0;;;;;;:6;:12;;;;;;;;37862:19;;37820:73;37907:7;37918:1;37907:12;37903:73;;-1:-1:-1;;;;;;37952:12:0;;;;;;:6;:12;;;;;;;;37945:19;;37903:73;37990:7;38001:1;37990:12;37986:73;;-1:-1:-1;;;;;;38035:12:0;;;;;;:6;:12;;;;;;;;38028:19;;37986:73;38073:7;38084:1;38073:12;38069:73;;-1:-1:-1;;;;;;38118:12:0;;;;;;:6;:12;;;;;;;;38111:19;;38069:73;38156:7;38167:1;38156:12;38152:73;;-1:-1:-1;;;;;;38201:12:0;;;;;;:6;:12;;;;;;;;38194:19;;38152:73;38239:7;38250:1;38239:12;38235:73;;-1:-1:-1;;;;;;38284:12:0;;;;;;:6;:12;;;;;;;;38277:19;;38235:73;38322:7;38333:1;38322:12;38318:73;;-1:-1:-1;;;;;;38367:12:0;;;;;;:6;:12;;;;;;;;38360:19;;38318:73;38405:7;38416:2;38405:13;38401:75;;-1:-1:-1;;;;;;38451:13:0;;;;;;:7;:13;;;;;;;;38444:20;;38401:75;38490:7;38501:2;38490:13;38486:75;;-1:-1:-1;;;;;;38536:13:0;;;;;;:7;:13;;;;;;;;38529:20;;38486:75;38575:7;38586:2;38575:13;38571:75;;-1:-1:-1;;;;;;38621:13:0;;;;;;:7;:13;;;;;;;;38614:20;;38571:75;-1:-1:-1;38665:5:0;37559:1119;;;;:::o;43508:128::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43589:33:0::1;43623:5;43589:33:::0;;;:27:::1;:33;::::0;;;;:39;;-1:-1:-1;;43589:39:0::1;::::0;;43508:128::o;35994:626::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;36056:9:::1;36052:534;36071:7;:14:::0;36069:16;::::1;36052:534;;;36135:5;36116:6;:18;36123:7;36131:1;36123:10;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36123:10:0::1;36116:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36116:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36162:7:::1;:10:::0;;36155:6:::1;::::0;36123:10;;36170:1;;36162:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36162:10:0::1;36155:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36155:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36201:7:::1;:10:::0;;36194:6:::1;::::0;36162:10;;36209:1;;36201:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36201:10:0::1;36194:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36194:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36240:7:::1;:10:::0;;36233:6:::1;::::0;36201:10;;36248:1;;36240:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36240:10:0::1;36233:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36233:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36279:7:::1;:10:::0;;36272:6:::1;::::0;36240:10;;36287:1;;36279:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36279:10:0::1;36272:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36272:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36318:7:::1;:10:::0;;36311:6:::1;::::0;36279:10;;36326:1;;36318:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36318:10:0::1;36311:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36311:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36357:7:::1;:10:::0;;36350:6:::1;::::0;36318:10;;36365:1;;36357:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36357:10:0::1;36350:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36350:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36396:7:::1;:10:::0;;36389:6:::1;::::0;36357:10;;36404:1;;36396:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36396:10:0::1;36389:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36389:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36435:7:::1;:10:::0;;36428:6:::1;::::0;36396:10;;36443:1;;36435:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36435:10:0::1;36428:18:::0;;;::::1;::::0;;;;;;;;:24;;-1:-1:-1;;36428:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36475:7:::1;:10:::0;;36467:7:::1;::::0;36435:10;;36483:1;;36475:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36475:10:0::1;36467:19:::0;;;::::1;::::0;;;;;;;;:25;;-1:-1:-1;;36467:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36515:7:::1;:10:::0;;36507:7:::1;::::0;36475:10;;36523:1;;36515:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36515:10:0::1;36507:19:::0;;;::::1;::::0;;;;;;;;:25;;-1:-1:-1;;36507:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36555:7:::1;:10:::0;;36547:7:::1;::::0;36515:10;;36563:1;;36555:10;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;36555:10:0::1;36547:19:::0;;;::::1;::::0;;;;;;;;:25;;-1:-1:-1;;36547:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36087:3;::::1;::::0;::::1;:::i;:::-;;;;36052:534;;;-1:-1:-1::0;36598:14:0::1;36605:7;;36598:14;:::i;48138:173::-:0;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;48217:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;48217:32:0::1;-1:-1:-1::0;;;;48217:32:0;;::::1;;::::0;;48265:38:::1;::::0;::::1;::::0;::::1;::::0;48241:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;48265:38:0::1;;;;;;;;48138:173:::0;:::o;42271:571::-;42375:13;;42417:11;;-1:-1:-1;;;;;42375:13:0;;;;42417:11;;:17;;42375:13;42417:17;42409:46;;;;-1:-1:-1;;;42409:46:0;;8942:2:1;42409:46:0;;;8924:21:1;8981:2;8961:18;;;8954:30;-1:-1:-1;;;9000:18:1;;;8993:46;9056:18;;42409:46:0;8740:340:1;42409:46:0;-1:-1:-1;;;;;42474:33:0;;;;;;:27;:33;;;;;;;;:39;;:33;:39;42466:79;;;;-1:-1:-1;;;42466:79:0;;9287:2:1;42466:79:0;;;9269:21:1;9326:2;9306:18;;;9299:30;9365:29;9345:18;;;9338:57;9412:18;;42466:79:0;9085:351:1;42466:79:0;42586:12;;42564:10;:18;:34;;42556:63;;;;-1:-1:-1;;;42556:63:0;;10735:2:1;42556:63:0;;;10717:21:1;10774:2;10754:18;;;10747:30;-1:-1:-1;;;10793:18:1;;;10786:46;10849:18;;42556:63:0;10533:340:1;42556:63:0;42651:12;;42638:9;:25;42630:54;;;;-1:-1:-1;;;42630:54:0;;11080:2:1;42630:54:0;;;11062:21:1;11119:2;11099:18;;;11092:30;-1:-1:-1;;;11138:18:1;;;11131:46;11194:18;;42630:54:0;10878:340:1;42630:54:0;42696:9;42710:3;-1:-1:-1;;;;;42710:8:0;42726:9;42710:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42695:45;;;42759:4;42751:35;;;;-1:-1:-1;;;42751:35:0;;11635:2:1;42751:35:0;;;11617:21:1;11674:2;11654:18;;;11647:30;-1:-1:-1;;;11693:18:1;;;11686:48;11751:18;;42751:35:0;11433:342:1;42751:35:0;42799:24;42809:4;42815:7;42799:9;:24::i;:::-;42342:500;;42271:571;;:::o;48488:177::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;48576:14:::1;48568:6;:22;;48560:61;;;::::0;-1:-1:-1;;;48560:61:0;;11982:2:1;48560:61:0::1;::::0;::::1;11964:21:1::0;12021:2;12001:18;;;11994:30;12060:28;12040:18;;;12033:56;12106:18;;48560:61:0::1;11780:350:1::0;48560:61:0::1;48632:14;:23:::0;48488:177::o;46951:110::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47018:27:0::1;47048:5;47018:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;47018:35:0::1;::::0;;46951:110::o;37226:213::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;37283:21:::1;:27:::0;;-1:-1:-1;;;;37283:27:0::1;::::0;;-1:-1:-1;;37321:14:0::1;:18:::0;37305:5:::1;37350:13;:15:::0;;;37376:7:::1;:9:::0;;;37396:13:::1;:15:::0;;;37422:7:::1;:9:::0;37226:213::o;5423:192::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5512:22:0;::::1;5504:73;;;::::0;-1:-1:-1;;;5504:73:0;;12337:2:1;5504:73:0::1;::::0;::::1;12319:21:1::0;12376:2;12356:18;;;12349:30;12415:34;12395:18;;;12388:62;-1:-1:-1;;;12466:18:1;;;12459:36;12512:19;;5504:73:0::1;12135:402:1::0;5504:73:0::1;5588:19;5598:8;5588:9;:19::i;35591:289::-:0;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;35755:10:::1;:24:::0;;-1:-1:-1;;;;;35755:24:0;;::::1;-1:-1:-1::0;;;;;;35755:24:0;;::::1;;::::0;;;35790:16:::1;:37:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;35838:13:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;35591:289::o;43794:222::-;4569:7;4596:6;-1:-1:-1;;;;;4596:6:0;3490:10;4743:23;4735:68;;;;-1:-1:-1;;;4735:68:0;;;;;;;:::i;:::-;43850:11:::1;::::0;::::1;;:20;43841:50;;;::::0;-1:-1:-1;;;43841:50:0;;12744:2:1;43841:50:0::1;::::0;::::1;12726:21:1::0;12783:2;12763:18;;;12756:30;-1:-1:-1;;;12802:18:1;;;12795:46;12858:18;;43841:50:0::1;12542:340:1::0;43841:50:0::1;43902:11;:18:::0;;-1:-1:-1;;43902:18:0::1;43916:4;43902:18;::::0;;43945:15:::1;43931:11;:29:::0;;;43971:19:::1;:37:::0;43794:222::o;56465:371::-;-1:-1:-1;;;;;56592:19:0;;56584:68;;;;-1:-1:-1;;;56584:68:0;;13089:2:1;56584:68:0;;;13071:21:1;13128:2;13108:18;;;13101:30;13167:34;13147:18;;;13140:62;-1:-1:-1;;;13218:18:1;;;13211:34;13262:19;;56584:68:0;12887:400:1;56584:68:0;-1:-1:-1;;;;;56671:21:0;;56663:68;;;;-1:-1:-1;;;56663:68:0;;13494:2:1;56663:68:0;;;13476:21:1;13533:2;13513:18;;;13506:30;13572:34;13552:18;;;13545:62;-1:-1:-1;;;13623:18:1;;;13616:32;13665:19;;56663:68:0;13292:398:1;56663:68:0;-1:-1:-1;;;;;56744:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;56796:32;;1410:25:1;;;56796:32:0;;1383:18:1;56796:32:0;;;;;;;56465:371;;;:::o;56844:1667::-;-1:-1:-1;;;;;56966:18:0;;56958:68;;;;-1:-1:-1;;;56958:68:0;;13897:2:1;56958:68:0;;;13879:21:1;13936:2;13916:18;;;13909:30;13975:34;13955:18;;;13948:62;-1:-1:-1;;;14026:18:1;;;14019:35;14071:19;;56958:68:0;13695:401:1;56958:68:0;-1:-1:-1;;;;;57045:16:0;;57037:64;;;;-1:-1:-1;;;57037:64:0;;14303:2:1;57037:64:0;;;14285:21:1;14342:2;14322:18;;;14315:30;14381:34;14361:18;;;14354:62;-1:-1:-1;;;14432:18:1;;;14425:33;14475:19;;57037:64:0;14101:399:1;57037:64:0;57129:1;57120:6;:10;57112:64;;;;-1:-1:-1;;;57112:64:0;;14707:2:1;57112:64:0;;;14689:21:1;14746:2;14726:18;;;14719:30;14785:34;14765:18;;;14758:62;-1:-1:-1;;;14836:18:1;;;14829:39;14885:19;;57112:64:0;14505:405:1;57112:64:0;-1:-1:-1;;;;;57195:22:0;;;;;;:16;:22;;;;;;;;:28;;:22;:28;;;;:58;;-1:-1:-1;;;;;;57227:20:0;;;;;;:16;:20;;;;;;;;:26;;:20;:26;;57195:58;57187:93;;;;-1:-1:-1;;;57187:93:0;;15117:2:1;57187:93:0;;;15099:21:1;15156:2;15136:18;;;15129:30;-1:-1:-1;;;15175:18:1;;;15168:52;15237:18;;57187:93:0;14915:346:1;57187:93:0;57575:28;57606:24;57624:4;57606:9;:24::i;:::-;57641:4;:10;;-1:-1:-1;;57641:10:0;;;57672:13;;57575:55;;-1:-1:-1;;;;;;57672:13:0;;;57668:17;;;;57664:68;;57711:4;:9;;-1:-1:-1;;57711:9:0;57716:4;57711:9;;;57664:68;57808:29;;57874:13;;57771:66;;;;;-1:-1:-1;;;;;57866:21:0;;;57874:13;;57866:21;;;;:57;;;57904:19;57866:57;:91;;;;-1:-1:-1;57941:16:0;;-1:-1:-1;;;57941:16:0;;;;57940:17;57866:91;:129;;;;-1:-1:-1;57974:21:0;;-1:-1:-1;;;57974:21:0;;;;57866:129;57848:249;;;58049:36;58064:20;58049:14;:36::i;:::-;-1:-1:-1;;;;;58290:24:0;;58170:12;58290:24;;;:18;:24;;;;;;58185:4;;58290:24;;;:50;;-1:-1:-1;;;;;;58318:22:0;;;;;;:18;:22;;;;;;;;58290:50;58286:98;;;-1:-1:-1;58367:5:0;58286:98;58462:41;58477:4;58483:2;58487:6;58495:7;58462:14;:41::i;:::-;56947:1564;;;56844:1667;;;:::o;10776:240::-;10896:7;10957:12;10949:6;;;;10941:29;;;;-1:-1:-1;;;10941:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;10992:5:0;;;10776:240::o;52188:164::-;52230:7;52251:15;52268;52287:19;:17;:19::i;:::-;52250:56;;-1:-1:-1;52250:56:0;-1:-1:-1;52324:20:0;52250:56;;52324:11;:20::i;:::-;52317:27;;;;52188:164;:::o;9635:98::-;9693:7;9720:5;9724:1;9720;:5;:::i;8498:98::-;8556:7;8583:5;8587:1;8583;:5;:::i;49261:1097::-;49361:7;49383;49405;49427;49449;49471;49493;49515;49537;49574:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49574:23:0;49794:20;49806:7;49794:11;:20::i;:::-;49628:4;:20;;49663:4;:9;;49687:4;:15;;49717:4;:15;;49747:4;:9;;49771:4;:9;;49613:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49826:15;49843:23;49868:12;49884:201;49910:7;49932:4;:9;;;49956:4;:15;;;49986:4;:15;;;50016:4;:9;;;50040:4;:9;;;50064:10;:8;:10::i;:::-;49884:11;:201::i;:::-;49825:260;;;;;;50118:7;50140:15;50170:4;50189;:20;;;50224:4;:9;;;50248:4;:15;;;50278:4;:15;;;50308:4;:9;;;50330:4;:9;;;50096:254;;;;;;;;;;;;;;;;;;;;;;49261:1097;;;;;;;;;;;:::o;39062:3201::-;39137:7;39148:1;39137:12;39133:205;;-1:-1:-1;;;;;39183:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39175:50;;;;-1:-1:-1;;;39175:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39240:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;39240:17:0;39253:4;39240:17;;;;;;39272:7;:18;;;;;;;;;;;;-1:-1:-1;;;;;;39272:18:0;;;;;;;39307:16;;;:13;:16;;;:19;;:16;;39240:12;39307:19;;39253:4;;39307:19;:::i;:::-;;;;-1:-1:-1;;39133:205:0;39352:7;39363:1;39352:12;39348:254;;-1:-1:-1;;;;;39398:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39390:50;;;;-1:-1:-1;;;39390:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39463:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39455:69;;;;-1:-1:-1;;;39455:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39539:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;39539:17:0;39552:4;39539:17;;;;;;39585:1;39571:16;;:13;:16;;;;:19;;39552:4;;39571:16;;:19;;39552:4;;39571:19;:::i;:::-;;;;-1:-1:-1;;39348:254:0;39616:7;39627:1;39616:12;39612:254;;-1:-1:-1;;;;;39662:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39654:50;;;;-1:-1:-1;;;39654:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39727:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39719:69;;;;-1:-1:-1;;;39719:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39803:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;39803:17:0;39816:4;39803:17;;;;;;39849:1;39835:16;;:13;:16;;;;:19;;39816:4;;39835:16;;:19;;39816:4;;39835:19;:::i;:::-;;;;-1:-1:-1;;39612:254:0;39880:7;39891:1;39880:12;39876:254;;-1:-1:-1;;;;;39926:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39918:50;;;;-1:-1:-1;;;39918:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39991:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;39983:69;;;;-1:-1:-1;;;39983:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40067:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;40067:17:0;40080:4;40067:17;;;;;;40113:1;40099:16;;:13;:16;;;;:19;;40080:4;;40099:16;;:19;;40080:4;;40099:19;:::i;:::-;;;;-1:-1:-1;;39876:254:0;40144:7;40155:1;40144:12;40140:254;;-1:-1:-1;;;;;40190:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40182:50;;;;-1:-1:-1;;;40182:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40255:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40247:69;;;;-1:-1:-1;;;40247:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40331:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;40331:17:0;40344:4;40331:17;;;;;;40377:1;40363:16;;:13;:16;;;;:19;;40344:4;;40363:16;;:19;;40344:4;;40363:19;:::i;:::-;;;;-1:-1:-1;;40140:254:0;40408:7;40419:1;40408:12;40404:254;;-1:-1:-1;;;;;40454:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40446:50;;;;-1:-1:-1;;;40446:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40519:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40511:69;;;;-1:-1:-1;;;40511:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40595:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;40595:17:0;40608:4;40595:17;;;;;;40641:1;40627:16;;:13;:16;;;;:19;;40608:4;;40627:16;;:19;;40608:4;;40627:19;:::i;:::-;;;;-1:-1:-1;;40404:254:0;40672:7;40683:1;40672:12;40668:254;;-1:-1:-1;;;;;40718:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40710:50;;;;-1:-1:-1;;;40710:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40783:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40775:69;;;;-1:-1:-1;;;40775:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40859:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;40859:17:0;40872:4;40859:17;;;;;;40905:1;40891:16;;:13;:16;;;;:19;;40872:4;;40891:16;;:19;;40872:4;;40891:19;:::i;:::-;;;;-1:-1:-1;;40668:254:0;40936:7;40947:1;40936:12;40932:254;;-1:-1:-1;;;;;40982:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;40974:50;;;;-1:-1:-1;;;40974:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41047:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;41039:69;;;;-1:-1:-1;;;41039:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41123:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;41123:17:0;41136:4;41123:17;;;;;;41169:1;41155:16;;:13;:16;;;;:19;;41136:4;;41155:16;;:19;;41136:4;;41155:19;:::i;:::-;;;;-1:-1:-1;;40932:254:0;41200:7;41211:1;41200:12;41196:254;;-1:-1:-1;;;;;41246:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;41238:50;;;;-1:-1:-1;;;41238:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41311:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;41303:69;;;;-1:-1:-1;;;41303:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41387:12:0;;;;;;:6;:12;;;;;;;:17;;-1:-1:-1;;41387:17:0;41400:4;41387:17;;;;;;41433:1;41419:16;;:13;:16;;;;:19;;41400:4;;41419:16;;:19;;41400:4;;41419:19;:::i;:::-;;;;-1:-1:-1;;41196:254:0;41464:7;41475:2;41464:13;41460:258;;-1:-1:-1;;;;;41511:13:0;;;;;;:7;:13;;;;;;;;:19;;:13;:19;41503:51;;;;-1:-1:-1;;;41503:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41577:12:0;;;;;;:6;:12;;;;;;;;:18;;:12;:18;41569:69;;;;-1:-1:-1;;;41569:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41653:13:0;;;;;;:7;:13;;;;;;;:18;;-1:-1:-1;;41653:18:0;41667:4;41653:18;;;;;;41700:2;41686:17;;:13;:17;;;;:20;;41667:4;;41686:17;;:20;;41667:4;;41686:20;:::i;:::-;;;;-1:-1:-1;;41460:258:0;41732:7;41743:2;41732:13;41728:259;;-1:-1:-1;;;;;41779:13:0;;;;;;:7;:13;;;;;;;;:19;;:13;:19;41771:51;;;;-1:-1:-1;;;41771:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41845:13:0;;;;;;:7;:13;;;;;;;;:19;;:13;:19;41837:70;;;;-1:-1:-1;;;41837:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41922:13:0;;;;;;:7;:13;;;;;;;:18;;-1:-1:-1;;41922:18:0;41936:4;41922:18;;;;;;41969:2;41955:17;;:13;:17;;;;:20;;41936:4;;41955:17;;:20;;41936:4;;41955:20;:::i;:::-;;;;-1:-1:-1;;41728:259:0;42001:7;42012:2;42001:13;41997:259;;-1:-1:-1;;;;;42048:13:0;;;;;;:7;:13;;;;;;;;:19;;:13;:19;42040:51;;;;-1:-1:-1;;;42040:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42114:13:0;;;;;;:7;:13;;;;;;;;:19;;:13;:19;42106:70;;;;-1:-1:-1;;;42106:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42191:13:0;;;;;;:7;:13;;;;;;;:18;;-1:-1:-1;;42191:18:0;42205:4;42191:18;;;;;;42238:2;42224:17;;:13;:17;;;;:20;;42205:4;;42224:17;;:20;;42205:4;;42224:20;:::i;:::-;;;;-1:-1:-1;;39062:3201:0;;:::o;5623:172::-;5679:16;5698:6;;-1:-1:-1;;;;;5715:17:0;;;-1:-1:-1;;;;;;5715:17:0;;;;;;5748:40;;5698:6;;;;;;;5748:40;;5679:16;5748:40;5668:127;5623:172;:::o;8879:98::-;8937:7;8964:5;8968:1;8964;:5;:::i;59187:1942::-;30307:16;:23;;-1:-1:-1;;;;30307:23:0;-1:-1:-1;;;30307:23:0;;;59397:13:::1;::::0;59380:11:::1;::::0;30307:23;;59355:56:::1;::::0;:37:::1;::::0;:20;;:24:::1;:37::i;:::-;:41:::0;::::1;:56::i;:::-;59323:88:::0;-1:-1:-1;59446:28:0::1;59323:88:::0;59472:1:::1;59446:25;:28::i;:::-;59422:52:::0;-1:-1:-1;59487:20:0::1;59510:47;:20:::0;59422:52;59510:24:::1;:47::i;:::-;59487:70:::0;-1:-1:-1;59860:21:0::1;59926:30;59487:70:::0;59926:16:::1;:30::i;:::-;59985:13;::::0;59970:12:::1;::::0;59985:20:::1;::::0;60003:1:::1;59985:17;:20::i;:::-;59970:35;;60016:15;60080:4;60070:7;;60060;;60050;;60034:13;;:23;;;;:::i;:::-;:33;;;;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;60016:68:::0;-1:-1:-1;60145:18:0::1;60166:41;:21;60192:14:::0;60166:25:::1;:41::i;:::-;60145:62;;60220:27;60250:40;60282:7;60250:27;60265:11;;60250:10;:14;;:27;;;;:::i;:::-;:31:::0;::::1;:40::i;:::-;60220:70;;60323:46;60364:4;60323:36;60347:11;;60323:19;:23;;:36;;;;:::i;:46::-;60301:68:::0;-1:-1:-1;60382:26:0::1;60411:46;:21;60301:68:::0;60411:25:::1;:46::i;:::-;60382:75;;60470:13;60486:30;60502:13;;60486:11;;:15;;:30;;;;:::i;:::-;60470:46;;60529:18;60550:42;60584:7;;60550:29;60573:5;60550:18;:22;;:29;;;;:::i;:42::-;60611:10;::::0;60603:40:::1;::::0;60529:63;;-1:-1:-1;;;;;;60611:10:0::1;::::0;60603:40;::::1;;;::::0;60529:63;;60611:10:::1;60603:40:::0;60611:10;60603:40;60529:63;60611:10;60603:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;60717:13:0::1;::::0;60656:24:::1;::::0;60683:48:::1;::::0;:29:::1;:18:::0;60706:5;60683:22:::1;:29::i;:48::-;60750:16;::::0;60742:52:::1;::::0;60656:75;;-1:-1:-1;;;;;;60750:16:0::1;::::0;60742:52;::::1;;;::::0;60656:75;;60750:16:::1;60742:52:::0;60750:16;60742:52;60656:75;60750:16;60742:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;60862:7:0::1;::::0;60807:18:::1;::::0;60828:42:::1;::::0;:29:::1;:18:::0;60851:5;60828:22:::1;:29::i;:42::-;60889:10;::::0;60881:40:::1;::::0;60807:63;;-1:-1:-1;;;;;;60889:10:0::1;::::0;60881:40;::::1;;;::::0;60807:63;;60889:10:::1;60881:40:::0;60889:10;60881:40;60807:63;60889:10;60881:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;60971:56;60984:21;61007:19;60971:12;:56::i;:::-;61043:78;::::0;;16223:25:1;;;16279:2;16264:18;;16257:34;;;16307:18;;;16300:34;;;61043:78:0::1;::::0;16211:2:1;16196:18;61043:78:0::1;;;;;;;-1:-1:-1::0;;30353:16:0;:24;;-1:-1:-1;;;;30353:24:0;;;-1:-1:-1;;;;;;;;;;;59187:1942:0:o;62529:835::-;62685:7;62680:28;;62694:14;:12;:14::i;:::-;-1:-1:-1;;;;;62723:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;62747:22:0;;;;;;:11;:22;;;;;;;;62746:23;62723:46;62719:597;;;62786:48;62808:6;62816:9;62827:6;62786:21;:48::i;:::-;62719:597;;;-1:-1:-1;;;;;62857:19:0;;;;;;:11;:19;;;;;;;;62856:20;:46;;;;-1:-1:-1;;;;;;62880:22:0;;;;;;:11;:22;;;;;;;;62856:46;62852:464;;;62919:46;62939:6;62947:9;62958:6;62919:19;:46::i;62852:464::-;-1:-1:-1;;;;;62988:19:0;;;;;;:11;:19;;;;;;;;62987:20;:47;;;;-1:-1:-1;;;;;;63012:22:0;;;;;;:11;:22;;;;;;;;63011:23;62987:47;62983:333;;;63051:44;63069:6;63077:9;63088:6;63051:17;:44::i;62983:333::-;-1:-1:-1;;;;;63117:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;63140:22:0;;;;;;:11;:22;;;;;;;;63117:45;63113:203;;;63179:48;63201:6;63209:9;63220:6;63179:21;:48::i;63113:203::-;63260:44;63278:6;63286:9;63297:6;63260:17;:44::i;:::-;63333:7;63328:29;;63342:15;56042;;56032:7;:25;56084:21;;56068:13;:37;56132:21;;56116:13;:37;56174:15;;56164:7;:25;56210:15;;56200:7;:25;56252:21;;56236:13;:37;56298:19;;56284:11;:33;55988:337;52360:604;52458:7;;52494;;52411;;;;;52511:338;52535:9;:16;52531:20;;52511:338;;;52619:7;52595;:21;52603:9;52613:1;52603:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;52603:12:0;52595:21;;;;;;;;;;;;;:31;;:83;;;52671:7;52647;:21;52655:9;52665:1;52655:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;52655:12:0;52647:21;;;;;;;;;;;;;:31;52595:83;52573:146;;;52702:7;;52711;;52694:25;;;;;;;52360:604;;:::o;52573:146::-;52744:34;52756:7;:21;52764:9;52774:1;52764:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;52764:12:0;52756:21;;;;;;;;;;;;;52744:7;;:11;:34::i;:::-;52734:44;;52803:34;52815:7;:21;52823:9;52833:1;52823:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;52823:12:0;52815:21;;;;;;;;;;;;;52803:7;;:11;:34::i;:::-;52793:44;-1:-1:-1;52553:3:0;;;;:::i;:::-;;;;52511:338;;;-1:-1:-1;52885:7:0;;52873;;:20;;:11;:20::i;:::-;52863:7;:30;52859:61;;;52903:7;;52912;;52895:25;;;;;;52360:604;;:::o;52859:61::-;52939:7;;52948;;-1:-1:-1;52360:604:0;-1:-1:-1;52360:604:0:o;50366:813::-;50467:7;50489;50511;50533;50555;50577;50612:12;50627:24;50643:7;50627:15;:24::i;:::-;50612:39;;50662:18;50683:30;50705:7;50683:21;:30::i;:::-;50662:51;;50724:21;50748:30;50770:7;50748:21;:30::i;:::-;50724:54;;50789:15;50807:24;50823:7;50807:15;:24::i;:::-;50789:42;;50842:15;50860:24;50876:7;50860:15;:24::i;:::-;50842:42;-1:-1:-1;50895:23:0;50921:17;:7;50933:4;50921:11;:17::i;:::-;50895:43;-1:-1:-1;50965:31:0;50895:43;50985:10;50965:19;:31::i;:::-;50949:47;-1:-1:-1;51023:60:0;51075:7;51023:47;51062:7;51023:47;50949;51043:13;51023:19;:34::i;:::-;:38;;:47::i;:60::-;51007:76;51121:4;;-1:-1:-1;51127:10:0;;-1:-1:-1;51139:13:0;;-1:-1:-1;51139:13:0;-1:-1:-1;51127:10:0;-1:-1:-1;50366:813:0;;-1:-1:-1;;;50366:813:0:o;51187:993::-;51461:7;;;;51558:24;:7;51570:11;51558;:24::i;:::-;51540:42;-1:-1:-1;51593:12:0;51608:21;:4;51617:11;51608:8;:21::i;:::-;51593:36;-1:-1:-1;51640:18:0;51661:27;:10;51676:11;51661:14;:27::i;:::-;51640:48;-1:-1:-1;51699:18:0;51720:27;:10;51735:11;51720:14;:27::i;:::-;51699:48;-1:-1:-1;51758:12:0;51773:21;:4;51782:11;51773:8;:21::i;:::-;51758:36;-1:-1:-1;51811:12:0;51826:21;:4;51835:11;51826:8;:21::i;:::-;51811:36;-1:-1:-1;51858:23:0;51884:17;:7;51896:4;51884:11;:17::i;:::-;51858:43;-1:-1:-1;51928:31:0;51858:43;51948:10;51928:19;:31::i;:::-;51912:47;-1:-1:-1;51986:31:0;51912:47;52006:10;51986:19;:31::i;:::-;51970:47;-1:-1:-1;52044:25:0;51970:47;52064:4;52044:19;:25::i;:::-;52028:41;-1:-1:-1;52097:25:0;52028:41;52117:4;52097:19;:25::i;:::-;52141:7;;-1:-1:-1;52081:41:0;;-1:-1:-1;52167:4:0;;-1:-1:-1;;;;;;51187:993:0;;;;;;;;;;;:::o;9236:98::-;9294:7;9321:5;9325:1;9321;:5;:::i;61137:589::-;61287:16;;;61301:1;61287:16;;;;;;;;61263:21;;61287:16;;;;;;;;;;-1:-1:-1;61287:16:0;61263:40;;61332:4;61314;61319:1;61314:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;61314:23:0;;;:7;;;;;;;;;;:23;;;;61358:15;;:22;;;-1:-1:-1;;;61358:22:0;;;;:15;;;;;:20;;:22;;;;;61314:7;;61358:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61348:4;61353:1;61348:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;61348:32:0;;;:7;;;;;;;;;:32;61425:15;;61393:62;;61410:4;;61425:15;61443:11;61393:8;:62::i;:::-;61494:15;;:224;;-1:-1:-1;;;61494:224:0;;-1:-1:-1;;;;;61494:15:0;;;;:66;;:224;;61575:11;;61494:15;;61645:4;;61672;;61692:15;;61494:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61738:511;61918:15;;61886:62;;61903:4;;-1:-1:-1;;;;;61918:15:0;61936:11;61886:8;:62::i;:::-;61991:15;;-1:-1:-1;;;;;61991:15:0;:31;62030:9;62063:4;62083:11;61991:15;;62193:7;4569;4596:6;-1:-1:-1;;;;;4596:6:0;;4523:87;62193:7;61991:250;;;;;;-1:-1:-1;;;;;;61991:250:0;;;-1:-1:-1;;;;;18145:15:1;;;61991:250:0;;;18127:34:1;18177:18;;;18170:34;;;;18220:18;;;18213:34;;;;18263:18;;;18256:34;18327:15;;;18306:19;;;18299:44;62215:15:0;18359:19:1;;;18352:35;18061:19;;61991:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;55351:629::-;55398:7;;:12;:34;;;;-1:-1:-1;55414:13:0;;:18;55398:34;:56;;;;-1:-1:-1;55436:13:0;;:18;55398:56;:72;;;;-1:-1:-1;55458:7:0;;:12;55398:72;:88;;;;-1:-1:-1;55474:7:0;;:12;55398:88;55394:101;;;55351:629::o;55394:101::-;55525:7;;;55507:15;:25;55567:13;;;55543:21;:37;55615:13;;;55591:21;:37;55657:7;;;55639:15;:25;55693:7;;;55675:15;:25;55733:11;;;55711:19;:33;55779:13;;;55755:21;:37;-1:-1:-1;55805:11:0;;;;55827:17;;;;55855:11;;;;55877:17;;;;55905:11;;;;55927:17;;;;55955:15;55351:629::o;66629:867::-;66779:15;66809:23;66847:12;66874:23;66912:12;66939:18;66972;67005:12;67032;67058:19;67069:7;67058:10;:19::i;:::-;66764:313;;;;;;;;;;;;;;;;;;67106:28;67126:7;67106;:15;67114:6;-1:-1:-1;;;;;67106:15:0;-1:-1:-1;;;;;67106:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;67088:15:0;;;;;;:7;:15;;;;;;;;:46;;;;67163:7;:15;;;;:28;;67183:7;67163:19;:28::i;:::-;-1:-1:-1;;;;;67145:15:0;;;;;;;:7;:15;;;;;;:46;;;;67223:18;;;;;;;:39;;67246:15;67223:22;:39::i;:::-;-1:-1:-1;;;;;67202:18:0;;;;;;:7;:18;;;;;:60;67273:26;67288:10;67273:14;:26::i;:::-;67310:29;67328:10;67310:17;:29::i;:::-;67350:17;67362:4;67350:11;:17::i;:::-;67378;67390:4;67378:11;:17::i;:::-;67405:23;67417:4;67423;67405:11;:23::i;:::-;67461:9;-1:-1:-1;;;;;67444:44:0;67453:6;-1:-1:-1;;;;;67444:44:0;-1:-1:-1;;;;;;;;;;;67472:15:0;67444:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;67444:44:0;;;;;;;;66753:743;;;;;;;;;66629:867;;;:::o;65739:882::-;65888:15;65919:23;65957:12;65984:23;66022:12;66049:18;66082;66115:12;66142;66168:19;66179:7;66168:10;:19::i;:::-;65873:314;;;;;;;;;;;;;;;;;;66216:28;66236:7;66216;:15;66224:6;-1:-1:-1;;;;;66216:15:0;-1:-1:-1;;;;;66216:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;66198:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;66276:18;;;;;:7;:18;;;;;:39;;66299:15;66276:22;:39::i;:::-;-1:-1:-1;;;;;66255:18:0;;;;;;:7;:18;;;;;;;;:60;;;;66347:7;:18;;;;:39;;66370:15;66347:22;:39::i;63372:2359::-;63519:15;63549:23;63587:12;63614:23;63652:12;63679:18;63712;63745:12;63772;63798:19;63809:7;63798:10;:19::i;:::-;63504:313;;;;;;;;;;;;;;;;;;63838:17;;;;;;;;;;;:25;;63859:4;63838:25;;;63834:103;;63889:36;63906:9;63917:7;63889:16;:36::i;:::-;63953:11;;;;:18;;:11;:18;;;;:47;;-1:-1:-1;63987:13:0;;-1:-1:-1;;;;;63975:25:0;;;63987:13;;63975:25;;63953:47;:66;;;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;64004:15:0;;;4596:6;;64004:15;;63953:66;:88;;;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;64023:18:0;;;4596:6;;64023:18;;63953:88;63949:1743;;;-1:-1:-1;;;;;64086:15:0;;;;;;:7;:15;;;;;;:28;;64106:7;64086:19;:28::i;:::-;-1:-1:-1;;;;;64068:15:0;;;;;;;:7;:15;;;;;;:46;;;;64150:18;;;;;;;:39;;64173:15;64150:22;:39::i;:::-;-1:-1:-1;;;;;64129:18:0;;;;;;;:7;:18;;;;;;;:60;;;;64209:44;;;;;;-1:-1:-1;;;;;;;;;;;64209:44:0;;;64237:15;1410:25:1;;1398:2;1383:18;;1264:177;64209:44:0;;;;;;;;64288:24;64302:9;-1:-1:-1;;;;;43276:22:0;;;;;:16;:22;;;;;;;;:27;;43299:4;-1:-1:-1;;43276:27:0;;;;;;;;43314;:33;;;;;:38;;;;;;;;;;43220:140;64288:24;63949:1743;;;64345:11;;;;:17;;:11;:17;:72;;;;;64402:15;64392:7;;64366:11;;64380:9;64366:23;;;;:::i;:::-;:33;;;;:::i;:::-;:51;64345:72;:101;;;;-1:-1:-1;64433:13:0;;-1:-1:-1;;;;;64421:25:0;;;64433:13;;64421:25;;64345:101;:120;;;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;64450:15:0;;;4596:6;;64450:15;;64345:120;:142;;;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;64469:18:0;;;4596:6;;64469:18;;64345:142;64341:1351;;;-1:-1:-1;;;;;64532:15:0;;;;;;:7;:15;;;;;;:28;;64552:7;64532:19;:28::i;64341:1351::-;4569:7;4596:6;-1:-1:-1;;;;;64788:15:0;;;4596:6;;64788:15;;:37;;-1:-1:-1;4569:7:0;4596:6;-1:-1:-1;;;;;64807:18:0;;;4596:6;;64807:18;64788:37;64784:908;;;-1:-1:-1;;;;;64873:18:0;;;;;;:7;:18;;;;;;:31;;64896:7;64873:22;:31::i;:::-;-1:-1:-1;;;;;64852:18:0;;;;;;;:7;:18;;;;;;:52;;;;64937:15;;;;;;;:28;;64957:7;64937:19;:28::i;:::-;-1:-1:-1;;;;;64919:15:0;;;;;;;:7;:15;;;;;;;;;:46;;;;64990:44;1410:25:1;;;64990:44:0;;;;64919:15;;-1:-1:-1;;;;;;;;;;;64990:44:0;1383:18:1;64990:44:0;;;;;;;64784:908;;;65128:13;;-1:-1:-1;;;;;65115:26:0;;;65128:13;;65115:26;65111:179;;65222:14;;65184:33;65209:7;65184:20;65194:9;65184;:20::i;:::-;:24;;:33::i;:::-;65183:53;;65175:99;;;;-1:-1:-1;;;65175:99:0;;18911:2:1;65175:99:0;;;18893:21:1;;;18930:18;;;18923:30;18989:34;18969:18;;;18962:62;19041:18;;65175:99:0;18709:356:1;65175:99:0;-1:-1:-1;;;;;65324:15:0;;;;;;:7;:15;;;;;;:28;;65344:7;65324:19;:28::i;64784:908::-;63493:2238;;;;;;;;;63372:2359;;;:::o;45884:940::-;46035:15;46065:23;46103:12;46130:23;46168:12;46195:18;46228;46261:12;46288;46314:19;46325:7;46314:10;:19::i;:::-;46020:313;;;;;;;;;;;;;;;;;;46362:28;46382:7;46362;:15;46370:6;-1:-1:-1;;;;;46362:15:0;-1:-1:-1;;;;;46362:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;46344:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46419:7;:15;;;;:28;;46439:7;46419:19;:28::i;54374:130::-;54438:7;54465:31;54490:5;54465:20;54477:7;;54465;:11;;:20;;;;:::i;54512:174::-;54609:7;54641:37;54672:5;54641:26;54653:13;;54641:7;:11;;:26;;;;:::i;54694:306::-;54819:4;;54791:7;;54819:4;;:10;;:4;:10;54816:119;;54865:58;54917:5;54865:47;54878:32;54896:13;;54878;;:17;;:32;;;;:::i;:::-;54865:7;;:11;:47::i;54816:119::-;54955:37;54986:5;54955:26;54967:13;;54955:7;:11;;:26;;;;:::i;55009:162::-;55100:7;55132:31;55157:5;55132:20;55144:7;;55132;:11;;:20;;;;:::i;55179:162::-;55270:7;55302:31;55327:5;55302:20;55314:7;;55302;:11;;:20;;;;:::i;52972:355::-;53035:19;53057:10;:8;:10::i;:::-;53035:32;-1:-1:-1;53078:18:0;53099:27;:10;53035:32;53099:14;:27::i;:::-;53178:4;53162:22;;;;:7;:22;;;;;;53078:48;;-1:-1:-1;53162:38:0;;53078:48;53162:26;:38::i;:::-;53153:4;53137:22;;;;:7;:22;;;;;;;;:63;;;;53215:11;:26;;;;;;53211:108;;;53297:4;53281:22;;;;:7;:22;;;;;;:38;;53308:10;53281:26;:38::i;:::-;53272:4;53256:22;;;;:7;:22;;;;;:63;53024:303;;52972:355;:::o;48905:147::-;48983:7;;:17;;48995:4;48983:11;:17::i;:::-;48973:7;:27;49024:10;;:20;;49039:4;49024:14;:20::i;:::-;49011:10;:33;-1:-1:-1;;48905:147:0:o;67504:458::-;67644:16;;;67658:1;67644:16;;;;;;;;67620:21;;67644:16;;;;;;;;-1:-1:-1;;67677:15:0;;:22;;;-1:-1:-1;;;67677:22:0;;;;67620:40;;-1:-1:-1;;;;;;67677:15:0;;;;:20;;-1:-1:-1;67677:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67667:4;67672:1;67667:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;67667:32:0;;;-1:-1:-1;;;;;67667:32:0;;;;;67724:4;67706;67711:1;67706:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;67706:23:0;;;:7;;;;;;;;;:23;67754:15;;:42;;-1:-1:-1;;;67754:42:0;;67736:15;;67754;;;;;:28;;:42;;67783:6;;67791:4;;67754:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;67754:42:0;;;;;;;;;;;;:::i;:::-;67797:1;67754:45;;;;;;;;:::i;:::-;;;;;;;67736:63;;67823:10;;67812:7;:21;:51;;;;-1:-1:-1;67850:13:0;;-1:-1:-1;;;;;67837:26:0;;;67850:13;;67837:26;;67812:51;67808:147;;;67890:6;:18;;-1:-1:-1;;;;;67890:18:0;;-1:-1:-1;;;;;;67890:18:0;;;;;;67923:10;:20;;;67611:351;;67504:458;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1681:247::-;1740:6;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1848:9;1835:23;1867:31;1892:5;1867:31;:::i;2157:456::-;2234:6;2242;2250;2303:2;2291:9;2282:7;2278:23;2274:32;2271:52;;;2319:1;2316;2309:12;2271:52;2358:9;2345:23;2377:31;2402:5;2377:31;:::i;:::-;2427:5;-1:-1:-1;2484:2:1;2469:18;;2456:32;2497:33;2456:32;2497:33;:::i;:::-;2157:456;;2549:7;;-1:-1:-1;;;2603:2:1;2588:18;;;;2575:32;;2157:456::o;2618:180::-;2677:6;2730:2;2718:9;2709:7;2705:23;2701:32;2698:52;;;2746:1;2743;2736:12;2698:52;-1:-1:-1;2769:23:1;;2618:180;-1:-1:-1;2618:180:1:o;2992:160::-;3057:20;;3113:13;;3106:21;3096:32;;3086:60;;3142:1;3139;3132:12;3086:60;2992:160;;;:::o;3157:248::-;3222:6;3230;3283:2;3271:9;3262:7;3258:23;3254:32;3251:52;;;3299:1;3296;3289:12;3251:52;3322:26;3338:9;3322:26;:::i;3410:248::-;3475:6;3483;3536:2;3524:9;3515:7;3511:23;3507:32;3504:52;;;3552:1;3549;3542:12;3504:52;3588:9;3575:23;3565:33;;3617:35;3648:2;3637:9;3633:18;3617:35;:::i;:::-;3607:45;;3410:248;;;;;:::o;3871:454::-;3966:6;3974;3982;3990;3998;4051:3;4039:9;4030:7;4026:23;4022:33;4019:53;;;4068:1;4065;4058:12;4019:53;-1:-1:-1;;4091:23:1;;;4161:2;4146:18;;4133:32;;-1:-1:-1;4212:2:1;4197:18;;4184:32;;4263:2;4248:18;;4235:32;;-1:-1:-1;4314:3:1;4299:19;4286:33;;-1:-1:-1;3871:454:1;-1:-1:-1;3871:454:1:o;4590:180::-;4646:6;4699:2;4687:9;4678:7;4674:23;4670:32;4667:52;;;4715:1;4712;4705:12;4667:52;4738:26;4754:9;4738:26;:::i;4775:388::-;4843:6;4851;4904:2;4892:9;4883:7;4879:23;4875:32;4872:52;;;4920:1;4917;4910:12;4872:52;4959:9;4946:23;4978:31;5003:5;4978:31;:::i;:::-;5028:5;-1:-1:-1;5085:2:1;5070:18;;5057:32;5098:33;5057:32;5098:33;:::i;:::-;5150:7;5140:17;;;4775:388;;;;;:::o;5168:553::-;5269:6;5277;5285;5338:2;5326:9;5317:7;5313:23;5309:32;5306:52;;;5354:1;5351;5344:12;5306:52;5393:9;5380:23;5412:31;5437:5;5412:31;:::i;:::-;5462:5;-1:-1:-1;5519:2:1;5504:18;;5491:32;5532:33;5491:32;5532:33;:::i;:::-;5584:7;-1:-1:-1;5643:2:1;5628:18;;5615:32;5656:33;5615:32;5656:33;:::i;:::-;5708:7;5698:17;;;5168:553;;;;;:::o;5726:380::-;5805:1;5801:12;;;;5848;;;5869:61;;5923:4;5915:6;5911:17;5901:27;;5869:61;5976:2;5968:6;5965:14;5945:18;5942:38;5939:161;;6022:10;6017:3;6013:20;6010:1;6003:31;6057:4;6054:1;6047:15;6085:4;6082:1;6075:15;5939:161;;5726:380;;;:::o;6111:356::-;6313:2;6295:21;;;6332:18;;;6325:30;6391:34;6386:2;6371:18;;6364:62;6458:2;6443:18;;6111:356::o;6883:127::-;6944:10;6939:3;6935:20;6932:1;6925:31;6975:4;6972:1;6965:15;6999:4;6996:1;6989:15;7015:128;7055:3;7086:1;7082:6;7079:1;7076:13;7073:39;;;7092:18;;:::i;:::-;-1:-1:-1;7128:9:1;;7015:128::o;7504:127::-;7565:10;7560:3;7556:20;7553:1;7546:31;7596:4;7593:1;7586:15;7620:4;7617:1;7610:15;7636:125;7676:4;7704:1;7701;7698:8;7695:34;;;7709:18;;:::i;:::-;-1:-1:-1;7746:9:1;;7636:125::o;7766:127::-;7827:10;7822:3;7818:20;7815:1;7808:31;7858:4;7855:1;7848:15;7882:4;7879:1;7872:15;7898:135;7937:3;7958:17;;;7955:43;;7978:18;;:::i;:::-;-1:-1:-1;8025:1:1;8014:13;;7898:135::o;9798:335::-;10000:2;9982:21;;;10039:2;10019:18;;;10012:30;-1:-1:-1;;;10073:2:1;10058:18;;10051:41;10124:2;10109:18;;9798:335::o;10138:168::-;10178:7;10244:1;10240;10236:6;10232:14;10229:1;10226:21;10221:1;10214:9;10207:17;10203:45;10200:71;;;10251:18;;:::i;:::-;-1:-1:-1;10291:9:1;;10138:168::o;10311:217::-;10351:1;10377;10367:132;;10421:10;10416:3;10412:20;10409:1;10402:31;10456:4;10453:1;10446:15;10484:4;10481:1;10474:15;10367:132;-1:-1:-1;10513:9:1;;10311:217::o;15266:343::-;15468:2;15450:21;;;15507:2;15487:18;;;15480:30;-1:-1:-1;;;15541:2:1;15526:18;;15519:49;15600:2;15585:18;;15266:343::o;15614:402::-;15816:2;15798:21;;;15855:2;15835:18;;;15828:30;15894:34;15889:2;15874:18;;15867:62;-1:-1:-1;;;15960:2:1;15945:18;;15938:36;16006:3;15991:19;;15614:402::o;16345:127::-;16406:10;16401:3;16397:20;16394:1;16387:31;16437:4;16434:1;16427:15;16461:4;16458:1;16451:15;16477:251;16547:6;16600:2;16588:9;16579:7;16575:23;16571:32;16568:52;;;16616:1;16613;16606:12;16568:52;16648:9;16642:16;16667:31;16692:5;16667:31;:::i;16733:461::-;16786:3;16824:5;16818:12;16851:6;16846:3;16839:19;16877:4;16906:2;16901:3;16897:12;16890:19;;16943:2;16936:5;16932:14;16964:1;16974:195;16988:6;16985:1;16982:13;16974:195;;;17053:13;;-1:-1:-1;;;;;17049:39:1;17037:52;;17109:12;;;;17144:15;;;;17085:1;17003:9;16974:195;;;-1:-1:-1;17185:3:1;;16733:461;-1:-1:-1;;;;;16733:461:1:o;17199:582::-;17498:6;17487:9;17480:25;17541:6;17536:2;17525:9;17521:18;17514:34;17584:3;17579:2;17568:9;17564:18;17557:31;17461:4;17605:57;17657:3;17646:9;17642:19;17634:6;17605:57;:::i;:::-;-1:-1:-1;;;;;17698:32:1;;;;17693:2;17678:18;;17671:60;-1:-1:-1;17762:3:1;17747:19;17740:35;17597:65;17199:582;-1:-1:-1;;;17199:582:1:o;18398:306::-;18486:6;18494;18502;18555:2;18543:9;18534:7;18530:23;18526:32;18523:52;;;18571:1;18568;18561:12;18523:52;18600:9;18594:16;18584:26;;18650:2;18639:9;18635:18;18629:25;18619:35;;18694:2;18683:9;18679:18;18673:25;18663:35;;18398:306;;;;;:::o;19070:332::-;19277:6;19266:9;19259:25;19320:2;19315;19304:9;19300:18;19293:30;19240:4;19340:56;19392:2;19381:9;19377:18;19369:6;19340:56;:::i;:::-;19332:64;19070:332;-1:-1:-1;;;;19070:332:1:o;19407:1105::-;19502:6;19533:2;19576;19564:9;19555:7;19551:23;19547:32;19544:52;;;19592:1;19589;19582:12;19544:52;19625:9;19619:16;19654:18;19695:2;19687:6;19684:14;19681:34;;;19711:1;19708;19701:12;19681:34;19749:6;19738:9;19734:22;19724:32;;19794:7;19787:4;19783:2;19779:13;19775:27;19765:55;;19816:1;19813;19806:12;19765:55;19845:2;19839:9;19867:2;19863;19860:10;19857:36;;;19873:18;;:::i;:::-;19919:2;19916:1;19912:10;19951:2;19945:9;20014:2;20010:7;20005:2;20001;19997:11;19993:25;19985:6;19981:38;20069:6;20057:10;20054:22;20049:2;20037:10;20034:18;20031:46;20028:72;;;20080:18;;:::i;:::-;20116:2;20109:22;20166:18;;;20200:15;;;;-1:-1:-1;20242:11:1;;;20238:20;;;20270:19;;;20267:39;;;20302:1;20299;20292:12;20267:39;20326:11;;;;20346:135;20362:6;20357:3;20354:15;20346:135;;;20428:10;;20416:23;;20379:12;;;;20459;;;;20346:135;;;20500:6;19407:1105;-1:-1:-1;;;;;;;;19407:1105:1:o
Swarm Source
ipfs://35bf10f0cc23902203ddb57bf21dc22105ddbc0a47fd13561bb72518bc5a1d79
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,422.3 | 0.00001927 | $0.065956 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.